Remove leftover dependencies of libmailutils from gnulib
* bootstrap.conf (gnulib_extra_files): Remove. * gnulib.modules (inttostr): Add module. * include/mailutils/io.h: New file. * include/mailutils/Makefile.am: Add io.h * mailbox/inttostr.c, mailbox/inttostr.h: Remove * mailbox/imaxtostr.c, mailbox/offtostr.c, mailbox/umaxtostr.c: Remove * mailbox/intprops.h: Remove * mailbox/asnprintf.c, mailbox/asprintf.c, mailbox/vasnprintf.c: New files. * mailbox/Makefile.am: Update. * mailbox/mu_umaxtostr.c: rename to lib/mu_umaxtostr.c * mailbox/mu_umaxtostr.h: rename to lib/mu_umaxtostr.h * lib/Makefile.am (libmuaux_la_SOURCES): Add mu_umaxtostr.[ch] * libmu_auth/radius.c, libmu_cfg/common.c, libmu_scm/mu_port.c, libproto/imap/folder.c, libproto/imap/mbox.c, libproto/mbox/mbox.c, libproto/mh/mbox.c, libproto/pop/mbox.c, mailbox/acl.c, mailbox/daemon.c, mailbox/mailer.c, mailbox/message.c, mailbox/mutil.c, mailbox/stream.c: Use mu_strerror. Avoid using mu_umaxtostr.
Showing
32 changed files
with
343 additions
and
335 deletions
1 | # Bootstrap configuration. | 1 | # Bootstrap configuration. |
2 | 2 | ||
3 | # Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc. | 3 | # Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc. |
4 | 4 | ||
5 | # This program is free software; you can redistribute it and/or modify | 5 | # This program is free software; you can redistribute it and/or modify |
6 | # it under the terms of the GNU General Public License as published by | 6 | # it under the terms of the GNU General Public License as published by |
... | @@ -77,10 +77,6 @@ excluded_files=' | ... | @@ -77,10 +77,6 @@ excluded_files=' |
77 | m4/visibility.m4 | 77 | m4/visibility.m4 |
78 | ' | 78 | ' |
79 | 79 | ||
80 | gnulib_extra_files="$gnulib_extra_files | ||
81 | m4/inttostr.m4 | ||
82 | " | ||
83 | |||
84 | # Read local configuration file | 80 | # Read local configuration file |
85 | if [ -r .bootstrap ]; then | 81 | if [ -r .bootstrap ]; then |
86 | echo "$0: Reading configuration file .bootstrap" | 82 | echo "$0: Reading configuration file .bootstrap" | ... | ... |
... | @@ -2,9 +2,6 @@ | ... | @@ -2,9 +2,6 @@ |
2 | # A module name per line. Empty lines and comments are ignored. | 2 | # A module name per line. Empty lines and comments are ignored. |
3 | 3 | ||
4 | # FIXME: regex and glob are used by libmailutils... | 4 | # FIXME: regex and glob are used by libmailutils... |
5 | # FIXME: intprops and stdint are not used directly, they are needed for | ||
6 | # inttostr, which is included in mailbox. Another inttostr dependency, | ||
7 | # m4/inttostr.m4, is set in bootstrap.conf. | ||
8 | 5 | ||
9 | alloca | 6 | alloca |
10 | autobuild | 7 | autobuild |
... | @@ -16,6 +13,7 @@ getpass-gnu | ... | @@ -16,6 +13,7 @@ getpass-gnu |
16 | gettext | 13 | gettext |
17 | gitlog-to-changelog | 14 | gitlog-to-changelog |
18 | intprops | 15 | intprops |
16 | inttostr | ||
19 | malloc | 17 | malloc |
20 | mbswidth | 18 | mbswidth |
21 | obstack | 19 | obstack | ... | ... |
1 | ## Process this file with GNU Automake to create Makefile.in | 1 | ## Process this file with GNU Automake to create Makefile.in |
2 | 2 | ||
3 | ## Copyright (C) 2000, 2001, 2002, 2003, | 3 | ## Copyright (C) 2000, 2001, 2002, 2003, |
4 | ## 2004, 2005, 2007, 2008 Free Software Foundation, Inc. | 4 | ## 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. |
5 | ## | 5 | ## |
6 | ## GNU Mailutils is free software; you can redistribute it and/or | 6 | ## GNU Mailutils is free software; you can redistribute it and/or |
7 | ## modify it under the terms of the GNU General Public License as | 7 | ## modify it under the terms of the GNU General Public License as |
... | @@ -53,6 +53,7 @@ pkginclude_HEADERS = \ | ... | @@ -53,6 +53,7 @@ pkginclude_HEADERS = \ |
53 | gsasl.h\ | 53 | gsasl.h\ |
54 | guile.h\ | 54 | guile.h\ |
55 | header.h\ | 55 | header.h\ |
56 | io.h\ | ||
56 | iterator.h\ | 57 | iterator.h\ |
57 | kwd.h\ | 58 | kwd.h\ |
58 | ldap.h\ | 59 | ldap.h\ | ... | ... |
include/mailutils/io.h
0 → 100644
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | ||
2 | Copyright (C) 2009 Free Software Foundation, Inc. | ||
3 | |||
4 | This library is free software; you can redistribute it and/or | ||
5 | modify it under the terms of the GNU Lesser General Public | ||
6 | License as published by the Free Software Foundation; either | ||
7 | version 3 of the License, or (at your option) any later version. | ||
8 | |||
9 | This library is distributed in the hope that it will be useful, | ||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
12 | Lesser General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU Lesser General | ||
15 | Public License along with this library; if not, write to the | ||
16 | Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | ||
17 | Boston, MA 02110-1301 USA */ | ||
18 | |||
19 | #ifndef _MAILUTILS_IO_H | ||
20 | #define _MAILUTILS_IO_H | ||
21 | |||
22 | #ifdef __cplusplus | ||
23 | extern "C" { | ||
24 | #endif | ||
25 | |||
26 | int mu_asprintf (char **pbuf, const char *fmt, ...); | ||
27 | int mu_asnprintf (char **pbuf, size_t *psize, const char *fmt, ...); | ||
28 | int mu_vasnprintf (char **pbuf, size_t *psize, const char *fmt, va_list ap); | ||
29 | |||
30 | #ifdef __cplusplus | ||
31 | } | ||
32 | #endif | ||
33 | |||
34 | #endif |
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | 1 | /* GNU Mailutils -- a suite of utilities for electronic mail |
2 | Copyright (C) 1999, 2000, 2001, 2002, 2003, | 2 | Copyright (C) 1999, 2000, 2001, 2002, 2003, |
3 | 2004, 2007, 2008 Free Software Foundation, Inc. | 3 | 2004, 2007, 2008, 2009 Free Software Foundation, Inc. |
4 | 4 | ||
5 | This library is free software; you can redistribute it and/or | 5 | This library is free software; you can redistribute it and/or |
6 | modify it under the terms of the GNU Lesser General Public | 6 | modify it under the terms of the GNU Lesser General Public |
... | @@ -61,6 +61,7 @@ | ... | @@ -61,6 +61,7 @@ |
61 | #include <mailutils/gocs.h> | 61 | #include <mailutils/gocs.h> |
62 | #include <mailutils/version.h> | 62 | #include <mailutils/version.h> |
63 | #include <mailutils/vartab.h> | 63 | #include <mailutils/vartab.h> |
64 | #include <mailutils/io.h> | ||
64 | 65 | ||
65 | #ifdef MU_COMPAT | 66 | #ifdef MU_COMPAT |
66 | # error "Version 0.6 is no longer supported. Please, update your program." | 67 | # error "Version 0.6 is no longer supported. Please, update your program." | ... | ... |
1 | ## Process this file with GNU Automake to create Makefile.in | 1 | ## Process this file with GNU Automake to create Makefile.in |
2 | 2 | ||
3 | ## Copyright (C) 1999, 2000, 2001, 2002, 2005, | 3 | ## Copyright (C) 1999, 2000, 2001, 2002, 2005, |
4 | ## 2007, 2008 Free Software Foundation, Inc. | 4 | ## 2007, 2008, 2009 Free Software Foundation, Inc. |
5 | ## | 5 | ## |
6 | ## GNU Mailutils is free software; you can redistribute it and/or | 6 | ## GNU Mailutils is free software; you can redistribute it and/or |
7 | ## modify it under the terms of the GNU General Public License as | 7 | ## modify it under the terms of the GNU General Public License as |
... | @@ -29,7 +29,9 @@ libmuaux_la_SOURCES += \ | ... | @@ -29,7 +29,9 @@ libmuaux_la_SOURCES += \ |
29 | signal.c\ | 29 | signal.c\ |
30 | strexit.c\ | 30 | strexit.c\ |
31 | tcpwrap.c\ | 31 | tcpwrap.c\ |
32 | userprivs.c | 32 | userprivs.c\ |
33 | mu_umaxtostr.c\ | ||
34 | mu_umaxtostr.h | ||
33 | 35 | ||
34 | noinst_HEADERS +=\ | 36 | noinst_HEADERS +=\ |
35 | mailcap.h\ | 37 | mailcap.h\ | ... | ... |
File moved
File moved
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | 1 | /* GNU Mailutils -- a suite of utilities for electronic mail |
2 | Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc. | 2 | Copyright (C) 2005, 2007, 2008, 2009 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This library is free software; you can redistribute it and/or | 4 | This library is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU Lesser General Public | 5 | modify it under the terms of the GNU Lesser General Public |
... | @@ -183,26 +183,12 @@ mu_grad_logger(int level, | ... | @@ -183,26 +183,12 @@ mu_grad_logger(int level, |
183 | char *pfx = NULL; | 183 | char *pfx = NULL; |
184 | if (loc) | 184 | if (loc) |
185 | { | 185 | { |
186 | char buf[INT_STRLEN_BOUND(uintmax_t)]; | ||
187 | char *p = umaxtostr (loc->line, buf); | ||
188 | size_t size = strlen (loc->file) + 1 + strlen (p) + 2 + strlen (fmt) + 1; | ||
189 | if (func_name) | 186 | if (func_name) |
190 | size += strlen (func_name) + 1; | 187 | mu_asprintf (&pfx, "%s:%lu:%s: %s", |
191 | pfx = malloc (size); | 188 | loc->file, (unsigned long) loc->line, func_name, fmt); |
192 | if (pfx) | 189 | else |
193 | { | 190 | mu_asprintf (&pfx, "%s:%lu: %s", |
194 | strcpy (pfx, loc->file); | 191 | loc->file, (unsigned long) loc->line, fmt); |
195 | strcat (pfx, ":"); | ||
196 | strcat (pfx, p); | ||
197 | strcat (pfx, ":"); | ||
198 | if (func_name) | ||
199 | { | ||
200 | strcat (pfx, func_name); | ||
201 | strcat (pfx, ":"); | ||
202 | } | ||
203 | strcat (pfx, " "); | ||
204 | strcat (pfx, fmt); | ||
205 | } | ||
206 | } | 192 | } |
207 | mu_diag_voutput (mlevel[level & GRAD_LOG_PRIMASK], pfx ? pfx : fmt, ap); | 193 | mu_diag_voutput (mlevel[level & GRAD_LOG_PRIMASK], pfx ? pfx : fmt, ap); |
208 | if (pfx) | 194 | if (pfx) | ... | ... |
1 | /* This file is part of GNU Mailutils | 1 | /* This file is part of GNU Mailutils |
2 | Copyright (C) 2007, 2008 Free Software Foundation, Inc. | 2 | Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. |
3 | 3 | ||
4 | GNU Mailutils is free software; you can redistribute it and/or | 4 | GNU Mailutils is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU General Public License as | 5 | modify it under the terms of the GNU General Public License as |
... | @@ -24,7 +24,7 @@ | ... | @@ -24,7 +24,7 @@ |
24 | #include <mailutils/debug.h> | 24 | #include <mailutils/debug.h> |
25 | #include <mailutils/syslog.h> | 25 | #include <mailutils/syslog.h> |
26 | #include <mailutils/mailbox.h> | 26 | #include <mailutils/mailbox.h> |
27 | #include <mu_umaxtostr.h> | 27 | #include <mailutils/io.h> |
28 | 28 | ||
29 | static struct mu_gocs_locking locking_settings; | 29 | static struct mu_gocs_locking locking_settings; |
30 | static struct mu_gocs_logging logging_settings; | 30 | static struct mu_gocs_logging logging_settings; |
... | @@ -164,9 +164,6 @@ DCL_CFG_CAPA (logging); | ... | @@ -164,9 +164,6 @@ DCL_CFG_CAPA (logging); |
164 | static int | 164 | static int |
165 | _cb2_debug_level (mu_debug_t debug, const char *arg, void *data MU_ARG_UNUSED) | 165 | _cb2_debug_level (mu_debug_t debug, const char *arg, void *data MU_ARG_UNUSED) |
166 | { | 166 | { |
167 | char buf[UINTMAX_STRSIZE_BOUND]; | ||
168 | char *p; | ||
169 | size_t size; | ||
170 | char *pfx; | 167 | char *pfx; |
171 | struct mu_debug_locus locus; | 168 | struct mu_debug_locus locus; |
172 | 169 | ||
... | @@ -175,24 +172,21 @@ _cb2_debug_level (mu_debug_t debug, const char *arg, void *data MU_ARG_UNUSED) | ... | @@ -175,24 +172,21 @@ _cb2_debug_level (mu_debug_t debug, const char *arg, void *data MU_ARG_UNUSED) |
175 | debug_settings.string = strdup (arg); | 172 | debug_settings.string = strdup (arg); |
176 | if (mu_debug_get_locus (debug, &locus) == 0) | 173 | if (mu_debug_get_locus (debug, &locus) == 0) |
177 | { | 174 | { |
178 | p = umaxtostr (locus.line, buf); | 175 | int status = mu_asprintf (&pfx, "%s:%lu", |
179 | size = strlen (locus.file) + 1 + strlen (p) + 1; | 176 | locus.file, (unsigned long) locus.line); |
180 | pfx = malloc (size); | 177 | if (status) |
181 | if (!pfx) | ||
182 | { | 178 | { |
183 | mu_cfg_format_error (debug, MU_DEBUG_ERROR, | 179 | mu_cfg_format_error (debug, MU_DEBUG_ERROR, |
184 | "%s", mu_strerror (errno)); | 180 | "%s", mu_strerror (status)); |
185 | return 1; | 181 | return 1; |
186 | } | 182 | } |
187 | strcpy (pfx, locus.file); | ||
188 | strcat (pfx, ":"); | ||
189 | strcat (pfx, p); | ||
190 | } | 183 | } |
191 | else | 184 | else |
192 | pfx = strdup ("command line");/*FIXME*/ | 185 | pfx = strdup ("command line");/*FIXME*/ |
193 | /*FIXME: this is suboptimal, there's no use parsing 1st arg in | 186 | /*FIXME: this is suboptimal, there's no use parsing 1st arg in |
194 | mu_global_debug_from_string */ | 187 | mu_global_debug_from_string */ |
195 | mu_global_debug_from_string (debug_settings.string, pfx); | 188 | mu_global_debug_from_string (debug_settings.string, pfx); |
189 | free (pfx); | ||
196 | free (debug_settings.string); | 190 | free (debug_settings.string); |
197 | free (debug_settings.errpfx); | 191 | free (debug_settings.errpfx); |
198 | memset (&debug_settings, 0, sizeof debug_settings); | 192 | memset (&debug_settings, 0, sizeof debug_settings); | ... | ... |
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | 1 | /* GNU Mailutils -- a suite of utilities for electronic mail |
2 | Copyright (C) 1999, 2000, 2001, 2006, 2007 Free Software Foundation, Inc. | 2 | Copyright (C) 1999, 2000, 2001, 2006, 2007, |
3 | 2009 Free Software Foundation, Inc. | ||
3 | 4 | ||
4 | This library is free software; you can redistribute it and/or | 5 | This library is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU Lesser General Public | 6 | modify it under the terms of the GNU Lesser General Public |
... | @@ -17,7 +18,7 @@ | ... | @@ -17,7 +18,7 @@ |
17 | Boston, MA 02110-1301 USA */ | 18 | Boston, MA 02110-1301 USA */ |
18 | 19 | ||
19 | #include "mu_scm.h" | 20 | #include "mu_scm.h" |
20 | #include <mu_umaxtostr.h> | 21 | #include <mailutils/io.h> |
21 | 22 | ||
22 | struct mu_port | 23 | struct mu_port |
23 | { | 24 | { |
... | @@ -276,10 +277,13 @@ mu_port_print (SCM exp, SCM port, scm_print_state *pstate) | ... | @@ -276,10 +277,13 @@ mu_port_print (SCM exp, SCM port, scm_print_state *pstate) |
276 | scm_puts ("mu-port", port); | 277 | scm_puts ("mu-port", port); |
277 | if (mu_stream_size (mp->stream, &size) == 0) | 278 | if (mu_stream_size (mp->stream, &size) == 0) |
278 | { | 279 | { |
279 | char buffer[64]; | 280 | char *buf; |
280 | snprintf (buffer, sizeof (buffer), " %-5s", mu_umaxtostr (0, size)); | 281 | if (mu_asprintf (&buf, " %5lu", (unsigned long) size) == 0) |
281 | scm_puts (buffer, port); | 282 | { |
283 | scm_puts (buf, port); | ||
282 | scm_puts (" chars", port); | 284 | scm_puts (" chars", port); |
285 | free (buf); | ||
286 | } | ||
283 | } | 287 | } |
284 | scm_putc ('>', port); | 288 | scm_putc ('>', port); |
285 | return 1; | 289 | return 1; | ... | ... |
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | 1 | /* GNU Mailutils -- a suite of utilities for electronic mail |
2 | Copyright (C) 1999, 2000, 2001, 2003, 2004, | 2 | Copyright (C) 1999, 2000, 2001, 2003, 2004, |
3 | 2005, 2006, 2007 Free Software Foundation, Inc. | 3 | 2005, 2006, 2007, 2009 Free Software Foundation, Inc. |
4 | 4 | ||
5 | This library is free software; you can redistribute it and/or | 5 | This library is free software; you can redistribute it and/or |
6 | modify it under the terms of the GNU Lesser General Public | 6 | modify it under the terms of the GNU Lesser General Public |
... | @@ -50,7 +50,6 @@ | ... | @@ -50,7 +50,6 @@ |
50 | #include <mailutils/argcv.h> | 50 | #include <mailutils/argcv.h> |
51 | #include <mailutils/tls.h> | 51 | #include <mailutils/tls.h> |
52 | #include <mailutils/nls.h> | 52 | #include <mailutils/nls.h> |
53 | #include <mu_umaxtostr.h> | ||
54 | 53 | ||
55 | /* For dbg purposes set to one to see different level of traffic. */ | 54 | /* For dbg purposes set to one to see different level of traffic. */ |
56 | /* Print to stderr the command sent to the IMAP server. */ | 55 | /* Print to stderr the command sent to the IMAP server. */ |
... | @@ -570,10 +569,10 @@ static int | ... | @@ -570,10 +569,10 @@ static int |
570 | imap_writer (void *iodata, char *buf) | 569 | imap_writer (void *iodata, char *buf) |
571 | { | 570 | { |
572 | f_imap_t iop = iodata; | 571 | f_imap_t iop = iodata; |
573 | MU_DEBUG2 (iop->folder->debug, MU_DEBUG_PROT, "g%s %s\n", | 572 | MU_DEBUG2 (iop->folder->debug, MU_DEBUG_PROT, "g%lu %s\n", |
574 | mu_umaxtostr (0, iop->seq), buf); | 573 | (unsigned long)iop->seq, buf); |
575 | int status = imap_writeline (iop, "g%s %s\r\n", | 574 | int status = imap_writeline (iop, "g%lu %s\r\n", |
576 | mu_umaxtostr (0, iop->seq++), buf); | 575 | (unsigned long)iop->seq++, buf); |
577 | CHECK_ERROR (iop, status); | 576 | CHECK_ERROR (iop, status); |
578 | status = imap_send (iop); | 577 | status = imap_send (iop); |
579 | CHECK_ERROR (iop, status); | 578 | CHECK_ERROR (iop, status); | ... | ... |
This diff is collapsed.
Click to expand it.
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | 1 | /* GNU Mailutils -- a suite of utilities for electronic mail |
2 | Copyright (C) 1999, 2000, 2001, 2003, | 2 | Copyright (C) 1999, 2000, 2001, 2003, |
3 | 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. | 3 | 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. |
4 | 4 | ||
5 | This library is free software; you can redistribute it and/or | 5 | This library is free software; you can redistribute it and/or |
6 | modify it under the terms of the GNU Lesser General Public | 6 | modify it under the terms of the GNU Lesser General Public |
... | @@ -24,7 +24,7 @@ | ... | @@ -24,7 +24,7 @@ |
24 | #endif | 24 | #endif |
25 | 25 | ||
26 | #include <mbox0.h> | 26 | #include <mbox0.h> |
27 | #include <mu_umaxtostr.h> | 27 | #include <mailutils/io.h> |
28 | 28 | ||
29 | #define ATTRIBUTE_IS_DELETED(flag) (flag & MU_ATTRIBUTE_DELETED) | 29 | #define ATTRIBUTE_IS_DELETED(flag) (flag & MU_ATTRIBUTE_DELETED) |
30 | #define ATTRIBUTE_IS_EQUAL(flag1, flag2) (flag1 == flag2) | 30 | #define ATTRIBUTE_IS_EQUAL(flag1, flag2) (flag1 == flag2) |
... | @@ -805,12 +805,7 @@ static int | ... | @@ -805,12 +805,7 @@ static int |
805 | mbox_message_qid (mu_message_t msg, mu_message_qid_t *pqid) | 805 | mbox_message_qid (mu_message_t msg, mu_message_qid_t *pqid) |
806 | { | 806 | { |
807 | mbox_message_t mum = mu_message_get_owner (msg); | 807 | mbox_message_t mum = mu_message_get_owner (msg); |
808 | char buf[UINTMAX_STRSIZE_BOUND]; | 808 | return mu_asprintf (pqid, "%lu", (unsigned long) mum->header_from); |
809 | const char *p = umaxtostr (mum->header_from, buf); | ||
810 | *pqid = strdup (p); | ||
811 | if (*pqid == NULL) | ||
812 | return ENOMEM; | ||
813 | return 0; | ||
814 | } | 809 | } |
815 | 810 | ||
816 | static int | 811 | static int |
... | @@ -1303,9 +1298,10 @@ mbox_append_message (mu_mailbox_t mailbox, mu_message_t msg) | ... | @@ -1303,9 +1298,10 @@ mbox_append_message (mu_mailbox_t mailbox, mu_message_t msg) |
1303 | 1298 | ||
1304 | if (mailbox->observable) | 1299 | if (mailbox->observable) |
1305 | { | 1300 | { |
1306 | char buf[UINTMAX_STRSIZE_BOUND]; | 1301 | char *buf = NULL; |
1307 | mu_observable_notify (mailbox->observable, MU_EVT_MESSAGE_APPEND, | 1302 | mu_asprintf (&buf, "%lu", (unsigned long) size); |
1308 | umaxtostr (size, buf)); | 1303 | mu_observable_notify (mailbox->observable, MU_EVT_MESSAGE_APPEND, buf); |
1304 | free (buf); | ||
1309 | } | 1305 | } |
1310 | 1306 | ||
1311 | return 0; | 1307 | return 0; | ... | ... |
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | 1 | /* GNU Mailutils -- a suite of utilities for electronic mail |
2 | Copyright (C) 1999, 2000, 2001, 2002, 2003, | 2 | Copyright (C) 1999, 2000, 2001, 2002, 2003, |
3 | 2004, 2005, 2007, 2008 Free Software Foundation, Inc. | 3 | 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. |
4 | 4 | ||
5 | This library is free software; you can redistribute it and/or | 5 | This library is free software; you can redistribute it and/or |
6 | modify it under the terms of the GNU Lesser General Public | 6 | modify it under the terms of the GNU Lesser General Public |
... | @@ -63,10 +63,10 @@ | ... | @@ -63,10 +63,10 @@ |
63 | #include <mailutils/stream.h> | 63 | #include <mailutils/stream.h> |
64 | #include <mailutils/url.h> | 64 | #include <mailutils/url.h> |
65 | #include <mailutils/observer.h> | 65 | #include <mailutils/observer.h> |
66 | #include <mailutils/io.h> | ||
66 | #include <mailbox0.h> | 67 | #include <mailbox0.h> |
67 | #include <registrar0.h> | 68 | #include <registrar0.h> |
68 | #include <amd.h> | 69 | #include <amd.h> |
69 | #include <mu_umaxtostr.h> | ||
70 | 70 | ||
71 | struct _mh_message | 71 | struct _mh_message |
72 | { | 72 | { |
... | @@ -102,9 +102,13 @@ _mh_cur_message_name (struct _amd_message *amsg, char **pname) | ... | @@ -102,9 +102,13 @@ _mh_cur_message_name (struct _amd_message *amsg, char **pname) |
102 | int status = 0; | 102 | int status = 0; |
103 | struct _mh_message *mhm = (struct _mh_message *) amsg; | 103 | struct _mh_message *mhm = (struct _mh_message *) amsg; |
104 | char *filename; | 104 | char *filename; |
105 | char buf[UINTMAX_STRSIZE_BOUND]; | 105 | char *pnum; |
106 | char *pnum = umaxtostr (mhm->seq_number, buf); | 106 | size_t len; |
107 | size_t len = strlen (amsg->amd->name) + 1 + strlen (pnum) + 1; | 107 | |
108 | status = mu_asprintf (&pnum, "%lu", (unsigned long) mhm->seq_number); | ||
109 | if (status) | ||
110 | return status; | ||
111 | len = strlen (amsg->amd->name) + 1 + strlen (pnum) + 1; | ||
108 | filename = malloc (len); | 112 | filename = malloc (len); |
109 | if (filename) | 113 | if (filename) |
110 | { | 114 | { |
... | @@ -115,6 +119,7 @@ _mh_cur_message_name (struct _amd_message *amsg, char **pname) | ... | @@ -115,6 +119,7 @@ _mh_cur_message_name (struct _amd_message *amsg, char **pname) |
115 | } | 119 | } |
116 | else | 120 | else |
117 | status = ENOMEM; | 121 | status = ENOMEM; |
122 | free (pnum); | ||
118 | return status; | 123 | return status; |
119 | } | 124 | } |
120 | 125 | ||
... | @@ -126,9 +131,13 @@ _mh_new_message_name (struct _amd_message *amsg, int flags, char **pname) | ... | @@ -126,9 +131,13 @@ _mh_new_message_name (struct _amd_message *amsg, int flags, char **pname) |
126 | int status = 0; | 131 | int status = 0; |
127 | struct _mh_message *mhm = (struct _mh_message *) amsg; | 132 | struct _mh_message *mhm = (struct _mh_message *) amsg; |
128 | char *filename; | 133 | char *filename; |
129 | char buf[UINTMAX_STRSIZE_BOUND]; | 134 | char *pnum; |
130 | char *pnum = umaxtostr (mhm->seq_number, buf); | 135 | size_t len; |
131 | size_t len = strlen (amsg->amd->name) + 1 + | 136 | |
137 | status = mu_asprintf (&pnum, "%lu", (unsigned long) mhm->seq_number); | ||
138 | if (status) | ||
139 | return status; | ||
140 | len = strlen (amsg->amd->name) + 1 + | ||
132 | ((flags & MU_ATTRIBUTE_DELETED) ? 1 : 0) + strlen (pnum) + 1; | 141 | ((flags & MU_ATTRIBUTE_DELETED) ? 1 : 0) + strlen (pnum) + 1; |
133 | filename = malloc (len); | 142 | filename = malloc (len); |
134 | if (filename) | 143 | if (filename) |
... | @@ -142,6 +151,7 @@ _mh_new_message_name (struct _amd_message *amsg, int flags, char **pname) | ... | @@ -142,6 +151,7 @@ _mh_new_message_name (struct _amd_message *amsg, int flags, char **pname) |
142 | } | 151 | } |
143 | else | 152 | else |
144 | status = ENOMEM; | 153 | status = ENOMEM; |
154 | free (pnum); | ||
145 | return status; | 155 | return status; |
146 | } | 156 | } |
147 | 157 | ... | ... |
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | 1 | /* GNU Mailutils -- a suite of utilities for electronic mail |
2 | Copyright (C) 1999,2000,2001,2003,2005,2007 Free Software Foundation, Inc. | 2 | Copyright (C) 1999,2000,2001,2003,2005,2007, |
3 | 2009 Free Software Foundation, Inc. | ||
3 | 4 | ||
4 | This library is free software; you can redistribute it and/or | 5 | This library is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU Lesser General Public | 6 | modify it under the terms of the GNU Lesser General Public |
... | @@ -38,7 +39,6 @@ | ... | @@ -38,7 +39,6 @@ |
38 | # include <strings.h> | 39 | # include <strings.h> |
39 | #endif | 40 | #endif |
40 | 41 | ||
41 | #include <mu_umaxtostr.h> | ||
42 | #include <mailutils/attribute.h> | 42 | #include <mailutils/attribute.h> |
43 | #include <mailutils/auth.h> | 43 | #include <mailutils/auth.h> |
44 | #include <mailutils/body.h> | 44 | #include <mailutils/body.h> |
... | @@ -53,6 +53,7 @@ | ... | @@ -53,6 +53,7 @@ |
53 | #include <mailutils/url.h> | 53 | #include <mailutils/url.h> |
54 | #include <mailutils/tls.h> | 54 | #include <mailutils/tls.h> |
55 | #include <mailutils/md5.h> | 55 | #include <mailutils/md5.h> |
56 | #include <mailutils/io.h> | ||
56 | 57 | ||
57 | #include <folder0.h> | 58 | #include <folder0.h> |
58 | #include <mailbox0.h> | 59 | #include <mailbox0.h> |
... | @@ -147,7 +148,8 @@ static int fill_buffer (pop_data_t, char *, size_t); | ... | @@ -147,7 +148,8 @@ static int fill_buffer (pop_data_t, char *, size_t); |
147 | static int pop_sleep (int); | 148 | static int pop_sleep (int); |
148 | static int pop_readline (pop_data_t); | 149 | static int pop_readline (pop_data_t); |
149 | static int pop_read_ack (pop_data_t); | 150 | static int pop_read_ack (pop_data_t); |
150 | static int pop_writeline (pop_data_t, const char *, ...); | 151 | static int pop_writeline (pop_data_t, const char *, ...) |
152 | MU_PRINTFLIKE(2,3); | ||
151 | static int pop_write (pop_data_t); | 153 | static int pop_write (pop_data_t); |
152 | static int pop_get_user (mu_authority_t); | 154 | static int pop_get_user (mu_authority_t); |
153 | static int pop_get_passwd (mu_authority_t); | 155 | static int pop_get_passwd (mu_authority_t); |
... | @@ -1295,9 +1297,9 @@ pop_expunge (mu_mailbox_t mbox) | ... | @@ -1295,9 +1297,9 @@ pop_expunge (mu_mailbox_t mbox) |
1295 | switch (mpd->state) | 1297 | switch (mpd->state) |
1296 | { | 1298 | { |
1297 | case POP_NO_STATE: | 1299 | case POP_NO_STATE: |
1298 | status = pop_writeline (mpd, "DELE %s\r\n", | 1300 | status = pop_writeline (mpd, "DELE %lu\r\n", |
1299 | mu_umaxtostr (0, | 1301 | (unsigned long) |
1300 | mpd->pmessages[i]->num)); | 1302 | mpd->pmessages[i]->num); |
1301 | CHECK_ERROR (mpd, status); | 1303 | CHECK_ERROR (mpd, status); |
1302 | MU_DEBUG (mbox->debug, MU_DEBUG_PROT, mpd->buffer); | 1304 | MU_DEBUG (mbox->debug, MU_DEBUG_PROT, mpd->buffer); |
1303 | mpd->state = POP_DELE; | 1305 | mpd->state = POP_DELE; |
... | @@ -1391,7 +1393,7 @@ pop_message_size (mu_message_t msg, size_t *psize) | ... | @@ -1391,7 +1393,7 @@ pop_message_size (mu_message_t msg, size_t *psize) |
1391 | switch (mpd->state) | 1393 | switch (mpd->state) |
1392 | { | 1394 | { |
1393 | case POP_NO_STATE: | 1395 | case POP_NO_STATE: |
1394 | status = pop_writeline (mpd, "LIST %s\r\n", mu_umaxtostr (0, mpm->num)); | 1396 | status = pop_writeline (mpd, "LIST %lu\r\n", (unsigned long) mpm->num); |
1395 | CHECK_ERROR (mpd, status); | 1397 | CHECK_ERROR (mpd, status); |
1396 | MU_DEBUG (mpd->mbox->debug, MU_DEBUG_PROT, mpd->buffer); | 1398 | MU_DEBUG (mpd->mbox->debug, MU_DEBUG_PROT, mpd->buffer); |
1397 | mpd->state = POP_LIST; | 1399 | mpd->state = POP_LIST; |
... | @@ -1610,7 +1612,7 @@ pop_uidl (mu_message_t msg, char *buffer, size_t buflen, size_t *pnwriten) | ... | @@ -1610,7 +1612,7 @@ pop_uidl (mu_message_t msg, char *buffer, size_t buflen, size_t *pnwriten) |
1610 | switch (mpd->state) | 1612 | switch (mpd->state) |
1611 | { | 1613 | { |
1612 | case POP_NO_STATE: | 1614 | case POP_NO_STATE: |
1613 | status = pop_writeline (mpd, "UIDL %s\r\n", mu_umaxtostr (0, mpm->num)); | 1615 | status = pop_writeline (mpd, "UIDL %lu\r\n", (unsigned long) mpm->num); |
1614 | CHECK_ERROR (mpd, status); | 1616 | CHECK_ERROR (mpd, status); |
1615 | MU_DEBUG (mpd->mbox->debug, MU_DEBUG_PROT, mpd->buffer); | 1617 | MU_DEBUG (mpd->mbox->debug, MU_DEBUG_PROT, mpd->buffer); |
1616 | mpd->state = POP_UIDL; | 1618 | mpd->state = POP_UIDL; |
... | @@ -1705,8 +1707,8 @@ pop_top (mu_header_t header, char *buffer, size_t buflen, | ... | @@ -1705,8 +1707,8 @@ pop_top (mu_header_t header, char *buffer, size_t buflen, |
1705 | case POP_NO_STATE: | 1707 | case POP_NO_STATE: |
1706 | if (mpd->capa & CAPA_TOP) | 1708 | if (mpd->capa & CAPA_TOP) |
1707 | { | 1709 | { |
1708 | status = pop_writeline (mpd, "TOP %s 0\r\n", | 1710 | status = pop_writeline (mpd, "TOP %lu 0\r\n", |
1709 | mu_umaxtostr (0, mpm->num)); | 1711 | (unsigned long) mpm->num); |
1710 | CHECK_ERROR (mpd, status); | 1712 | CHECK_ERROR (mpd, status); |
1711 | MU_DEBUG (mpd->mbox->debug, MU_DEBUG_PROT, mpd->buffer); | 1713 | MU_DEBUG (mpd->mbox->debug, MU_DEBUG_PROT, mpd->buffer); |
1712 | mpd->state = POP_TOP; | 1714 | mpd->state = POP_TOP; |
... | @@ -1931,8 +1933,8 @@ pop_retr (pop_message_t mpm, char *buffer, size_t buflen, | ... | @@ -1931,8 +1933,8 @@ pop_retr (pop_message_t mpm, char *buffer, size_t buflen, |
1931 | { | 1933 | { |
1932 | case POP_NO_STATE: | 1934 | case POP_NO_STATE: |
1933 | mpm->body_lines = mpm->body_size = 0; | 1935 | mpm->body_lines = mpm->body_size = 0; |
1934 | status = pop_writeline (mpd, "RETR %s\r\n", | 1936 | status = pop_writeline (mpd, "RETR %lu\r\n", |
1935 | mu_umaxtostr (0, mpm->num)); | 1937 | (unsigned long) mpm->num); |
1936 | MU_DEBUG (mpd->mbox->debug, MU_DEBUG_PROT, mpd->buffer); | 1938 | MU_DEBUG (mpd->mbox->debug, MU_DEBUG_PROT, mpd->buffer); |
1937 | CHECK_ERROR (mpd, status); | 1939 | CHECK_ERROR (mpd, status); |
1938 | mpd->state = POP_RETR; | 1940 | mpd->state = POP_RETR; | ... | ... |
1 | ## Process this file with GNU Automake to create Makefile.in | 1 | ## Process this file with GNU Automake to create Makefile.in |
2 | 2 | ||
3 | ## Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008 | 3 | ## Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, |
4 | ## Free Software Foundation, Inc. | 4 | ## 2009 Free Software Foundation, Inc. |
5 | ## | 5 | ## |
6 | ## GNU Mailutils is free software; you can redistribute it and/or | 6 | ## GNU Mailutils is free software; you can redistribute it and/or |
7 | ## modify it under the terms of the GNU General Public License as | 7 | ## modify it under the terms of the GNU General Public License as |
... | @@ -41,9 +41,7 @@ EXTRA_DIST = \ | ... | @@ -41,9 +41,7 @@ EXTRA_DIST = \ |
41 | fgetpwent.c\ | 41 | fgetpwent.c\ |
42 | cfg_lexer.l\ | 42 | cfg_lexer.l\ |
43 | cfg_parser.y\ | 43 | cfg_parser.y\ |
44 | cfg_parser.h\ | 44 | cfg_parser.h |
45 | inttostr.c\ | ||
46 | inttostr.h | ||
47 | 45 | ||
48 | libmailutils_la_SOURCES = \ | 46 | libmailutils_la_SOURCES = \ |
49 | acl.c\ | 47 | acl.c\ |
... | @@ -51,6 +49,8 @@ libmailutils_la_SOURCES = \ | ... | @@ -51,6 +49,8 @@ libmailutils_la_SOURCES = \ |
51 | alloc.c\ | 49 | alloc.c\ |
52 | amd.c\ | 50 | amd.c\ |
53 | argcv.c\ | 51 | argcv.c\ |
52 | asnprintf.c\ | ||
53 | asprintf.c\ | ||
54 | assoc.c\ | 54 | assoc.c\ |
55 | attachment.c\ | 55 | attachment.c\ |
56 | attribute.c\ | 56 | attribute.c\ |
... | @@ -97,8 +97,6 @@ libmailutils_la_SOURCES = \ | ... | @@ -97,8 +97,6 @@ libmailutils_la_SOURCES = \ |
97 | monitor.c\ | 97 | monitor.c\ |
98 | msrv.c\ | 98 | msrv.c\ |
99 | mu_auth.c\ | 99 | mu_auth.c\ |
100 | mu_umaxtostr.h\ | ||
101 | mu_umaxtostr.c\ | ||
102 | munre.c\ | 100 | munre.c\ |
103 | mutil.c\ | 101 | mutil.c\ |
104 | muerror.c\ | 102 | muerror.c\ |
... | @@ -124,9 +122,9 @@ libmailutils_la_SOURCES = \ | ... | @@ -124,9 +122,9 @@ libmailutils_la_SOURCES = \ |
124 | tcp.c\ | 122 | tcp.c\ |
125 | url.c\ | 123 | url.c\ |
126 | vartab.c\ | 124 | vartab.c\ |
125 | vasnprintf.c\ | ||
127 | version.c\ | 126 | version.c\ |
128 | wicket.c\ | 127 | wicket.c |
129 | imaxtostr.c offtostr.c umaxtostr.c intprops.h | ||
130 | 128 | ||
131 | BUILT_SOURCES = parsedate.c muerrno.c cfg_parser.c cfg_parser.h cfg_lexer.c | 129 | BUILT_SOURCES = parsedate.c muerrno.c cfg_parser.c cfg_parser.h cfg_lexer.c |
132 | MOSTLYCLEANFILES= | 130 | MOSTLYCLEANFILES= | ... | ... |
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | 1 | /* GNU Mailutils -- a suite of utilities for electronic mail |
2 | Copyright (C) 2007, 2008 Free Software Foundation, Inc. | 2 | Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This library is free software; you can redistribute it and/or | 4 | This library is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU Lesser General Public | 5 | modify it under the terms of the GNU Lesser General Public |
... | @@ -36,7 +36,7 @@ | ... | @@ -36,7 +36,7 @@ |
36 | #include <mailutils/errno.h> | 36 | #include <mailutils/errno.h> |
37 | #include <mailutils/kwd.h> | 37 | #include <mailutils/kwd.h> |
38 | #include <mailutils/vartab.h> | 38 | #include <mailutils/vartab.h> |
39 | #include <mu_umaxtostr.h> | 39 | #include <mailutils/io.h> |
40 | 40 | ||
41 | struct _mu_acl_entry | 41 | struct _mu_acl_entry |
42 | { | 42 | { |
... | @@ -368,7 +368,7 @@ mu_sockaddr_to_str (const struct sockaddr *sa, int salen, | ... | @@ -368,7 +368,7 @@ mu_sockaddr_to_str (const struct sockaddr *sa, int salen, |
368 | char *bufptr, size_t buflen, | 368 | char *bufptr, size_t buflen, |
369 | size_t *plen) | 369 | size_t *plen) |
370 | { | 370 | { |
371 | char buf[UINTMAX_STRSIZE_BOUND]; /* FIXME: too much */ | 371 | char *nbuf; |
372 | size_t len = 0; | 372 | size_t len = 0; |
373 | switch (sa->sa_family) | 373 | switch (sa->sa_family) |
374 | { | 374 | { |
... | @@ -377,8 +377,11 @@ mu_sockaddr_to_str (const struct sockaddr *sa, int salen, | ... | @@ -377,8 +377,11 @@ mu_sockaddr_to_str (const struct sockaddr *sa, int salen, |
377 | struct sockaddr_in s_in = *(struct sockaddr_in *)sa; | 377 | struct sockaddr_in s_in = *(struct sockaddr_in *)sa; |
378 | len += mu_stpcpy (&bufptr, &buflen, inet_ntoa (s_in.sin_addr)); | 378 | len += mu_stpcpy (&bufptr, &buflen, inet_ntoa (s_in.sin_addr)); |
379 | len += mu_stpcpy (&bufptr, &buflen, ":"); | 379 | len += mu_stpcpy (&bufptr, &buflen, ":"); |
380 | len += mu_stpcpy (&bufptr, &buflen, umaxtostr (ntohs (s_in.sin_port), | 380 | if (mu_asprintf (&nbuf, "%hu", ntohs (s_in.sin_port)) == 0) |
381 | buf)); | 381 | { |
382 | len += mu_stpcpy (&bufptr, &buflen, nbuf); | ||
383 | free (nbuf); | ||
384 | } | ||
382 | break; | 385 | break; |
383 | } | 386 | } |
384 | 387 | ||
... | @@ -396,8 +399,12 @@ mu_sockaddr_to_str (const struct sockaddr *sa, int salen, | ... | @@ -396,8 +399,12 @@ mu_sockaddr_to_str (const struct sockaddr *sa, int salen, |
396 | } | 399 | } |
397 | 400 | ||
398 | default: | 401 | default: |
399 | len += mu_stpcpy (&bufptr, &buflen, "{Unsupported family: "); | 402 | len += mu_stpcpy (&bufptr, &buflen, "{Unsupported family"); |
400 | len += mu_stpcpy (&bufptr, &buflen, umaxtostr (sa->sa_family, buf)); | 403 | if (mu_asprintf (&nbuf, ": %d", sa->sa_family) == 0) |
404 | { | ||
405 | len += mu_stpcpy (&bufptr, &buflen, nbuf); | ||
406 | free (nbuf); | ||
407 | } | ||
401 | len += mu_stpcpy (&bufptr, &buflen, "}"); | 408 | len += mu_stpcpy (&bufptr, &buflen, "}"); |
402 | } | 409 | } |
403 | if (plen) | 410 | if (plen) |
... | @@ -500,10 +507,8 @@ static int | ... | @@ -500,10 +507,8 @@ static int |
500 | _expand_aclno (const char *name, void *data, char **p) | 507 | _expand_aclno (const char *name, void *data, char **p) |
501 | { | 508 | { |
502 | struct run_closure *rp = data; | 509 | struct run_closure *rp = data; |
503 | char buf[UINTMAX_STRSIZE_BOUND]; | ||
504 | /*FIXME: memory leak*/ | 510 | /*FIXME: memory leak*/ |
505 | *p = strdup (umaxtostr (rp->idx, buf)); | 511 | return mu_asprintf (p, "%u", rp->idx); |
506 | return 0; | ||
507 | } | 512 | } |
508 | 513 | ||
509 | #if defined (HAVE_SYSCONF) && defined (_SC_OPEN_MAX) | 514 | #if defined (HAVE_SYSCONF) && defined (_SC_OPEN_MAX) |
... | @@ -530,14 +535,13 @@ expand_arg (const char *cmdline, struct run_closure *rp, char **s) | ... | @@ -530,14 +535,13 @@ expand_arg (const char *cmdline, struct run_closure *rp, char **s) |
530 | { | 535 | { |
531 | struct sockaddr_in *s_in = (struct sockaddr_in *)rp->sa; | 536 | struct sockaddr_in *s_in = (struct sockaddr_in *)rp->sa; |
532 | struct in_addr addr = s_in->sin_addr; | 537 | struct in_addr addr = s_in->sin_addr; |
533 | char buf[UINTMAX_STRSIZE_BOUND]; | 538 | char *p; |
534 | unsigned n; | ||
535 | 539 | ||
536 | mu_vartab_define (vtab, "family", "AF_INET", 1); | 540 | mu_vartab_define (vtab, "family", "AF_INET", 1); |
537 | addr.s_addr = htonl (addr.s_addr); | 541 | addr.s_addr = htonl (addr.s_addr); |
538 | mu_vartab_define (vtab, "address", inet_ntoa (addr), 0); | 542 | mu_vartab_define (vtab, "address", inet_ntoa (addr), 0); |
539 | n = ntohs (s_in->sin_port); | 543 | if (mu_asprintf (&p, "%hu", ntohs (s_in->sin_port)) == 0) |
540 | mu_vartab_define (vtab, "port", umaxtostr (n, buf), 0); | 544 | mu_vartab_define (vtab, "port", p, 0); |
541 | } | 545 | } |
542 | break; | 546 | break; |
543 | 547 | ||
... | @@ -768,7 +772,7 @@ mu_acl_check_fd (mu_acl_t acl, int fd, mu_acl_result_t *pres) | ... | @@ -768,7 +772,7 @@ mu_acl_check_fd (mu_acl_t acl, int fd, mu_acl_result_t *pres) |
768 | { | 772 | { |
769 | MU_DEBUG1 (acl->debug, MU_DEBUG_ERROR, | 773 | MU_DEBUG1 (acl->debug, MU_DEBUG_ERROR, |
770 | "Cannot obtain IP address of client: %s", | 774 | "Cannot obtain IP address of client: %s", |
771 | strerror (errno)); | 775 | mu_strerror (errno)); |
772 | return MU_ERR_FAILURE; | 776 | return MU_ERR_FAILURE; |
773 | } | 777 | } |
774 | 778 | ... | ... |
mailbox/asnprintf.c
0 → 100644
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | ||
2 | Copyright (C) 2009 Free Software Foundation, Inc. | ||
3 | |||
4 | This library is free software; you can redistribute it and/or | ||
5 | modify it under the terms of the GNU Lesser General Public | ||
6 | License as published by the Free Software Foundation; either | ||
7 | version 3 of the License, or (at your option) any later version. | ||
8 | |||
9 | This library is distributed in the hope that it will be useful, | ||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
12 | Lesser General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU Lesser General | ||
15 | Public License along with this library; if not, write to the | ||
16 | Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | ||
17 | Boston, MA 02110-1301 USA */ | ||
18 | |||
19 | #if HAVE_CONFIG_H | ||
20 | # include <config.h> | ||
21 | #endif | ||
22 | |||
23 | #include <stdlib.h> | ||
24 | #include <stdarg.h> | ||
25 | #include <stdio.h> | ||
26 | |||
27 | #include <mailutils/io.h> | ||
28 | |||
29 | int | ||
30 | mu_asnprintf (char **pbuf, size_t *psize, const char *fmt, ...) | ||
31 | { | ||
32 | int rc; | ||
33 | va_list ap; | ||
34 | |||
35 | va_start (ap, fmt); | ||
36 | rc = mu_vasnprintf (pbuf, psize, fmt, ap); | ||
37 | va_end (ap); | ||
38 | return rc; | ||
39 | } | ||
40 |
mailbox/asprintf.c
0 → 100644
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | ||
2 | Copyright (C) 2009 Free Software Foundation, Inc. | ||
3 | |||
4 | This library is free software; you can redistribute it and/or | ||
5 | modify it under the terms of the GNU Lesser General Public | ||
6 | License as published by the Free Software Foundation; either | ||
7 | version 3 of the License, or (at your option) any later version. | ||
8 | |||
9 | This library is distributed in the hope that it will be useful, | ||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
12 | Lesser General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU Lesser General | ||
15 | Public License along with this library; if not, write to the | ||
16 | Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | ||
17 | Boston, MA 02110-1301 USA */ | ||
18 | |||
19 | #if HAVE_CONFIG_H | ||
20 | # include <config.h> | ||
21 | #endif | ||
22 | |||
23 | #include <stdlib.h> | ||
24 | #include <stdarg.h> | ||
25 | #include <stdio.h> | ||
26 | |||
27 | #include <mailutils/io.h> | ||
28 | |||
29 | int | ||
30 | mu_asprintf (char **pbuf, const char *fmt, ...) | ||
31 | { | ||
32 | va_list ap; | ||
33 | size_t size; | ||
34 | int rc; | ||
35 | |||
36 | va_start (ap, fmt); | ||
37 | *pbuf = NULL; | ||
38 | size = 0; | ||
39 | rc = mu_vasnprintf (pbuf, &size, fmt, ap); | ||
40 | va_end (ap); | ||
41 | return rc; | ||
42 | } |
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | 1 | /* GNU Mailutils -- a suite of utilities for electronic mail |
2 | Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. | 2 | Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This library is free software; you can redistribute it and/or | 4 | This library is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU Lesser General Public | 5 | modify it under the terms of the GNU Lesser General Public |
... | @@ -32,7 +32,6 @@ | ... | @@ -32,7 +32,6 @@ |
32 | #include <mailutils/errno.h> | 32 | #include <mailutils/errno.h> |
33 | #include <mailutils/error.h> | 33 | #include <mailutils/error.h> |
34 | #include <mailutils/nls.h> | 34 | #include <mailutils/nls.h> |
35 | #include <mu_umaxtostr.h> | ||
36 | 35 | ||
37 | static char *pidfile; | 36 | static char *pidfile; |
38 | static pid_t current_pid; | 37 | static pid_t current_pid; |
... | @@ -80,7 +79,6 @@ int | ... | @@ -80,7 +79,6 @@ int |
80 | mu_daemon_create_pidfile (const char *filename) | 79 | mu_daemon_create_pidfile (const char *filename) |
81 | { | 80 | { |
82 | char *p; | 81 | char *p; |
83 | const char *pid_string; | ||
84 | int fd; | 82 | int fd; |
85 | uid_t uid = 0; | 83 | uid_t uid = 0; |
86 | int rc; | 84 | int rc; |
... | @@ -122,11 +120,20 @@ mu_daemon_create_pidfile (const char *filename) | ... | @@ -122,11 +120,20 @@ mu_daemon_create_pidfile (const char *filename) |
122 | 120 | ||
123 | if ((fd = open (pidfile, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0644)) != -1) | 121 | if ((fd = open (pidfile, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0644)) != -1) |
124 | { | 122 | { |
125 | pid_string = mu_umaxtostr (0, current_pid); | 123 | FILE *fp = fdopen (fd, "w"); |
126 | write (fd, pid_string, strlen (pid_string)); | 124 | if (!fp) |
125 | { | ||
126 | rc = errno; | ||
127 | free (pidfile); | ||
127 | close (fd); | 128 | close (fd); |
129 | } | ||
130 | else | ||
131 | { | ||
132 | fprintf (fp, "%lu", (unsigned long) current_pid); | ||
133 | fclose (fp); | ||
128 | atexit (mu_daemon_remove_pidfile); | 134 | atexit (mu_daemon_remove_pidfile); |
129 | } | 135 | } |
136 | } | ||
130 | else | 137 | else |
131 | { | 138 | { |
132 | rc = errno; | 139 | rc = errno; | ... | ... |
mailbox/imaxtostr.c
deleted
100644 → 0
mailbox/intprops.h
deleted
100644 → 0
1 | /* intprops.h -- properties of integer types | ||
2 | |||
3 | Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. | ||
4 | |||
5 | This program is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published by | ||
7 | the Free Software Foundation; either version 2, or (at your option) | ||
8 | any later version. | ||
9 | |||
10 | This program is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | GNU General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with this program; if not, write to the Free Software Foundation, | ||
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | |||
19 | /* Written by Paul Eggert. */ | ||
20 | |||
21 | #include <limits.h> | ||
22 | |||
23 | /* The extra casts in the following macros work around compiler bugs, | ||
24 | e.g., in Cray C 5.0.3.0. */ | ||
25 | |||
26 | /* True if the arithmetic type T is an integer type. bool counts as | ||
27 | an integer. */ | ||
28 | #define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) | ||
29 | |||
30 | /* True if negative values of the signed integer type T use two's | ||
31 | complement, ones' complement, or signed magnitude representation, | ||
32 | respectively. Much GNU code assumes two's complement, but some | ||
33 | people like to be portable to all possible C hosts. */ | ||
34 | #define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) | ||
35 | #define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0) | ||
36 | #define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) | ||
37 | |||
38 | /* True if the arithmetic type T is signed. */ | ||
39 | #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) | ||
40 | |||
41 | /* The maximum and minimum values for the integer type T. These | ||
42 | macros have undefined behavior if T is signed and has padding bits. | ||
43 | If this is a problem for you, please let us know how to fix it for | ||
44 | your host. */ | ||
45 | #define TYPE_MINIMUM(t) \ | ||
46 | ((t) (! TYPE_SIGNED (t) \ | ||
47 | ? (t) 0 \ | ||
48 | : TYPE_SIGNED_MAGNITUDE (t) \ | ||
49 | ? ~ (t) 0 \ | ||
50 | : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) | ||
51 | #define TYPE_MAXIMUM(t) \ | ||
52 | ((t) (! TYPE_SIGNED (t) \ | ||
53 | ? (t) -1 \ | ||
54 | : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))) | ||
55 | |||
56 | /* Return zero if T can be determined to be an unsigned type. | ||
57 | Otherwise, return 1. | ||
58 | When compiling with GCC, INT_STRLEN_BOUND uses this macro to obtain a | ||
59 | tighter bound. Otherwise, it overestimates the true bound by one byte | ||
60 | when applied to unsigned types of size 2, 4, 16, ... bytes. | ||
61 | The symbol signed_type_or_expr__ is private to this header file. */ | ||
62 | #if __GNUC__ >= 2 | ||
63 | # define signed_type_or_expr__(t) TYPE_SIGNED (__typeof__ (t)) | ||
64 | #else | ||
65 | # define signed_type_or_expr__(t) 1 | ||
66 | #endif | ||
67 | |||
68 | /* Bound on length of the string representing an integer type or expression T. | ||
69 | Subtract 1 for the sign bit if T is signed; log10 (2.0) < 146/485; | ||
70 | add 1 for integer division truncation; add 1 more for a minus sign | ||
71 | if needed. */ | ||
72 | #define INT_STRLEN_BOUND(t) \ | ||
73 | ((sizeof (t) * CHAR_BIT - signed_type_or_expr__ (t)) * 146 / 485 \ | ||
74 | + signed_type_or_expr__ (t) + 1) | ||
75 | |||
76 | /* Bound on buffer size needed to represent an integer type or expression T, | ||
77 | including the terminating null. */ | ||
78 | #define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) |
mailbox/inttostr.c
deleted
100644 → 0
1 | /* inttostr.c -- convert integers to printable strings | ||
2 | |||
3 | Copyright (C) 2001 Free Software Foundation, Inc. | ||
4 | |||
5 | This program is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published by | ||
7 | the Free Software Foundation; either version 2, or (at your option) | ||
8 | any later version. | ||
9 | |||
10 | This program is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | GNU General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with this program; if not, write to the Free Software Foundation, | ||
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | |||
19 | /* Written by Paul Eggert */ | ||
20 | |||
21 | #ifdef HAVE_CONFIG_H | ||
22 | # include <config.h> | ||
23 | #endif | ||
24 | #include "inttostr.h" | ||
25 | |||
26 | /* Convert I to a printable string in BUF, which must be at least | ||
27 | INT_BUFSIZE_BOUND (INTTYPE) bytes long. Return the address of the | ||
28 | printable string, which need not start at BUF. */ | ||
29 | |||
30 | char * | ||
31 | inttostr (inttype i, char *buf) | ||
32 | { | ||
33 | char *p = buf + INT_STRLEN_BOUND (inttype); | ||
34 | *p = 0; | ||
35 | |||
36 | if (i < 0) | ||
37 | { | ||
38 | do | ||
39 | *--p = '0' - i % 10; | ||
40 | while ((i /= 10) != 0); | ||
41 | |||
42 | *--p = '-'; | ||
43 | } | ||
44 | else | ||
45 | { | ||
46 | do | ||
47 | *--p = '0' + i % 10; | ||
48 | while ((i /= 10) != 0); | ||
49 | } | ||
50 | |||
51 | return p; | ||
52 | } |
mailbox/inttostr.h
deleted
100644 → 0
1 | /* inttostr.h -- convert integers to printable strings | ||
2 | |||
3 | Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software | ||
4 | Foundation, Inc. | ||
5 | |||
6 | This program is free software; you can redistribute it and/or modify | ||
7 | it under the terms of the GNU General Public License as published by | ||
8 | the Free Software Foundation; either version 2, or (at your option) | ||
9 | any later version. | ||
10 | |||
11 | This program is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | GNU General Public License for more details. | ||
15 | |||
16 | You should have received a copy of the GNU General Public License | ||
17 | along with this program; if not, write to the Free Software Foundation, | ||
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | |||
20 | /* Written by Paul Eggert */ | ||
21 | |||
22 | #include <stdint.h> | ||
23 | #include <sys/types.h> | ||
24 | |||
25 | #include "intprops.h" | ||
26 | |||
27 | char *offtostr (off_t, char *); | ||
28 | char *imaxtostr (intmax_t, char *); | ||
29 | char *umaxtostr (uintmax_t, char *); |
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | 1 | /* GNU Mailutils -- a suite of utilities for electronic mail |
2 | Copyright (C) 1999, 2000, 2001, 2004, 2005, 2006, | 2 | Copyright (C) 1999, 2000, 2001, 2004, 2005, 2006, |
3 | 2007 Free Software Foundation, Inc. | 3 | 2007, 2009 Free Software Foundation, Inc. |
4 | 4 | ||
5 | This library is free software; you can redistribute it and/or | 5 | This library is free software; you can redistribute it and/or |
6 | modify it under the terms of the GNU Lesser General Public | 6 | modify it under the terms of the GNU Lesser General Public |
... | @@ -47,7 +47,7 @@ | ... | @@ -47,7 +47,7 @@ |
47 | #include <mailutils/argcv.h> | 47 | #include <mailutils/argcv.h> |
48 | #include <mailutils/mutil.h> | 48 | #include <mailutils/mutil.h> |
49 | #include <mailutils/mime.h> | 49 | #include <mailutils/mime.h> |
50 | #include <mu_umaxtostr.h> | 50 | #include <mailutils/io.h> |
51 | 51 | ||
52 | #include <mailer0.h> | 52 | #include <mailer0.h> |
53 | 53 | ||
... | @@ -404,19 +404,19 @@ create_part (mu_mime_t mime, mu_stream_t istr, | ... | @@ -404,19 +404,19 @@ create_part (mu_mime_t mime, mu_stream_t istr, |
404 | mu_body_t body; | 404 | mu_body_t body; |
405 | mu_stream_t ostr; | 405 | mu_stream_t ostr; |
406 | char buffer[512], *str; | 406 | char buffer[512], *str; |
407 | const char *nstr, *npartstr; | 407 | size_t slen; |
408 | 408 | ||
409 | mu_message_create (&newmsg, NULL); | 409 | mu_message_create (&newmsg, NULL); |
410 | mu_message_get_header (newmsg, &newhdr); | 410 | mu_message_get_header (newmsg, &newhdr); |
411 | 411 | ||
412 | nstr = mu_umaxtostr (0, n); | 412 | str = NULL; |
413 | npartstr = mu_umaxtostr (1, nparts); | 413 | slen = 0; |
414 | asprintf (&str, | 414 | mu_asnprintf (&str, &slen, |
415 | "message/partial; id=\"%s\"; number=%s; total=%s", | 415 | "message/partial; id=\"%s\"; number=%lu; total=%lu", |
416 | msgid, nstr, npartstr); | 416 | msgid, (unsigned long)n, (unsigned long)nparts); |
417 | mu_header_append (newhdr, MU_HEADER_CONTENT_TYPE, str); | 417 | mu_header_append (newhdr, MU_HEADER_CONTENT_TYPE, str); |
418 | free (str); | 418 | mu_asnprintf (&str, &slen, "part %lu of %lu", |
419 | asprintf (&str, "part %s of %s", nstr, npartstr); | 419 | (unsigned long)n, (unsigned long)nparts); |
420 | mu_header_append (newhdr, MU_HEADER_CONTENT_DESCRIPTION, str); | 420 | mu_header_append (newhdr, MU_HEADER_CONTENT_DESCRIPTION, str); |
421 | free (str); | 421 | free (str); |
422 | 422 | ... | ... |
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | 1 | /* GNU Mailutils -- a suite of utilities for electronic mail |
2 | Copyright (C) 1999, 2000, 2001, 2002, 2004, | 2 | Copyright (C) 1999, 2000, 2001, 2002, 2004, |
3 | 2005, 2006, 2007 Free Software Foundation, Inc. | 3 | 2005, 2006, 2007, 2009 Free Software Foundation, Inc. |
4 | 4 | ||
5 | This library is free software; you can redistribute it and/or | 5 | This library is free software; you can redistribute it and/or |
6 | modify it under the terms of the GNU Lesser General Public | 6 | modify it under the terms of the GNU Lesser General Public |
... | @@ -50,7 +50,7 @@ | ... | @@ -50,7 +50,7 @@ |
50 | #include <mailutils/mu_auth.h> | 50 | #include <mailutils/mu_auth.h> |
51 | #include <mailutils/nls.h> | 51 | #include <mailutils/nls.h> |
52 | #include <mailutils/md5.h> | 52 | #include <mailutils/md5.h> |
53 | #include <mu_umaxtostr.h> | 53 | #include <mailutils/io.h> |
54 | 54 | ||
55 | #define MESSAGE_MODIFIED 0x10000; | 55 | #define MESSAGE_MODIFIED 0x10000; |
56 | 56 | ||
... | @@ -638,8 +638,8 @@ mu_message_get_uidl (mu_message_t msg, char *buffer, size_t buflen, size_t *pwri | ... | @@ -638,8 +638,8 @@ mu_message_get_uidl (mu_message_t msg, char *buffer, size_t buflen, size_t *pwri |
638 | sprintf (tmp, "%02x", md5digest[n]); | 638 | sprintf (tmp, "%02x", md5digest[n]); |
639 | *tmp = '\0'; | 639 | *tmp = '\0'; |
640 | /* POP3 rfc says that an UID should not be longer than 70. */ | 640 | /* POP3 rfc says that an UID should not be longer than 70. */ |
641 | snprintf (buf + 32, 70, ".%lu.%s", (unsigned long)time (NULL), | 641 | snprintf (buf + 32, 70, ".%lu.%lu", (unsigned long)time (NULL), |
642 | mu_umaxtostr (0, uid)); | 642 | (unsigned long) uid); |
643 | 643 | ||
644 | mu_header_set_value (header, "X-UIDL", buf, 1); | 644 | mu_header_set_value (header, "X-UIDL", buf, 1); |
645 | buflen--; /* leave space for the NULL. */ | 645 | buflen--; /* leave space for the NULL. */ | ... | ... |
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | 1 | /* GNU Mailutils -- a suite of utilities for electronic mail |
2 | Copyright (C) 1999, 2000, 2001, 2002, 2003, | 2 | Copyright (C) 1999, 2000, 2001, 2002, 2003, |
3 | 2005, 2006, 2007 Free Software Foundation, Inc. | 3 | 2005, 2006, 2007, 2009 Free Software Foundation, Inc. |
4 | 4 | ||
5 | This library is free software; you can redistribute it and/or | 5 | This library is free software; you can redistribute it and/or |
6 | modify it under the terms of the GNU Lesser General Public | 6 | modify it under the terms of the GNU Lesser General Public |
... | @@ -60,6 +60,7 @@ | ... | @@ -60,6 +60,7 @@ |
60 | #include <mailutils/filter.h> | 60 | #include <mailutils/filter.h> |
61 | #include <mailutils/sql.h> | 61 | #include <mailutils/sql.h> |
62 | #include <mailutils/url.h> | 62 | #include <mailutils/url.h> |
63 | #include <mailutils/io.h> | ||
63 | 64 | ||
64 | #include <registrar0.h> | 65 | #include <registrar0.h> |
65 | 66 | ||
... | @@ -611,7 +612,7 @@ mu_tempfile (const char *tmpdir, char **namep) | ... | @@ -611,7 +612,7 @@ mu_tempfile (const char *tmpdir, char **namep) |
611 | 612 | ||
612 | if (fd == -1) | 613 | if (fd == -1) |
613 | { | 614 | { |
614 | mu_error (_("Cannot open temporary file: %s"), strerror (errno)); | 615 | mu_error (_("Cannot open temporary file: %s"), mu_strerror (errno)); |
615 | free (filename); | 616 | free (filename); |
616 | return -1; | 617 | return -1; |
617 | } | 618 | } |
... | @@ -1031,14 +1032,14 @@ mu_rfc2822_msg_id (int subpart, char **pval) | ... | @@ -1031,14 +1032,14 @@ mu_rfc2822_msg_id (int subpart, char **pval) |
1031 | { | 1032 | { |
1032 | struct timeval tv; | 1033 | struct timeval tv; |
1033 | gettimeofday (&tv, NULL); | 1034 | gettimeofday (&tv, NULL); |
1034 | asprintf (&p, "<%s.%lu.%d@%s>", | 1035 | mu_asprintf (&p, "<%s.%lu.%d@%s>", |
1035 | date, | 1036 | date, |
1036 | (unsigned long) getpid (), | 1037 | (unsigned long) getpid (), |
1037 | subpart, | 1038 | subpart, |
1038 | host); | 1039 | host); |
1039 | } | 1040 | } |
1040 | else | 1041 | else |
1041 | asprintf (&p, "<%s.%lu@%s>", date, (unsigned long) getpid (), host); | 1042 | mu_asprintf (&p, "<%s.%lu@%s>", date, (unsigned long) getpid (), host); |
1042 | free (host); | 1043 | free (host); |
1043 | *pval = p; | 1044 | *pval = p; |
1044 | return 0; | 1045 | return 0; | ... | ... |
mailbox/offtostr.c
deleted
100644 → 0
... | @@ -40,6 +40,7 @@ | ... | @@ -40,6 +40,7 @@ |
40 | 40 | ||
41 | #include <mailutils/property.h> | 41 | #include <mailutils/property.h> |
42 | #include <mailutils/errno.h> | 42 | #include <mailutils/errno.h> |
43 | #include <mailutils/io.h> | ||
43 | #include <stream0.h> | 44 | #include <stream0.h> |
44 | 45 | ||
45 | static int refill (mu_stream_t, mu_off_t); | 46 | static int refill (mu_stream_t, mu_off_t); |
... | @@ -493,43 +494,16 @@ mu_stream_write (mu_stream_t os, const char *buf, size_t count, | ... | @@ -493,43 +494,16 @@ mu_stream_write (mu_stream_t os, const char *buf, size_t count, |
493 | int | 494 | int |
494 | mu_stream_vprintf (mu_stream_t os, mu_off_t *poff, const char *fmt, va_list ap) | 495 | mu_stream_vprintf (mu_stream_t os, mu_off_t *poff, const char *fmt, va_list ap) |
495 | { | 496 | { |
496 | char *buf, *p; | 497 | char *buf = NULL, *p; |
497 | size_t buflen = 512; | 498 | size_t buflen = 0; |
498 | size_t n; | 499 | size_t n; |
499 | int done = 0; | ||
500 | int rc; | 500 | int rc; |
501 | 501 | ||
502 | buf = calloc (1, buflen); | 502 | rc = mu_vasnprintf (&buf, &buflen, fmt, ap); |
503 | if (buf == NULL) | 503 | if (rc) |
504 | return ENOMEM; | 504 | return rc; |
505 | |||
506 | do | ||
507 | { | ||
508 | n = vsnprintf (buf, buflen, fmt, ap); | ||
509 | if (n < 0 || n >= buflen || !memchr (buf, '\0', n + 1)) | ||
510 | { | ||
511 | char *newbuf; | ||
512 | size_t newlen = buflen * 2; | ||
513 | if (newlen < buflen) | ||
514 | { | ||
515 | free (buf); | ||
516 | return ENOMEM; | ||
517 | } | ||
518 | newbuf = realloc (buf, newlen); | ||
519 | if (newbuf == NULL) | ||
520 | { | ||
521 | free (buf); | ||
522 | return ENOMEM; | ||
523 | } | ||
524 | buflen = newlen; | ||
525 | buf = newbuf; | ||
526 | } | ||
527 | else | ||
528 | done = 1; | ||
529 | } | ||
530 | while (!done); | ||
531 | |||
532 | p = buf; | 505 | p = buf; |
506 | n = strlen (buf); | ||
533 | do | 507 | do |
534 | { | 508 | { |
535 | size_t wrs; | 509 | size_t wrs; | ... | ... |
mailbox/umaxtostr.c
deleted
100644 → 0
mailbox/vasnprintf.c
0 → 100644
1 | /* GNU Mailutils -- a suite of utilities for electronic mail | ||
2 | Copyright (C) 2009 Free Software Foundation, Inc. | ||
3 | |||
4 | This library is free software; you can redistribute it and/or | ||
5 | modify it under the terms of the GNU Lesser General Public | ||
6 | License as published by the Free Software Foundation; either | ||
7 | version 3 of the License, or (at your option) any later version. | ||
8 | |||
9 | This library is distributed in the hope that it will be useful, | ||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
12 | Lesser General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU Lesser General | ||
15 | Public License along with this library; if not, write to the | ||
16 | Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | ||
17 | Boston, MA 02110-1301 USA */ | ||
18 | |||
19 | #if HAVE_CONFIG_H | ||
20 | # include <config.h> | ||
21 | #endif | ||
22 | |||
23 | #include <stdlib.h> | ||
24 | #include <stdarg.h> | ||
25 | #include <stdio.h> | ||
26 | #include <errno.h> | ||
27 | #include <string.h> | ||
28 | |||
29 | #include <mailutils/io.h> | ||
30 | |||
31 | int | ||
32 | mu_vasnprintf (char **pbuf, size_t *psize, const char *fmt, va_list ap) | ||
33 | { | ||
34 | char *buf = *pbuf; | ||
35 | size_t buflen = *psize; | ||
36 | int rc = 0; | ||
37 | |||
38 | if (!buf) | ||
39 | { | ||
40 | if (buflen == 0) | ||
41 | buflen = 512; /* Initial allocation */ | ||
42 | |||
43 | buf = calloc (1, buflen); | ||
44 | if (buf == NULL) | ||
45 | return ENOMEM; | ||
46 | } | ||
47 | |||
48 | for (;;) | ||
49 | { | ||
50 | ssize_t n = vsnprintf (buf, buflen, fmt, ap); | ||
51 | if (n < 0 || n >= buflen || !memchr (buf, '\0', n + 1)) | ||
52 | { | ||
53 | char *newbuf; | ||
54 | size_t newlen = buflen * 2; | ||
55 | if (newlen < buflen) | ||
56 | { | ||
57 | rc = ENOMEM; | ||
58 | break; | ||
59 | } | ||
60 | newbuf = realloc (buf, newlen); | ||
61 | if (newbuf == NULL) | ||
62 | { | ||
63 | rc = ENOMEM; | ||
64 | break; | ||
65 | } | ||
66 | buflen = newlen; | ||
67 | buf = newbuf; | ||
68 | } | ||
69 | else | ||
70 | break; | ||
71 | } | ||
72 | |||
73 | if (rc) | ||
74 | { | ||
75 | if (!*pbuf) | ||
76 | { | ||
77 | /* We made first allocation, now free it */ | ||
78 | free (buf); | ||
79 | buf = NULL; | ||
80 | buflen = 0; | ||
81 | } | ||
82 | } | ||
83 | |||
84 | *pbuf = buf; | ||
85 | *psize = buflen; | ||
86 | return rc; | ||
87 | } |
-
Please register or sign in to post a comment