annotate lib/fprintf.c @ 17463:203c036eb0c6

bootstrap: support checksum utils without a --status option * build-aux/bootstrap: Only look for sha1sum if updating po files. Add sha1 to the list of supported checksum utils since it's now supported through adjustments below. (update_po_files): Remove the use of --status in a way that will suppress all error messages, but since this is only used to minimize updates, it shouldn't cause an issue. Exit early if there is a problem updating the po file checksums. (find_tool): Remove the check for --version support as this is optional as per commit 86186b17. Don't even check for the presence of the command as if that is needed, it's supported through configuring prerequisites in bootstrap.conf. Prompt that when a tool isn't found, one can define an environment variable to add to the hardcoded search list.
author Pádraig Brady <P@draigBrady.com>
date Thu, 08 Aug 2013 11:08:49 +0100 (2013-08-08)
parents e542fd46ad6f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8394
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 /* Formatted output to a stream.
17249
e542fd46ad6f maint: update all copyright year number ranges
Eric Blake <eblake@redhat.com>
parents: 16201
diff changeset
2 Copyright (C) 2004, 2006-2013 Free Software Foundation, Inc.
8394
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8394
diff changeset
4 This program is free software: you can redistribute it and/or modify
8394
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8394
diff changeset
6 the Free Software Foundation; either version 3 of the License, or
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8394
diff changeset
7 (at your option) any later version.
8394
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
8
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12 GNU General Public License for more details.
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8394
diff changeset
14 You should have received a copy of the GNU General Public License
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8394
diff changeset
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
8394
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
16
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
17 #ifdef HAVE_CONFIG_H
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
18 # include <config.h>
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
19 #endif
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
20
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
21 /* Specification. */
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
22 #include <stdio.h>
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
23
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
24 #include <errno.h>
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
25 #include <limits.h>
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
26 #include <stdarg.h>
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
27 #include <stdlib.h>
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
28
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
29 #include "fseterr.h"
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
30 #include "vasnprintf.h"
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
31
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
32 /* Print formatted output to the stream FP.
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
33 Return string length of formatted string. On error, return a negative
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
34 value. */
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
35 int
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
36 fprintf (FILE *fp, const char *format, ...)
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
37 {
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
38 char buf[2000];
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
39 char *output;
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
40 size_t len;
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
41 size_t lenbuf = sizeof (buf);
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
42 va_list args;
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
43
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
44 va_start (args, format);
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
45 output = vasnprintf (buf, &lenbuf, format, args);
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
46 len = lenbuf;
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
47 va_end (args);
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
48
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
49 if (!output)
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
50 {
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
51 fseterr (fp);
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
52 return -1;
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
53 }
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
54
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
55 if (fwrite (output, 1, len, fp) < len)
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
56 {
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
57 if (output != buf)
12421
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 9831
diff changeset
58 {
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 9831
diff changeset
59 int saved_errno = errno;
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 9831
diff changeset
60 free (output);
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 9831
diff changeset
61 errno = saved_errno;
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 9831
diff changeset
62 }
8394
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
63 return -1;
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
64 }
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
65
12449
eccd5d7c7a69 *printf: Fix memory leak.
Joel E. Denny <jdenny@clemson.edu>
parents: 12421
diff changeset
66 if (output != buf)
eccd5d7c7a69 *printf: Fix memory leak.
Joel E. Denny <jdenny@clemson.edu>
parents: 12421
diff changeset
67 free (output);
eccd5d7c7a69 *printf: Fix memory leak.
Joel E. Denny <jdenny@clemson.edu>
parents: 12421
diff changeset
68
8394
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
69 if (len > INT_MAX)
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
70 {
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
71 errno = EOVERFLOW;
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
72 fseterr (fp);
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
73 return -1;
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
74 }
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
75
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
76 return len;
fbb6e4d5f75b New module 'fprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
77 }