diff options
author | Thomas Guyot-Sionnest <dermoth@users.sourceforge.net> | 2008-02-12 11:07:18 +0000 |
---|---|---|
committer | Thomas Guyot-Sionnest <dermoth@users.sourceforge.net> | 2008-02-12 11:07:18 +0000 |
commit | bd7029a99b0c2974265c6665638ef14a052f42ab (patch) | |
tree | f5661ba73366d81ef6e91f889ea7fec5ebe07b6b | |
parent | f99612320d6eda67644c07be04bb21aa4d7789db (diff) | |
download | monitoring-plugins-bd7029a99b0c2974265c6665638ef14a052f42ab.tar.gz |
Sync to latest Gnulib
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1925 f882894a-f735-0410-b71e-b25c423dba1c
169 files changed, 9946 insertions, 2953 deletions
diff --git a/build-aux/config.rpath b/build-aux/config.rpath index e082db6b..35f959b8 100755 --- a/build-aux/config.rpath +++ b/build-aux/config.rpath | |||
@@ -2,7 +2,7 @@ | |||
2 | # Output a system dependent set of variables, describing how to set the | 2 | # Output a system dependent set of variables, describing how to set the |
3 | # run time search path of shared libraries in an executable. | 3 | # run time search path of shared libraries in an executable. |
4 | # | 4 | # |
5 | # Copyright 1996-2006 Free Software Foundation, Inc. | 5 | # Copyright 1996-2008 Free Software Foundation, Inc. |
6 | # Taken from GNU libtool, 2001 | 6 | # Taken from GNU libtool, 2001 |
7 | # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 | 7 | # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 |
8 | # | 8 | # |
@@ -64,7 +64,7 @@ else | |||
64 | ;; | 64 | ;; |
65 | esac | 65 | esac |
66 | ;; | 66 | ;; |
67 | mingw* | pw32* | os2*) | 67 | mingw* | cygwin* | pw32* | os2*) |
68 | ;; | 68 | ;; |
69 | hpux9* | hpux10* | hpux11*) | 69 | hpux9* | hpux10* | hpux11*) |
70 | wl='-Wl,' | 70 | wl='-Wl,' |
@@ -74,7 +74,7 @@ else | |||
74 | ;; | 74 | ;; |
75 | newsos6) | 75 | newsos6) |
76 | ;; | 76 | ;; |
77 | linux*) | 77 | linux* | k*bsd*-gnu) |
78 | case $cc_basename in | 78 | case $cc_basename in |
79 | icc* | ecc*) | 79 | icc* | ecc*) |
80 | wl='-Wl,' | 80 | wl='-Wl,' |
@@ -100,7 +100,7 @@ else | |||
100 | osf3* | osf4* | osf5*) | 100 | osf3* | osf4* | osf5*) |
101 | wl='-Wl,' | 101 | wl='-Wl,' |
102 | ;; | 102 | ;; |
103 | sco3.2v5*) | 103 | rdos*) |
104 | ;; | 104 | ;; |
105 | solaris*) | 105 | solaris*) |
106 | wl='-Wl,' | 106 | wl='-Wl,' |
@@ -108,11 +108,14 @@ else | |||
108 | sunos4*) | 108 | sunos4*) |
109 | wl='-Qoption ld ' | 109 | wl='-Qoption ld ' |
110 | ;; | 110 | ;; |
111 | sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) | 111 | sysv4 | sysv4.2uw2* | sysv4.3*) |
112 | wl='-Wl,' | 112 | wl='-Wl,' |
113 | ;; | 113 | ;; |
114 | sysv4*MP*) | 114 | sysv4*MP*) |
115 | ;; | 115 | ;; |
116 | sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) | ||
117 | wl='-Wl,' | ||
118 | ;; | ||
116 | unicos*) | 119 | unicos*) |
117 | wl='-Wl,' | 120 | wl='-Wl,' |
118 | ;; | 121 | ;; |
@@ -155,7 +158,7 @@ if test "$with_gnu_ld" = yes; then | |||
155 | # option of GNU ld is called -rpath, not --rpath. | 158 | # option of GNU ld is called -rpath, not --rpath. |
156 | hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' | 159 | hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' |
157 | case "$host_os" in | 160 | case "$host_os" in |
158 | aix3* | aix4* | aix5*) | 161 | aix[3-9]*) |
159 | # On AIX/PPC, the GNU linker is very broken | 162 | # On AIX/PPC, the GNU linker is very broken |
160 | if test "$host_cpu" != ia64; then | 163 | if test "$host_cpu" != ia64; then |
161 | ld_shlibs=no | 164 | ld_shlibs=no |
@@ -189,11 +192,11 @@ if test "$with_gnu_ld" = yes; then | |||
189 | ld_shlibs=no | 192 | ld_shlibs=no |
190 | fi | 193 | fi |
191 | ;; | 194 | ;; |
192 | interix3*) | 195 | interix[3-9]*) |
193 | hardcode_direct=no | 196 | hardcode_direct=no |
194 | hardcode_libdir_flag_spec='${wl}-rpath,$libdir' | 197 | hardcode_libdir_flag_spec='${wl}-rpath,$libdir' |
195 | ;; | 198 | ;; |
196 | linux*) | 199 | gnu* | linux* | k*bsd*-gnu) |
197 | if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then | 200 | if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then |
198 | : | 201 | : |
199 | else | 202 | else |
@@ -251,7 +254,7 @@ else | |||
251 | hardcode_direct=unsupported | 254 | hardcode_direct=unsupported |
252 | fi | 255 | fi |
253 | ;; | 256 | ;; |
254 | aix4* | aix5*) | 257 | aix[4-9]*) |
255 | if test "$host_cpu" = ia64; then | 258 | if test "$host_cpu" = ia64; then |
256 | # On IA64, the linker does run time linking by default, so we don't | 259 | # On IA64, the linker does run time linking by default, so we don't |
257 | # have to do anything special. | 260 | # have to do anything special. |
@@ -261,7 +264,7 @@ else | |||
261 | # Test if we are trying to use run time linking or normal | 264 | # Test if we are trying to use run time linking or normal |
262 | # AIX style linking. If -brtl is somewhere in LDFLAGS, we | 265 | # AIX style linking. If -brtl is somewhere in LDFLAGS, we |
263 | # need to do runtime linking. | 266 | # need to do runtime linking. |
264 | case $host_os in aix4.[23]|aix4.[23].*|aix5*) | 267 | case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) |
265 | for ld_flag in $LDFLAGS; do | 268 | for ld_flag in $LDFLAGS; do |
266 | if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then | 269 | if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then |
267 | aix_use_runtimelinking=yes | 270 | aix_use_runtimelinking=yes |
@@ -280,7 +283,7 @@ else | |||
280 | strings "$collect2name" | grep resolve_lib_name >/dev/null | 283 | strings "$collect2name" | grep resolve_lib_name >/dev/null |
281 | then | 284 | then |
282 | # We have reworked collect2 | 285 | # We have reworked collect2 |
283 | hardcode_direct=yes | 286 | : |
284 | else | 287 | else |
285 | # We have old collect2 | 288 | # We have old collect2 |
286 | hardcode_direct=unsupported | 289 | hardcode_direct=unsupported |
@@ -359,7 +362,7 @@ else | |||
359 | hardcode_direct=yes | 362 | hardcode_direct=yes |
360 | hardcode_minus_L=yes | 363 | hardcode_minus_L=yes |
361 | ;; | 364 | ;; |
362 | freebsd* | kfreebsd*-gnu | dragonfly*) | 365 | freebsd* | dragonfly*) |
363 | hardcode_libdir_flag_spec='-R$libdir' | 366 | hardcode_libdir_flag_spec='-R$libdir' |
364 | hardcode_direct=yes | 367 | hardcode_direct=yes |
365 | ;; | 368 | ;; |
@@ -412,18 +415,22 @@ else | |||
412 | hardcode_libdir_separator=: | 415 | hardcode_libdir_separator=: |
413 | ;; | 416 | ;; |
414 | openbsd*) | 417 | openbsd*) |
415 | hardcode_direct=yes | 418 | if test -f /usr/libexec/ld.so; then |
416 | if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then | 419 | hardcode_direct=yes |
417 | hardcode_libdir_flag_spec='${wl}-rpath,$libdir' | 420 | if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then |
421 | hardcode_libdir_flag_spec='${wl}-rpath,$libdir' | ||
422 | else | ||
423 | case "$host_os" in | ||
424 | openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) | ||
425 | hardcode_libdir_flag_spec='-R$libdir' | ||
426 | ;; | ||
427 | *) | ||
428 | hardcode_libdir_flag_spec='${wl}-rpath,$libdir' | ||
429 | ;; | ||
430 | esac | ||
431 | fi | ||
418 | else | 432 | else |
419 | case "$host_os" in | 433 | ld_shlibs=no |
420 | openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) | ||
421 | hardcode_libdir_flag_spec='-R$libdir' | ||
422 | ;; | ||
423 | *) | ||
424 | hardcode_libdir_flag_spec='${wl}-rpath,$libdir' | ||
425 | ;; | ||
426 | esac | ||
427 | fi | 434 | fi |
428 | ;; | 435 | ;; |
429 | os2*) | 436 | os2*) |
@@ -471,7 +478,7 @@ else | |||
471 | ld_shlibs=yes | 478 | ld_shlibs=yes |
472 | fi | 479 | fi |
473 | ;; | 480 | ;; |
474 | sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) | 481 | sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) |
475 | ;; | 482 | ;; |
476 | sysv5* | sco3.2v5* | sco5v6*) | 483 | sysv5* | sco3.2v5* | sco5v6*) |
477 | hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' | 484 | hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' |
@@ -498,7 +505,7 @@ case "$host_os" in | |||
498 | aix3*) | 505 | aix3*) |
499 | library_names_spec='$libname.a' | 506 | library_names_spec='$libname.a' |
500 | ;; | 507 | ;; |
501 | aix4* | aix5*) | 508 | aix[4-9]*) |
502 | library_names_spec='$libname$shrext' | 509 | library_names_spec='$libname$shrext' |
503 | ;; | 510 | ;; |
504 | amigaos*) | 511 | amigaos*) |
@@ -523,9 +530,6 @@ case "$host_os" in | |||
523 | ;; | 530 | ;; |
524 | freebsd1*) | 531 | freebsd1*) |
525 | ;; | 532 | ;; |
526 | kfreebsd*-gnu) | ||
527 | library_names_spec='$libname$shrext' | ||
528 | ;; | ||
529 | freebsd* | dragonfly*) | 533 | freebsd* | dragonfly*) |
530 | case "$host_os" in | 534 | case "$host_os" in |
531 | freebsd[123]*) | 535 | freebsd[123]*) |
@@ -551,7 +555,7 @@ case "$host_os" in | |||
551 | esac | 555 | esac |
552 | library_names_spec='$libname$shrext' | 556 | library_names_spec='$libname$shrext' |
553 | ;; | 557 | ;; |
554 | interix3*) | 558 | interix[3-9]*) |
555 | library_names_spec='$libname$shrext' | 559 | library_names_spec='$libname$shrext' |
556 | ;; | 560 | ;; |
557 | irix5* | irix6* | nonstopux*) | 561 | irix5* | irix6* | nonstopux*) |
@@ -572,7 +576,7 @@ case "$host_os" in | |||
572 | ;; | 576 | ;; |
573 | linux*oldld* | linux*aout* | linux*coff*) | 577 | linux*oldld* | linux*aout* | linux*coff*) |
574 | ;; | 578 | ;; |
575 | linux*) | 579 | linux* | k*bsd*-gnu) |
576 | library_names_spec='$libname$shrext' | 580 | library_names_spec='$libname$shrext' |
577 | ;; | 581 | ;; |
578 | knetbsd*-gnu) | 582 | knetbsd*-gnu) |
@@ -598,6 +602,8 @@ case "$host_os" in | |||
598 | osf3* | osf4* | osf5*) | 602 | osf3* | osf4* | osf5*) |
599 | library_names_spec='$libname$shrext' | 603 | library_names_spec='$libname$shrext' |
600 | ;; | 604 | ;; |
605 | rdos*) | ||
606 | ;; | ||
601 | solaris*) | 607 | solaris*) |
602 | library_names_spec='$libname$shrext' | 608 | library_names_spec='$libname$shrext' |
603 | ;; | 609 | ;; |
diff --git a/build-aux/link-warning.h b/build-aux/link-warning.h new file mode 100644 index 00000000..fda01941 --- /dev/null +++ b/build-aux/link-warning.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* GL_LINK_WARNING("literal string") arranges to emit the literal string as | ||
2 | a linker warning on most glibc systems. | ||
3 | We use a linker warning rather than a preprocessor warning, because | ||
4 | #warning cannot be used inside macros. */ | ||
5 | #ifndef GL_LINK_WARNING | ||
6 | /* This works on platforms with GNU ld and ELF object format. | ||
7 | Testing __GLIBC__ is sufficient for asserting that GNU ld is in use. | ||
8 | Testing __ELF__ guarantees the ELF object format. | ||
9 | Testing __GNUC__ is necessary for the compound expression syntax. */ | ||
10 | # if defined __GLIBC__ && defined __ELF__ && defined __GNUC__ | ||
11 | # define GL_LINK_WARNING(message) \ | ||
12 | GL_LINK_WARNING1 (__FILE__, __LINE__, message) | ||
13 | # define GL_LINK_WARNING1(file, line, message) \ | ||
14 | GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */ | ||
15 | # define GL_LINK_WARNING2(file, line, message) \ | ||
16 | GL_LINK_WARNING3 (file ":" #line ": warning: " message) | ||
17 | # define GL_LINK_WARNING3(message) \ | ||
18 | ({ static const char warning[sizeof (message)] \ | ||
19 | __attribute__ ((__unused__, \ | ||
20 | __section__ (".gnu.warning"), \ | ||
21 | __aligned__ (1))) \ | ||
22 | = message "\n"; \ | ||
23 | (void)0; \ | ||
24 | }) | ||
25 | # else | ||
26 | # define GL_LINK_WARNING(message) ((void) 0) | ||
27 | # endif | ||
28 | #endif | ||
diff --git a/gl/Makefile.am b/gl/Makefile.am index 67c9872d..92c675ea 100644 --- a/gl/Makefile.am +++ b/gl/Makefile.am | |||
@@ -9,7 +9,7 @@ | |||
9 | # the same distribution terms as the rest of that program. | 9 | # the same distribution terms as the rest of that program. |
10 | # | 10 | # |
11 | # Generated by gnulib-tool. | 11 | # Generated by gnulib-tool. |
12 | # Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --aux-dir=. --no-libtool --macro-prefix=gl dirname fsusage getaddrinfo gethostname getloadavg getopt gettext mountlist regex vasprintf vsnprintf | 12 | # Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --aux-dir=build-aux --no-libtool --macro-prefix=gl dirname fsusage getaddrinfo gethostname getloadavg getopt gettext mountlist regex vasprintf vsnprintf |
13 | 13 | ||
14 | AUTOMAKE_OPTIONS = 1.5 gnits | 14 | AUTOMAKE_OPTIONS = 1.5 gnits |
15 | 15 | ||
@@ -34,6 +34,15 @@ libgnu_a_LIBADD = $(gl_LIBOBJS) | |||
34 | libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) | 34 | libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) |
35 | EXTRA_libgnu_a_SOURCES = | 35 | EXTRA_libgnu_a_SOURCES = |
36 | 36 | ||
37 | ## begin gnulib module absolute-header | ||
38 | |||
39 | # Use this preprocessor expression to decide whether #include_next works. | ||
40 | # Do not rely on a 'configure'-time test for this, since the expression | ||
41 | # might appear in an installed header, which is used by some other compiler. | ||
42 | HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) | ||
43 | |||
44 | ## end gnulib module absolute-header | ||
45 | |||
37 | ## begin gnulib module alloca | 46 | ## begin gnulib module alloca |
38 | 47 | ||
39 | 48 | ||
@@ -51,14 +60,14 @@ BUILT_SOURCES += $(ALLOCA_H) | |||
51 | 60 | ||
52 | # We need the following in order to create <alloca.h> when the system | 61 | # We need the following in order to create <alloca.h> when the system |
53 | # doesn't have one that works with the given compiler. | 62 | # doesn't have one that works with the given compiler. |
54 | alloca.h: alloca_.h | 63 | alloca.h: alloca.in.h |
55 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ | 64 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ |
56 | cat $(srcdir)/alloca_.h; \ | 65 | cat $(srcdir)/alloca.in.h; \ |
57 | } > $@-t | 66 | } > $@-t |
58 | mv -f $@-t $@ | 67 | mv -f $@-t $@ |
59 | MOSTLYCLEANFILES += alloca.h alloca.h-t | 68 | MOSTLYCLEANFILES += alloca.h alloca.h-t |
60 | 69 | ||
61 | EXTRA_DIST += alloca_.h | 70 | EXTRA_DIST += alloca.in.h |
62 | 71 | ||
63 | ## end gnulib module alloca-opt | 72 | ## end gnulib module alloca-opt |
64 | 73 | ||
@@ -69,7 +78,7 @@ BUILT_SOURCES += $(ARPA_INET_H) | |||
69 | # We need the following in order to create <arpa/inet.h> when the system | 78 | # We need the following in order to create <arpa/inet.h> when the system |
70 | # doesn't have one. | 79 | # doesn't have one. |
71 | arpa/inet.h: | 80 | arpa/inet.h: |
72 | test -d arpa || mkdir arpa | 81 | @MKDIR_P@ arpa |
73 | rm -f $@-t $@ | 82 | rm -f $@-t $@ |
74 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ | 83 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ |
75 | echo '#include <sys/socket.h>'; \ | 84 | echo '#include <sys/socket.h>'; \ |
@@ -98,6 +107,62 @@ EXTRA_libgnu_a_SOURCES += cloexec.c | |||
98 | 107 | ||
99 | ## end gnulib module cloexec | 108 | ## end gnulib module cloexec |
100 | 109 | ||
110 | ## begin gnulib module configmake | ||
111 | |||
112 | # Retrieve values of the variables through 'configure' followed by | ||
113 | # 'make', not directly through 'configure', so that a user who | ||
114 | # sets some of these variables consistently on the 'make' command | ||
115 | # line gets correct results. | ||
116 | # | ||
117 | # One advantage of this approach, compared to the classical | ||
118 | # approach of adding -DLIBDIR=\"$(libdir)\" etc. to AM_CPPFLAGS, | ||
119 | # is that it protects against the use of undefined variables. | ||
120 | # If, say, $(libdir) is not set in the Makefile, LIBDIR is not | ||
121 | # defined by this module, and code using LIBDIR gives a | ||
122 | # compilation error. | ||
123 | # | ||
124 | # Another advantage is that 'make' output is shorter. | ||
125 | # | ||
126 | # Listed in the same order as the GNU makefile conventions. | ||
127 | # The Automake-defined pkg* macros are appended, in the order | ||
128 | # listed in the Automake 1.10a+ documentation. | ||
129 | configmake.h: Makefile | ||
130 | rm -f $@-t $@ | ||
131 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ | ||
132 | echo '#define PREFIX "$(prefix)"'; \ | ||
133 | echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ | ||
134 | echo '#define BINDIR "$(bindir)"'; \ | ||
135 | echo '#define SBINDIR "$(sbindir)"'; \ | ||
136 | echo '#define LIBEXECDIR "$(libexecdir)"'; \ | ||
137 | echo '#define DATAROOTDIR "$(datarootdir)"'; \ | ||
138 | echo '#define DATADIR "$(datadir)"'; \ | ||
139 | echo '#define SYSCONFDIR "$(sysconfdir)"'; \ | ||
140 | echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ | ||
141 | echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ | ||
142 | echo '#define INCLUDEDIR "$(includedir)"'; \ | ||
143 | echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ | ||
144 | echo '#define DOCDIR "$(docdir)"'; \ | ||
145 | echo '#define INFODIR "$(infodir)"'; \ | ||
146 | echo '#define HTMLDIR "$(htmldir)"'; \ | ||
147 | echo '#define DVIDIR "$(dvidir)"'; \ | ||
148 | echo '#define PDFDIR "$(pdfdir)"'; \ | ||
149 | echo '#define PSDIR "$(psdir)"'; \ | ||
150 | echo '#define LIBDIR "$(libdir)"'; \ | ||
151 | echo '#define LISPDIR "$(lispdir)"'; \ | ||
152 | echo '#define LOCALEDIR "$(localedir)"'; \ | ||
153 | echo '#define MANDIR "$(mandir)"'; \ | ||
154 | echo '#define MANEXT "$(manext)"'; \ | ||
155 | echo '#define PKGDATADIR "$(pkgdatadir)"'; \ | ||
156 | echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ | ||
157 | echo '#define PKGLIBDIR "$(pkglibdir)"'; \ | ||
158 | echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ | ||
159 | } | sed '/""/d' > $@-t | ||
160 | mv $@-t $@ | ||
161 | BUILT_SOURCES += configmake.h | ||
162 | CLEANFILES += configmake.h configmake.h-t | ||
163 | |||
164 | ## end gnulib module configmake | ||
165 | |||
101 | ## begin gnulib module dirname | 166 | ## begin gnulib module dirname |
102 | 167 | ||
103 | 168 | ||
@@ -116,12 +181,6 @@ EXTRA_libgnu_a_SOURCES += error.c | |||
116 | 181 | ||
117 | ## end gnulib module error | 182 | ## end gnulib module error |
118 | 183 | ||
119 | ## begin gnulib module exit | ||
120 | |||
121 | libgnu_a_SOURCES += exit.h | ||
122 | |||
123 | ## end gnulib module exit | ||
124 | |||
125 | ## begin gnulib module exitfail | 184 | ## begin gnulib module exitfail |
126 | 185 | ||
127 | 186 | ||
@@ -140,6 +199,26 @@ EXTRA_libgnu_a_SOURCES += creat-safer.c open-safer.c | |||
140 | 199 | ||
141 | ## end gnulib module fcntl-safer | 200 | ## end gnulib module fcntl-safer |
142 | 201 | ||
202 | ## begin gnulib module float | ||
203 | |||
204 | BUILT_SOURCES += $(FLOAT_H) | ||
205 | |||
206 | # We need the following in order to create <float.h> when the system | ||
207 | # doesn't have one that works with the given compiler. | ||
208 | float.h: float.in.h | ||
209 | rm -f $@-t $@ | ||
210 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ | ||
211 | sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \ | ||
212 | -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ | ||
213 | < $(srcdir)/float.in.h; \ | ||
214 | } > $@-t | ||
215 | mv $@-t $@ | ||
216 | MOSTLYCLEANFILES += float.h float.h-t | ||
217 | |||
218 | EXTRA_DIST += float.in.h | ||
219 | |||
220 | ## end gnulib module float | ||
221 | |||
143 | ## begin gnulib module fsusage | 222 | ## begin gnulib module fsusage |
144 | 223 | ||
145 | 224 | ||
@@ -194,14 +273,14 @@ BUILT_SOURCES += $(GETOPT_H) | |||
194 | 273 | ||
195 | # We need the following in order to create <getopt.h> when the system | 274 | # We need the following in order to create <getopt.h> when the system |
196 | # doesn't have one that works with the given compiler. | 275 | # doesn't have one that works with the given compiler. |
197 | getopt.h: getopt_.h | 276 | getopt.h: getopt.in.h |
198 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ | 277 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ |
199 | cat $(srcdir)/getopt_.h; \ | 278 | cat $(srcdir)/getopt.in.h; \ |
200 | } > $@-t | 279 | } > $@-t |
201 | mv -f $@-t $@ | 280 | mv -f $@-t $@ |
202 | MOSTLYCLEANFILES += getopt.h getopt.h-t | 281 | MOSTLYCLEANFILES += getopt.h getopt.h-t |
203 | 282 | ||
204 | EXTRA_DIST += getopt.c getopt1.c getopt_.h getopt_int.h | 283 | EXTRA_DIST += getopt.c getopt.in.h getopt1.c getopt_int.h |
205 | 284 | ||
206 | EXTRA_libgnu_a_SOURCES += getopt.c getopt1.c | 285 | EXTRA_libgnu_a_SOURCES += getopt.c getopt1.c |
207 | 286 | ||
@@ -219,6 +298,8 @@ EXTRA_libgnu_a_SOURCES += getopt.c getopt1.c | |||
219 | # "gettextize --intl". | 298 | # "gettextize --intl". |
220 | AM_CPPFLAGS += -I$(top_builddir)/intl | 299 | AM_CPPFLAGS += -I$(top_builddir)/intl |
221 | 300 | ||
301 | EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath | ||
302 | |||
222 | ## end gnulib module gettext | 303 | ## end gnulib module gettext |
223 | 304 | ||
224 | ## begin gnulib module gettext-h | 305 | ## begin gnulib module gettext-h |
@@ -227,6 +308,13 @@ libgnu_a_SOURCES += gettext.h | |||
227 | 308 | ||
228 | ## end gnulib module gettext-h | 309 | ## end gnulib module gettext-h |
229 | 310 | ||
311 | ## begin gnulib module havelib | ||
312 | |||
313 | |||
314 | EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath | ||
315 | |||
316 | ## end gnulib module havelib | ||
317 | |||
230 | ## begin gnulib module inet_ntop | 318 | ## begin gnulib module inet_ntop |
231 | 319 | ||
232 | 320 | ||
@@ -243,44 +331,89 @@ EXTRA_DIST += intprops.h | |||
243 | 331 | ||
244 | ## end gnulib module intprops | 332 | ## end gnulib module intprops |
245 | 333 | ||
246 | ## begin gnulib module malloc | 334 | ## begin gnulib module link-warning |
247 | 335 | ||
248 | 336 | LINK_WARNING_H=$(top_srcdir)/build-aux/link-warning.h | |
249 | EXTRA_DIST += malloc.c | 337 | |
250 | 338 | EXTRA_DIST += $(top_srcdir)/build-aux/link-warning.h | |
251 | EXTRA_libgnu_a_SOURCES += malloc.c | 339 | |
252 | 340 | ## end gnulib module link-warning | |
253 | ## end gnulib module malloc | 341 | |
254 | 342 | ## begin gnulib module localcharset | |
255 | ## begin gnulib module mbchar | 343 | |
344 | libgnu_a_SOURCES += localcharset.h localcharset.c | ||
345 | |||
346 | # We need the following in order to install a simple file in $(libdir) | ||
347 | # which is shared with other installed packages. We use a list of referencing | ||
348 | # packages so that "make uninstall" will remove the file if and only if it | ||
349 | # is not used by another installed package. | ||
350 | # On systems with glibc-2.1 or newer, the file is redundant, therefore we | ||
351 | # avoid installing it. | ||
352 | |||
353 | all-local: charset.alias ref-add.sed ref-del.sed | ||
354 | |||
355 | charset_alias = $(DESTDIR)$(libdir)/charset.alias | ||
356 | charset_tmp = $(DESTDIR)$(libdir)/charset.tmp | ||
357 | install-exec-local: all-local | ||
358 | test $(GLIBC21) != no || $(mkinstalldirs) $(DESTDIR)$(libdir) | ||
359 | if test -f $(charset_alias); then \ | ||
360 | sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ | ||
361 | $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ | ||
362 | rm -f $(charset_tmp) ; \ | ||
363 | else \ | ||
364 | if test $(GLIBC21) = no; then \ | ||
365 | sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ | ||
366 | $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ | ||
367 | rm -f $(charset_tmp) ; \ | ||
368 | fi ; \ | ||
369 | fi | ||
370 | |||
371 | uninstall-local: all-local | ||
372 | if test -f $(charset_alias); then \ | ||
373 | sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ | ||
374 | if grep '^# Packages using this file: $$' $(charset_tmp) \ | ||
375 | > /dev/null; then \ | ||
376 | rm -f $(charset_alias); \ | ||
377 | else \ | ||
378 | $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ | ||
379 | fi; \ | ||
380 | rm -f $(charset_tmp); \ | ||
381 | fi | ||
256 | 382 | ||
383 | charset.alias: config.charset | ||
384 | rm -f t-$@ $@ | ||
385 | $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ | ||
386 | mv t-$@ $@ | ||
257 | 387 | ||
258 | EXTRA_DIST += mbchar.c mbchar.h | 388 | SUFFIXES += .sed .sin |
389 | .sin.sed: | ||
390 | rm -f t-$@ $@ | ||
391 | sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ | ||
392 | mv t-$@ $@ | ||
259 | 393 | ||
260 | EXTRA_libgnu_a_SOURCES += mbchar.c | 394 | CLEANFILES += charset.alias ref-add.sed ref-del.sed |
261 | 395 | ||
262 | ## end gnulib module mbchar | 396 | EXTRA_DIST += config.charset ref-add.sin ref-del.sin |
263 | 397 | ||
264 | ## begin gnulib module mbuiter | 398 | ## end gnulib module localcharset |
265 | 399 | ||
266 | libgnu_a_SOURCES += mbuiter.h | 400 | ## begin gnulib module malloc |
267 | 401 | ||
268 | ## end gnulib module mbuiter | ||
269 | 402 | ||
270 | ## begin gnulib module memchr | 403 | EXTRA_DIST += malloc.c |
271 | 404 | ||
405 | EXTRA_libgnu_a_SOURCES += malloc.c | ||
272 | 406 | ||
273 | EXTRA_DIST += memchr.c | 407 | ## end gnulib module malloc |
274 | 408 | ||
275 | EXTRA_libgnu_a_SOURCES += memchr.c | 409 | ## begin gnulib module malloc-posix |
276 | 410 | ||
277 | ## end gnulib module memchr | ||
278 | 411 | ||
279 | ## begin gnulib module minmax | 412 | EXTRA_DIST += malloc.c |
280 | 413 | ||
281 | libgnu_a_SOURCES += minmax.h | 414 | EXTRA_libgnu_a_SOURCES += malloc.c |
282 | 415 | ||
283 | ## end gnulib module minmax | 416 | ## end gnulib module malloc-posix |
284 | 417 | ||
285 | ## begin gnulib module mountlist | 418 | ## begin gnulib module mountlist |
286 | 419 | ||
@@ -297,16 +430,21 @@ BUILT_SOURCES += $(NETINET_IN_H) | |||
297 | 430 | ||
298 | # We need the following in order to create <netinet/in.h> when the system | 431 | # We need the following in order to create <netinet/in.h> when the system |
299 | # doesn't have one. | 432 | # doesn't have one. |
300 | netinet/in.h: | 433 | netinet/in.h: netinet_in.in.h |
301 | test -d netinet || mkdir netinet | 434 | @MKDIR_P@ netinet |
302 | rm -f $@-t $@ | 435 | rm -f $@-t $@ |
303 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ | 436 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ |
304 | echo '#include <sys/socket.h>'; \ | 437 | sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \ |
438 | -e 's|@''NEXT_NETINET_IN_H''@|$(NEXT_NETINET_IN_H)|g' \ | ||
439 | -e 's|@''HAVE_NETINET_IN_H''@|$(HAVE_NETINET_IN_H)|g' \ | ||
440 | < $(srcdir)/netinet_in.in.h; \ | ||
305 | } > $@-t | 441 | } > $@-t |
306 | mv $@-t $@ | 442 | mv $@-t $@ |
307 | MOSTLYCLEANFILES += netinet/in.h netinet/in.h-t | 443 | MOSTLYCLEANFILES += netinet/in.h netinet/in.h-t |
308 | MOSTLYCLEANDIRS += netinet | 444 | MOSTLYCLEANDIRS += netinet |
309 | 445 | ||
446 | EXTRA_DIST += netinet_in.in.h | ||
447 | |||
310 | ## end gnulib module netinet_in | 448 | ## end gnulib module netinet_in |
311 | 449 | ||
312 | ## begin gnulib module regex | 450 | ## begin gnulib module regex |
@@ -345,7 +483,7 @@ libgnu_a_SOURCES += size_max.h | |||
345 | ## begin gnulib module snprintf | 483 | ## begin gnulib module snprintf |
346 | 484 | ||
347 | 485 | ||
348 | EXTRA_DIST += snprintf.c snprintf.h | 486 | EXTRA_DIST += snprintf.c |
349 | 487 | ||
350 | EXTRA_libgnu_a_SOURCES += snprintf.c | 488 | EXTRA_libgnu_a_SOURCES += snprintf.c |
351 | 489 | ||
@@ -357,15 +495,15 @@ BUILT_SOURCES += $(STDBOOL_H) | |||
357 | 495 | ||
358 | # We need the following in order to create <stdbool.h> when the system | 496 | # We need the following in order to create <stdbool.h> when the system |
359 | # doesn't have one that works. | 497 | # doesn't have one that works. |
360 | stdbool.h: stdbool_.h | 498 | stdbool.h: stdbool.in.h |
361 | rm -f $@-t $@ | 499 | rm -f $@-t $@ |
362 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ | 500 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ |
363 | sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool_.h; \ | 501 | sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ |
364 | } > $@-t | 502 | } > $@-t |
365 | mv $@-t $@ | 503 | mv $@-t $@ |
366 | MOSTLYCLEANFILES += stdbool.h stdbool.h-t | 504 | MOSTLYCLEANFILES += stdbool.h stdbool.h-t |
367 | 505 | ||
368 | EXTRA_DIST += stdbool_.h | 506 | EXTRA_DIST += stdbool.in.h |
369 | 507 | ||
370 | ## end gnulib module stdbool | 508 | ## end gnulib module stdbool |
371 | 509 | ||
@@ -375,11 +513,12 @@ BUILT_SOURCES += $(STDINT_H) | |||
375 | 513 | ||
376 | # We need the following in order to create <stdint.h> when the system | 514 | # We need the following in order to create <stdint.h> when the system |
377 | # doesn't have one that works with the given compiler. | 515 | # doesn't have one that works with the given compiler. |
378 | stdint.h: stdint_.h | 516 | stdint.h: stdint.in.h |
379 | rm -f $@-t $@ | 517 | rm -f $@-t $@ |
380 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ | 518 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ |
381 | sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ | 519 | sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ |
382 | -e 's|@''ABSOLUTE_STDINT_H''@|$(ABSOLUTE_STDINT_H)|g' \ | 520 | -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \ |
521 | -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ | ||
383 | -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ | 522 | -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ |
384 | -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ | 523 | -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ |
385 | -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ | 524 | -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ |
@@ -399,37 +538,210 @@ stdint.h: stdint_.h | |||
399 | -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ | 538 | -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ |
400 | -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ | 539 | -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ |
401 | -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ | 540 | -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ |
402 | < $(srcdir)/stdint_.h; \ | 541 | < $(srcdir)/stdint.in.h; \ |
403 | } > $@-t | 542 | } > $@-t |
404 | mv $@-t $@ | 543 | mv $@-t $@ |
405 | MOSTLYCLEANFILES += stdint.h stdint.h-t | 544 | MOSTLYCLEANFILES += stdint.h stdint.h-t |
406 | 545 | ||
407 | EXTRA_DIST += stdint_.h | 546 | EXTRA_DIST += stdint.in.h |
408 | 547 | ||
409 | ## end gnulib module stdint | 548 | ## end gnulib module stdint |
410 | 549 | ||
411 | ## begin gnulib module strcase | 550 | ## begin gnulib module stdio |
551 | |||
552 | BUILT_SOURCES += stdio.h | ||
553 | |||
554 | # We need the following in order to create <stdio.h> when the system | ||
555 | # doesn't have one that works with the given compiler. | ||
556 | stdio.h: stdio.in.h | ||
557 | rm -f $@-t $@ | ||
558 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ | ||
559 | sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \ | ||
560 | -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ | ||
561 | -e 's|@''GNULIB_FPRINTF_POSIX''@|$(GNULIB_FPRINTF_POSIX)|g' \ | ||
562 | -e 's|@''GNULIB_PRINTF_POSIX''@|$(GNULIB_PRINTF_POSIX)|g' \ | ||
563 | -e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \ | ||
564 | -e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|g' \ | ||
565 | -e 's|@''GNULIB_VFPRINTF_POSIX''@|$(GNULIB_VFPRINTF_POSIX)|g' \ | ||
566 | -e 's|@''GNULIB_VPRINTF_POSIX''@|$(GNULIB_VPRINTF_POSIX)|g' \ | ||
567 | -e 's|@''GNULIB_VSNPRINTF''@|$(GNULIB_VSNPRINTF)|g' \ | ||
568 | -e 's|@''GNULIB_VSPRINTF_POSIX''@|$(GNULIB_VSPRINTF_POSIX)|g' \ | ||
569 | -e 's|@''GNULIB_VASPRINTF''@|$(GNULIB_VASPRINTF)|g' \ | ||
570 | -e 's|@''GNULIB_FOPEN''@|$(GNULIB_FOPEN)|g' \ | ||
571 | -e 's|@''GNULIB_FREOPEN''@|$(GNULIB_FREOPEN)|g' \ | ||
572 | -e 's|@''GNULIB_FSEEK''@|$(GNULIB_FSEEK)|g' \ | ||
573 | -e 's|@''GNULIB_FSEEKO''@|$(GNULIB_FSEEKO)|g' \ | ||
574 | -e 's|@''GNULIB_FTELL''@|$(GNULIB_FTELL)|g' \ | ||
575 | -e 's|@''GNULIB_FTELLO''@|$(GNULIB_FTELLO)|g' \ | ||
576 | -e 's|@''GNULIB_FFLUSH''@|$(GNULIB_FFLUSH)|g' \ | ||
577 | -e 's|@''GNULIB_GETDELIM''@|$(GNULIB_GETDELIM)|g' \ | ||
578 | -e 's|@''GNULIB_GETLINE''@|$(GNULIB_GETLINE)|g' \ | ||
579 | -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ | ||
580 | -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ | ||
581 | -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ | ||
582 | -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ | ||
583 | -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ | ||
584 | -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ | ||
585 | -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ | ||
586 | -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ | ||
587 | -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ | ||
588 | -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ | ||
589 | -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ | ||
590 | -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ | ||
591 | -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ | ||
592 | -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ | ||
593 | -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ | ||
594 | -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ | ||
595 | -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ | ||
596 | -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ | ||
597 | -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ | ||
598 | -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ | ||
599 | -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ | ||
600 | -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ | ||
601 | -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ | ||
602 | < $(srcdir)/stdio.in.h; \ | ||
603 | } > $@-t | ||
604 | mv $@-t $@ | ||
605 | MOSTLYCLEANFILES += stdio.h stdio.h-t | ||
606 | |||
607 | EXTRA_DIST += stdio.in.h | ||
608 | |||
609 | ## end gnulib module stdio | ||
412 | 610 | ||
611 | ## begin gnulib module stdlib | ||
413 | 612 | ||
414 | EXTRA_DIST += strcase.h strcasecmp.c strncasecmp.c | 613 | BUILT_SOURCES += stdlib.h |
614 | |||
615 | # We need the following in order to create <stdlib.h> when the system | ||
616 | # doesn't have one that works with the given compiler. | ||
617 | stdlib.h: stdlib.in.h | ||
618 | rm -f $@-t $@ | ||
619 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ | ||
620 | sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \ | ||
621 | -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ | ||
622 | -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \ | ||
623 | -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \ | ||
624 | -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \ | ||
625 | -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \ | ||
626 | -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \ | ||
627 | -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \ | ||
628 | -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \ | ||
629 | -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \ | ||
630 | -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \ | ||
631 | -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \ | ||
632 | -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ | ||
633 | -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \ | ||
634 | -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ | ||
635 | -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \ | ||
636 | -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \ | ||
637 | -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \ | ||
638 | -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ | ||
639 | -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ | ||
640 | -e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \ | ||
641 | -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ | ||
642 | < $(srcdir)/stdlib.in.h; \ | ||
643 | } > $@-t | ||
644 | mv $@-t $@ | ||
645 | MOSTLYCLEANFILES += stdlib.h stdlib.h-t | ||
415 | 646 | ||
416 | EXTRA_libgnu_a_SOURCES += strcasecmp.c strncasecmp.c | 647 | EXTRA_DIST += stdlib.in.h |
417 | 648 | ||
418 | ## end gnulib module strcase | 649 | ## end gnulib module stdlib |
419 | 650 | ||
420 | ## begin gnulib module strdup | 651 | ## begin gnulib module strdup |
421 | 652 | ||
422 | 653 | ||
423 | EXTRA_DIST += strdup.c strdup.h | 654 | EXTRA_DIST += strdup.c |
424 | 655 | ||
425 | EXTRA_libgnu_a_SOURCES += strdup.c | 656 | EXTRA_libgnu_a_SOURCES += strdup.c |
426 | 657 | ||
427 | ## end gnulib module strdup | 658 | ## end gnulib module strdup |
428 | 659 | ||
660 | ## begin gnulib module strerror | ||
661 | |||
662 | |||
663 | EXTRA_DIST += strerror.c | ||
664 | |||
665 | EXTRA_libgnu_a_SOURCES += strerror.c | ||
666 | |||
667 | ## end gnulib module strerror | ||
668 | |||
669 | ## begin gnulib module string | ||
670 | |||
671 | BUILT_SOURCES += string.h | ||
672 | |||
673 | # We need the following in order to create <string.h> when the system | ||
674 | # doesn't have one that works with the given compiler. | ||
675 | string.h: string.in.h | ||
676 | rm -f $@-t $@ | ||
677 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ | ||
678 | sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \ | ||
679 | -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ | ||
680 | -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \ | ||
681 | -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \ | ||
682 | -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \ | ||
683 | -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \ | ||
684 | -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \ | ||
685 | -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \ | ||
686 | -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \ | ||
687 | -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \ | ||
688 | -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \ | ||
689 | -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \ | ||
690 | -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \ | ||
691 | -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \ | ||
692 | -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \ | ||
693 | -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \ | ||
694 | -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \ | ||
695 | -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \ | ||
696 | -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \ | ||
697 | -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \ | ||
698 | -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \ | ||
699 | -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \ | ||
700 | -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \ | ||
701 | -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \ | ||
702 | -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \ | ||
703 | -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \ | ||
704 | -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \ | ||
705 | -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \ | ||
706 | -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \ | ||
707 | -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \ | ||
708 | -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \ | ||
709 | -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \ | ||
710 | -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ | ||
711 | -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ | ||
712 | -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ | ||
713 | -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ | ||
714 | -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ | ||
715 | -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ | ||
716 | -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ | ||
717 | -e 's|@''HAVE_STRNDUP''@|$(HAVE_STRNDUP)|g' \ | ||
718 | -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ | ||
719 | -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ | ||
720 | -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ | ||
721 | -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ | ||
722 | -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ | ||
723 | -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ | ||
724 | -e 's|@''HAVE_DECL_STRERROR''@|$(HAVE_DECL_STRERROR)|g' \ | ||
725 | -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ | ||
726 | -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ | ||
727 | -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ | ||
728 | -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ | ||
729 | -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ | ||
730 | -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ | ||
731 | -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ | ||
732 | < $(srcdir)/string.in.h; \ | ||
733 | } > $@-t | ||
734 | mv $@-t $@ | ||
735 | MOSTLYCLEANFILES += string.h string.h-t | ||
736 | |||
737 | EXTRA_DIST += string.in.h | ||
738 | |||
739 | ## end gnulib module string | ||
740 | |||
429 | ## begin gnulib module strndup | 741 | ## begin gnulib module strndup |
430 | 742 | ||
431 | 743 | ||
432 | EXTRA_DIST += strndup.c strndup.h | 744 | EXTRA_DIST += strndup.c |
433 | 745 | ||
434 | EXTRA_libgnu_a_SOURCES += strndup.c | 746 | EXTRA_libgnu_a_SOURCES += strndup.c |
435 | 747 | ||
@@ -438,53 +750,79 @@ EXTRA_libgnu_a_SOURCES += strndup.c | |||
438 | ## begin gnulib module strnlen | 750 | ## begin gnulib module strnlen |
439 | 751 | ||
440 | 752 | ||
441 | EXTRA_DIST += strnlen.c strnlen.h | 753 | EXTRA_DIST += strnlen.c |
442 | 754 | ||
443 | EXTRA_libgnu_a_SOURCES += strnlen.c | 755 | EXTRA_libgnu_a_SOURCES += strnlen.c |
444 | 756 | ||
445 | ## end gnulib module strnlen | 757 | ## end gnulib module strnlen |
446 | 758 | ||
447 | ## begin gnulib module strnlen1 | ||
448 | |||
449 | libgnu_a_SOURCES += strnlen1.h strnlen1.c | ||
450 | |||
451 | ## end gnulib module strnlen1 | ||
452 | |||
453 | ## begin gnulib module sys_socket | 759 | ## begin gnulib module sys_socket |
454 | 760 | ||
455 | BUILT_SOURCES += $(SYS_SOCKET_H) | 761 | BUILT_SOURCES += $(SYS_SOCKET_H) |
456 | 762 | ||
457 | # We need the following in order to create <sys/socket.h> when the system | 763 | # We need the following in order to create <sys/socket.h> when the system |
458 | # doesn't have one that works with the given compiler. | 764 | # doesn't have one that works with the given compiler. |
459 | sys/socket.h: socket_.h | 765 | sys/socket.h: sys_socket.in.h |
460 | @MKDIR_P@ sys | 766 | @MKDIR_P@ sys |
461 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ | 767 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ |
462 | cat $(srcdir)/socket_.h; \ | 768 | sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \ |
769 | -e 's|@''NEXT_SYS_SOCKET_H''@|$(NEXT_SYS_SOCKET_H)|g' \ | ||
770 | -e 's|@''HAVE_SYS_SOCKET_H''@|$(HAVE_SYS_SOCKET_H)|g' \ | ||
771 | -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ | ||
772 | -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \ | ||
773 | < $(srcdir)/sys_socket.in.h; \ | ||
463 | } > $@-t | 774 | } > $@-t |
464 | mv -f $@-t $@ | 775 | mv -f $@-t $@ |
465 | MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t | 776 | MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t |
466 | MOSTLYCLEANDIRS += sys | 777 | MOSTLYCLEANDIRS += sys |
467 | 778 | ||
468 | EXTRA_DIST += socket_.h | 779 | EXTRA_DIST += sys_socket.in.h |
469 | 780 | ||
470 | ## end gnulib module sys_socket | 781 | ## end gnulib module sys_socket |
471 | 782 | ||
472 | ## begin gnulib module unistd | 783 | ## begin gnulib module unistd |
473 | 784 | ||
474 | BUILT_SOURCES += $(UNISTD_H) | 785 | BUILT_SOURCES += unistd.h |
475 | 786 | ||
476 | # We need the following in order to create an empty placeholder for | 787 | # We need the following in order to create an empty placeholder for |
477 | # <unistd.h> when the system doesn't have one. | 788 | # <unistd.h> when the system doesn't have one. |
478 | unistd.h: unistd_.h | 789 | unistd.h: unistd.in.h |
479 | rm -f $@-t $@ | 790 | rm -f $@-t $@ |
480 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ | 791 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ |
481 | sed -e 's|@''ABSOLUTE_UNISTD_H''@|$(ABSOLUTE_UNISTD_H)|g' \ | 792 | sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ |
482 | < $(srcdir)/unistd_.h; \ | 793 | -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \ |
794 | -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ | ||
795 | -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \ | ||
796 | -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \ | ||
797 | -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \ | ||
798 | -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \ | ||
799 | -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \ | ||
800 | -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \ | ||
801 | -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \ | ||
802 | -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \ | ||
803 | -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \ | ||
804 | -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \ | ||
805 | -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \ | ||
806 | -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ | ||
807 | -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ | ||
808 | -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ | ||
809 | -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ | ||
810 | -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ | ||
811 | -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ | ||
812 | -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ | ||
813 | -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | ||
814 | -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ | ||
815 | -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \ | ||
816 | -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ | ||
817 | -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ | ||
818 | -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ | ||
819 | -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ | ||
820 | < $(srcdir)/unistd.in.h; \ | ||
483 | } > $@-t | 821 | } > $@-t |
484 | mv $@-t $@ | 822 | mv $@-t $@ |
485 | MOSTLYCLEANFILES += unistd.h unistd.h-t | 823 | MOSTLYCLEANFILES += unistd.h unistd.h-t |
486 | 824 | ||
487 | EXTRA_DIST += unistd_.h | 825 | EXTRA_DIST += unistd.in.h |
488 | 826 | ||
489 | ## end gnulib module unistd | 827 | ## end gnulib module unistd |
490 | 828 | ||
@@ -500,7 +838,7 @@ EXTRA_libgnu_a_SOURCES += dup-safer.c fd-safer.c pipe-safer.c | |||
500 | ## begin gnulib module vasnprintf | 838 | ## begin gnulib module vasnprintf |
501 | 839 | ||
502 | 840 | ||
503 | EXTRA_DIST += asnprintf.c printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h | 841 | EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h |
504 | 842 | ||
505 | EXTRA_libgnu_a_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c | 843 | EXTRA_libgnu_a_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c |
506 | 844 | ||
@@ -509,7 +847,7 @@ EXTRA_libgnu_a_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c | |||
509 | ## begin gnulib module vasprintf | 847 | ## begin gnulib module vasprintf |
510 | 848 | ||
511 | 849 | ||
512 | EXTRA_DIST += asprintf.c vasprintf.c vasprintf.h | 850 | EXTRA_DIST += asprintf.c vasprintf.c |
513 | 851 | ||
514 | EXTRA_libgnu_a_SOURCES += asprintf.c vasprintf.c | 852 | EXTRA_libgnu_a_SOURCES += asprintf.c vasprintf.c |
515 | 853 | ||
@@ -518,7 +856,7 @@ EXTRA_libgnu_a_SOURCES += asprintf.c vasprintf.c | |||
518 | ## begin gnulib module vsnprintf | 856 | ## begin gnulib module vsnprintf |
519 | 857 | ||
520 | 858 | ||
521 | EXTRA_DIST += vsnprintf.c vsnprintf.h | 859 | EXTRA_DIST += vsnprintf.c |
522 | 860 | ||
523 | EXTRA_libgnu_a_SOURCES += vsnprintf.c | 861 | EXTRA_libgnu_a_SOURCES += vsnprintf.c |
524 | 862 | ||
@@ -530,16 +868,22 @@ BUILT_SOURCES += $(WCHAR_H) | |||
530 | 868 | ||
531 | # We need the following in order to create <wchar.h> when the system | 869 | # We need the following in order to create <wchar.h> when the system |
532 | # version does not work standalone. | 870 | # version does not work standalone. |
533 | wchar.h: wchar_.h | 871 | wchar.h: wchar.in.h |
534 | rm -f $@-t $@ | 872 | rm -f $@-t $@ |
535 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ | 873 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ |
536 | sed -e 's|@''ABSOLUTE_WCHAR_H''@|$(ABSOLUTE_WCHAR_H)|g' \ | 874 | sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \ |
537 | < $(srcdir)/wchar_.h; \ | 875 | -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ |
876 | -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ | ||
877 | -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \ | ||
878 | -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ | ||
879 | -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ | ||
880 | -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ | ||
881 | < $(srcdir)/wchar.in.h; \ | ||
538 | } > $@-t | 882 | } > $@-t |
539 | mv $@-t $@ | 883 | mv $@-t $@ |
540 | MOSTLYCLEANFILES += wchar.h wchar.h-t | 884 | MOSTLYCLEANFILES += wchar.h wchar.h-t |
541 | 885 | ||
542 | EXTRA_DIST += wchar_.h | 886 | EXTRA_DIST += wchar.in.h |
543 | 887 | ||
544 | ## end gnulib module wchar | 888 | ## end gnulib module wchar |
545 | 889 | ||
@@ -549,28 +893,23 @@ BUILT_SOURCES += $(WCTYPE_H) | |||
549 | 893 | ||
550 | # We need the following in order to create <wctype.h> when the system | 894 | # We need the following in order to create <wctype.h> when the system |
551 | # doesn't have one that works with the given compiler. | 895 | # doesn't have one that works with the given compiler. |
552 | wctype.h: wctype_.h | 896 | wctype.h: wctype.in.h |
553 | rm -f $@-t $@ | 897 | rm -f $@-t $@ |
554 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ | 898 | { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ |
555 | sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ | 899 | sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ |
556 | -e 's|@''ABSOLUTE_WCTYPE_H''@|$(ABSOLUTE_WCTYPE_H)|g' \ | 900 | -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \ |
557 | -e 's/@''HAVE_WCTYPE_CTMP_BUG''@/$(HAVE_WCTYPE_CTMP_BUG)/g' \ | 901 | -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ |
902 | -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ | ||
558 | -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ | 903 | -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ |
559 | < $(srcdir)/wctype_.h; \ | 904 | < $(srcdir)/wctype.in.h; \ |
560 | } > $@-t | 905 | } > $@-t |
561 | mv $@-t $@ | 906 | mv $@-t $@ |
562 | MOSTLYCLEANFILES += wctype.h wctype.h-t | 907 | MOSTLYCLEANFILES += wctype.h wctype.h-t |
563 | 908 | ||
564 | EXTRA_DIST += wctype_.h | 909 | EXTRA_DIST += wctype.in.h |
565 | 910 | ||
566 | ## end gnulib module wctype | 911 | ## end gnulib module wctype |
567 | 912 | ||
568 | ## begin gnulib module wcwidth | ||
569 | |||
570 | libgnu_a_SOURCES += wcwidth.h | ||
571 | |||
572 | ## end gnulib module wcwidth | ||
573 | |||
574 | ## begin gnulib module xalloc | 913 | ## begin gnulib module xalloc |
575 | 914 | ||
576 | 915 | ||
@@ -604,4 +943,5 @@ mostlyclean-local: mostlyclean-generic | |||
604 | if test -n "$$dir" && test -d $$dir; then \ | 943 | if test -n "$$dir" && test -d $$dir; then \ |
605 | echo "rmdir $$dir"; rmdir $$dir; \ | 944 | echo "rmdir $$dir"; rmdir $$dir; \ |
606 | fi; \ | 945 | fi; \ |
607 | done | 946 | done; \ |
947 | : | ||
diff --git a/gl/alloca.c b/gl/alloca.c index 3a1f4e27..ff1cb7e9 100644 --- a/gl/alloca.c +++ b/gl/alloca.c | |||
@@ -486,4 +486,4 @@ i00afunc (long address) | |||
486 | # endif /* CRAY */ | 486 | # endif /* CRAY */ |
487 | 487 | ||
488 | # endif /* no alloca */ | 488 | # endif /* no alloca */ |
489 | #endif /* not GCC version 2 */ | 489 | #endif /* not GCC version 3 */ |
diff --git a/gl/alloca_.h b/gl/alloca.in.h index dd0b3e98..82782884 100644 --- a/gl/alloca_.h +++ b/gl/alloca.in.h | |||
@@ -1,11 +1,11 @@ | |||
1 | /* Memory allocation on the stack. | 1 | /* Memory allocation on the stack. |
2 | 2 | ||
3 | Copyright (C) 1995, 1999, 2001, 2002, 2003, 2004, 2006 Free Software | 3 | Copyright (C) 1995, 1999, 2001-2004, 2006-2007 Free Software |
4 | Foundation, Inc. | 4 | Foundation, Inc. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms of the GNU General Public License as published | 7 | under the terms of the GNU General Public License as published |
8 | by the Free Software Foundation; either version 2, or (at your option) | 8 | by the Free Software Foundation; either version 3, or (at your option) |
9 | any later version. | 9 | any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
@@ -20,8 +20,8 @@ | |||
20 | 20 | ||
21 | /* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H | 21 | /* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H |
22 | means there is a real alloca function. */ | 22 | means there is a real alloca function. */ |
23 | #ifndef _GNULIB_ALLOCA_H | 23 | #ifndef _GL_ALLOCA_H |
24 | # define _GNULIB_ALLOCA_H | 24 | #define _GL_ALLOCA_H |
25 | 25 | ||
26 | /* alloca (N) returns a pointer to N bytes of memory | 26 | /* alloca (N) returns a pointer to N bytes of memory |
27 | allocated on the stack, which will last until the function returns. | 27 | allocated on the stack, which will last until the function returns. |
@@ -51,4 +51,4 @@ void *alloca (size_t); | |||
51 | # endif | 51 | # endif |
52 | #endif | 52 | #endif |
53 | 53 | ||
54 | #endif /* _GNULIB_ALLOCA_H */ | 54 | #endif /* _GL_ALLOCA_H */ |
diff --git a/gl/asnprintf.c b/gl/asnprintf.c index 26c3988b..bf2abf3c 100644 --- a/gl/asnprintf.c +++ b/gl/asnprintf.c | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3, or (at your option) |
7 | any later version. | 7 | any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
diff --git a/gl/asprintf.c b/gl/asprintf.c index 29ac6cf2..0bbecf81 100644 --- a/gl/asprintf.c +++ b/gl/asprintf.c | |||
@@ -1,9 +1,9 @@ | |||
1 | /* Formatted output to strings. | 1 | /* Formatted output to strings. |
2 | Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. | 2 | Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3, or (at your option) |
7 | any later version. | 7 | any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
@@ -18,7 +18,11 @@ | |||
18 | #include <config.h> | 18 | #include <config.h> |
19 | 19 | ||
20 | /* Specification. */ | 20 | /* Specification. */ |
21 | #include "vasprintf.h" | 21 | #ifdef IN_LIBASPRINTF |
22 | # include "vasprintf.h" | ||
23 | #else | ||
24 | # include <stdio.h> | ||
25 | #endif | ||
22 | 26 | ||
23 | #include <stdarg.h> | 27 | #include <stdarg.h> |
24 | 28 | ||
diff --git a/gl/basename.c b/gl/basename.c index fbe17ff9..426ed40f 100644 --- a/gl/basename.c +++ b/gl/basename.c | |||
@@ -3,10 +3,10 @@ | |||
3 | Copyright (C) 1990, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006 Free | 3 | Copyright (C) 1990, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006 Free |
4 | Software Foundation, Inc. | 4 | Software Foundation, Inc. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3 of the License, or |
9 | any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -14,8 +14,7 @@ | |||
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License | 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, | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 18 | ||
20 | #include <config.h> | 19 | #include <config.h> |
21 | 20 | ||
diff --git a/gl/c-strtod.c b/gl/c-strtod.c index 2234ed0f..95624ccc 100644 --- a/gl/c-strtod.c +++ b/gl/c-strtod.c | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc. | 3 | Copyright (C) 2003, 2004, 2006 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | /* Written by Paul Eggert. */ | 18 | /* Written by Paul Eggert. */ |
20 | 19 | ||
diff --git a/gl/cloexec.c b/gl/cloexec.c index 6480006a..ff8105ba 100644 --- a/gl/cloexec.c +++ b/gl/cloexec.c | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 1991, 2004, 2005, 2006 Free Software Foundation, Inc. | 3 | Copyright (C) 1991, 2004, 2005, 2006 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
18 | 17 | ||
19 | The code is taken from glibc/manual/llio.texi */ | 18 | The code is taken from glibc/manual/llio.texi */ |
20 | 19 | ||
diff --git a/gl/config.charset b/gl/config.charset new file mode 100755 index 00000000..c2337887 --- /dev/null +++ b/gl/config.charset | |||
@@ -0,0 +1,649 @@ | |||
1 | #! /bin/sh | ||
2 | # Output a system dependent table of character encoding aliases. | ||
3 | # | ||
4 | # Copyright (C) 2000-2004, 2006-2007 Free Software 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 3, 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 along | ||
17 | # 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 | # The table consists of lines of the form | ||
21 | # ALIAS CANONICAL | ||
22 | # | ||
23 | # ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". | ||
24 | # ALIAS is compared in a case sensitive way. | ||
25 | # | ||
26 | # CANONICAL is the GNU canonical name for this character encoding. | ||
27 | # It must be an encoding supported by libiconv. Support by GNU libc is | ||
28 | # also desirable. CANONICAL is case insensitive. Usually an upper case | ||
29 | # MIME charset name is preferred. | ||
30 | # The current list of GNU canonical charset names is as follows. | ||
31 | # | ||
32 | # name MIME? used by which systems | ||
33 | # ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin | ||
34 | # ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin | ||
35 | # ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin | ||
36 | # ISO-8859-3 Y glibc solaris | ||
37 | # ISO-8859-4 Y osf solaris freebsd netbsd openbsd darwin | ||
38 | # ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin | ||
39 | # ISO-8859-6 Y glibc aix hpux solaris | ||
40 | # ISO-8859-7 Y glibc aix hpux irix osf solaris netbsd openbsd darwin | ||
41 | # ISO-8859-8 Y glibc aix hpux osf solaris | ||
42 | # ISO-8859-9 Y glibc aix hpux irix osf solaris darwin | ||
43 | # ISO-8859-13 glibc netbsd openbsd darwin | ||
44 | # ISO-8859-14 glibc | ||
45 | # ISO-8859-15 glibc aix osf solaris freebsd netbsd openbsd darwin | ||
46 | # KOI8-R Y glibc solaris freebsd netbsd openbsd darwin | ||
47 | # KOI8-U Y glibc freebsd netbsd openbsd darwin | ||
48 | # KOI8-T glibc | ||
49 | # CP437 dos | ||
50 | # CP775 dos | ||
51 | # CP850 aix osf dos | ||
52 | # CP852 dos | ||
53 | # CP855 dos | ||
54 | # CP856 aix | ||
55 | # CP857 dos | ||
56 | # CP861 dos | ||
57 | # CP862 dos | ||
58 | # CP864 dos | ||
59 | # CP865 dos | ||
60 | # CP866 freebsd netbsd openbsd darwin dos | ||
61 | # CP869 dos | ||
62 | # CP874 woe32 dos | ||
63 | # CP922 aix | ||
64 | # CP932 aix woe32 dos | ||
65 | # CP943 aix | ||
66 | # CP949 osf woe32 dos | ||
67 | # CP950 woe32 dos | ||
68 | # CP1046 aix | ||
69 | # CP1124 aix | ||
70 | # CP1125 dos | ||
71 | # CP1129 aix | ||
72 | # CP1250 woe32 | ||
73 | # CP1251 glibc solaris netbsd openbsd darwin woe32 | ||
74 | # CP1252 aix woe32 | ||
75 | # CP1253 woe32 | ||
76 | # CP1254 woe32 | ||
77 | # CP1255 glibc woe32 | ||
78 | # CP1256 woe32 | ||
79 | # CP1257 woe32 | ||
80 | # GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin | ||
81 | # EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin | ||
82 | # EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin | ||
83 | # EUC-TW glibc aix hpux irix osf solaris netbsd | ||
84 | # BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin | ||
85 | # BIG5-HKSCS glibc solaris | ||
86 | # GBK glibc aix osf solaris woe32 dos | ||
87 | # GB18030 glibc solaris netbsd | ||
88 | # SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin | ||
89 | # JOHAB glibc solaris woe32 | ||
90 | # TIS-620 glibc aix hpux osf solaris | ||
91 | # VISCII Y glibc | ||
92 | # TCVN5712-1 glibc | ||
93 | # GEORGIAN-PS glibc | ||
94 | # HP-ROMAN8 hpux | ||
95 | # HP-ARABIC8 hpux | ||
96 | # HP-GREEK8 hpux | ||
97 | # HP-HEBREW8 hpux | ||
98 | # HP-TURKISH8 hpux | ||
99 | # HP-KANA8 hpux | ||
100 | # DEC-KANJI osf | ||
101 | # DEC-HANYU osf | ||
102 | # UTF-8 Y glibc aix hpux osf solaris netbsd darwin | ||
103 | # | ||
104 | # Note: Names which are not marked as being a MIME name should not be used in | ||
105 | # Internet protocols for information interchange (mail, news, etc.). | ||
106 | # | ||
107 | # Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications | ||
108 | # must understand both names and treat them as equivalent. | ||
109 | # | ||
110 | # The first argument passed to this file is the canonical host specification, | ||
111 | # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM | ||
112 | # or | ||
113 | # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM | ||
114 | |||
115 | host="$1" | ||
116 | os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` | ||
117 | echo "# This file contains a table of character encoding aliases," | ||
118 | echo "# suitable for operating system '${os}'." | ||
119 | echo "# It was automatically generated from config.charset." | ||
120 | # List of references, updated during installation: | ||
121 | echo "# Packages using this file: " | ||
122 | case "$os" in | ||
123 | linux-gnulibc1*) | ||
124 | # Linux libc5 doesn't have nl_langinfo(CODESET); therefore | ||
125 | # localcharset.c falls back to using the full locale name | ||
126 | # from the environment variables. | ||
127 | echo "C ASCII" | ||
128 | echo "POSIX ASCII" | ||
129 | for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \ | ||
130 | en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \ | ||
131 | en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \ | ||
132 | es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \ | ||
133 | et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \ | ||
134 | fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \ | ||
135 | it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \ | ||
136 | sv_FI sv_SE; do | ||
137 | echo "$l ISO-8859-1" | ||
138 | echo "$l.iso-8859-1 ISO-8859-1" | ||
139 | echo "$l.iso-8859-15 ISO-8859-15" | ||
140 | echo "$l.iso-8859-15@euro ISO-8859-15" | ||
141 | echo "$l@euro ISO-8859-15" | ||
142 | echo "$l.cp-437 CP437" | ||
143 | echo "$l.cp-850 CP850" | ||
144 | echo "$l.cp-1252 CP1252" | ||
145 | echo "$l.cp-1252@euro CP1252" | ||
146 | #echo "$l.atari-st ATARI-ST" # not a commonly used encoding | ||
147 | echo "$l.utf-8 UTF-8" | ||
148 | echo "$l.utf-8@euro UTF-8" | ||
149 | done | ||
150 | for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \ | ||
151 | sl_SI sr sr_CS sr_YU; do | ||
152 | echo "$l ISO-8859-2" | ||
153 | echo "$l.iso-8859-2 ISO-8859-2" | ||
154 | echo "$l.cp-852 CP852" | ||
155 | echo "$l.cp-1250 CP1250" | ||
156 | echo "$l.utf-8 UTF-8" | ||
157 | done | ||
158 | for l in mk mk_MK ru ru_RU; do | ||
159 | echo "$l ISO-8859-5" | ||
160 | echo "$l.iso-8859-5 ISO-8859-5" | ||
161 | echo "$l.koi8-r KOI8-R" | ||
162 | echo "$l.cp-866 CP866" | ||
163 | echo "$l.cp-1251 CP1251" | ||
164 | echo "$l.utf-8 UTF-8" | ||
165 | done | ||
166 | for l in ar ar_SA; do | ||
167 | echo "$l ISO-8859-6" | ||
168 | echo "$l.iso-8859-6 ISO-8859-6" | ||
169 | echo "$l.cp-864 CP864" | ||
170 | #echo "$l.cp-868 CP868" # not a commonly used encoding | ||
171 | echo "$l.cp-1256 CP1256" | ||
172 | echo "$l.utf-8 UTF-8" | ||
173 | done | ||
174 | for l in el el_GR gr gr_GR; do | ||
175 | echo "$l ISO-8859-7" | ||
176 | echo "$l.iso-8859-7 ISO-8859-7" | ||
177 | echo "$l.cp-869 CP869" | ||
178 | echo "$l.cp-1253 CP1253" | ||
179 | echo "$l.cp-1253@euro CP1253" | ||
180 | echo "$l.utf-8 UTF-8" | ||
181 | echo "$l.utf-8@euro UTF-8" | ||
182 | done | ||
183 | for l in he he_IL iw iw_IL; do | ||
184 | echo "$l ISO-8859-8" | ||
185 | echo "$l.iso-8859-8 ISO-8859-8" | ||
186 | echo "$l.cp-862 CP862" | ||
187 | echo "$l.cp-1255 CP1255" | ||
188 | echo "$l.utf-8 UTF-8" | ||
189 | done | ||
190 | for l in tr tr_TR; do | ||
191 | echo "$l ISO-8859-9" | ||
192 | echo "$l.iso-8859-9 ISO-8859-9" | ||
193 | echo "$l.cp-857 CP857" | ||
194 | echo "$l.cp-1254 CP1254" | ||
195 | echo "$l.utf-8 UTF-8" | ||
196 | done | ||
197 | for l in lt lt_LT lv lv_LV; do | ||
198 | #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name | ||
199 | echo "$l ISO-8859-13" | ||
200 | done | ||
201 | for l in ru_UA uk uk_UA; do | ||
202 | echo "$l KOI8-U" | ||
203 | done | ||
204 | for l in zh zh_CN; do | ||
205 | #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name | ||
206 | echo "$l GB2312" | ||
207 | done | ||
208 | for l in ja ja_JP ja_JP.EUC; do | ||
209 | echo "$l EUC-JP" | ||
210 | done | ||
211 | for l in ko ko_KR; do | ||
212 | echo "$l EUC-KR" | ||
213 | done | ||
214 | for l in th th_TH; do | ||
215 | echo "$l TIS-620" | ||
216 | done | ||
217 | for l in fa fa_IR; do | ||
218 | #echo "$l ISIRI-3342" # a broken encoding | ||
219 | echo "$l.utf-8 UTF-8" | ||
220 | done | ||
221 | ;; | ||
222 | linux* | *-gnu*) | ||
223 | # With glibc-2.1 or newer, we don't need any canonicalization, | ||
224 | # because glibc has iconv and both glibc and libiconv support all | ||
225 | # GNU canonical names directly. Therefore, the Makefile does not | ||
226 | # need to install the alias file at all. | ||
227 | # The following applies only to glibc-2.0.x and older libcs. | ||
228 | echo "ISO_646.IRV:1983 ASCII" | ||
229 | ;; | ||
230 | aix*) | ||
231 | echo "ISO8859-1 ISO-8859-1" | ||
232 | echo "ISO8859-2 ISO-8859-2" | ||
233 | echo "ISO8859-5 ISO-8859-5" | ||
234 | echo "ISO8859-6 ISO-8859-6" | ||
235 | echo "ISO8859-7 ISO-8859-7" | ||
236 | echo "ISO8859-8 ISO-8859-8" | ||
237 | echo "ISO8859-9 ISO-8859-9" | ||
238 | echo "ISO8859-15 ISO-8859-15" | ||
239 | echo "IBM-850 CP850" | ||
240 | echo "IBM-856 CP856" | ||
241 | echo "IBM-921 ISO-8859-13" | ||
242 | echo "IBM-922 CP922" | ||
243 | echo "IBM-932 CP932" | ||
244 | echo "IBM-943 CP943" | ||
245 | echo "IBM-1046 CP1046" | ||
246 | echo "IBM-1124 CP1124" | ||
247 | echo "IBM-1129 CP1129" | ||
248 | echo "IBM-1252 CP1252" | ||
249 | echo "IBM-eucCN GB2312" | ||
250 | echo "IBM-eucJP EUC-JP" | ||
251 | echo "IBM-eucKR EUC-KR" | ||
252 | echo "IBM-eucTW EUC-TW" | ||
253 | echo "big5 BIG5" | ||
254 | echo "GBK GBK" | ||
255 | echo "TIS-620 TIS-620" | ||
256 | echo "UTF-8 UTF-8" | ||
257 | ;; | ||
258 | hpux*) | ||
259 | echo "iso88591 ISO-8859-1" | ||
260 | echo "iso88592 ISO-8859-2" | ||
261 | echo "iso88595 ISO-8859-5" | ||
262 | echo "iso88596 ISO-8859-6" | ||
263 | echo "iso88597 ISO-8859-7" | ||
264 | echo "iso88598 ISO-8859-8" | ||
265 | echo "iso88599 ISO-8859-9" | ||
266 | echo "iso885915 ISO-8859-15" | ||
267 | echo "roman8 HP-ROMAN8" | ||
268 | echo "arabic8 HP-ARABIC8" | ||
269 | echo "greek8 HP-GREEK8" | ||
270 | echo "hebrew8 HP-HEBREW8" | ||
271 | echo "turkish8 HP-TURKISH8" | ||
272 | echo "kana8 HP-KANA8" | ||
273 | echo "tis620 TIS-620" | ||
274 | echo "big5 BIG5" | ||
275 | echo "eucJP EUC-JP" | ||
276 | echo "eucKR EUC-KR" | ||
277 | echo "eucTW EUC-TW" | ||
278 | echo "hp15CN GB2312" | ||
279 | #echo "ccdc ?" # what is this? | ||
280 | echo "SJIS SHIFT_JIS" | ||
281 | echo "utf8 UTF-8" | ||
282 | ;; | ||
283 | irix*) | ||
284 | echo "ISO8859-1 ISO-8859-1" | ||
285 | echo "ISO8859-2 ISO-8859-2" | ||
286 | echo "ISO8859-5 ISO-8859-5" | ||
287 | echo "ISO8859-7 ISO-8859-7" | ||
288 | echo "ISO8859-9 ISO-8859-9" | ||
289 | echo "eucCN GB2312" | ||
290 | echo "eucJP EUC-JP" | ||
291 | echo "eucKR EUC-KR" | ||
292 | echo "eucTW EUC-TW" | ||
293 | ;; | ||
294 | osf*) | ||
295 | echo "ISO8859-1 ISO-8859-1" | ||
296 | echo "ISO8859-2 ISO-8859-2" | ||
297 | echo "ISO8859-4 ISO-8859-4" | ||
298 | echo "ISO8859-5 ISO-8859-5" | ||
299 | echo "ISO8859-7 ISO-8859-7" | ||
300 | echo "ISO8859-8 ISO-8859-8" | ||
301 | echo "ISO8859-9 ISO-8859-9" | ||
302 | echo "ISO8859-15 ISO-8859-15" | ||
303 | echo "cp850 CP850" | ||
304 | echo "big5 BIG5" | ||
305 | echo "dechanyu DEC-HANYU" | ||
306 | echo "dechanzi GB2312" | ||
307 | echo "deckanji DEC-KANJI" | ||
308 | echo "deckorean EUC-KR" | ||
309 | echo "eucJP EUC-JP" | ||
310 | echo "eucKR EUC-KR" | ||
311 | echo "eucTW EUC-TW" | ||
312 | echo "GBK GBK" | ||
313 | echo "KSC5601 CP949" | ||
314 | echo "sdeckanji EUC-JP" | ||
315 | echo "SJIS SHIFT_JIS" | ||
316 | echo "TACTIS TIS-620" | ||
317 | echo "UTF-8 UTF-8" | ||
318 | ;; | ||
319 | solaris*) | ||
320 | echo "646 ASCII" | ||
321 | echo "ISO8859-1 ISO-8859-1" | ||
322 | echo "ISO8859-2 ISO-8859-2" | ||
323 | echo "ISO8859-3 ISO-8859-3" | ||
324 | echo "ISO8859-4 ISO-8859-4" | ||
325 | echo "ISO8859-5 ISO-8859-5" | ||
326 | echo "ISO8859-6 ISO-8859-6" | ||
327 | echo "ISO8859-7 ISO-8859-7" | ||
328 | echo "ISO8859-8 ISO-8859-8" | ||
329 | echo "ISO8859-9 ISO-8859-9" | ||
330 | echo "ISO8859-15 ISO-8859-15" | ||
331 | echo "koi8-r KOI8-R" | ||
332 | echo "ansi-1251 CP1251" | ||
333 | echo "BIG5 BIG5" | ||
334 | echo "Big5-HKSCS BIG5-HKSCS" | ||
335 | echo "gb2312 GB2312" | ||
336 | echo "GBK GBK" | ||
337 | echo "GB18030 GB18030" | ||
338 | echo "cns11643 EUC-TW" | ||
339 | echo "5601 EUC-KR" | ||
340 | echo "ko_KR.johap92 JOHAB" | ||
341 | echo "eucJP EUC-JP" | ||
342 | echo "PCK SHIFT_JIS" | ||
343 | echo "TIS620.2533 TIS-620" | ||
344 | #echo "sun_eu_greek ?" # what is this? | ||
345 | echo "UTF-8 UTF-8" | ||
346 | ;; | ||
347 | freebsd* | os2*) | ||
348 | # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore | ||
349 | # localcharset.c falls back to using the full locale name | ||
350 | # from the environment variables. | ||
351 | # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just | ||
352 | # reuse FreeBSD's locale data for OS/2. | ||
353 | echo "C ASCII" | ||
354 | echo "US-ASCII ASCII" | ||
355 | for l in la_LN lt_LN; do | ||
356 | echo "$l.ASCII ASCII" | ||
357 | done | ||
358 | for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ | ||
359 | fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ | ||
360 | lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do | ||
361 | echo "$l.ISO_8859-1 ISO-8859-1" | ||
362 | echo "$l.DIS_8859-15 ISO-8859-15" | ||
363 | done | ||
364 | for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do | ||
365 | echo "$l.ISO_8859-2 ISO-8859-2" | ||
366 | done | ||
367 | for l in la_LN lt_LT; do | ||
368 | echo "$l.ISO_8859-4 ISO-8859-4" | ||
369 | done | ||
370 | for l in ru_RU ru_SU; do | ||
371 | echo "$l.KOI8-R KOI8-R" | ||
372 | echo "$l.ISO_8859-5 ISO-8859-5" | ||
373 | echo "$l.CP866 CP866" | ||
374 | done | ||
375 | echo "uk_UA.KOI8-U KOI8-U" | ||
376 | echo "zh_TW.BIG5 BIG5" | ||
377 | echo "zh_TW.Big5 BIG5" | ||
378 | echo "zh_CN.EUC GB2312" | ||
379 | echo "ja_JP.EUC EUC-JP" | ||
380 | echo "ja_JP.SJIS SHIFT_JIS" | ||
381 | echo "ja_JP.Shift_JIS SHIFT_JIS" | ||
382 | echo "ko_KR.EUC EUC-KR" | ||
383 | ;; | ||
384 | netbsd*) | ||
385 | echo "646 ASCII" | ||
386 | echo "ISO8859-1 ISO-8859-1" | ||
387 | echo "ISO8859-2 ISO-8859-2" | ||
388 | echo "ISO8859-4 ISO-8859-4" | ||
389 | echo "ISO8859-5 ISO-8859-5" | ||
390 | echo "ISO8859-7 ISO-8859-7" | ||
391 | echo "ISO8859-13 ISO-8859-13" | ||
392 | echo "ISO8859-15 ISO-8859-15" | ||
393 | echo "eucCN GB2312" | ||
394 | echo "eucJP EUC-JP" | ||
395 | echo "eucKR EUC-KR" | ||
396 | echo "eucTW EUC-TW" | ||
397 | echo "BIG5 BIG5" | ||
398 | echo "SJIS SHIFT_JIS" | ||
399 | ;; | ||
400 | openbsd*) | ||
401 | echo "646 ASCII" | ||
402 | echo "ISO8859-1 ISO-8859-1" | ||
403 | echo "ISO8859-2 ISO-8859-2" | ||
404 | echo "ISO8859-4 ISO-8859-4" | ||
405 | echo "ISO8859-5 ISO-8859-5" | ||
406 | echo "ISO8859-7 ISO-8859-7" | ||
407 | echo "ISO8859-13 ISO-8859-13" | ||
408 | echo "ISO8859-15 ISO-8859-15" | ||
409 | ;; | ||
410 | darwin[56]*) | ||
411 | # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore | ||
412 | # localcharset.c falls back to using the full locale name | ||
413 | # from the environment variables. | ||
414 | echo "C ASCII" | ||
415 | for l in en_AU en_CA en_GB en_US la_LN; do | ||
416 | echo "$l.US-ASCII ASCII" | ||
417 | done | ||
418 | for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ | ||
419 | fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \ | ||
420 | nl_NL no_NO pt_PT sv_SE; do | ||
421 | echo "$l ISO-8859-1" | ||
422 | echo "$l.ISO8859-1 ISO-8859-1" | ||
423 | echo "$l.ISO8859-15 ISO-8859-15" | ||
424 | done | ||
425 | for l in la_LN; do | ||
426 | echo "$l.ISO8859-1 ISO-8859-1" | ||
427 | echo "$l.ISO8859-15 ISO-8859-15" | ||
428 | done | ||
429 | for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do | ||
430 | echo "$l.ISO8859-2 ISO-8859-2" | ||
431 | done | ||
432 | for l in la_LN lt_LT; do | ||
433 | echo "$l.ISO8859-4 ISO-8859-4" | ||
434 | done | ||
435 | for l in ru_RU; do | ||
436 | echo "$l.KOI8-R KOI8-R" | ||
437 | echo "$l.ISO8859-5 ISO-8859-5" | ||
438 | echo "$l.CP866 CP866" | ||
439 | done | ||
440 | for l in bg_BG; do | ||
441 | echo "$l.CP1251 CP1251" | ||
442 | done | ||
443 | echo "uk_UA.KOI8-U KOI8-U" | ||
444 | echo "zh_TW.BIG5 BIG5" | ||
445 | echo "zh_TW.Big5 BIG5" | ||
446 | echo "zh_CN.EUC GB2312" | ||
447 | echo "ja_JP.EUC EUC-JP" | ||
448 | echo "ja_JP.SJIS SHIFT_JIS" | ||
449 | echo "ko_KR.EUC EUC-KR" | ||
450 | ;; | ||
451 | darwin*) | ||
452 | # Darwin 7.5 has nl_langinfo(CODESET), but it is useless: | ||
453 | # - It returns the empty string when LANG is set to a locale of the | ||
454 | # form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 | ||
455 | # LC_CTYPE file. | ||
456 | # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by | ||
457 | # the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. | ||
458 | # - The documentation says: | ||
459 | # "... all code that calls BSD system routines should ensure | ||
460 | # that the const *char parameters of these routines are in UTF-8 | ||
461 | # encoding. All BSD system functions expect their string | ||
462 | # parameters to be in UTF-8 encoding and nothing else." | ||
463 | # It also says | ||
464 | # "An additional caveat is that string parameters for files, | ||
465 | # paths, and other file-system entities must be in canonical | ||
466 | # UTF-8. In a canonical UTF-8 Unicode string, all decomposable | ||
467 | # characters are decomposed ..." | ||
468 | # but this is not true: You can pass non-decomposed UTF-8 strings | ||
469 | # to file system functions, and it is the OS which will convert | ||
470 | # them to decomposed UTF-8 before accessing the file system. | ||
471 | # - The Apple Terminal application displays UTF-8 by default. | ||
472 | # - However, other applications are free to use different encodings: | ||
473 | # - xterm uses ISO-8859-1 by default. | ||
474 | # - TextEdit uses MacRoman by default. | ||
475 | # We prefer UTF-8 over decomposed UTF-8-MAC because one should | ||
476 | # minimize the use of decomposed Unicode. Unfortunately, through the | ||
477 | # Darwin file system, decomposed UTF-8 strings are leaked into user | ||
478 | # space nevertheless. | ||
479 | echo "* UTF-8" | ||
480 | ;; | ||
481 | beos*) | ||
482 | # BeOS has a single locale, and it has UTF-8 encoding. | ||
483 | echo "* UTF-8" | ||
484 | ;; | ||
485 | msdosdjgpp*) | ||
486 | # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore | ||
487 | # localcharset.c falls back to using the full locale name | ||
488 | # from the environment variables. | ||
489 | echo "#" | ||
490 | echo "# The encodings given here may not all be correct." | ||
491 | echo "# If you find that the encoding given for your language and" | ||
492 | echo "# country is not the one your DOS machine actually uses, just" | ||
493 | echo "# correct it in this file, and send a mail to" | ||
494 | echo "# Juan Manuel Guerrero <juan.guerrero@gmx.de>" | ||
495 | echo "# and Bruno Haible <bruno@clisp.org>." | ||
496 | echo "#" | ||
497 | echo "C ASCII" | ||
498 | # ISO-8859-1 languages | ||
499 | echo "ca CP850" | ||
500 | echo "ca_ES CP850" | ||
501 | echo "da CP865" # not CP850 ?? | ||
502 | echo "da_DK CP865" # not CP850 ?? | ||
503 | echo "de CP850" | ||
504 | echo "de_AT CP850" | ||
505 | echo "de_CH CP850" | ||
506 | echo "de_DE CP850" | ||
507 | echo "en CP850" | ||
508 | echo "en_AU CP850" # not CP437 ?? | ||
509 | echo "en_CA CP850" | ||
510 | echo "en_GB CP850" | ||
511 | echo "en_NZ CP437" | ||
512 | echo "en_US CP437" | ||
513 | echo "en_ZA CP850" # not CP437 ?? | ||
514 | echo "es CP850" | ||
515 | echo "es_AR CP850" | ||
516 | echo "es_BO CP850" | ||
517 | echo "es_CL CP850" | ||
518 | echo "es_CO CP850" | ||
519 | echo "es_CR CP850" | ||
520 | echo "es_CU CP850" | ||
521 | echo "es_DO CP850" | ||
522 | echo "es_EC CP850" | ||
523 | echo "es_ES CP850" | ||
524 | echo "es_GT CP850" | ||
525 | echo "es_HN CP850" | ||
526 | echo "es_MX CP850" | ||
527 | echo "es_NI CP850" | ||
528 | echo "es_PA CP850" | ||
529 | echo "es_PY CP850" | ||
530 | echo "es_PE CP850" | ||
531 | echo "es_SV CP850" | ||
532 | echo "es_UY CP850" | ||
533 | echo "es_VE CP850" | ||
534 | echo "et CP850" | ||
535 | echo "et_EE CP850" | ||
536 | echo "eu CP850" | ||
537 | echo "eu_ES CP850" | ||
538 | echo "fi CP850" | ||
539 | echo "fi_FI CP850" | ||
540 | echo "fr CP850" | ||
541 | echo "fr_BE CP850" | ||
542 | echo "fr_CA CP850" | ||
543 | echo "fr_CH CP850" | ||
544 | echo "fr_FR CP850" | ||
545 | echo "ga CP850" | ||
546 | echo "ga_IE CP850" | ||
547 | echo "gd CP850" | ||
548 | echo "gd_GB CP850" | ||
549 | echo "gl CP850" | ||
550 | echo "gl_ES CP850" | ||
551 | echo "id CP850" # not CP437 ?? | ||
552 | echo "id_ID CP850" # not CP437 ?? | ||
553 | echo "is CP861" # not CP850 ?? | ||
554 | echo "is_IS CP861" # not CP850 ?? | ||
555 | echo "it CP850" | ||
556 | echo "it_CH CP850" | ||
557 | echo "it_IT CP850" | ||
558 | echo "lt CP775" | ||
559 | echo "lt_LT CP775" | ||
560 | echo "lv CP775" | ||
561 | echo "lv_LV CP775" | ||
562 | echo "nb CP865" # not CP850 ?? | ||
563 | echo "nb_NO CP865" # not CP850 ?? | ||
564 | echo "nl CP850" | ||
565 | echo "nl_BE CP850" | ||
566 | echo "nl_NL CP850" | ||
567 | echo "nn CP865" # not CP850 ?? | ||
568 | echo "nn_NO CP865" # not CP850 ?? | ||
569 | echo "no CP865" # not CP850 ?? | ||
570 | echo "no_NO CP865" # not CP850 ?? | ||
571 | echo "pt CP850" | ||
572 | echo "pt_BR CP850" | ||
573 | echo "pt_PT CP850" | ||
574 | echo "sv CP850" | ||
575 | echo "sv_SE CP850" | ||
576 | # ISO-8859-2 languages | ||
577 | echo "cs CP852" | ||
578 | echo "cs_CZ CP852" | ||
579 | echo "hr CP852" | ||
580 | echo "hr_HR CP852" | ||
581 | echo "hu CP852" | ||
582 | echo "hu_HU CP852" | ||
583 | echo "pl CP852" | ||
584 | echo "pl_PL CP852" | ||
585 | echo "ro CP852" | ||
586 | echo "ro_RO CP852" | ||
587 | echo "sk CP852" | ||
588 | echo "sk_SK CP852" | ||
589 | echo "sl CP852" | ||
590 | echo "sl_SI CP852" | ||
591 | echo "sq CP852" | ||
592 | echo "sq_AL CP852" | ||
593 | echo "sr CP852" # CP852 or CP866 or CP855 ?? | ||
594 | echo "sr_CS CP852" # CP852 or CP866 or CP855 ?? | ||
595 | echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? | ||
596 | # ISO-8859-3 languages | ||
597 | echo "mt CP850" | ||
598 | echo "mt_MT CP850" | ||
599 | # ISO-8859-5 languages | ||
600 | echo "be CP866" | ||
601 | echo "be_BE CP866" | ||
602 | echo "bg CP866" # not CP855 ?? | ||
603 | echo "bg_BG CP866" # not CP855 ?? | ||
604 | echo "mk CP866" # not CP855 ?? | ||
605 | echo "mk_MK CP866" # not CP855 ?? | ||
606 | echo "ru CP866" | ||
607 | echo "ru_RU CP866" | ||
608 | echo "uk CP1125" | ||
609 | echo "uk_UA CP1125" | ||
610 | # ISO-8859-6 languages | ||
611 | echo "ar CP864" | ||
612 | echo "ar_AE CP864" | ||
613 | echo "ar_DZ CP864" | ||
614 | echo "ar_EG CP864" | ||
615 | echo "ar_IQ CP864" | ||
616 | echo "ar_IR CP864" | ||
617 | echo "ar_JO CP864" | ||
618 | echo "ar_KW CP864" | ||
619 | echo "ar_MA CP864" | ||
620 | echo "ar_OM CP864" | ||
621 | echo "ar_QA CP864" | ||
622 | echo "ar_SA CP864" | ||
623 | echo "ar_SY CP864" | ||
624 | # ISO-8859-7 languages | ||
625 | echo "el CP869" | ||
626 | echo "el_GR CP869" | ||
627 | # ISO-8859-8 languages | ||
628 | echo "he CP862" | ||
629 | echo "he_IL CP862" | ||
630 | # ISO-8859-9 languages | ||
631 | echo "tr CP857" | ||
632 | echo "tr_TR CP857" | ||
633 | # Japanese | ||
634 | echo "ja CP932" | ||
635 | echo "ja_JP CP932" | ||
636 | # Chinese | ||
637 | echo "zh_CN GBK" | ||
638 | echo "zh_TW CP950" # not CP938 ?? | ||
639 | # Korean | ||
640 | echo "kr CP949" # not CP934 ?? | ||
641 | echo "kr_KR CP949" # not CP934 ?? | ||
642 | # Thai | ||
643 | echo "th CP874" | ||
644 | echo "th_TH CP874" | ||
645 | # Other | ||
646 | echo "eo CP850" | ||
647 | echo "eo_EO CP850" | ||
648 | ;; | ||
649 | esac | ||
diff --git a/gl/creat-safer.c b/gl/creat-safer.c index f4a2e59d..fc314ba4 100644 --- a/gl/creat-safer.c +++ b/gl/creat-safer.c | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 2005, 2006 Free Software Foundation, Inc. | 3 | Copyright (C) 2005, 2006 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | /* Written by Jim Meyering. */ | 18 | /* Written by Jim Meyering. */ |
20 | 19 | ||
diff --git a/gl/dirname.c b/gl/dirname.c index 16552c64..c27e5b5d 100644 --- a/gl/dirname.c +++ b/gl/dirname.c | |||
@@ -3,10 +3,10 @@ | |||
3 | Copyright (C) 1990, 1998, 2000, 2001, 2003, 2004, 2005, 2006 Free Software | 3 | Copyright (C) 1990, 1998, 2000, 2001, 2003, 2004, 2005, 2006 Free Software |
4 | Foundation, Inc. | 4 | Foundation, Inc. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3 of the License, or |
9 | any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -14,8 +14,7 @@ | |||
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License | 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, | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 18 | ||
20 | #include <config.h> | 19 | #include <config.h> |
21 | 20 | ||
diff --git a/gl/dirname.h b/gl/dirname.h index 91e7ed33..f592350b 100644 --- a/gl/dirname.h +++ b/gl/dirname.h | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 1998, 2001, 2003-2006 Free Software Foundation, Inc. | 3 | Copyright (C) 1998, 2001, 2003-2006 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | #ifndef DIRNAME_H_ | 18 | #ifndef DIRNAME_H_ |
20 | # define DIRNAME_H_ 1 | 19 | # define DIRNAME_H_ 1 |
diff --git a/gl/dup-safer.c b/gl/dup-safer.c index 7b12b615..a6908511 100644 --- a/gl/dup-safer.c +++ b/gl/dup-safer.c | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 2001, 2004, 2005, 2006 Free Software Foundation, Inc. | 3 | Copyright (C) 2001, 2004, 2005, 2006 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | /* Written by Paul Eggert. */ | 18 | /* Written by Paul Eggert. */ |
20 | 19 | ||
@@ -1,20 +1,19 @@ | |||
1 | /* Error handler for noninteractive utilities | 1 | /* Error handler for noninteractive utilities |
2 | Copyright (C) 1990-1998, 2000-2005, 2006 Free Software Foundation, Inc. | 2 | Copyright (C) 1990-1998, 2000-2007 Free Software Foundation, Inc. |
3 | This file is part of the GNU C Library. | 3 | This file is part of the GNU C Library. |
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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along | 15 | You should have received a copy of the GNU General Public License |
16 | with this program; if not, write to the Free Software Foundation, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | /* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */ | 18 | /* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */ |
20 | 19 | ||
@@ -31,6 +30,7 @@ | |||
31 | 30 | ||
32 | #if !_LIBC && ENABLE_NLS | 31 | #if !_LIBC && ENABLE_NLS |
33 | # include "gettext.h" | 32 | # include "gettext.h" |
33 | # define _(msgid) gettext (msgid) | ||
34 | #endif | 34 | #endif |
35 | 35 | ||
36 | #ifdef _LIBC | 36 | #ifdef _LIBC |
@@ -1,27 +1,26 @@ | |||
1 | /* Declaration for error-reporting function | 1 | /* Declaration for error-reporting function |
2 | Copyright (C) 1995, 1996, 1997, 2003, 2006 Free Software Foundation, Inc. | 2 | Copyright (C) 1995, 1996, 1997, 2003, 2006, 2008 Free Software Foundation, Inc. |
3 | This file is part of the GNU C Library. | 3 | This file is part of the GNU C Library. |
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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along | 15 | You should have received a copy of the GNU General Public License |
16 | with this program; if not, write to the Free Software Foundation, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | #ifndef _ERROR_H | 18 | #ifndef _ERROR_H |
20 | #define _ERROR_H 1 | 19 | #define _ERROR_H 1 |
21 | 20 | ||
22 | #ifndef __attribute__ | 21 | #ifndef __attribute__ |
23 | /* This feature is available in gcc versions 2.5 and later. */ | 22 | /* This feature is available in gcc versions 2.5 and later. */ |
24 | # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__ | 23 | # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) |
25 | # define __attribute__(Spec) /* empty */ | 24 | # define __attribute__(Spec) /* empty */ |
26 | # endif | 25 | # endif |
27 | /* The __-protected variants of `format' and `printf' attributes | 26 | /* The __-protected variants of `format' and `printf' attributes |
diff --git a/gl/exit.h b/gl/exit.h deleted file mode 100644 index e8f77388..00000000 --- a/gl/exit.h +++ /dev/null | |||
@@ -1,32 +0,0 @@ | |||
1 | /* exit() function. | ||
2 | Copyright (C) 1995, 2001 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program 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 | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | |||
18 | #ifndef _EXIT_H | ||
19 | #define _EXIT_H | ||
20 | |||
21 | /* Get exit() declaration. */ | ||
22 | #include <stdlib.h> | ||
23 | |||
24 | /* Some systems do not define EXIT_*, despite otherwise supporting C89. */ | ||
25 | #ifndef EXIT_SUCCESS | ||
26 | # define EXIT_SUCCESS 0 | ||
27 | #endif | ||
28 | #ifndef EXIT_FAILURE | ||
29 | # define EXIT_FAILURE 1 | ||
30 | #endif | ||
31 | |||
32 | #endif /* _EXIT_H */ | ||
diff --git a/gl/exitfail.c b/gl/exitfail.c index 97abc674..6d1fe4ae 100644 --- a/gl/exitfail.c +++ b/gl/exitfail.c | |||
@@ -1,11 +1,11 @@ | |||
1 | /* Failure exit status | 1 | /* Failure exit status |
2 | 2 | ||
3 | Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. | 3 | Copyright (C) 2002, 2003, 2005, 2006, 2007 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,13 +13,12 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 15 | You should have received a copy of the GNU General Public License |
16 | along with this program; see the file COPYING. | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | If not, write to the Free Software Foundation, | ||
18 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 17 | ||
20 | #include <config.h> | 18 | #include <config.h> |
21 | 19 | ||
22 | #include "exitfail.h" | 20 | #include "exitfail.h" |
23 | #include "exit.h" | 21 | |
22 | #include <stdlib.h> | ||
24 | 23 | ||
25 | int volatile exit_failure = EXIT_FAILURE; | 24 | int volatile exit_failure = EXIT_FAILURE; |
diff --git a/gl/exitfail.h b/gl/exitfail.h index e46cf9c1..713f2591 100644 --- a/gl/exitfail.h +++ b/gl/exitfail.h | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 2002 Free Software Foundation, Inc. | 3 | Copyright (C) 2002 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,6 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 15 | You should have received a copy of the GNU General Public License |
16 | along with this program; see the file COPYING. | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | If not, write to the Free Software Foundation, | ||
18 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 17 | ||
20 | extern int volatile exit_failure; | 18 | extern int volatile exit_failure; |
diff --git a/gl/fcntl--.h b/gl/fcntl--.h index 51b869e6..5a6a8792 100644 --- a/gl/fcntl--.h +++ b/gl/fcntl--.h | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 2005 Free Software Foundation, Inc. | 3 | Copyright (C) 2005 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | /* Written by Paul Eggert. */ | 18 | /* Written by Paul Eggert. */ |
20 | 19 | ||
diff --git a/gl/fcntl-safer.h b/gl/fcntl-safer.h index cab6aab1..99f38656 100644 --- a/gl/fcntl-safer.h +++ b/gl/fcntl-safer.h | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 2005 Free Software Foundation, Inc. | 3 | Copyright (C) 2005 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | /* Written by Paul Eggert. */ | 18 | /* Written by Paul Eggert. */ |
20 | 19 | ||
diff --git a/gl/fd-safer.c b/gl/fd-safer.c index 256bfa4a..df38c8f7 100644 --- a/gl/fd-safer.c +++ b/gl/fd-safer.c | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 2005, 2006 Free Software Foundation, Inc. | 3 | Copyright (C) 2005, 2006 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | /* Written by Paul Eggert. */ | 18 | /* Written by Paul Eggert. */ |
20 | 19 | ||
diff --git a/gl/float+.h b/gl/float+.h new file mode 100644 index 00000000..240fe365 --- /dev/null +++ b/gl/float+.h | |||
@@ -0,0 +1,148 @@ | |||
1 | /* Supplemental information about the floating-point formats. | ||
2 | Copyright (C) 2007 Free Software Foundation, Inc. | ||
3 | Written by Bruno Haible <bruno@clisp.org>, 2007. | ||
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 3, 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 | #ifndef _FLOATPLUS_H | ||
20 | #define _FLOATPLUS_H | ||
21 | |||
22 | #include <float.h> | ||
23 | #include <limits.h> | ||
24 | |||
25 | /* Number of bits in the mantissa of a floating-point number, including the | ||
26 | "hidden bit". */ | ||
27 | #if FLT_RADIX == 2 | ||
28 | # define FLT_MANT_BIT FLT_MANT_DIG | ||
29 | # define DBL_MANT_BIT DBL_MANT_DIG | ||
30 | # define LDBL_MANT_BIT LDBL_MANT_DIG | ||
31 | #elif FLT_RADIX == 4 | ||
32 | # define FLT_MANT_BIT (FLT_MANT_DIG * 2) | ||
33 | # define DBL_MANT_BIT (DBL_MANT_DIG * 2) | ||
34 | # define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) | ||
35 | #elif FLT_RADIX == 16 | ||
36 | # define FLT_MANT_BIT (FLT_MANT_DIG * 4) | ||
37 | # define DBL_MANT_BIT (DBL_MANT_DIG * 4) | ||
38 | # define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) | ||
39 | #endif | ||
40 | |||
41 | /* Bit mask that can be used to mask the exponent, as an unsigned number. */ | ||
42 | #define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) | ||
43 | #define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) | ||
44 | #define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) | ||
45 | |||
46 | /* Number of bits used for the exponent of a floating-point number, including | ||
47 | the exponent's sign. */ | ||
48 | #define FLT_EXP_BIT \ | ||
49 | (FLT_EXP_MASK < 0x100 ? 8 : \ | ||
50 | FLT_EXP_MASK < 0x200 ? 9 : \ | ||
51 | FLT_EXP_MASK < 0x400 ? 10 : \ | ||
52 | FLT_EXP_MASK < 0x800 ? 11 : \ | ||
53 | FLT_EXP_MASK < 0x1000 ? 12 : \ | ||
54 | FLT_EXP_MASK < 0x2000 ? 13 : \ | ||
55 | FLT_EXP_MASK < 0x4000 ? 14 : \ | ||
56 | FLT_EXP_MASK < 0x8000 ? 15 : \ | ||
57 | FLT_EXP_MASK < 0x10000 ? 16 : \ | ||
58 | FLT_EXP_MASK < 0x20000 ? 17 : \ | ||
59 | FLT_EXP_MASK < 0x40000 ? 18 : \ | ||
60 | FLT_EXP_MASK < 0x80000 ? 19 : \ | ||
61 | FLT_EXP_MASK < 0x100000 ? 20 : \ | ||
62 | FLT_EXP_MASK < 0x200000 ? 21 : \ | ||
63 | FLT_EXP_MASK < 0x400000 ? 22 : \ | ||
64 | FLT_EXP_MASK < 0x800000 ? 23 : \ | ||
65 | FLT_EXP_MASK < 0x1000000 ? 24 : \ | ||
66 | FLT_EXP_MASK < 0x2000000 ? 25 : \ | ||
67 | FLT_EXP_MASK < 0x4000000 ? 26 : \ | ||
68 | FLT_EXP_MASK < 0x8000000 ? 27 : \ | ||
69 | FLT_EXP_MASK < 0x10000000 ? 28 : \ | ||
70 | FLT_EXP_MASK < 0x20000000 ? 29 : \ | ||
71 | FLT_EXP_MASK < 0x40000000 ? 30 : \ | ||
72 | FLT_EXP_MASK <= 0x7fffffff ? 31 : \ | ||
73 | 32) | ||
74 | #define DBL_EXP_BIT \ | ||
75 | (DBL_EXP_MASK < 0x100 ? 8 : \ | ||
76 | DBL_EXP_MASK < 0x200 ? 9 : \ | ||
77 | DBL_EXP_MASK < 0x400 ? 10 : \ | ||
78 | DBL_EXP_MASK < 0x800 ? 11 : \ | ||
79 | DBL_EXP_MASK < 0x1000 ? 12 : \ | ||
80 | DBL_EXP_MASK < 0x2000 ? 13 : \ | ||
81 | DBL_EXP_MASK < 0x4000 ? 14 : \ | ||
82 | DBL_EXP_MASK < 0x8000 ? 15 : \ | ||
83 | DBL_EXP_MASK < 0x10000 ? 16 : \ | ||
84 | DBL_EXP_MASK < 0x20000 ? 17 : \ | ||
85 | DBL_EXP_MASK < 0x40000 ? 18 : \ | ||
86 | DBL_EXP_MASK < 0x80000 ? 19 : \ | ||
87 | DBL_EXP_MASK < 0x100000 ? 20 : \ | ||
88 | DBL_EXP_MASK < 0x200000 ? 21 : \ | ||
89 | DBL_EXP_MASK < 0x400000 ? 22 : \ | ||
90 | DBL_EXP_MASK < 0x800000 ? 23 : \ | ||
91 | DBL_EXP_MASK < 0x1000000 ? 24 : \ | ||
92 | DBL_EXP_MASK < 0x2000000 ? 25 : \ | ||
93 | DBL_EXP_MASK < 0x4000000 ? 26 : \ | ||
94 | DBL_EXP_MASK < 0x8000000 ? 27 : \ | ||
95 | DBL_EXP_MASK < 0x10000000 ? 28 : \ | ||
96 | DBL_EXP_MASK < 0x20000000 ? 29 : \ | ||
97 | DBL_EXP_MASK < 0x40000000 ? 30 : \ | ||
98 | DBL_EXP_MASK <= 0x7fffffff ? 31 : \ | ||
99 | 32) | ||
100 | #define LDBL_EXP_BIT \ | ||
101 | (LDBL_EXP_MASK < 0x100 ? 8 : \ | ||
102 | LDBL_EXP_MASK < 0x200 ? 9 : \ | ||
103 | LDBL_EXP_MASK < 0x400 ? 10 : \ | ||
104 | LDBL_EXP_MASK < 0x800 ? 11 : \ | ||
105 | LDBL_EXP_MASK < 0x1000 ? 12 : \ | ||
106 | LDBL_EXP_MASK < 0x2000 ? 13 : \ | ||
107 | LDBL_EXP_MASK < 0x4000 ? 14 : \ | ||
108 | LDBL_EXP_MASK < 0x8000 ? 15 : \ | ||
109 | LDBL_EXP_MASK < 0x10000 ? 16 : \ | ||
110 | LDBL_EXP_MASK < 0x20000 ? 17 : \ | ||
111 | LDBL_EXP_MASK < 0x40000 ? 18 : \ | ||
112 | LDBL_EXP_MASK < 0x80000 ? 19 : \ | ||
113 | LDBL_EXP_MASK < 0x100000 ? 20 : \ | ||
114 | LDBL_EXP_MASK < 0x200000 ? 21 : \ | ||
115 | LDBL_EXP_MASK < 0x400000 ? 22 : \ | ||
116 | LDBL_EXP_MASK < 0x800000 ? 23 : \ | ||
117 | LDBL_EXP_MASK < 0x1000000 ? 24 : \ | ||
118 | LDBL_EXP_MASK < 0x2000000 ? 25 : \ | ||
119 | LDBL_EXP_MASK < 0x4000000 ? 26 : \ | ||
120 | LDBL_EXP_MASK < 0x8000000 ? 27 : \ | ||
121 | LDBL_EXP_MASK < 0x10000000 ? 28 : \ | ||
122 | LDBL_EXP_MASK < 0x20000000 ? 29 : \ | ||
123 | LDBL_EXP_MASK < 0x40000000 ? 30 : \ | ||
124 | LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ | ||
125 | 32) | ||
126 | |||
127 | /* Number of bits used for a floating-point number: the mantissa (not | ||
128 | counting the "hidden bit", since it may or may not be explicit), the | ||
129 | exponent, and the sign. */ | ||
130 | #define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) | ||
131 | #define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) | ||
132 | #define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) | ||
133 | |||
134 | /* Number of bytes used for a floating-point number. | ||
135 | This can be smaller than the 'sizeof'. For example, on i386 systems, | ||
136 | 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence | ||
137 | LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but | ||
138 | sizeof (long double) = 12 or = 16. */ | ||
139 | #define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) | ||
140 | #define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) | ||
141 | #define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) | ||
142 | |||
143 | /* Verify that SIZEOF_FLT <= sizeof (float) etc. */ | ||
144 | typedef int verify_sizeof_flt[2 * (SIZEOF_FLT <= sizeof (float)) - 1]; | ||
145 | typedef int verify_sizeof_dbl[2 * (SIZEOF_DBL <= sizeof (double)) - 1]; | ||
146 | typedef int verify_sizeof_ldbl[2 * (SIZEOF_LDBL <= sizeof (long double)) - 1]; | ||
147 | |||
148 | #endif /* _FLOATPLUS_H */ | ||
diff --git a/gl/float.in.h b/gl/float.in.h new file mode 100644 index 00000000..25040320 --- /dev/null +++ b/gl/float.in.h | |||
@@ -0,0 +1,58 @@ | |||
1 | /* A correct <float.h>. | ||
2 | |||
3 | Copyright (C) 2007 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 3 of the License, or | ||
8 | (at your option) 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, see <http://www.gnu.org/licenses/>. */ | ||
17 | |||
18 | #ifndef _GL_FLOAT_H | ||
19 | |||
20 | /* The include_next requires a split double-inclusion guard. */ | ||
21 | #@INCLUDE_NEXT@ @NEXT_FLOAT_H@ | ||
22 | |||
23 | #ifndef _GL_FLOAT_H | ||
24 | #define _GL_FLOAT_H | ||
25 | |||
26 | /* 'long double' properties. */ | ||
27 | #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) | ||
28 | /* Number of mantissa units, in base FLT_RADIX. */ | ||
29 | # undef LDBL_MANT_DIG | ||
30 | # define LDBL_MANT_DIG 64 | ||
31 | /* Number of decimal digits that is sufficient for representing a number. */ | ||
32 | # undef LDBL_DIG | ||
33 | # define LDBL_DIG 18 | ||
34 | /* x-1 where x is the smallest representable number > 1. */ | ||
35 | # undef LDBL_EPSILON | ||
36 | # define LDBL_EPSILON 1.0842021724855044340E-19L | ||
37 | /* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ | ||
38 | # undef LDBL_MIN_EXP | ||
39 | # define LDBL_MIN_EXP (-16381) | ||
40 | /* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ | ||
41 | # undef LDBL_MAX_EXP | ||
42 | # define LDBL_MAX_EXP 16384 | ||
43 | /* Minimum positive normalized number. */ | ||
44 | # undef LDBL_MIN | ||
45 | # define LDBL_MIN 3.3621031431120935063E-4932L | ||
46 | /* Maximum representable finite number. */ | ||
47 | # undef LDBL_MAX | ||
48 | # define LDBL_MAX 1.1897314953572317650E+4932L | ||
49 | /* Minimum e such that 10^e is in the range of normalized numbers. */ | ||
50 | # undef LDBL_MIN_10_EXP | ||
51 | # define LDBL_MIN_10_EXP (-4931) | ||
52 | /* Maximum e such that 10^e is in the range of representable finite numbers. */ | ||
53 | # undef LDBL_MAX_10_EXP | ||
54 | # define LDBL_MAX_10_EXP 4932 | ||
55 | #endif | ||
56 | |||
57 | #endif /* _GL_FLOAT_H */ | ||
58 | #endif /* _GL_FLOAT_H */ | ||
diff --git a/gl/fsusage.c b/gl/fsusage.c index 337bf531..23d40ea1 100644 --- a/gl/fsusage.c +++ b/gl/fsusage.c | |||
@@ -3,10 +3,10 @@ | |||
3 | Copyright (C) 1991, 1992, 1996, 1998, 1999, 2002, 2003, 2004, 2005, 2006 | 3 | Copyright (C) 1991, 1992, 1996, 1998, 1999, 2002, 2003, 2004, 2005, 2006 |
4 | Free Software Foundation, Inc. | 4 | Free Software Foundation, Inc. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3 of the License, or |
9 | any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -14,8 +14,7 @@ | |||
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License | 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, | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 18 | ||
20 | #include <config.h> | 19 | #include <config.h> |
21 | 20 | ||
diff --git a/gl/fsusage.h b/gl/fsusage.h index 7fa9f8d6..b32abe18 100644 --- a/gl/fsusage.h +++ b/gl/fsusage.h | |||
@@ -3,10 +3,10 @@ | |||
3 | Copyright (C) 1991, 1992, 1997, 2003, 2004, 2005, 2006 Free Software | 3 | Copyright (C) 1991, 1992, 1997, 2003, 2004, 2005, 2006 Free Software |
4 | Foundation, Inc. | 4 | Foundation, Inc. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3 of the License, or |
9 | any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -14,8 +14,7 @@ | |||
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License | 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, | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 18 | ||
20 | /* Space usage statistics for a file system. Blocks are 512-byte. */ | 19 | /* Space usage statistics for a file system. Blocks are 512-byte. */ |
21 | 20 | ||
diff --git a/gl/full-read.c b/gl/full-read.c index 8c3472a4..fb7212bb 100644 --- a/gl/full-read.c +++ b/gl/full-read.c | |||
@@ -1,10 +1,10 @@ | |||
1 | /* An interface to read that retries after partial reads and interrupts. | 1 | /* An interface to read that retries after partial reads and interrupts. |
2 | Copyright (C) 2002, 2003 Free Software Foundation, Inc. | 2 | Copyright (C) 2002, 2003 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software: you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3 of the License, or |
7 | any later version. | 7 | (at your option) any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -12,8 +12,7 @@ | |||
12 | GNU General Public License for more details. | 12 | GNU General Public License for more details. |
13 | 13 | ||
14 | You should have received a copy of the GNU General Public License | 14 | You should have received a copy of the GNU General Public License |
15 | along with this program; if not, write to the Free Software Foundation, | 15 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | 16 | ||
18 | #define FULL_READ | 17 | #define FULL_READ |
19 | #include "full-write.c" | 18 | #include "full-write.c" |
diff --git a/gl/full-read.h b/gl/full-read.h index 05d83a76..a341ee00 100644 --- a/gl/full-read.h +++ b/gl/full-read.h | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 2002 Free Software Foundation, Inc. | 3 | Copyright (C) 2002 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -14,7 +14,7 @@ | |||
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 15 | You should have received a copy of the GNU General Public License |
16 | along with this program; if not, read to the Free Software Foundation, | 16 | along with this program; if not, read to the Free Software Foundation, |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
18 | 18 | ||
19 | #include <stddef.h> | 19 | #include <stddef.h> |
20 | 20 | ||
diff --git a/gl/full-write.c b/gl/full-write.c index cc168720..51f2d381 100644 --- a/gl/full-write.c +++ b/gl/full-write.c | |||
@@ -3,10 +3,10 @@ | |||
3 | Copyright (C) 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002, 2003, | 3 | Copyright (C) 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002, 2003, |
4 | 2004, 2005, 2006 Free Software Foundation, Inc. | 4 | 2004, 2005, 2006 Free Software Foundation, Inc. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3 of the License, or |
9 | any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -14,8 +14,7 @@ | |||
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License | 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, | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 18 | ||
20 | #include <config.h> | 19 | #include <config.h> |
21 | 20 | ||
diff --git a/gl/full-write.h b/gl/full-write.h index d20d2fe4..9a801464 100644 --- a/gl/full-write.h +++ b/gl/full-write.h | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 2002-2003 Free Software Foundation, Inc. | 3 | Copyright (C) 2002-2003 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | #include <stddef.h> | 18 | #include <stddef.h> |
20 | 19 | ||
diff --git a/gl/gai_strerror.c b/gl/gai_strerror.c index 7f0e034e..9e4abbe6 100644 --- a/gl/gai_strerror.c +++ b/gl/gai_strerror.c | |||
@@ -4,7 +4,7 @@ | |||
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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3, or (at your option) |
8 | any later version. | 8 | any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
@@ -52,6 +52,7 @@ values[] = | |||
52 | { EAI_SERVICE, N_("Servname not supported for ai_socktype") }, | 52 | { EAI_SERVICE, N_("Servname not supported for ai_socktype") }, |
53 | { EAI_SOCKTYPE, N_("ai_socktype not supported") }, | 53 | { EAI_SOCKTYPE, N_("ai_socktype not supported") }, |
54 | { EAI_SYSTEM, N_("System error") }, | 54 | { EAI_SYSTEM, N_("System error") }, |
55 | { EAI_OVERFLOW, N_("Argument buffer too small") }, | ||
55 | #ifdef __USE_GNU | 56 | #ifdef __USE_GNU |
56 | { EAI_INPROGRESS, N_("Processing request in progress") }, | 57 | { EAI_INPROGRESS, N_("Processing request in progress") }, |
57 | { EAI_CANCELED, N_("Request canceled") }, | 58 | { EAI_CANCELED, N_("Request canceled") }, |
diff --git a/gl/getaddrinfo.c b/gl/getaddrinfo.c index f523f765..04f0ac2e 100644 --- a/gl/getaddrinfo.c +++ b/gl/getaddrinfo.c | |||
@@ -1,11 +1,11 @@ | |||
1 | /* Get address information (partial implementation). | 1 | /* Get address information (partial implementation). |
2 | Copyright (C) 1997, 2001, 2002, 2004, 2005, 2006 Free Software | 2 | Copyright (C) 1997, 2001, 2002, 2004, 2005, 2006, 2007 Free Software |
3 | Foundation, Inc. | 3 | Foundation, Inc. |
4 | Contributed by Simon Josefsson <simon@josefsson.org>. | 4 | Contributed by Simon Josefsson <simon@josefsson.org>. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3, or (at your option) |
9 | any later version. | 9 | any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
@@ -28,9 +28,12 @@ | |||
28 | /* Get calloc. */ | 28 | /* Get calloc. */ |
29 | #include <stdlib.h> | 29 | #include <stdlib.h> |
30 | 30 | ||
31 | /* Get memcpy. */ | 31 | /* Get memcpy, strdup. */ |
32 | #include <string.h> | 32 | #include <string.h> |
33 | 33 | ||
34 | /* Get snprintf. */ | ||
35 | #include <stdio.h> | ||
36 | |||
34 | #include <stdbool.h> | 37 | #include <stdbool.h> |
35 | 38 | ||
36 | #include "gettext.h" | 39 | #include "gettext.h" |
@@ -38,8 +41,6 @@ | |||
38 | #define N_(String) String | 41 | #define N_(String) String |
39 | 42 | ||
40 | #include "inet_ntop.h" | 43 | #include "inet_ntop.h" |
41 | #include "snprintf.h" | ||
42 | #include "strdup.h" | ||
43 | 44 | ||
44 | /* BeOS has AF_INET, but not PF_INET. */ | 45 | /* BeOS has AF_INET, but not PF_INET. */ |
45 | #ifndef PF_INET | 46 | #ifndef PF_INET |
@@ -178,7 +179,7 @@ getaddrinfo (const char *restrict nodename, | |||
178 | const char *proto = | 179 | const char *proto = |
179 | (hints && hints->ai_socktype == SOCK_DGRAM) ? "udp" : "tcp"; | 180 | (hints && hints->ai_socktype == SOCK_DGRAM) ? "udp" : "tcp"; |
180 | 181 | ||
181 | if (!(hints->ai_flags & AI_NUMERICSERV)) | 182 | if (hints == NULL || !(hints->ai_flags & AI_NUMERICSERV)) |
182 | /* FIXME: Use getservbyname_r if available. */ | 183 | /* FIXME: Use getservbyname_r if available. */ |
183 | se = getservbyname (servname, proto); | 184 | se = getservbyname (servname, proto); |
184 | 185 | ||
diff --git a/gl/getaddrinfo.h b/gl/getaddrinfo.h index b4ef242c..050b7935 100644 --- a/gl/getaddrinfo.h +++ b/gl/getaddrinfo.h | |||
@@ -5,7 +5,7 @@ | |||
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3, or (at your option) |
9 | any later version. | 9 | any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
diff --git a/gl/gethostname.c b/gl/gethostname.c index eedc40ec..169dd4ef 100644 --- a/gl/gethostname.c +++ b/gl/gethostname.c | |||
@@ -1,11 +1,11 @@ | |||
1 | /* gethostname emulation for SysV and POSIX.1. | 1 | /* gethostname emulation for SysV and POSIX.1. |
2 | 2 | ||
3 | Copyright (C) 1992, 2003, 2006 Free Software Foundation, Inc. | 3 | Copyright (C) 1992, 2003, 2006, 2008 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | /* David MacKenzie <djm@gnu.ai.mit.edu> */ | 18 | /* David MacKenzie <djm@gnu.ai.mit.edu> */ |
20 | 19 | ||
@@ -24,6 +23,8 @@ | |||
24 | # include <sys/utsname.h> | 23 | # include <sys/utsname.h> |
25 | #endif | 24 | #endif |
26 | 25 | ||
26 | #include <string.h> | ||
27 | |||
27 | /* Put up to LEN chars of the host name into NAME. | 28 | /* Put up to LEN chars of the host name into NAME. |
28 | Null terminate it if the name is shorter than LEN. | 29 | Null terminate it if the name is shorter than LEN. |
29 | Return 0 if ok, -1 if error. */ | 30 | Return 0 if ok, -1 if error. */ |
diff --git a/gl/getloadavg.c b/gl/getloadavg.c index cfa62735..5faa8faa 100644 --- a/gl/getloadavg.c +++ b/gl/getloadavg.c | |||
@@ -1,16 +1,16 @@ | |||
1 | /* Get the system load averages. | 1 | /* Get the system load averages. |
2 | 2 | ||
3 | Copyright (C) 1985, 1986, 1987, 1988, 1989, 1991, 1992, 1993, 1994, | 3 | Copyright (C) 1985, 1986, 1987, 1988, 1989, 1991, 1992, 1993, 1994, |
4 | 1995, 1997, 1999, 2000, 2003, 2004, 2005, 2006 Free Software | 4 | 1995, 1997, 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software |
5 | Foundation, Inc. | 5 | Foundation, Inc. |
6 | 6 | ||
7 | NOTE: The canonical source of this file is maintained with gnulib. | 7 | NOTE: The canonical source of this file is maintained with gnulib. |
8 | Bugs can be reported to bug-gnulib@gnu.org. | 8 | Bugs can be reported to bug-gnulib@gnu.org. |
9 | 9 | ||
10 | This program is free software; you can redistribute it and/or modify | 10 | This program is free software: you can redistribute it and/or modify |
11 | it under the terms of the GNU General Public License as published by | 11 | it under the terms of the GNU General Public License as published by |
12 | the Free Software Foundation; either version 2, or (at your option) | 12 | the Free Software Foundation; either version 3 of the License, or |
13 | any later version. | 13 | (at your option) any later version. |
14 | 14 | ||
15 | This program is distributed in the hope that it will be useful, | 15 | This program is distributed in the hope that it will be useful, |
16 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 16 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -18,9 +18,7 @@ | |||
18 | GNU General Public License for more details. | 18 | GNU General Public License for more details. |
19 | 19 | ||
20 | You should have received a copy of the GNU General Public License | 20 | You should have received a copy of the GNU General Public License |
21 | along with this program; if not, write to the Free Software | 21 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
22 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, | ||
23 | USA. */ | ||
24 | 22 | ||
25 | /* Compile-time symbols that this file uses: | 23 | /* Compile-time symbols that this file uses: |
26 | 24 | ||
@@ -32,6 +30,8 @@ | |||
32 | If that isn't an option, then just put | 30 | If that isn't an option, then just put |
33 | AC_CHECK_FUNCS(pstat_getdynamic) in your | 31 | AC_CHECK_FUNCS(pstat_getdynamic) in your |
34 | configure.in file. | 32 | configure.in file. |
33 | HAVE_LIBPERFSTAT Define this if your system has the | ||
34 | perfstat_cpu_total function in libperfstat (AIX). | ||
35 | FIXUP_KERNEL_SYMBOL_ADDR() Adjust address in returned struct nlist. | 35 | FIXUP_KERNEL_SYMBOL_ADDR() Adjust address in returned struct nlist. |
36 | KERNEL_FILE Name of the kernel file to nlist. | 36 | KERNEL_FILE Name of the kernel file to nlist. |
37 | LDAV_CVT() Scale the load average from the kernel. | 37 | LDAV_CVT() Scale the load average from the kernel. |
@@ -188,6 +188,8 @@ | |||
188 | # include <sys/socket.h> | 188 | # include <sys/socket.h> |
189 | # include <net/route.h> | 189 | # include <net/route.h> |
190 | # include <sys/table.h> | 190 | # include <sys/table.h> |
191 | /* Tru64 4.0D's table.h redefines sys */ | ||
192 | # undef sys | ||
191 | # endif | 193 | # endif |
192 | 194 | ||
193 | # if defined (__osf__) && (defined (mips) || defined (__mips__)) | 195 | # if defined (__osf__) && (defined (mips) || defined (__mips__)) |
@@ -254,7 +256,7 @@ | |||
254 | # define LOAD_AVE_TYPE long | 256 | # define LOAD_AVE_TYPE long |
255 | # endif | 257 | # endif |
256 | 258 | ||
257 | # ifdef _AIX | 259 | # if defined _AIX && ! defined HAVE_LIBPERFSTAT |
258 | # define LOAD_AVE_TYPE long | 260 | # define LOAD_AVE_TYPE long |
259 | # endif | 261 | # endif |
260 | 262 | ||
@@ -309,7 +311,7 @@ | |||
309 | # define FSCALE 100.0 | 311 | # define FSCALE 100.0 |
310 | # endif | 312 | # endif |
311 | 313 | ||
312 | # ifdef _AIX | 314 | # if defined _AIX && !defined HAVE_LIBPERFSTAT |
313 | # define FSCALE 65536.0 | 315 | # define FSCALE 65536.0 |
314 | # endif | 316 | # endif |
315 | 317 | ||
@@ -347,7 +349,7 @@ | |||
347 | # define LDAV_SYMBOL "_Loadavg" | 349 | # define LDAV_SYMBOL "_Loadavg" |
348 | # endif | 350 | # endif |
349 | 351 | ||
350 | # if !defined (LDAV_SYMBOL) && ((defined (hpux) && !defined (hp9000s300)) || defined (_SEQUENT_) || defined (SVR4) || defined (ISC) || defined (sgi) || (defined (ardent) && defined (titan)) || defined (_AIX)) | 352 | # if !defined (LDAV_SYMBOL) && ((defined (hpux) && !defined (hp9000s300)) || defined (_SEQUENT_) || defined (SVR4) || defined (ISC) || defined (sgi) || (defined (ardent) && defined (titan)) || (defined (_AIX) && !defined(HAVE_LIBPERFSTAT))) |
351 | # define LDAV_SYMBOL "avenrun" | 353 | # define LDAV_SYMBOL "avenrun" |
352 | # endif | 354 | # endif |
353 | 355 | ||
@@ -404,6 +406,14 @@ | |||
404 | 406 | ||
405 | # endif /* LOAD_AVE_TYPE */ | 407 | # endif /* LOAD_AVE_TYPE */ |
406 | 408 | ||
409 | # if defined HAVE_LIBPERFSTAT | ||
410 | # include <libperfstat.h> | ||
411 | # include <sys/proc.h> | ||
412 | # ifndef SBITS | ||
413 | # define SBITS 16 | ||
414 | # endif | ||
415 | # endif | ||
416 | |||
407 | # if defined (__GNU__) && !defined (NeXT) | 417 | # if defined (__GNU__) && !defined (NeXT) |
408 | /* Note that NeXT Openstep defines __GNU__ even though it should not. */ | 418 | /* Note that NeXT Openstep defines __GNU__ even though it should not. */ |
409 | /* GNU system acts much like NeXT, for load average purposes, | 419 | /* GNU system acts much like NeXT, for load average purposes, |
@@ -568,6 +578,22 @@ getloadavg (double loadavg[], int nelem) | |||
568 | 578 | ||
569 | # endif /* hpux && HAVE_PSTAT_GETDYNAMIC */ | 579 | # endif /* hpux && HAVE_PSTAT_GETDYNAMIC */ |
570 | 580 | ||
581 | # if ! defined LDAV_DONE && defined HAVE_LIBPERFSTAT | ||
582 | # define LDAV_DONE | ||
583 | # undef LOAD_AVE_TYPE | ||
584 | /* Use perfstat_cpu_total because we don't have to be root. */ | ||
585 | { | ||
586 | perfstat_cpu_total_t cpu_stats; | ||
587 | int result = perfstat_cpu_total (NULL, &cpu_stats, sizeof cpu_stats, 1); | ||
588 | if (result == -1) | ||
589 | return result; | ||
590 | loadavg[0] = cpu_stats.loadavg[0] / (double)(1 << SBITS); | ||
591 | loadavg[1] = cpu_stats.loadavg[1] / (double)(1 << SBITS); | ||
592 | loadavg[2] = cpu_stats.loadavg[2] / (double)(1 << SBITS); | ||
593 | elem = 3; | ||
594 | } | ||
595 | # endif | ||
596 | |||
571 | # if !defined (LDAV_DONE) && (defined (__linux__) || defined (__CYGWIN__)) | 597 | # if !defined (LDAV_DONE) && (defined (__linux__) || defined (__CYGWIN__)) |
572 | # define LDAV_DONE | 598 | # define LDAV_DONE |
573 | # undef LOAD_AVE_TYPE | 599 | # undef LOAD_AVE_TYPE |
diff --git a/gl/getopt.c b/gl/getopt.c index 3580ad82..3c236019 100644 --- a/gl/getopt.c +++ b/gl/getopt.c | |||
@@ -6,19 +6,18 @@ | |||
6 | Free Software Foundation, Inc. | 6 | Free Software Foundation, Inc. |
7 | This file is part of the GNU C Library. | 7 | This file is part of the GNU C Library. |
8 | 8 | ||
9 | This program is free software; you can redistribute it and/or modify | 9 | This program is free software: you can redistribute it and/or modify |
10 | it under the terms of the GNU General Public License as published by | 10 | it under the terms of the GNU General Public License as published by |
11 | the Free Software Foundation; either version 2, or (at your option) | 11 | the Free Software Foundation; either version 3 of the License, or |
12 | any later version. | 12 | (at your option) any later version. |
13 | 13 | ||
14 | This program is distributed in the hope that it will be useful, | 14 | This program is distributed in the hope that it will be useful, |
15 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
17 | GNU General Public License for more details. | 17 | GNU General Public License for more details. |
18 | 18 | ||
19 | You should have received a copy of the GNU General Public License along | 19 | You should have received a copy of the GNU General Public License |
20 | with this program; if not, write to the Free Software Foundation, | 20 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
21 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
22 | 21 | ||
23 | #ifndef _LIBC | 22 | #ifndef _LIBC |
24 | # include <config.h> | 23 | # include <config.h> |
diff --git a/gl/getopt_.h b/gl/getopt.in.h index 27fce3dc..d2d3e6e6 100644 --- a/gl/getopt_.h +++ b/gl/getopt.in.h | |||
@@ -1,21 +1,20 @@ | |||
1 | /* Declarations for getopt. | 1 | /* Declarations for getopt. |
2 | Copyright (C) 1989-1994,1996-1999,2001,2003,2004,2005,2006 | 2 | Copyright (C) 1989-1994,1996-1999,2001,2003,2004,2005,2006,2007 |
3 | Free Software Foundation, Inc. | 3 | Free Software Foundation, Inc. |
4 | This file is part of the GNU C Library. | 4 | This file is part of the GNU C Library. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3 of the License, or |
9 | any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License along | 16 | You should have received a copy of the GNU General Public License |
17 | with this program; if not, write to the Free Software Foundation, | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 18 | ||
20 | #ifndef _GETOPT_H | 19 | #ifndef _GETOPT_H |
21 | 20 | ||
@@ -101,7 +100,7 @@ | |||
101 | # endif | 100 | # endif |
102 | #endif | 101 | #endif |
103 | 102 | ||
104 | #ifdef __cplusplus | 103 | #ifdef __cplusplus |
105 | extern "C" { | 104 | extern "C" { |
106 | #endif | 105 | #endif |
107 | 106 | ||
@@ -216,7 +215,7 @@ extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, | |||
216 | 215 | ||
217 | #endif | 216 | #endif |
218 | 217 | ||
219 | #ifdef __cplusplus | 218 | #ifdef __cplusplus |
220 | } | 219 | } |
221 | #endif | 220 | #endif |
222 | 221 | ||
diff --git a/gl/getopt1.c b/gl/getopt1.c index cc0746ea..d6a3ecf4 100644 --- a/gl/getopt1.c +++ b/gl/getopt1.c | |||
@@ -3,19 +3,18 @@ | |||
3 | Free Software Foundation, Inc. | 3 | Free Software Foundation, Inc. |
4 | This file is part of the GNU C Library. | 4 | This file is part of the GNU C Library. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3 of the License, or |
9 | any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License along | 16 | You should have received a copy of the GNU General Public License |
17 | with this program; if not, write to the Free Software Foundation, | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 18 | ||
20 | #ifdef _LIBC | 19 | #ifdef _LIBC |
21 | # include <getopt.h> | 20 | # include <getopt.h> |
diff --git a/gl/getopt_int.h b/gl/getopt_int.h index 401579fd..3c6628bb 100644 --- a/gl/getopt_int.h +++ b/gl/getopt_int.h | |||
@@ -3,19 +3,18 @@ | |||
3 | Free Software Foundation, Inc. | 3 | Free Software Foundation, Inc. |
4 | This file is part of the GNU C Library. | 4 | This file is part of the GNU C Library. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3 of the License, or |
9 | any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License along | 16 | You should have received a copy of the GNU General Public License |
17 | with this program; if not, write to the Free Software Foundation, | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 18 | ||
20 | #ifndef _GETOPT_INT_H | 19 | #ifndef _GETOPT_INT_H |
21 | #define _GETOPT_INT_H 1 | 20 | #define _GETOPT_INT_H 1 |
diff --git a/gl/gettext.h b/gl/gettext.h index 9d76ec9a..763dd3c1 100644 --- a/gl/gettext.h +++ b/gl/gettext.h | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3, or (at your option) |
7 | any later version. | 7 | any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
diff --git a/gl/inet_ntop.c b/gl/inet_ntop.c index 537b59fa..3e266a27 100644 --- a/gl/inet_ntop.c +++ b/gl/inet_ntop.c | |||
@@ -4,7 +4,7 @@ | |||
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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3, or (at your option) |
8 | any later version. | 8 | any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
diff --git a/gl/inet_ntop.h b/gl/inet_ntop.h index bd1e085a..2897bb40 100644 --- a/gl/inet_ntop.h +++ b/gl/inet_ntop.h | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3, or (at your option) |
7 | any later version. | 7 | any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
diff --git a/gl/intprops.h b/gl/intprops.h index 34f971cb..002161ee 100644 --- a/gl/intprops.h +++ b/gl/intprops.h | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. | 3 | Copyright (C) 2001, 2002, 2003, 2004, 2005 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | /* Written by Paul Eggert. */ | 18 | /* Written by Paul Eggert. */ |
20 | 19 | ||
diff --git a/gl/localcharset.c b/gl/localcharset.c new file mode 100644 index 00000000..4f319487 --- /dev/null +++ b/gl/localcharset.c | |||
@@ -0,0 +1,460 @@ | |||
1 | /* Determine a canonical name for the current locale's character encoding. | ||
2 | |||
3 | Copyright (C) 2000-2006 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 3, 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 along | ||
16 | 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 Bruno Haible <bruno@clisp.org>. */ | ||
20 | |||
21 | #include <config.h> | ||
22 | |||
23 | /* Specification. */ | ||
24 | #include "localcharset.h" | ||
25 | |||
26 | #include <stddef.h> | ||
27 | #include <stdio.h> | ||
28 | #include <string.h> | ||
29 | #include <stdlib.h> | ||
30 | |||
31 | #if defined _WIN32 || defined __WIN32__ | ||
32 | # define WIN32_NATIVE | ||
33 | #endif | ||
34 | |||
35 | #if defined __EMX__ | ||
36 | /* Assume EMX program runs on OS/2, even if compiled under DOS. */ | ||
37 | # define OS2 | ||
38 | #endif | ||
39 | |||
40 | #if !defined WIN32_NATIVE | ||
41 | # if HAVE_LANGINFO_CODESET | ||
42 | # include <langinfo.h> | ||
43 | # else | ||
44 | # if 0 /* see comment below */ | ||
45 | # include <locale.h> | ||
46 | # endif | ||
47 | # endif | ||
48 | # ifdef __CYGWIN__ | ||
49 | # define WIN32_LEAN_AND_MEAN | ||
50 | # include <windows.h> | ||
51 | # endif | ||
52 | #elif defined WIN32_NATIVE | ||
53 | # define WIN32_LEAN_AND_MEAN | ||
54 | # include <windows.h> | ||
55 | #endif | ||
56 | #if defined OS2 | ||
57 | # define INCL_DOS | ||
58 | # include <os2.h> | ||
59 | #endif | ||
60 | |||
61 | #if ENABLE_RELOCATABLE | ||
62 | # include "relocatable.h" | ||
63 | #else | ||
64 | # define relocate(pathname) (pathname) | ||
65 | #endif | ||
66 | |||
67 | /* Get LIBDIR. */ | ||
68 | #ifndef LIBDIR | ||
69 | # include "configmake.h" | ||
70 | #endif | ||
71 | |||
72 | #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ | ||
73 | /* Win32, Cygwin, OS/2, DOS */ | ||
74 | # define ISSLASH(C) ((C) == '/' || (C) == '\\') | ||
75 | #endif | ||
76 | |||
77 | #ifndef DIRECTORY_SEPARATOR | ||
78 | # define DIRECTORY_SEPARATOR '/' | ||
79 | #endif | ||
80 | |||
81 | #ifndef ISSLASH | ||
82 | # define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) | ||
83 | #endif | ||
84 | |||
85 | #if HAVE_DECL_GETC_UNLOCKED | ||
86 | # undef getc | ||
87 | # define getc getc_unlocked | ||
88 | #endif | ||
89 | |||
90 | /* The following static variable is declared 'volatile' to avoid a | ||
91 | possible multithread problem in the function get_charset_aliases. If we | ||
92 | are running in a threaded environment, and if two threads initialize | ||
93 | 'charset_aliases' simultaneously, both will produce the same value, | ||
94 | and everything will be ok if the two assignments to 'charset_aliases' | ||
95 | are atomic. But I don't know what will happen if the two assignments mix. */ | ||
96 | #if __STDC__ != 1 | ||
97 | # define volatile /* empty */ | ||
98 | #endif | ||
99 | /* Pointer to the contents of the charset.alias file, if it has already been | ||
100 | read, else NULL. Its format is: | ||
101 | ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ | ||
102 | static const char * volatile charset_aliases; | ||
103 | |||
104 | /* Return a pointer to the contents of the charset.alias file. */ | ||
105 | static const char * | ||
106 | get_charset_aliases (void) | ||
107 | { | ||
108 | const char *cp; | ||
109 | |||
110 | cp = charset_aliases; | ||
111 | if (cp == NULL) | ||
112 | { | ||
113 | #if !(defined VMS || defined WIN32_NATIVE || defined __CYGWIN__) | ||
114 | FILE *fp; | ||
115 | const char *dir; | ||
116 | const char *base = "charset.alias"; | ||
117 | char *file_name; | ||
118 | |||
119 | /* Make it possible to override the charset.alias location. This is | ||
120 | necessary for running the testsuite before "make install". */ | ||
121 | dir = getenv ("CHARSETALIASDIR"); | ||
122 | if (dir == NULL || dir[0] == '\0') | ||
123 | dir = relocate (LIBDIR); | ||
124 | |||
125 | /* Concatenate dir and base into freshly allocated file_name. */ | ||
126 | { | ||
127 | size_t dir_len = strlen (dir); | ||
128 | size_t base_len = strlen (base); | ||
129 | int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); | ||
130 | file_name = (char *) malloc (dir_len + add_slash + base_len + 1); | ||
131 | if (file_name != NULL) | ||
132 | { | ||
133 | memcpy (file_name, dir, dir_len); | ||
134 | if (add_slash) | ||
135 | file_name[dir_len] = DIRECTORY_SEPARATOR; | ||
136 | memcpy (file_name + dir_len + add_slash, base, base_len + 1); | ||
137 | } | ||
138 | } | ||
139 | |||
140 | if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL) | ||
141 | /* Out of memory or file not found, treat it as empty. */ | ||
142 | cp = ""; | ||
143 | else | ||
144 | { | ||
145 | /* Parse the file's contents. */ | ||
146 | char *res_ptr = NULL; | ||
147 | size_t res_size = 0; | ||
148 | |||
149 | for (;;) | ||
150 | { | ||
151 | int c; | ||
152 | char buf1[50+1]; | ||
153 | char buf2[50+1]; | ||
154 | size_t l1, l2; | ||
155 | char *old_res_ptr; | ||
156 | |||
157 | c = getc (fp); | ||
158 | if (c == EOF) | ||
159 | break; | ||
160 | if (c == '\n' || c == ' ' || c == '\t') | ||
161 | continue; | ||
162 | if (c == '#') | ||
163 | { | ||
164 | /* Skip comment, to end of line. */ | ||
165 | do | ||
166 | c = getc (fp); | ||
167 | while (!(c == EOF || c == '\n')); | ||
168 | if (c == EOF) | ||
169 | break; | ||
170 | continue; | ||
171 | } | ||
172 | ungetc (c, fp); | ||
173 | if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) | ||
174 | break; | ||
175 | l1 = strlen (buf1); | ||
176 | l2 = strlen (buf2); | ||
177 | old_res_ptr = res_ptr; | ||
178 | if (res_size == 0) | ||
179 | { | ||
180 | res_size = l1 + 1 + l2 + 1; | ||
181 | res_ptr = (char *) malloc (res_size + 1); | ||
182 | } | ||
183 | else | ||
184 | { | ||
185 | res_size += l1 + 1 + l2 + 1; | ||
186 | res_ptr = (char *) realloc (res_ptr, res_size + 1); | ||
187 | } | ||
188 | if (res_ptr == NULL) | ||
189 | { | ||
190 | /* Out of memory. */ | ||
191 | res_size = 0; | ||
192 | if (old_res_ptr != NULL) | ||
193 | free (old_res_ptr); | ||
194 | break; | ||
195 | } | ||
196 | strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); | ||
197 | strcpy (res_ptr + res_size - (l2 + 1), buf2); | ||
198 | } | ||
199 | fclose (fp); | ||
200 | if (res_size == 0) | ||
201 | cp = ""; | ||
202 | else | ||
203 | { | ||
204 | *(res_ptr + res_size) = '\0'; | ||
205 | cp = res_ptr; | ||
206 | } | ||
207 | } | ||
208 | |||
209 | if (file_name != NULL) | ||
210 | free (file_name); | ||
211 | |||
212 | #else | ||
213 | |||
214 | # if defined VMS | ||
215 | /* To avoid the troubles of an extra file charset.alias_vms in the | ||
216 | sources of many GNU packages, simply inline the aliases here. */ | ||
217 | /* The list of encodings is taken from the OpenVMS 7.3-1 documentation | ||
218 | "Compaq C Run-Time Library Reference Manual for OpenVMS systems" | ||
219 | section 10.7 "Handling Different Character Sets". */ | ||
220 | cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" | ||
221 | "ISO8859-2" "\0" "ISO-8859-2" "\0" | ||
222 | "ISO8859-5" "\0" "ISO-8859-5" "\0" | ||
223 | "ISO8859-7" "\0" "ISO-8859-7" "\0" | ||
224 | "ISO8859-8" "\0" "ISO-8859-8" "\0" | ||
225 | "ISO8859-9" "\0" "ISO-8859-9" "\0" | ||
226 | /* Japanese */ | ||
227 | "eucJP" "\0" "EUC-JP" "\0" | ||
228 | "SJIS" "\0" "SHIFT_JIS" "\0" | ||
229 | "DECKANJI" "\0" "DEC-KANJI" "\0" | ||
230 | "SDECKANJI" "\0" "EUC-JP" "\0" | ||
231 | /* Chinese */ | ||
232 | "eucTW" "\0" "EUC-TW" "\0" | ||
233 | "DECHANYU" "\0" "DEC-HANYU" "\0" | ||
234 | "DECHANZI" "\0" "GB2312" "\0" | ||
235 | /* Korean */ | ||
236 | "DECKOREAN" "\0" "EUC-KR" "\0"; | ||
237 | # endif | ||
238 | |||
239 | # if defined WIN32_NATIVE || defined __CYGWIN__ | ||
240 | /* To avoid the troubles of installing a separate file in the same | ||
241 | directory as the DLL and of retrieving the DLL's directory at | ||
242 | runtime, simply inline the aliases here. */ | ||
243 | |||
244 | cp = "CP936" "\0" "GBK" "\0" | ||
245 | "CP1361" "\0" "JOHAB" "\0" | ||
246 | "CP20127" "\0" "ASCII" "\0" | ||
247 | "CP20866" "\0" "KOI8-R" "\0" | ||
248 | "CP20936" "\0" "GB2312" "\0" | ||
249 | "CP21866" "\0" "KOI8-RU" "\0" | ||
250 | "CP28591" "\0" "ISO-8859-1" "\0" | ||
251 | "CP28592" "\0" "ISO-8859-2" "\0" | ||
252 | "CP28593" "\0" "ISO-8859-3" "\0" | ||
253 | "CP28594" "\0" "ISO-8859-4" "\0" | ||
254 | "CP28595" "\0" "ISO-8859-5" "\0" | ||
255 | "CP28596" "\0" "ISO-8859-6" "\0" | ||
256 | "CP28597" "\0" "ISO-8859-7" "\0" | ||
257 | "CP28598" "\0" "ISO-8859-8" "\0" | ||
258 | "CP28599" "\0" "ISO-8859-9" "\0" | ||
259 | "CP28605" "\0" "ISO-8859-15" "\0" | ||
260 | "CP38598" "\0" "ISO-8859-8" "\0" | ||
261 | "CP51932" "\0" "EUC-JP" "\0" | ||
262 | "CP51936" "\0" "GB2312" "\0" | ||
263 | "CP51949" "\0" "EUC-KR" "\0" | ||
264 | "CP51950" "\0" "EUC-TW" "\0" | ||
265 | "CP54936" "\0" "GB18030" "\0" | ||
266 | "CP65001" "\0" "UTF-8" "\0"; | ||
267 | # endif | ||
268 | #endif | ||
269 | |||
270 | charset_aliases = cp; | ||
271 | } | ||
272 | |||
273 | return cp; | ||
274 | } | ||
275 | |||
276 | /* Determine the current locale's character encoding, and canonicalize it | ||
277 | into one of the canonical names listed in config.charset. | ||
278 | The result must not be freed; it is statically allocated. | ||
279 | If the canonical name cannot be determined, the result is a non-canonical | ||
280 | name. */ | ||
281 | |||
282 | #ifdef STATIC | ||
283 | STATIC | ||
284 | #endif | ||
285 | const char * | ||
286 | locale_charset (void) | ||
287 | { | ||
288 | const char *codeset; | ||
289 | const char *aliases; | ||
290 | |||
291 | #if !(defined WIN32_NATIVE || defined OS2) | ||
292 | |||
293 | # if HAVE_LANGINFO_CODESET | ||
294 | |||
295 | /* Most systems support nl_langinfo (CODESET) nowadays. */ | ||
296 | codeset = nl_langinfo (CODESET); | ||
297 | |||
298 | # ifdef __CYGWIN__ | ||
299 | /* Cygwin 2006 does not have locales. nl_langinfo (CODESET) always | ||
300 | returns "US-ASCII". As long as this is not fixed, return the suffix | ||
301 | of the locale name from the environment variables (if present) or | ||
302 | the codepage as a number. */ | ||
303 | if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) | ||
304 | { | ||
305 | const char *locale; | ||
306 | static char buf[2 + 10 + 1]; | ||
307 | |||
308 | locale = getenv ("LC_ALL"); | ||
309 | if (locale == NULL || locale[0] == '\0') | ||
310 | { | ||
311 | locale = getenv ("LC_CTYPE"); | ||
312 | if (locale == NULL || locale[0] == '\0') | ||
313 | locale = getenv ("LANG"); | ||
314 | } | ||
315 | if (locale != NULL && locale[0] != '\0') | ||
316 | { | ||
317 | /* If the locale name contains an encoding after the dot, return | ||
318 | it. */ | ||
319 | const char *dot = strchr (locale, '.'); | ||
320 | |||
321 | if (dot != NULL) | ||
322 | { | ||
323 | const char *modifier; | ||
324 | |||
325 | dot++; | ||
326 | /* Look for the possible @... trailer and remove it, if any. */ | ||
327 | modifier = strchr (dot, '@'); | ||
328 | if (modifier == NULL) | ||
329 | return dot; | ||
330 | if (modifier - dot < sizeof (buf)) | ||
331 | { | ||
332 | memcpy (buf, dot, modifier - dot); | ||
333 | buf [modifier - dot] = '\0'; | ||
334 | return buf; | ||
335 | } | ||
336 | } | ||
337 | } | ||
338 | |||
339 | /* Woe32 has a function returning the locale's codepage as a number. */ | ||
340 | sprintf (buf, "CP%u", GetACP ()); | ||
341 | codeset = buf; | ||
342 | } | ||
343 | # endif | ||
344 | |||
345 | # else | ||
346 | |||
347 | /* On old systems which lack it, use setlocale or getenv. */ | ||
348 | const char *locale = NULL; | ||
349 | |||
350 | /* But most old systems don't have a complete set of locales. Some | ||
351 | (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't | ||
352 | use setlocale here; it would return "C" when it doesn't support the | ||
353 | locale name the user has set. */ | ||
354 | # if 0 | ||
355 | locale = setlocale (LC_CTYPE, NULL); | ||
356 | # endif | ||
357 | if (locale == NULL || locale[0] == '\0') | ||
358 | { | ||
359 | locale = getenv ("LC_ALL"); | ||
360 | if (locale == NULL || locale[0] == '\0') | ||
361 | { | ||
362 | locale = getenv ("LC_CTYPE"); | ||
363 | if (locale == NULL || locale[0] == '\0') | ||
364 | locale = getenv ("LANG"); | ||
365 | } | ||
366 | } | ||
367 | |||
368 | /* On some old systems, one used to set locale = "iso8859_1". On others, | ||
369 | you set it to "language_COUNTRY.charset". In any case, we resolve it | ||
370 | through the charset.alias file. */ | ||
371 | codeset = locale; | ||
372 | |||
373 | # endif | ||
374 | |||
375 | #elif defined WIN32_NATIVE | ||
376 | |||
377 | static char buf[2 + 10 + 1]; | ||
378 | |||
379 | /* Woe32 has a function returning the locale's codepage as a number. */ | ||
380 | sprintf (buf, "CP%u", GetACP ()); | ||
381 | codeset = buf; | ||
382 | |||
383 | #elif defined OS2 | ||
384 | |||
385 | const char *locale; | ||
386 | static char buf[2 + 10 + 1]; | ||
387 | ULONG cp[3]; | ||
388 | ULONG cplen; | ||
389 | |||
390 | /* Allow user to override the codeset, as set in the operating system, | ||
391 | with standard language environment variables. */ | ||
392 | locale = getenv ("LC_ALL"); | ||
393 | if (locale == NULL || locale[0] == '\0') | ||
394 | { | ||
395 | locale = getenv ("LC_CTYPE"); | ||
396 | if (locale == NULL || locale[0] == '\0') | ||
397 | locale = getenv ("LANG"); | ||
398 | } | ||
399 | if (locale != NULL && locale[0] != '\0') | ||
400 | { | ||
401 | /* If the locale name contains an encoding after the dot, return it. */ | ||
402 | const char *dot = strchr (locale, '.'); | ||
403 | |||
404 | if (dot != NULL) | ||
405 | { | ||
406 | const char *modifier; | ||
407 | |||
408 | dot++; | ||
409 | /* Look for the possible @... trailer and remove it, if any. */ | ||
410 | modifier = strchr (dot, '@'); | ||
411 | if (modifier == NULL) | ||
412 | return dot; | ||
413 | if (modifier - dot < sizeof (buf)) | ||
414 | { | ||
415 | memcpy (buf, dot, modifier - dot); | ||
416 | buf [modifier - dot] = '\0'; | ||
417 | return buf; | ||
418 | } | ||
419 | } | ||
420 | |||
421 | /* Resolve through the charset.alias file. */ | ||
422 | codeset = locale; | ||
423 | } | ||
424 | else | ||
425 | { | ||
426 | /* OS/2 has a function returning the locale's codepage as a number. */ | ||
427 | if (DosQueryCp (sizeof (cp), cp, &cplen)) | ||
428 | codeset = ""; | ||
429 | else | ||
430 | { | ||
431 | sprintf (buf, "CP%u", cp[0]); | ||
432 | codeset = buf; | ||
433 | } | ||
434 | } | ||
435 | |||
436 | #endif | ||
437 | |||
438 | if (codeset == NULL) | ||
439 | /* The canonical name cannot be determined. */ | ||
440 | codeset = ""; | ||
441 | |||
442 | /* Resolve alias. */ | ||
443 | for (aliases = get_charset_aliases (); | ||
444 | *aliases != '\0'; | ||
445 | aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) | ||
446 | if (strcmp (codeset, aliases) == 0 | ||
447 | || (aliases[0] == '*' && aliases[1] == '\0')) | ||
448 | { | ||
449 | codeset = aliases + strlen (aliases) + 1; | ||
450 | break; | ||
451 | } | ||
452 | |||
453 | /* Don't return an empty string. GNU libc and GNU libiconv interpret | ||
454 | the empty string as denoting "the locale's character encoding", | ||
455 | thus GNU libiconv would call this function a second time. */ | ||
456 | if (codeset[0] == '\0') | ||
457 | codeset = "ASCII"; | ||
458 | |||
459 | return codeset; | ||
460 | } | ||
diff --git a/gl/localcharset.h b/gl/localcharset.h new file mode 100644 index 00000000..b9a3013a --- /dev/null +++ b/gl/localcharset.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /* Determine a canonical name for the current locale's character encoding. | ||
2 | Copyright (C) 2000-2003 Free Software Foundation, Inc. | ||
3 | This file is part of the GNU CHARSET Library. | ||
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 3, 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 along | ||
16 | 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 | #ifndef _LOCALCHARSET_H | ||
20 | #define _LOCALCHARSET_H | ||
21 | |||
22 | |||
23 | #ifdef __cplusplus | ||
24 | extern "C" { | ||
25 | #endif | ||
26 | |||
27 | |||
28 | /* Determine the current locale's character encoding, and canonicalize it | ||
29 | into one of the canonical names listed in config.charset. | ||
30 | The result must not be freed; it is statically allocated. | ||
31 | If the canonical name cannot be determined, the result is a non-canonical | ||
32 | name. */ | ||
33 | extern const char * locale_charset (void); | ||
34 | |||
35 | |||
36 | #ifdef __cplusplus | ||
37 | } | ||
38 | #endif | ||
39 | |||
40 | |||
41 | #endif /* _LOCALCHARSET_H */ | ||
diff --git a/gl/m4/absolute-header.m4 b/gl/m4/absolute-header.m4 index c649df08..5b7a2fc3 100644 --- a/gl/m4/absolute-header.m4 +++ b/gl/m4/absolute-header.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # absolute-header.m4 serial 6 | 1 | # absolute-header.m4 serial 7 |
2 | dnl Copyright (C) 2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2006, 2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -32,7 +32,12 @@ dnl eval is necessary to expand ac_cpp. | |||
32 | dnl Ultrix and Pyramid sh refuse to redirect output of eval, so use subshell. | 32 | dnl Ultrix and Pyramid sh refuse to redirect output of eval, so use subshell. |
33 | AS_VAR_SET(gl_absolute_header, | 33 | AS_VAR_SET(gl_absolute_header, |
34 | [`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | | 34 | [`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | |
35 | sed -n '\#/]m4_quote(m4_defn([gl_HEADER_NAME]))[#{s#.*"\(.*/]m4_quote(m4_defn([gl_HEADER_NAME]))[\)".*#\1#;s#^/[^/]#//&#;p;q;}'`]) | 35 | sed -n '\#/]m4_quote(m4_defn([gl_HEADER_NAME]))[#{ |
36 | s#.*"\(.*/]m4_quote(m4_defn([gl_HEADER_NAME]))[\)".*#\1# | ||
37 | s#^/[^/]#//&# | ||
38 | p | ||
39 | q | ||
40 | }'`]) | ||
36 | fi | 41 | fi |
37 | AS_VAR_POPDEF([ac_header_exists])dnl | 42 | AS_VAR_POPDEF([ac_header_exists])dnl |
38 | ])dnl | 43 | ])dnl |
diff --git a/gl/m4/alloca.m4 b/gl/m4/alloca.m4 index eb62e0e7..95f54a6d 100644 --- a/gl/m4/alloca.m4 +++ b/gl/m4/alloca.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # alloca.m4 serial 7 | 1 | # alloca.m4 serial 8 |
2 | dnl Copyright (C) 2002-2004, 2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2002-2004, 2006, 2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -39,10 +39,6 @@ AC_DEFUN([gl_FUNC_ALLOCA], | |||
39 | ALLOCA_H=alloca.h | 39 | ALLOCA_H=alloca.h |
40 | fi | 40 | fi |
41 | AC_SUBST([ALLOCA_H]) | 41 | AC_SUBST([ALLOCA_H]) |
42 | |||
43 | AC_DEFINE(HAVE_ALLOCA_H, 1, | ||
44 | [Define HAVE_ALLOCA_H for backward compatibility with older code | ||
45 | that includes <alloca.h> only if HAVE_ALLOCA_H is defined.]) | ||
46 | ]) | 42 | ]) |
47 | 43 | ||
48 | # Prerequisites of lib/alloca.c. | 44 | # Prerequisites of lib/alloca.c. |
diff --git a/gl/m4/extensions.m4 b/gl/m4/extensions.m4 index 143a9e54..bcbb3cee 100644 --- a/gl/m4/extensions.m4 +++ b/gl/m4/extensions.m4 | |||
@@ -1,14 +1,14 @@ | |||
1 | # serial 4 -*- Autoconf -*- | 1 | # serial 5 -*- Autoconf -*- |
2 | # Enable extensions on systems that normally disable them. | 2 | # Enable extensions on systems that normally disable them. |
3 | 3 | ||
4 | # Copyright (C) 2003, 2006 Free Software Foundation, Inc. | 4 | # Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc. |
5 | # This file is free software; the Free Software Foundation | 5 | # This file is free software; the Free Software Foundation |
6 | # gives unlimited permission to copy and/or distribute it, | 6 | # gives unlimited permission to copy and/or distribute it, |
7 | # with or without modifications, as long as this notice is preserved. | 7 | # with or without modifications, as long as this notice is preserved. |
8 | 8 | ||
9 | # This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS | 9 | # This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS |
10 | # Autoconf. Perhaps we can remove this once we can assume Autoconf | 10 | # Autoconf. Perhaps we can remove this once we can assume Autoconf |
11 | # 2.61 or later everywhere, but since CVS Autoconf mutates rapidly | 11 | # 2.62 or later everywhere, but since CVS Autoconf mutates rapidly |
12 | # enough in this area it's likely we'll need to redefine | 12 | # enough in this area it's likely we'll need to redefine |
13 | # AC_USE_SYSTEM_EXTENSIONS for quite some time. | 13 | # AC_USE_SYSTEM_EXTENSIONS for quite some time. |
14 | 14 | ||
@@ -16,26 +16,48 @@ | |||
16 | # ------------------------ | 16 | # ------------------------ |
17 | # Enable extensions on systems that normally disable them, | 17 | # Enable extensions on systems that normally disable them, |
18 | # typically due to standards-conformance issues. | 18 | # typically due to standards-conformance issues. |
19 | # Remember that #undef in AH_VERBATIM gets replaced with #define by | ||
20 | # AC_DEFINE. The goal here is to define all known feature-enabling | ||
21 | # macros, then, if reports of conflicts are made, disable macros that | ||
22 | # cause problems on some platforms (such as __EXTENSIONS__). | ||
19 | AC_DEFUN([AC_USE_SYSTEM_EXTENSIONS], | 23 | AC_DEFUN([AC_USE_SYSTEM_EXTENSIONS], |
20 | [ | 24 | [AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl |
21 | AC_BEFORE([$0], [AC_COMPILE_IFELSE]) | 25 | AC_BEFORE([$0], [AC_RUN_IFELSE])dnl |
22 | AC_BEFORE([$0], [AC_RUN_IFELSE]) | ||
23 | 26 | ||
24 | AC_REQUIRE([AC_GNU_SOURCE]) | 27 | AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) |
25 | AC_REQUIRE([AC_AIX]) | 28 | if test "$MINIX" = yes; then |
26 | AC_REQUIRE([AC_MINIX]) | 29 | AC_DEFINE([_POSIX_SOURCE], [1], |
30 | [Define to 1 if you need to in order for `stat' and other | ||
31 | things to work.]) | ||
32 | AC_DEFINE([_POSIX_1_SOURCE], [2], | ||
33 | [Define to 2 if the system does not provide POSIX.1 features | ||
34 | except with this defined.]) | ||
35 | AC_DEFINE([_MINIX], [1], | ||
36 | [Define to 1 if on MINIX.]) | ||
37 | fi | ||
27 | 38 | ||
28 | AH_VERBATIM([__EXTENSIONS__], | 39 | AH_VERBATIM([__EXTENSIONS__], |
29 | [/* Enable extensions on Solaris. */ | 40 | [/* Enable extensions on AIX 3, Interix. */ |
30 | #ifndef __EXTENSIONS__ | 41 | #ifndef _ALL_SOURCE |
31 | # undef __EXTENSIONS__ | 42 | # undef _ALL_SOURCE |
43 | #endif | ||
44 | /* Enable GNU extensions on systems that have them. */ | ||
45 | #ifndef _GNU_SOURCE | ||
46 | # undef _GNU_SOURCE | ||
32 | #endif | 47 | #endif |
48 | /* Enable threading extensions on Solaris. */ | ||
33 | #ifndef _POSIX_PTHREAD_SEMANTICS | 49 | #ifndef _POSIX_PTHREAD_SEMANTICS |
34 | # undef _POSIX_PTHREAD_SEMANTICS | 50 | # undef _POSIX_PTHREAD_SEMANTICS |
35 | #endif | 51 | #endif |
52 | /* Enable extensions on HP NonStop. */ | ||
36 | #ifndef _TANDEM_SOURCE | 53 | #ifndef _TANDEM_SOURCE |
37 | # undef _TANDEM_SOURCE | 54 | # undef _TANDEM_SOURCE |
38 | #endif]) | 55 | #endif |
56 | /* Enable general extensions on Solaris. */ | ||
57 | #ifndef __EXTENSIONS__ | ||
58 | # undef __EXTENSIONS__ | ||
59 | #endif | ||
60 | ]) | ||
39 | AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], | 61 | AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], |
40 | [ac_cv_safe_to_define___extensions__], | 62 | [ac_cv_safe_to_define___extensions__], |
41 | [AC_COMPILE_IFELSE( | 63 | [AC_COMPILE_IFELSE( |
@@ -46,9 +68,11 @@ AC_DEFUN([AC_USE_SYSTEM_EXTENSIONS], | |||
46 | [ac_cv_safe_to_define___extensions__=no])]) | 68 | [ac_cv_safe_to_define___extensions__=no])]) |
47 | test $ac_cv_safe_to_define___extensions__ = yes && | 69 | test $ac_cv_safe_to_define___extensions__ = yes && |
48 | AC_DEFINE([__EXTENSIONS__]) | 70 | AC_DEFINE([__EXTENSIONS__]) |
71 | AC_DEFINE([_ALL_SOURCE]) | ||
72 | AC_DEFINE([_GNU_SOURCE]) | ||
49 | AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) | 73 | AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) |
50 | AC_DEFINE([_TANDEM_SOURCE]) | 74 | AC_DEFINE([_TANDEM_SOURCE]) |
51 | ]) | 75 | ])# AC_USE_SYSTEM_EXTENSIONS |
52 | 76 | ||
53 | # gl_USE_SYSTEM_EXTENSIONS | 77 | # gl_USE_SYSTEM_EXTENSIONS |
54 | # ------------------------ | 78 | # ------------------------ |
diff --git a/gl/m4/float_h.m4 b/gl/m4/float_h.m4 new file mode 100644 index 00000000..d36e3a46 --- /dev/null +++ b/gl/m4/float_h.m4 | |||
@@ -0,0 +1,19 @@ | |||
1 | # float_h.m4 serial 3 | ||
2 | dnl Copyright (C) 2007 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | AC_DEFUN([gl_FLOAT_H], | ||
8 | [ | ||
9 | AC_REQUIRE([AC_PROG_CC]) | ||
10 | AC_REQUIRE([AC_CANONICAL_HOST]) | ||
11 | FLOAT_H= | ||
12 | case "$host_os" in | ||
13 | beos* | openbsd*) | ||
14 | FLOAT_H=float.h | ||
15 | gl_CHECK_NEXT_HEADERS([float.h]) | ||
16 | ;; | ||
17 | esac | ||
18 | AC_SUBST([FLOAT_H]) | ||
19 | ]) | ||
diff --git a/gl/m4/fsusage.m4 b/gl/m4/fsusage.m4 index 08bf06c9..18eedbca 100644 --- a/gl/m4/fsusage.m4 +++ b/gl/m4/fsusage.m4 | |||
@@ -1,8 +1,7 @@ | |||
1 | #serial 22 | 1 | #serial 23 |
2 | # Obtaining file system usage information. | 2 | # Obtaining file system usage information. |
3 | 3 | ||
4 | # Copyright (C) 1997, 1998, 2000, 2001, 2003, 2004, 2005, 2006 Free Software | 4 | # Copyright (C) 1997, 1998, 2000, 2001, 2003-2007 Free Software Foundation, Inc. |
5 | # Foundation, Inc. | ||
6 | # | 5 | # |
7 | # This file is free software; the Free Software Foundation | 6 | # This file is free software; the Free Software Foundation |
8 | # gives unlimited permission to copy and/or distribute it, | 7 | # gives unlimited permission to copy and/or distribute it, |
@@ -55,6 +54,11 @@ one of the corresponding file systems is hard-mounted, but not available. | |||
55 | statvfs in GNU libc on BeOS operates differently: it only makes a system | 54 | statvfs in GNU libc on BeOS operates differently: it only makes a system |
56 | call. | 55 | call. |
57 | #endif | 56 | #endif |
57 | |||
58 | #ifdef __osf__ | ||
59 | "Do not use Tru64's statvfs implementation" | ||
60 | #endif | ||
61 | |||
58 | #include <sys/statvfs.h>], | 62 | #include <sys/statvfs.h>], |
59 | [struct statvfs fsd; statvfs (0, &fsd);], | 63 | [struct statvfs fsd; statvfs (0, &fsd);], |
60 | fu_cv_sys_stat_statvfs=yes, | 64 | fu_cv_sys_stat_statvfs=yes, |
diff --git a/gl/m4/getaddrinfo.m4 b/gl/m4/getaddrinfo.m4 index db285d94..5d36c195 100644 --- a/gl/m4/getaddrinfo.m4 +++ b/gl/m4/getaddrinfo.m4 | |||
@@ -1,15 +1,31 @@ | |||
1 | # getaddrinfo.m4 serial 11 | 1 | # getaddrinfo.m4 serial 15 |
2 | dnl Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
6 | 6 | ||
7 | AC_DEFUN([gl_GETADDRINFO], | 7 | AC_DEFUN([gl_GETADDRINFO], |
8 | [ | 8 | [ |
9 | AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H | ||
9 | AC_MSG_NOTICE([checking how to do getaddrinfo, freeaddrinfo and getnameinfo]) | 10 | AC_MSG_NOTICE([checking how to do getaddrinfo, freeaddrinfo and getnameinfo]) |
10 | 11 | ||
12 | AC_CHECK_HEADERS_ONCE(netdb.h) | ||
13 | |||
11 | AC_SEARCH_LIBS(getaddrinfo, [nsl socket]) | 14 | AC_SEARCH_LIBS(getaddrinfo, [nsl socket]) |
12 | AC_CHECK_FUNCS(getaddrinfo,, [ | 15 | AC_CACHE_CHECK([for getaddrinfo], [gl_cv_func_getaddrinfo], [ |
16 | AC_TRY_LINK([ | ||
17 | #include <sys/types.h> | ||
18 | #ifdef HAVE_SYS_SOCKET_H | ||
19 | #include <sys/socket.h> | ||
20 | #endif | ||
21 | #ifdef HAVE_NETDB_H | ||
22 | #include <netdb.h> | ||
23 | #endif | ||
24 | #include <stddef.h> | ||
25 | ], [getaddrinfo("", "", NULL, NULL);], | ||
26 | [gl_cv_func_getaddrinfo=yes], | ||
27 | [gl_cv_func_getaddrinfo=no])]) | ||
28 | if test $gl_cv_func_getaddrinfo = no; then | ||
13 | AC_CACHE_CHECK(for getaddrinfo in ws2tcpip.h and -lws2_32, | 29 | AC_CACHE_CHECK(for getaddrinfo in ws2tcpip.h and -lws2_32, |
14 | gl_cv_w32_getaddrinfo, [ | 30 | gl_cv_w32_getaddrinfo, [ |
15 | gl_cv_w32_getaddrinfo=no | 31 | gl_cv_w32_getaddrinfo=no |
@@ -19,21 +35,46 @@ AC_DEFUN([gl_GETADDRINFO], | |||
19 | #ifdef HAVE_WS2TCPIP_H | 35 | #ifdef HAVE_WS2TCPIP_H |
20 | #include <ws2tcpip.h> | 36 | #include <ws2tcpip.h> |
21 | #endif | 37 | #endif |
22 | ], [getaddrinfo(0, 0, 0, 0);], gl_cv_w32_getaddrinfo=yes) | 38 | #include <stddef.h> |
39 | ], [getaddrinfo(NULL, NULL, NULL, NULL);], gl_cv_w32_getaddrinfo=yes) | ||
23 | LIBS="$am_save_LIBS"]) | 40 | LIBS="$am_save_LIBS"]) |
24 | if test "$gl_cv_w32_getaddrinfo" = "yes"; then | 41 | if test "$gl_cv_w32_getaddrinfo" = "yes"; then |
25 | LIBS="$LIBS -lws2_32" | 42 | LIBS="$LIBS -lws2_32" |
26 | else | 43 | else |
27 | AC_LIBOBJ(getaddrinfo) | 44 | AC_LIBOBJ(getaddrinfo) |
28 | fi | 45 | fi |
29 | ]) | 46 | fi |
47 | |||
48 | # We can't use AC_REPLACE_FUNCS here because gai_strerror may be an | ||
49 | # inline function declared in ws2tcpip.h, so we need to get that | ||
50 | # header included somehow. | ||
51 | AC_CACHE_CHECK([for gai_strerror (possibly via ws2tcpip.h)], | ||
52 | gl_cv_func_gai_strerror, [ | ||
53 | AC_TRY_LINK([ | ||
54 | #include <sys/types.h> | ||
55 | #ifdef HAVE_SYS_SOCKET_H | ||
56 | #include <sys/socket.h> | ||
57 | #endif | ||
58 | #ifdef HAVE_NETDB_H | ||
59 | #include <netdb.h> | ||
60 | #endif | ||
61 | #ifdef HAVE_WS2TCPIP_H | ||
62 | #include <ws2tcpip.h> | ||
63 | #endif | ||
64 | #include <stddef.h> | ||
65 | ], [gai_strerror (NULL);], | ||
66 | [gl_cv_func_gai_strerror=yes], | ||
67 | [gl_cv_func_gai_strerror=no])]) | ||
68 | if test $gl_cv_func_gai_strerror = no; then | ||
69 | AC_LIBOBJ(gai_strerror) | ||
70 | fi | ||
30 | 71 | ||
31 | AC_REPLACE_FUNCS(gai_strerror) | ||
32 | gl_PREREQ_GETADDRINFO | 72 | gl_PREREQ_GETADDRINFO |
33 | ]) | 73 | ]) |
34 | 74 | ||
35 | # Prerequisites of lib/getaddrinfo.h and lib/getaddrinfo.c. | 75 | # Prerequisites of lib/getaddrinfo.h and lib/getaddrinfo.c. |
36 | AC_DEFUN([gl_PREREQ_GETADDRINFO], [ | 76 | AC_DEFUN([gl_PREREQ_GETADDRINFO], [ |
77 | AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H | ||
37 | AC_SEARCH_LIBS(gethostbyname, [inet nsl]) | 78 | AC_SEARCH_LIBS(gethostbyname, [inet nsl]) |
38 | AC_SEARCH_LIBS(getservbyname, [inet nsl socket xnet]) | 79 | AC_SEARCH_LIBS(getservbyname, [inet nsl socket xnet]) |
39 | AC_CHECK_FUNCS(gethostbyname,, [ | 80 | AC_CHECK_FUNCS(gethostbyname,, [ |
@@ -46,7 +87,8 @@ AC_DEFUN([gl_PREREQ_GETADDRINFO], [ | |||
46 | #ifdef HAVE_WINSOCK2_H | 87 | #ifdef HAVE_WINSOCK2_H |
47 | #include <winsock2.h> | 88 | #include <winsock2.h> |
48 | #endif | 89 | #endif |
49 | ], [gethostbyname(0);], gl_cv_w32_gethostbyname=yes) | 90 | #include <stddef.h> |
91 | ], [gethostbyname(NULL);], gl_cv_w32_gethostbyname=yes) | ||
50 | LIBS="$am_save_LIBS"]) | 92 | LIBS="$am_save_LIBS"]) |
51 | if test "$gl_cv_w32_gethostbyname" = "yes"; then | 93 | if test "$gl_cv_w32_gethostbyname" = "yes"; then |
52 | LIBS="$LIBS -lws2_32" | 94 | LIBS="$LIBS -lws2_32" |
@@ -56,7 +98,7 @@ AC_DEFUN([gl_PREREQ_GETADDRINFO], [ | |||
56 | AC_REQUIRE([gl_SOCKET_FAMILIES]) | 98 | AC_REQUIRE([gl_SOCKET_FAMILIES]) |
57 | AC_REQUIRE([gl_HEADER_SYS_SOCKET]) | 99 | AC_REQUIRE([gl_HEADER_SYS_SOCKET]) |
58 | AC_REQUIRE([AC_C_INLINE]) | 100 | AC_REQUIRE([AC_C_INLINE]) |
59 | AC_REQUIRE([AC_GNU_SOURCE]) | 101 | AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) |
60 | AC_CHECK_HEADERS_ONCE(netinet/in.h netdb.h) | 102 | AC_CHECK_HEADERS_ONCE(netinet/in.h netdb.h) |
61 | AC_CHECK_DECLS([getaddrinfo, freeaddrinfo, gai_strerror, getnameinfo],,,[ | 103 | AC_CHECK_DECLS([getaddrinfo, freeaddrinfo, gai_strerror, getnameinfo],,,[ |
62 | /* sys/types.h is not needed according to POSIX, but the | 104 | /* sys/types.h is not needed according to POSIX, but the |
diff --git a/gl/m4/getloadavg.m4 b/gl/m4/getloadavg.m4 index 82437291..c1547c74 100644 --- a/gl/m4/getloadavg.m4 +++ b/gl/m4/getloadavg.m4 | |||
@@ -31,6 +31,10 @@ AC_CHECK_FUNCS(pstat_getdynamic) | |||
31 | AC_CHECK_LIB(kstat, kstat_open) | 31 | AC_CHECK_LIB(kstat, kstat_open) |
32 | test $ac_cv_lib_kstat_kstat_open = yes && gl_have_func=yes | 32 | test $ac_cv_lib_kstat_kstat_open = yes && gl_have_func=yes |
33 | 33 | ||
34 | # AIX has libperfstat which does not require root | ||
35 | AC_CHECK_LIB(perfstat, perfstat_cpu_total) | ||
36 | test $ac_cv_lib_perfstat_perfstat_cpu_total = yes && gl_have_func=yes | ||
37 | |||
34 | # Some systems with -lutil have (and need) -lkvm as well, some do not. | 38 | # Some systems with -lutil have (and need) -lkvm as well, some do not. |
35 | # On Solaris, -lkvm requires nlist from -lelf, so check that first | 39 | # On Solaris, -lkvm requires nlist from -lelf, so check that first |
36 | # to get the right answer into the cache. | 40 | # to get the right answer into the cache. |
diff --git a/gl/m4/gettext.m4 b/gl/m4/gettext.m4 index 91c345e9..c9ae1f7d 100644 --- a/gl/m4/gettext.m4 +++ b/gl/m4/gettext.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # gettext.m4 serial 59 (gettext-0.16.1) | 1 | # gettext.m4 serial 60 (gettext-0.17) |
2 | dnl Copyright (C) 1995-2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -362,44 +362,6 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_a | |||
362 | ]) | 362 | ]) |
363 | 363 | ||
364 | 364 | ||
365 | dnl Checks for special options needed on MacOS X. | ||
366 | dnl Defines INTL_MACOSX_LIBS. | ||
367 | AC_DEFUN([gt_INTL_MACOSX], | ||
368 | [ | ||
369 | dnl Check for API introduced in MacOS X 10.2. | ||
370 | AC_CACHE_CHECK([for CFPreferencesCopyAppValue], | ||
371 | gt_cv_func_CFPreferencesCopyAppValue, | ||
372 | [gt_save_LIBS="$LIBS" | ||
373 | LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" | ||
374 | AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>], | ||
375 | [CFPreferencesCopyAppValue(NULL, NULL)], | ||
376 | [gt_cv_func_CFPreferencesCopyAppValue=yes], | ||
377 | [gt_cv_func_CFPreferencesCopyAppValue=no]) | ||
378 | LIBS="$gt_save_LIBS"]) | ||
379 | if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then | ||
380 | AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1, | ||
381 | [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) | ||
382 | fi | ||
383 | dnl Check for API introduced in MacOS X 10.3. | ||
384 | AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent, | ||
385 | [gt_save_LIBS="$LIBS" | ||
386 | LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" | ||
387 | AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();], | ||
388 | [gt_cv_func_CFLocaleCopyCurrent=yes], | ||
389 | [gt_cv_func_CFLocaleCopyCurrent=no]) | ||
390 | LIBS="$gt_save_LIBS"]) | ||
391 | if test $gt_cv_func_CFLocaleCopyCurrent = yes; then | ||
392 | AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1, | ||
393 | [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) | ||
394 | fi | ||
395 | INTL_MACOSX_LIBS= | ||
396 | if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then | ||
397 | INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" | ||
398 | fi | ||
399 | AC_SUBST([INTL_MACOSX_LIBS]) | ||
400 | ]) | ||
401 | |||
402 | |||
403 | dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. | 365 | dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. |
404 | m4_define([gt_NEEDS_INIT], | 366 | m4_define([gt_NEEDS_INIT], |
405 | [ | 367 | [ |
diff --git a/gl/m4/gnulib-cache.m4 b/gl/m4/gnulib-cache.m4 index e78c8604..6da4d657 100644 --- a/gl/m4/gnulib-cache.m4 +++ b/gl/m4/gnulib-cache.m4 | |||
@@ -15,7 +15,7 @@ | |||
15 | 15 | ||
16 | 16 | ||
17 | # Specification in the form of a command-line invocation: | 17 | # Specification in the form of a command-line invocation: |
18 | # gnulib-tool --import --dir=. --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --aux-dir=. --no-libtool --macro-prefix=gl dirname fsusage getaddrinfo gethostname getloadavg getopt gettext mountlist regex vasprintf vsnprintf | 18 | # gnulib-tool --import --dir=. --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --aux-dir=build-aux --no-libtool --macro-prefix=gl dirname fsusage getaddrinfo gethostname getloadavg getopt gettext mountlist regex vasprintf vsnprintf |
19 | 19 | ||
20 | # Specification in the form of a few gnulib-tool.m4 macro invocations: | 20 | # Specification in the form of a few gnulib-tool.m4 macro invocations: |
21 | gl_LOCAL_DIR([]) | 21 | gl_LOCAL_DIR([]) |
@@ -23,8 +23,10 @@ gl_MODULES([dirname fsusage getaddrinfo gethostname getloadavg getopt gettext mo | |||
23 | gl_AVOID([]) | 23 | gl_AVOID([]) |
24 | gl_SOURCE_BASE([gl]) | 24 | gl_SOURCE_BASE([gl]) |
25 | gl_M4_BASE([gl/m4]) | 25 | gl_M4_BASE([gl/m4]) |
26 | gl_PO_BASE([]) | ||
26 | gl_DOC_BASE([doc]) | 27 | gl_DOC_BASE([doc]) |
27 | gl_TESTS_BASE([tests]) | 28 | gl_TESTS_BASE([tests]) |
28 | gl_LIB([libgnu]) | 29 | gl_LIB([libgnu]) |
29 | gl_MAKEFILE_NAME([]) | 30 | gl_MAKEFILE_NAME([]) |
30 | gl_MACRO_PREFIX([gl]) | 31 | gl_MACRO_PREFIX([gl]) |
32 | gl_PO_DOMAIN([]) | ||
diff --git a/gl/m4/gnulib-common.m4 b/gl/m4/gnulib-common.m4 index 53980108..9336d726 100644 --- a/gl/m4/gnulib-common.m4 +++ b/gl/m4/gnulib-common.m4 | |||
@@ -1,4 +1,4 @@ | |||
1 | # gnulib-common.m4 serial 2 | 1 | # gnulib-common.m4 serial 3 |
2 | dnl Copyright (C) 2007 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
@@ -20,3 +20,46 @@ m4_ifdef([AC_PROG_MKDIR_P], [], [ | |||
20 | [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake | 20 | [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake |
21 | MKDIR_P='$(mkdir_p)' | 21 | MKDIR_P='$(mkdir_p)' |
22 | AC_SUBST([MKDIR_P])])]) | 22 | AC_SUBST([MKDIR_P])])]) |
23 | |||
24 | # AC_C_RESTRICT | ||
25 | # This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61, | ||
26 | # so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++ | ||
27 | # works. | ||
28 | # This definition can be removed once autoconf >= 2.62 can be assumed. | ||
29 | AC_DEFUN([AC_C_RESTRICT], | ||
30 | [AC_CACHE_CHECK([for C/C++ restrict keyword], ac_cv_c_restrict, | ||
31 | [ac_cv_c_restrict=no | ||
32 | # The order here caters to the fact that C++ does not require restrict. | ||
33 | for ac_kw in __restrict __restrict__ _Restrict restrict; do | ||
34 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM( | ||
35 | [[typedef int * int_ptr; | ||
36 | int foo (int_ptr $ac_kw ip) { | ||
37 | return ip[0]; | ||
38 | }]], | ||
39 | [[int s[1]; | ||
40 | int * $ac_kw t = s; | ||
41 | t[0] = 0; | ||
42 | return foo(t)]])], | ||
43 | [ac_cv_c_restrict=$ac_kw]) | ||
44 | test "$ac_cv_c_restrict" != no && break | ||
45 | done | ||
46 | ]) | ||
47 | AH_VERBATIM([restrict], | ||
48 | [/* Define to the equivalent of the C99 'restrict' keyword, or to | ||
49 | nothing if this is not supported. Do not define if restrict is | ||
50 | supported directly. */ | ||
51 | #undef restrict | ||
52 | /* Work around a bug in Sun C++: it does not support _Restrict, even | ||
53 | though the corresponding Sun C compiler does, which causes | ||
54 | "#define restrict _Restrict" in the previous line. Perhaps some future | ||
55 | version of Sun C++ will work with _Restrict; if so, it'll probably | ||
56 | define __RESTRICT, just as Sun C does. */ | ||
57 | #if defined __SUNPRO_CC && !defined __RESTRICT | ||
58 | # define _Restrict | ||
59 | #endif]) | ||
60 | case $ac_cv_c_restrict in | ||
61 | restrict) ;; | ||
62 | no) AC_DEFINE([restrict], []) ;; | ||
63 | *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; | ||
64 | esac | ||
65 | ]) | ||
diff --git a/gl/m4/gnulib-comp.m4 b/gl/m4/gnulib-comp.m4 index ed4da7d9..a17e36ad 100644 --- a/gl/m4/gnulib-comp.m4 +++ b/gl/m4/gnulib-comp.m4 | |||
@@ -27,78 +27,94 @@ AC_DEFUN([gl_EARLY], | |||
27 | AC_REQUIRE([AC_PROG_RANLIB]) | 27 | AC_REQUIRE([AC_PROG_RANLIB]) |
28 | AC_REQUIRE([AC_GNU_SOURCE]) | 28 | AC_REQUIRE([AC_GNU_SOURCE]) |
29 | AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) | 29 | AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) |
30 | AC_REQUIRE([gl_LOCK_EARLY]) | ||
31 | ]) | 30 | ]) |
32 | 31 | ||
33 | # This macro should be invoked from ./configure.in, in the section | 32 | # This macro should be invoked from ./configure.in, in the section |
34 | # "Check for header files, types and library functions". | 33 | # "Check for header files, types and library functions". |
35 | AC_DEFUN([gl_INIT], | 34 | AC_DEFUN([gl_INIT], |
36 | [ | 35 | [ |
37 | m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) | ||
38 | m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) | ||
39 | m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) | ||
40 | AM_CONDITIONAL([GL_COND_LIBTOOL], [false]) | 36 | AM_CONDITIONAL([GL_COND_LIBTOOL], [false]) |
41 | gl_cond_libtool=false | 37 | gl_cond_libtool=false |
42 | gl_libdeps= | 38 | gl_libdeps= |
43 | gl_ltlibdeps= | 39 | gl_ltlibdeps= |
40 | m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) | ||
41 | m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) | ||
42 | m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) | ||
44 | gl_source_base='gl' | 43 | gl_source_base='gl' |
45 | gl_FUNC_ALLOCA | 44 | gl_FUNC_ALLOCA |
46 | gl_HEADER_ARPA_INET | 45 | gl_HEADER_ARPA_INET |
46 | AC_PROG_MKDIR_P | ||
47 | gl_C_STRTOD | 47 | gl_C_STRTOD |
48 | gl_CLOEXEC | 48 | gl_CLOEXEC |
49 | gl_DIRNAME | 49 | gl_DIRNAME |
50 | gl_DOUBLE_SLASH_ROOT | 50 | gl_DOUBLE_SLASH_ROOT |
51 | gl_ERROR | 51 | gl_ERROR |
52 | m4_ifdef([AM_XGETTEXT_OPTION], | ||
53 | [AM_XGETTEXT_OPTION([--flag=error:3:c-format]) | ||
54 | AM_XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) | ||
52 | gl_EXITFAIL | 55 | gl_EXITFAIL |
53 | dnl gl_USE_SYSTEM_EXTENSIONS must be added quite early to configure.ac. | ||
54 | gl_FCNTL_SAFER | 56 | gl_FCNTL_SAFER |
55 | gl_MODULE_INDICATOR([fcntl-safer]) | 57 | gl_MODULE_INDICATOR([fcntl-safer]) |
58 | gl_FLOAT_H | ||
56 | gl_FSUSAGE | 59 | gl_FSUSAGE |
57 | gl_GETADDRINFO | 60 | gl_GETADDRINFO |
58 | gl_FUNC_GETHOSTNAME | 61 | gl_FUNC_GETHOSTNAME |
59 | gl_GETLOADAVG([$gl_source_base]) | 62 | gl_GETLOADAVG([$gl_source_base]) |
60 | gl_GETOPT | 63 | gl_GETOPT |
61 | dnl you must add AM_GNU_GETTEXT([external]) or similar to configure.ac. | 64 | dnl you must add AM_GNU_GETTEXT([external]) or similar to configure.ac. |
62 | AM_GNU_GETTEXT_VERSION([0.15]) | 65 | AM_GNU_GETTEXT_VERSION([0.17]) |
66 | AC_SUBST([LIBINTL]) | ||
67 | AC_SUBST([LTLIBINTL]) | ||
63 | gl_INET_NTOP | 68 | gl_INET_NTOP |
64 | gl_INLINE | 69 | gl_INLINE |
70 | gl_LOCALCHARSET | ||
71 | LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(top_builddir)/$gl_source_base\"" | ||
72 | AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT]) | ||
65 | AC_FUNC_MALLOC | 73 | AC_FUNC_MALLOC |
66 | gl_MBCHAR | 74 | AC_DEFINE([GNULIB_MALLOC_GNU], 1, [Define to indicate the 'malloc' module.]) |
67 | gl_MBITER | 75 | gl_FUNC_MALLOC_POSIX |
68 | gl_FUNC_MEMCHR | 76 | gl_STDLIB_MODULE_INDICATOR([malloc-posix]) |
69 | gl_MINMAX | ||
70 | gl_MOUNTLIST | 77 | gl_MOUNTLIST |
71 | gl_HEADER_NETINET_IN | 78 | gl_HEADER_NETINET_IN |
79 | AC_PROG_MKDIR_P | ||
72 | gl_REGEX | 80 | gl_REGEX |
73 | gl_SAFE_READ | 81 | gl_SAFE_READ |
74 | gl_SAFE_WRITE | 82 | gl_SAFE_WRITE |
75 | gl_SIZE_MAX | 83 | gl_SIZE_MAX |
76 | gl_FUNC_SNPRINTF | 84 | gl_FUNC_SNPRINTF |
85 | gl_STDIO_MODULE_INDICATOR([snprintf]) | ||
77 | gl_TYPE_SOCKLEN_T | 86 | gl_TYPE_SOCKLEN_T |
78 | gt_TYPE_SSIZE_T | 87 | gt_TYPE_SSIZE_T |
79 | AM_STDBOOL_H | 88 | AM_STDBOOL_H |
80 | gl_STDINT_H | 89 | gl_STDINT_H |
81 | gl_STRCASE | 90 | gl_STDIO_H |
91 | gl_STDLIB_H | ||
82 | gl_FUNC_STRDUP | 92 | gl_FUNC_STRDUP |
93 | gl_STRING_MODULE_INDICATOR([strdup]) | ||
94 | gl_FUNC_STRERROR | ||
95 | gl_STRING_MODULE_INDICATOR([strerror]) | ||
96 | gl_HEADER_STRING_H | ||
83 | gl_FUNC_STRNDUP | 97 | gl_FUNC_STRNDUP |
98 | gl_STRING_MODULE_INDICATOR([strndup]) | ||
84 | gl_FUNC_STRNLEN | 99 | gl_FUNC_STRNLEN |
100 | gl_STRING_MODULE_INDICATOR([strnlen]) | ||
85 | gl_HEADER_SYS_SOCKET | 101 | gl_HEADER_SYS_SOCKET |
86 | AC_PROG_MKDIR_P | 102 | AC_PROG_MKDIR_P |
87 | gl_HEADER_UNISTD | 103 | gl_UNISTD_H |
88 | gl_UNISTD_SAFER | 104 | gl_UNISTD_SAFER |
89 | gl_FUNC_VASNPRINTF | 105 | gl_FUNC_VASNPRINTF |
90 | gl_FUNC_VASPRINTF | 106 | gl_FUNC_VASPRINTF |
107 | gl_STDIO_MODULE_INDICATOR([vasprintf]) | ||
108 | m4_ifdef([AM_XGETTEXT_OPTION], | ||
109 | [AM_XGETTEXT_OPTION([--flag=asprintf:2:c-format]) | ||
110 | AM_XGETTEXT_OPTION([--flag=vasprintf:2:c-format])]) | ||
91 | gl_FUNC_VSNPRINTF | 111 | gl_FUNC_VSNPRINTF |
112 | gl_STDIO_MODULE_INDICATOR([vsnprintf]) | ||
92 | gl_WCHAR_H | 113 | gl_WCHAR_H |
93 | gl_WCTYPE_H | 114 | gl_WCTYPE_H |
94 | gl_FUNC_WCWIDTH | ||
95 | gl_XALLOC | 115 | gl_XALLOC |
96 | gl_XSIZE | 116 | gl_XSIZE |
97 | gl_XSTRNDUP | 117 | gl_XSTRNDUP |
98 | LIBGNU_LIBDEPS="$gl_libdeps" | ||
99 | AC_SUBST([LIBGNU_LIBDEPS]) | ||
100 | LIBGNU_LTLIBDEPS="$gl_ltlibdeps" | ||
101 | AC_SUBST([LIBGNU_LTLIBDEPS]) | ||
102 | m4_popdef([AC_LIBSOURCES]) | 118 | m4_popdef([AC_LIBSOURCES]) |
103 | m4_popdef([AC_REPLACE_FUNCS]) | 119 | m4_popdef([AC_REPLACE_FUNCS]) |
104 | m4_popdef([AC_LIBOBJ]) | 120 | m4_popdef([AC_LIBOBJ]) |
@@ -116,29 +132,112 @@ AC_DEFUN([gl_INIT], | |||
116 | AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) | 132 | AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) |
117 | AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) | 133 | AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) |
118 | ]) | 134 | ]) |
135 | gltests_libdeps= | ||
136 | gltests_ltlibdeps= | ||
137 | m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ])) | ||
138 | m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS])) | ||
139 | m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES])) | ||
140 | gl_source_base='tests' | ||
141 | m4_popdef([AC_LIBSOURCES]) | ||
142 | m4_popdef([AC_REPLACE_FUNCS]) | ||
143 | m4_popdef([AC_LIBOBJ]) | ||
144 | AC_CONFIG_COMMANDS_PRE([ | ||
145 | gltests_libobjs= | ||
146 | gltests_ltlibobjs= | ||
147 | if test -n "$gltests_LIBOBJS"; then | ||
148 | # Remove the extension. | ||
149 | sed_drop_objext='s/\.o$//;s/\.obj$//' | ||
150 | for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do | ||
151 | gltests_libobjs="$gltests_libobjs $i.$ac_objext" | ||
152 | gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" | ||
153 | done | ||
154 | fi | ||
155 | AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs]) | ||
156 | AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs]) | ||
157 | ]) | ||
158 | LIBGNU_LIBDEPS="$gl_libdeps" | ||
159 | AC_SUBST([LIBGNU_LIBDEPS]) | ||
160 | LIBGNU_LTLIBDEPS="$gl_ltlibdeps" | ||
161 | AC_SUBST([LIBGNU_LTLIBDEPS]) | ||
119 | ]) | 162 | ]) |
120 | 163 | ||
121 | # Like AC_LIBOBJ, except that the module name goes | 164 | # Like AC_LIBOBJ, except that the module name goes |
122 | # into gl_LIBOBJS instead of into LIBOBJS. | 165 | # into gl_LIBOBJS instead of into LIBOBJS. |
123 | AC_DEFUN([gl_LIBOBJ], | 166 | AC_DEFUN([gl_LIBOBJ], [ |
124 | [gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"]) | 167 | AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl |
168 | gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext" | ||
169 | ]) | ||
170 | |||
171 | # m4_foreach_w is provided by autoconf-2.59c and later. | ||
172 | # This definition is to accommodate developers using versions | ||
173 | # of autoconf older than that. | ||
174 | m4_ifndef([m4_foreach_w], | ||
175 | [m4_define([m4_foreach_w], | ||
176 | [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) | ||
125 | 177 | ||
126 | # Like AC_REPLACE_FUNCS, except that the module name goes | 178 | # Like AC_REPLACE_FUNCS, except that the module name goes |
127 | # into gl_LIBOBJS instead of into LIBOBJS. | 179 | # into gl_LIBOBJS instead of into LIBOBJS. |
128 | AC_DEFUN([gl_REPLACE_FUNCS], | 180 | AC_DEFUN([gl_REPLACE_FUNCS], [ |
129 | [AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])]) | 181 | m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl |
182 | AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)]) | ||
183 | ]) | ||
184 | |||
185 | # Like AC_LIBSOURCES, except the directory where the source file is | ||
186 | # expected is derived from the gnulib-tool parametrization, | ||
187 | # and alloca is special cased (for the alloca-opt module). | ||
188 | # We could also entirely rely on EXTRA_lib..._SOURCES. | ||
189 | AC_DEFUN([gl_LIBSOURCES], [ | ||
190 | m4_foreach([_gl_NAME], [$1], [ | ||
191 | m4_if(_gl_NAME, [alloca.c], [], [ | ||
192 | m4_syscmd([test -r gl/]_gl_NAME[ || test ! -d gl])dnl | ||
193 | m4_if(m4_sysval, [0], [], | ||
194 | [AC_FATAL([missing gl/]_gl_NAME)]) | ||
195 | ]) | ||
196 | ]) | ||
197 | ]) | ||
198 | |||
199 | # Like AC_LIBOBJ, except that the module name goes | ||
200 | # into gltests_LIBOBJS instead of into LIBOBJS. | ||
201 | AC_DEFUN([gltests_LIBOBJ], [ | ||
202 | AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl | ||
203 | gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext" | ||
204 | ]) | ||
205 | |||
206 | # m4_foreach_w is provided by autoconf-2.59c and later. | ||
207 | # This definition is to accommodate developers using versions | ||
208 | # of autoconf older than that. | ||
209 | m4_ifndef([m4_foreach_w], | ||
210 | [m4_define([m4_foreach_w], | ||
211 | [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) | ||
130 | 212 | ||
131 | # Like AC_LIBSOURCES, except that it does nothing. | 213 | # Like AC_REPLACE_FUNCS, except that the module name goes |
132 | # We rely on EXTRA_lib..._SOURCES instead. | 214 | # into gltests_LIBOBJS instead of into LIBOBJS. |
133 | AC_DEFUN([gl_LIBSOURCES], | 215 | AC_DEFUN([gltests_REPLACE_FUNCS], [ |
134 | []) | 216 | m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl |
217 | AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)]) | ||
218 | ]) | ||
219 | |||
220 | # Like AC_LIBSOURCES, except the directory where the source file is | ||
221 | # expected is derived from the gnulib-tool parametrization, | ||
222 | # and alloca is special cased (for the alloca-opt module). | ||
223 | # We could also entirely rely on EXTRA_lib..._SOURCES. | ||
224 | AC_DEFUN([gltests_LIBSOURCES], [ | ||
225 | m4_foreach([_gl_NAME], [$1], [ | ||
226 | m4_if(_gl_NAME, [alloca.c], [], [ | ||
227 | m4_syscmd([test -r tests/]_gl_NAME[ || test ! -d tests])dnl | ||
228 | m4_if(m4_sysval, [0], [], | ||
229 | [AC_FATAL([missing tests/]_gl_NAME)]) | ||
230 | ]) | ||
231 | ]) | ||
232 | ]) | ||
135 | 233 | ||
136 | # This macro records the list of files which have been installed by | 234 | # This macro records the list of files which have been installed by |
137 | # gnulib-tool and may be removed by future gnulib-tool invocations. | 235 | # gnulib-tool and may be removed by future gnulib-tool invocations. |
138 | AC_DEFUN([gl_FILE_LIST], [ | 236 | AC_DEFUN([gl_FILE_LIST], [ |
139 | build-aux/config.rpath | 237 | build-aux/config.rpath |
238 | build-aux/link-warning.h | ||
140 | lib/alloca.c | 239 | lib/alloca.c |
141 | lib/alloca_.h | 240 | lib/alloca.in.h |
142 | lib/asnprintf.c | 241 | lib/asnprintf.c |
143 | lib/asprintf.c | 242 | lib/asprintf.c |
144 | lib/basename.c | 243 | lib/basename.c |
@@ -146,18 +245,20 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
146 | lib/c-strtod.h | 245 | lib/c-strtod.h |
147 | lib/cloexec.c | 246 | lib/cloexec.c |
148 | lib/cloexec.h | 247 | lib/cloexec.h |
248 | lib/config.charset | ||
149 | lib/creat-safer.c | 249 | lib/creat-safer.c |
150 | lib/dirname.c | 250 | lib/dirname.c |
151 | lib/dirname.h | 251 | lib/dirname.h |
152 | lib/dup-safer.c | 252 | lib/dup-safer.c |
153 | lib/error.c | 253 | lib/error.c |
154 | lib/error.h | 254 | lib/error.h |
155 | lib/exit.h | ||
156 | lib/exitfail.c | 255 | lib/exitfail.c |
157 | lib/exitfail.h | 256 | lib/exitfail.h |
158 | lib/fcntl--.h | 257 | lib/fcntl--.h |
159 | lib/fcntl-safer.h | 258 | lib/fcntl-safer.h |
160 | lib/fd-safer.c | 259 | lib/fd-safer.c |
260 | lib/float+.h | ||
261 | lib/float.in.h | ||
161 | lib/fsusage.c | 262 | lib/fsusage.c |
162 | lib/fsusage.h | 263 | lib/fsusage.h |
163 | lib/full-read.c | 264 | lib/full-read.c |
@@ -170,27 +271,27 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
170 | lib/gethostname.c | 271 | lib/gethostname.c |
171 | lib/getloadavg.c | 272 | lib/getloadavg.c |
172 | lib/getopt.c | 273 | lib/getopt.c |
274 | lib/getopt.in.h | ||
173 | lib/getopt1.c | 275 | lib/getopt1.c |
174 | lib/getopt_.h | ||
175 | lib/getopt_int.h | 276 | lib/getopt_int.h |
176 | lib/gettext.h | 277 | lib/gettext.h |
177 | lib/inet_ntop.c | 278 | lib/inet_ntop.c |
178 | lib/inet_ntop.h | 279 | lib/inet_ntop.h |
179 | lib/intprops.h | 280 | lib/intprops.h |
281 | lib/localcharset.c | ||
282 | lib/localcharset.h | ||
180 | lib/malloc.c | 283 | lib/malloc.c |
181 | lib/mbchar.c | ||
182 | lib/mbchar.h | ||
183 | lib/mbuiter.h | ||
184 | lib/memchr.c | ||
185 | lib/minmax.h | ||
186 | lib/mountlist.c | 284 | lib/mountlist.c |
187 | lib/mountlist.h | 285 | lib/mountlist.h |
286 | lib/netinet_in.in.h | ||
188 | lib/open-safer.c | 287 | lib/open-safer.c |
189 | lib/pipe-safer.c | 288 | lib/pipe-safer.c |
190 | lib/printf-args.c | 289 | lib/printf-args.c |
191 | lib/printf-args.h | 290 | lib/printf-args.h |
192 | lib/printf-parse.c | 291 | lib/printf-parse.c |
193 | lib/printf-parse.h | 292 | lib/printf-parse.h |
293 | lib/ref-add.sin | ||
294 | lib/ref-del.sin | ||
194 | lib/regcomp.c | 295 | lib/regcomp.c |
195 | lib/regex.c | 296 | lib/regex.c |
196 | lib/regex.h | 297 | lib/regex.h |
@@ -203,34 +304,26 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
203 | lib/safe-write.h | 304 | lib/safe-write.h |
204 | lib/size_max.h | 305 | lib/size_max.h |
205 | lib/snprintf.c | 306 | lib/snprintf.c |
206 | lib/snprintf.h | 307 | lib/stdbool.in.h |
207 | lib/socket_.h | 308 | lib/stdint.in.h |
208 | lib/stdbool_.h | 309 | lib/stdio.in.h |
209 | lib/stdint_.h | 310 | lib/stdlib.in.h |
210 | lib/strcase.h | ||
211 | lib/strcasecmp.c | ||
212 | lib/strdup.c | 311 | lib/strdup.c |
213 | lib/strdup.h | 312 | lib/strerror.c |
313 | lib/string.in.h | ||
214 | lib/stripslash.c | 314 | lib/stripslash.c |
215 | lib/strncasecmp.c | ||
216 | lib/strndup.c | 315 | lib/strndup.c |
217 | lib/strndup.h | ||
218 | lib/strnlen.c | 316 | lib/strnlen.c |
219 | lib/strnlen.h | 317 | lib/sys_socket.in.h |
220 | lib/strnlen1.c | ||
221 | lib/strnlen1.h | ||
222 | lib/unistd--.h | 318 | lib/unistd--.h |
223 | lib/unistd-safer.h | 319 | lib/unistd-safer.h |
224 | lib/unistd_.h | 320 | lib/unistd.in.h |
225 | lib/vasnprintf.c | 321 | lib/vasnprintf.c |
226 | lib/vasnprintf.h | 322 | lib/vasnprintf.h |
227 | lib/vasprintf.c | 323 | lib/vasprintf.c |
228 | lib/vasprintf.h | ||
229 | lib/vsnprintf.c | 324 | lib/vsnprintf.c |
230 | lib/vsnprintf.h | 325 | lib/wchar.in.h |
231 | lib/wchar_.h | 326 | lib/wctype.in.h |
232 | lib/wctype_.h | ||
233 | lib/wcwidth.h | ||
234 | lib/xalloc-die.c | 327 | lib/xalloc-die.c |
235 | lib/xalloc.h | 328 | lib/xalloc.h |
236 | lib/xmalloc.c | 329 | lib/xmalloc.c |
@@ -251,6 +344,7 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
251 | m4/exitfail.m4 | 344 | m4/exitfail.m4 |
252 | m4/extensions.m4 | 345 | m4/extensions.m4 |
253 | m4/fcntl-safer.m4 | 346 | m4/fcntl-safer.m4 |
347 | m4/float_h.m4 | ||
254 | m4/fstypename.m4 | 348 | m4/fstypename.m4 |
255 | m4/fsusage.m4 | 349 | m4/fsusage.m4 |
256 | m4/getaddrinfo.m4 | 350 | m4/getaddrinfo.m4 |
@@ -262,11 +356,13 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
262 | m4/glibc21.m4 | 356 | m4/glibc21.m4 |
263 | m4/gnulib-common.m4 | 357 | m4/gnulib-common.m4 |
264 | m4/iconv.m4 | 358 | m4/iconv.m4 |
359 | m4/include_next.m4 | ||
265 | m4/inet_ntop.m4 | 360 | m4/inet_ntop.m4 |
266 | m4/inline.m4 | 361 | m4/inline.m4 |
267 | m4/intdiv0.m4 | 362 | m4/intdiv0.m4 |
268 | m4/intl.m4 | 363 | m4/intl.m4 |
269 | m4/intldir.m4 | 364 | m4/intldir.m4 |
365 | m4/intlmacosx.m4 | ||
270 | m4/intmax.m4 | 366 | m4/intmax.m4 |
271 | m4/intmax_t.m4 | 367 | m4/intmax_t.m4 |
272 | m4/inttypes-pri.m4 | 368 | m4/inttypes-pri.m4 |
@@ -275,15 +371,11 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
275 | m4/lib-ld.m4 | 371 | m4/lib-ld.m4 |
276 | m4/lib-link.m4 | 372 | m4/lib-link.m4 |
277 | m4/lib-prefix.m4 | 373 | m4/lib-prefix.m4 |
374 | m4/localcharset.m4 | ||
278 | m4/lock.m4 | 375 | m4/lock.m4 |
279 | m4/longdouble.m4 | ||
280 | m4/longlong.m4 | 376 | m4/longlong.m4 |
281 | m4/ls-mntd-fs.m4 | 377 | m4/ls-mntd-fs.m4 |
282 | m4/mbchar.m4 | 378 | m4/malloc.m4 |
283 | m4/mbiter.m4 | ||
284 | m4/mbrtowc.m4 | ||
285 | m4/memchr.m4 | ||
286 | m4/minmax.m4 | ||
287 | m4/mountlist.m4 | 379 | m4/mountlist.m4 |
288 | m4/netinet_in_h.m4 | 380 | m4/netinet_in_h.m4 |
289 | m4/nls.m4 | 381 | m4/nls.m4 |
@@ -302,13 +394,15 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
302 | m4/stdbool.m4 | 394 | m4/stdbool.m4 |
303 | m4/stdint.m4 | 395 | m4/stdint.m4 |
304 | m4/stdint_h.m4 | 396 | m4/stdint_h.m4 |
305 | m4/strcase.m4 | 397 | m4/stdio_h.m4 |
398 | m4/stdlib_h.m4 | ||
306 | m4/strdup.m4 | 399 | m4/strdup.m4 |
400 | m4/strerror.m4 | ||
401 | m4/string_h.m4 | ||
307 | m4/strndup.m4 | 402 | m4/strndup.m4 |
308 | m4/strnlen.m4 | 403 | m4/strnlen.m4 |
309 | m4/sys_socket_h.m4 | 404 | m4/sys_socket_h.m4 |
310 | m4/uintmax_t.m4 | 405 | m4/uintmax_t.m4 |
311 | m4/ulonglong.m4 | ||
312 | m4/unistd-safer.m4 | 406 | m4/unistd-safer.m4 |
313 | m4/unistd_h.m4 | 407 | m4/unistd_h.m4 |
314 | m4/vasnprintf.m4 | 408 | m4/vasnprintf.m4 |
@@ -318,7 +412,6 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
318 | m4/wchar.m4 | 412 | m4/wchar.m4 |
319 | m4/wchar_t.m4 | 413 | m4/wchar_t.m4 |
320 | m4/wctype.m4 | 414 | m4/wctype.m4 |
321 | m4/wcwidth.m4 | ||
322 | m4/wint_t.m4 | 415 | m4/wint_t.m4 |
323 | m4/xalloc.m4 | 416 | m4/xalloc.m4 |
324 | m4/xsize.m4 | 417 | m4/xsize.m4 |
diff --git a/gl/m4/iconv.m4 b/gl/m4/iconv.m4 index 654c4158..66bc76f4 100644 --- a/gl/m4/iconv.m4 +++ b/gl/m4/iconv.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # iconv.m4 serial AM4 (gettext-0.11.3) | 1 | # iconv.m4 serial AM6 (gettext-0.17) |
2 | dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2000-2002, 2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -21,6 +21,7 @@ AC_DEFUN([AM_ICONV_LINK], | |||
21 | [ | 21 | [ |
22 | dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and | 22 | dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and |
23 | dnl those with the standalone portable GNU libiconv installed). | 23 | dnl those with the standalone portable GNU libiconv installed). |
24 | AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles | ||
24 | 25 | ||
25 | dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV | 26 | dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV |
26 | dnl accordingly. | 27 | dnl accordingly. |
@@ -33,7 +34,7 @@ AC_DEFUN([AM_ICONV_LINK], | |||
33 | am_save_CPPFLAGS="$CPPFLAGS" | 34 | am_save_CPPFLAGS="$CPPFLAGS" |
34 | AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) | 35 | AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) |
35 | 36 | ||
36 | AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ | 37 | AC_CACHE_CHECK([for iconv], am_cv_func_iconv, [ |
37 | am_cv_func_iconv="no, consider installing GNU libiconv" | 38 | am_cv_func_iconv="no, consider installing GNU libiconv" |
38 | am_cv_lib_iconv=no | 39 | am_cv_lib_iconv=no |
39 | AC_TRY_LINK([#include <stdlib.h> | 40 | AC_TRY_LINK([#include <stdlib.h> |
@@ -56,7 +57,85 @@ AC_DEFUN([AM_ICONV_LINK], | |||
56 | fi | 57 | fi |
57 | ]) | 58 | ]) |
58 | if test "$am_cv_func_iconv" = yes; then | 59 | if test "$am_cv_func_iconv" = yes; then |
59 | AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) | 60 | AC_CACHE_CHECK([for working iconv], am_cv_func_iconv_works, [ |
61 | dnl This tests against bugs in AIX 5.1 and HP-UX 11.11. | ||
62 | am_save_LIBS="$LIBS" | ||
63 | if test $am_cv_lib_iconv = yes; then | ||
64 | LIBS="$LIBS $LIBICONV" | ||
65 | fi | ||
66 | AC_TRY_RUN([ | ||
67 | #include <iconv.h> | ||
68 | #include <string.h> | ||
69 | int main () | ||
70 | { | ||
71 | /* Test against AIX 5.1 bug: Failures are not distinguishable from successful | ||
72 | returns. */ | ||
73 | { | ||
74 | iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); | ||
75 | if (cd_utf8_to_88591 != (iconv_t)(-1)) | ||
76 | { | ||
77 | static const char input[] = "\342\202\254"; /* EURO SIGN */ | ||
78 | char buf[10]; | ||
79 | const char *inptr = input; | ||
80 | size_t inbytesleft = strlen (input); | ||
81 | char *outptr = buf; | ||
82 | size_t outbytesleft = sizeof (buf); | ||
83 | size_t res = iconv (cd_utf8_to_88591, | ||
84 | (char **) &inptr, &inbytesleft, | ||
85 | &outptr, &outbytesleft); | ||
86 | if (res == 0) | ||
87 | return 1; | ||
88 | } | ||
89 | } | ||
90 | #if 0 /* This bug could be worked around by the caller. */ | ||
91 | /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ | ||
92 | { | ||
93 | iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); | ||
94 | if (cd_88591_to_utf8 != (iconv_t)(-1)) | ||
95 | { | ||
96 | static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; | ||
97 | char buf[50]; | ||
98 | const char *inptr = input; | ||
99 | size_t inbytesleft = strlen (input); | ||
100 | char *outptr = buf; | ||
101 | size_t outbytesleft = sizeof (buf); | ||
102 | size_t res = iconv (cd_88591_to_utf8, | ||
103 | (char **) &inptr, &inbytesleft, | ||
104 | &outptr, &outbytesleft); | ||
105 | if ((int)res > 0) | ||
106 | return 1; | ||
107 | } | ||
108 | } | ||
109 | #endif | ||
110 | /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is | ||
111 | provided. */ | ||
112 | if (/* Try standardized names. */ | ||
113 | iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) | ||
114 | /* Try IRIX, OSF/1 names. */ | ||
115 | && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) | ||
116 | /* Try AIX names. */ | ||
117 | && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) | ||
118 | /* Try HP-UX names. */ | ||
119 | && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) | ||
120 | return 1; | ||
121 | return 0; | ||
122 | }], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], | ||
123 | [case "$host_os" in | ||
124 | aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; | ||
125 | *) am_cv_func_iconv_works="guessing yes" ;; | ||
126 | esac]) | ||
127 | LIBS="$am_save_LIBS" | ||
128 | ]) | ||
129 | case "$am_cv_func_iconv_works" in | ||
130 | *no) am_func_iconv=no am_cv_lib_iconv=no ;; | ||
131 | *) am_func_iconv=yes ;; | ||
132 | esac | ||
133 | else | ||
134 | am_func_iconv=no am_cv_lib_iconv=no | ||
135 | fi | ||
136 | if test "$am_func_iconv" = yes; then | ||
137 | AC_DEFINE(HAVE_ICONV, 1, | ||
138 | [Define if you have the iconv() function and it works.]) | ||
60 | fi | 139 | fi |
61 | if test "$am_cv_lib_iconv" = yes; then | 140 | if test "$am_cv_lib_iconv" = yes; then |
62 | AC_MSG_CHECKING([how to link with libiconv]) | 141 | AC_MSG_CHECKING([how to link with libiconv]) |
diff --git a/gl/m4/include_next.m4 b/gl/m4/include_next.m4 new file mode 100644 index 00000000..7ce472bc --- /dev/null +++ b/gl/m4/include_next.m4 | |||
@@ -0,0 +1,107 @@ | |||
1 | # include_next.m4 serial 4 | ||
2 | dnl Copyright (C) 2006, 2007 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | dnl From Paul Eggert and Derek Price. | ||
8 | |||
9 | AC_DEFUN([gl_INCLUDE_NEXT], | ||
10 | [ | ||
11 | AC_LANG_PREPROC_REQUIRE() | ||
12 | AC_CACHE_CHECK([whether the preprocessor supports include_next], | ||
13 | [gl_cv_have_include_next], | ||
14 | [rm -rf conftestd1 conftestd2 | ||
15 | mkdir conftestd1 conftestd2 | ||
16 | cat <<EOF > conftestd1/conftest.h | ||
17 | #define DEFINED_IN_CONFTESTD1 | ||
18 | #include_next <conftest.h> | ||
19 | #ifdef DEFINED_IN_CONFTESTD2 | ||
20 | int foo; | ||
21 | #else | ||
22 | #error "include_next doesn't work" | ||
23 | #endif | ||
24 | EOF | ||
25 | cat <<EOF > conftestd2/conftest.h | ||
26 | #ifndef DEFINED_IN_CONFTESTD1 | ||
27 | #error "include_next test doesn't work" | ||
28 | #endif | ||
29 | #define DEFINED_IN_CONFTESTD2 | ||
30 | EOF | ||
31 | save_CPPFLAGS="$CPPFLAGS" | ||
32 | CPPFLAGS="$CPPFLAGS -Iconftestd1 -Iconftestd2" | ||
33 | AC_COMPILE_IFELSE([#include <conftest.h>], | ||
34 | [gl_cv_have_include_next=yes], | ||
35 | [gl_cv_have_include_next=no]) | ||
36 | CPPFLAGS="$save_CPPFLAGS" | ||
37 | rm -rf conftestd1 conftestd2 | ||
38 | ]) | ||
39 | if test $gl_cv_have_include_next = yes; then | ||
40 | |||
41 | dnl FIXME: Remove HAVE_INCLUDE_NEXT and update everything that uses it | ||
42 | dnl to use @INCLUDE_NEXT@ instead. | ||
43 | AC_DEFINE([HAVE_INCLUDE_NEXT], 1, | ||
44 | [Define if your compiler supports the #include_next directive.]) | ||
45 | |||
46 | INCLUDE_NEXT=include_next | ||
47 | else | ||
48 | INCLUDE_NEXT=include | ||
49 | fi | ||
50 | AC_SUBST([INCLUDE_NEXT]) | ||
51 | ]) | ||
52 | |||
53 | # gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) | ||
54 | # ------------------------------------------ | ||
55 | # For each arg foo.h, if #include_next works, define NEXT_FOO_H to be | ||
56 | # '<foo.h>'; otherwise define it to be | ||
57 | # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. | ||
58 | # That way, a header file with the following line: | ||
59 | # #@INCLUDE_NEXT@ @NEXT_FOO_H@ | ||
60 | # behaves (after sed substitution) as if it contained | ||
61 | # #include_next <foo.h> | ||
62 | # even if the compiler does not support include_next. | ||
63 | # The three "///" are to pacify Sun C 5.8, which otherwise would say | ||
64 | # "warning: #include of /usr/include/... may be non-portable". | ||
65 | # Use `""', not `<>', so that the /// cannot be confused with a C99 comment. | ||
66 | AC_DEFUN([gl_CHECK_NEXT_HEADERS], | ||
67 | [ | ||
68 | AC_REQUIRE([gl_INCLUDE_NEXT]) | ||
69 | AC_CHECK_HEADERS_ONCE([$1]) | ||
70 | |||
71 | AC_FOREACH([gl_HEADER_NAME], [$1], | ||
72 | [AS_VAR_PUSHDEF([gl_next_header], | ||
73 | [gl_cv_next_]m4_quote(m4_defn([gl_HEADER_NAME]))) | ||
74 | if test $gl_cv_have_include_next = yes; then | ||
75 | AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) | ||
76 | else | ||
77 | AC_CACHE_CHECK( | ||
78 | [absolute name of <]m4_quote(m4_defn([gl_HEADER_NAME]))[>], | ||
79 | m4_quote(m4_defn([gl_next_header])), | ||
80 | [AS_VAR_PUSHDEF([gl_header_exists], | ||
81 | [ac_cv_header_]m4_quote(m4_defn([gl_HEADER_NAME]))) | ||
82 | if test AS_VAR_GET(gl_header_exists) = yes; then | ||
83 | AC_LANG_CONFTEST( | ||
84 | [AC_LANG_SOURCE( | ||
85 | [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]] | ||
86 | )]) | ||
87 | dnl eval is necessary to expand ac_cpp. | ||
88 | dnl Ultrix and Pyramid sh refuse to redirect output of eval, | ||
89 | dnl so use subshell. | ||
90 | AS_VAR_SET([gl_next_header], | ||
91 | ['"'`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | | ||
92 | sed -n '\#/]m4_quote(m4_defn([gl_HEADER_NAME]))[#{ | ||
93 | s#.*"\(.*/]m4_quote(m4_defn([gl_HEADER_NAME]))[\)".*#\1# | ||
94 | s#^/[^/]#//&# | ||
95 | p | ||
96 | q | ||
97 | }'`'"']) | ||
98 | else | ||
99 | AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) | ||
100 | fi | ||
101 | AS_VAR_POPDEF([gl_header_exists])]) | ||
102 | fi | ||
103 | AC_SUBST( | ||
104 | AS_TR_CPP([NEXT_]m4_quote(m4_defn([gl_HEADER_NAME]))), | ||
105 | [AS_VAR_GET([gl_next_header])]) | ||
106 | AS_VAR_POPDEF([gl_next_header])]) | ||
107 | ]) | ||
diff --git a/gl/m4/intdiv0.m4 b/gl/m4/intdiv0.m4 index b8d78176..8c8a6708 100644 --- a/gl/m4/intdiv0.m4 +++ b/gl/m4/intdiv0.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # intdiv0.m4 serial 1 (gettext-0.11.3) | 1 | # intdiv0.m4 serial 2 (gettext-0.17) |
2 | dnl Copyright (C) 2002 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2002, 2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -14,16 +14,27 @@ AC_DEFUN([gt_INTDIV0], | |||
14 | AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], | 14 | AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], |
15 | gt_cv_int_divbyzero_sigfpe, | 15 | gt_cv_int_divbyzero_sigfpe, |
16 | [ | 16 | [ |
17 | AC_TRY_RUN([ | 17 | gt_cv_int_divbyzero_sigfpe= |
18 | changequote(,)dnl | ||
19 | case "$host_os" in | ||
20 | macos* | darwin[6-9]* | darwin[1-9][0-9]*) | ||
21 | # On MacOS X 10.2 or newer, just assume the same as when cross- | ||
22 | # compiling. If we were to perform the real test, 1 Crash Report | ||
23 | # dialog window would pop up. | ||
24 | case "$host_cpu" in | ||
25 | i[34567]86 | x86_64) | ||
26 | gt_cv_int_divbyzero_sigfpe="guessing yes" ;; | ||
27 | esac | ||
28 | ;; | ||
29 | esac | ||
30 | changequote([,])dnl | ||
31 | if test -z "$gt_cv_int_divbyzero_sigfpe"; then | ||
32 | AC_TRY_RUN([ | ||
18 | #include <stdlib.h> | 33 | #include <stdlib.h> |
19 | #include <signal.h> | 34 | #include <signal.h> |
20 | 35 | ||
21 | static void | 36 | static void |
22 | #ifdef __cplusplus | ||
23 | sigfpe_handler (int sig) | 37 | sigfpe_handler (int sig) |
24 | #else | ||
25 | sigfpe_handler (sig) int sig; | ||
26 | #endif | ||
27 | { | 38 | { |
28 | /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ | 39 | /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ |
29 | exit (sig != SIGFPE); | 40 | exit (sig != SIGFPE); |
@@ -51,15 +62,18 @@ int main () | |||
51 | exit (1); | 62 | exit (1); |
52 | } | 63 | } |
53 | ], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, | 64 | ], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, |
54 | [ | 65 | [ |
55 | # Guess based on the CPU. | 66 | # Guess based on the CPU. |
56 | case "$host_cpu" in | 67 | changequote(,)dnl |
57 | alpha* | i[34567]86 | m68k | s390*) | 68 | case "$host_cpu" in |
58 | gt_cv_int_divbyzero_sigfpe="guessing yes";; | 69 | alpha* | i[34567]86 | x86_64 | m68k | s390*) |
59 | *) | 70 | gt_cv_int_divbyzero_sigfpe="guessing yes";; |
60 | gt_cv_int_divbyzero_sigfpe="guessing no";; | 71 | *) |
61 | esac | 72 | gt_cv_int_divbyzero_sigfpe="guessing no";; |
62 | ]) | 73 | esac |
74 | changequote([,])dnl | ||
75 | ]) | ||
76 | fi | ||
63 | ]) | 77 | ]) |
64 | case "$gt_cv_int_divbyzero_sigfpe" in | 78 | case "$gt_cv_int_divbyzero_sigfpe" in |
65 | *yes) value=1;; | 79 | *yes) value=1;; |
diff --git a/gl/m4/intl.m4 b/gl/m4/intl.m4 index dcefb118..934408bb 100644 --- a/gl/m4/intl.m4 +++ b/gl/m4/intl.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # intl.m4 serial 3 (gettext-0.16) | 1 | # intl.m4 serial 8 (gettext-0.17) |
2 | dnl Copyright (C) 1995-2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -33,7 +33,6 @@ AC_DEFUN([AM_INTL_SUBDIR], | |||
33 | AC_REQUIRE([gl_VISIBILITY])dnl | 33 | AC_REQUIRE([gl_VISIBILITY])dnl |
34 | AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl | 34 | AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl |
35 | AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl | 35 | AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl |
36 | AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl | ||
37 | AC_REQUIRE([gt_TYPE_WCHAR_T])dnl | 36 | AC_REQUIRE([gt_TYPE_WCHAR_T])dnl |
38 | AC_REQUIRE([gt_TYPE_WINT_T])dnl | 37 | AC_REQUIRE([gt_TYPE_WINT_T])dnl |
39 | AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) | 38 | AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) |
@@ -98,7 +97,7 @@ AC_DEFUN([AM_INTL_SUBDIR], | |||
98 | dnl exported variables _also_ in the static library. | 97 | dnl exported variables _also_ in the static library. |
99 | if test "$enable_shared" = yes; then | 98 | if test "$enable_shared" = yes; then |
100 | case "$host_os" in | 99 | case "$host_os" in |
101 | cygwin*) is_woe32dll=yes ;; | 100 | mingw* | cygwin*) is_woe32dll=yes ;; |
102 | *) is_woe32dll=no ;; | 101 | *) is_woe32dll=no ;; |
103 | esac | 102 | esac |
104 | else | 103 | else |
@@ -107,6 +106,31 @@ AC_DEFUN([AM_INTL_SUBDIR], | |||
107 | WOE32DLL=$is_woe32dll | 106 | WOE32DLL=$is_woe32dll |
108 | AC_SUBST([WOE32DLL]) | 107 | AC_SUBST([WOE32DLL]) |
109 | 108 | ||
109 | dnl On mingw and Cygwin, we can activate special Makefile rules which add | ||
110 | dnl version information to the shared libraries and executables. | ||
111 | case "$host_os" in | ||
112 | mingw* | cygwin*) is_woe32=yes ;; | ||
113 | *) is_woe32=no ;; | ||
114 | esac | ||
115 | WOE32=$is_woe32 | ||
116 | AC_SUBST([WOE32]) | ||
117 | if test $WOE32 = yes; then | ||
118 | dnl Check for a program that compiles Windows resource files. | ||
119 | AC_CHECK_TOOL([WINDRES], [windres]) | ||
120 | fi | ||
121 | |||
122 | dnl Determine whether when creating a library, "-lc" should be passed to | ||
123 | dnl libtool or not. On many platforms, it is required for the libtool option | ||
124 | dnl -no-undefined to work. On HP-UX, however, the -lc - stored by libtool | ||
125 | dnl in the *.la files - makes it impossible to create multithreaded programs, | ||
126 | dnl because libtool also reorders the -lc to come before the -pthread, and | ||
127 | dnl this disables pthread_create() <http://docs.hp.com/en/1896/pthreads.html>. | ||
128 | case "$host_os" in | ||
129 | hpux*) LTLIBC="" ;; | ||
130 | *) LTLIBC="-lc" ;; | ||
131 | esac | ||
132 | AC_SUBST([LTLIBC]) | ||
133 | |||
110 | dnl Rename some macros and functions used for locking. | 134 | dnl Rename some macros and functions used for locking. |
111 | AH_BOTTOM([ | 135 | AH_BOTTOM([ |
112 | #define __libc_lock_t gl_lock_t | 136 | #define __libc_lock_t gl_lock_t |
@@ -197,7 +221,9 @@ AC_DEFUN([gt_INTL_SUBDIR_CORE], | |||
197 | AC_CACHE_CHECK([for NL_LOCALE_NAME macro], gt_cv_nl_locale_name, | 221 | AC_CACHE_CHECK([for NL_LOCALE_NAME macro], gt_cv_nl_locale_name, |
198 | [AC_TRY_LINK([#include <langinfo.h> | 222 | [AC_TRY_LINK([#include <langinfo.h> |
199 | #include <locale.h>], | 223 | #include <locale.h>], |
200 | [char* cs = nl_langinfo(_NL_LOCALE_NAME(LC_MESSAGES));], | 224 | [char* cs = nl_langinfo(_NL_LOCALE_NAME(LC_MESSAGES)); |
225 | return !cs; | ||
226 | ], | ||
201 | gt_cv_nl_locale_name=yes, | 227 | gt_cv_nl_locale_name=yes, |
202 | gt_cv_nl_locale_name=no) | 228 | gt_cv_nl_locale_name=no) |
203 | ]) | 229 | ]) |
diff --git a/gl/m4/intlmacosx.m4 b/gl/m4/intlmacosx.m4 new file mode 100644 index 00000000..d3f0d904 --- /dev/null +++ b/gl/m4/intlmacosx.m4 | |||
@@ -0,0 +1,51 @@ | |||
1 | # intlmacosx.m4 serial 1 (gettext-0.17) | ||
2 | dnl Copyright (C) 2004-2007 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | dnl | ||
7 | dnl This file can can be used in projects which are not available under | ||
8 | dnl the GNU General Public License or the GNU Library General Public | ||
9 | dnl License but which still want to provide support for the GNU gettext | ||
10 | dnl functionality. | ||
11 | dnl Please note that the actual code of the GNU gettext library is covered | ||
12 | dnl by the GNU Library General Public License, and the rest of the GNU | ||
13 | dnl gettext package package is covered by the GNU General Public License. | ||
14 | dnl They are *not* in the public domain. | ||
15 | |||
16 | dnl Checks for special options needed on MacOS X. | ||
17 | dnl Defines INTL_MACOSX_LIBS. | ||
18 | AC_DEFUN([gt_INTL_MACOSX], | ||
19 | [ | ||
20 | dnl Check for API introduced in MacOS X 10.2. | ||
21 | AC_CACHE_CHECK([for CFPreferencesCopyAppValue], | ||
22 | gt_cv_func_CFPreferencesCopyAppValue, | ||
23 | [gt_save_LIBS="$LIBS" | ||
24 | LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" | ||
25 | AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>], | ||
26 | [CFPreferencesCopyAppValue(NULL, NULL)], | ||
27 | [gt_cv_func_CFPreferencesCopyAppValue=yes], | ||
28 | [gt_cv_func_CFPreferencesCopyAppValue=no]) | ||
29 | LIBS="$gt_save_LIBS"]) | ||
30 | if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then | ||
31 | AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1, | ||
32 | [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) | ||
33 | fi | ||
34 | dnl Check for API introduced in MacOS X 10.3. | ||
35 | AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent, | ||
36 | [gt_save_LIBS="$LIBS" | ||
37 | LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" | ||
38 | AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();], | ||
39 | [gt_cv_func_CFLocaleCopyCurrent=yes], | ||
40 | [gt_cv_func_CFLocaleCopyCurrent=no]) | ||
41 | LIBS="$gt_save_LIBS"]) | ||
42 | if test $gt_cv_func_CFLocaleCopyCurrent = yes; then | ||
43 | AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1, | ||
44 | [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) | ||
45 | fi | ||
46 | INTL_MACOSX_LIBS= | ||
47 | if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then | ||
48 | INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" | ||
49 | fi | ||
50 | AC_SUBST([INTL_MACOSX_LIBS]) | ||
51 | ]) | ||
diff --git a/gl/m4/intmax_t.m4 b/gl/m4/intmax_t.m4 index 17c7b0ae..50ae35d2 100644 --- a/gl/m4/intmax_t.m4 +++ b/gl/m4/intmax_t.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # intmax_t.m4 serial 5 | 1 | # intmax_t.m4 serial 6 |
2 | dnl Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 1997-2004, 2006-2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -18,8 +18,8 @@ AC_DEFUN([gl_AC_TYPE_INTMAX_T], | |||
18 | AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) | 18 | AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) |
19 | AC_REQUIRE([gl_AC_HEADER_STDINT_H]) | 19 | AC_REQUIRE([gl_AC_HEADER_STDINT_H]) |
20 | if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then | 20 | if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then |
21 | AC_REQUIRE([gl_AC_TYPE_LONG_LONG]) | 21 | AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) |
22 | test $ac_cv_type_long_long = yes \ | 22 | test $ac_cv_type_long_long_int = yes \ |
23 | && ac_type='long long' \ | 23 | && ac_type='long long' \ |
24 | || ac_type='long' | 24 | || ac_type='long' |
25 | AC_DEFINE_UNQUOTED(intmax_t, $ac_type, | 25 | AC_DEFINE_UNQUOTED(intmax_t, $ac_type, |
@@ -51,8 +51,8 @@ AC_DEFUN([gt_AC_TYPE_INTMAX_T], | |||
51 | AC_DEFINE(HAVE_INTMAX_T, 1, | 51 | AC_DEFINE(HAVE_INTMAX_T, 1, |
52 | [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.]) | 52 | [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.]) |
53 | else | 53 | else |
54 | AC_REQUIRE([gl_AC_TYPE_LONG_LONG]) | 54 | AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) |
55 | test $ac_cv_type_long_long = yes \ | 55 | test $ac_cv_type_long_long_int = yes \ |
56 | && ac_type='long long' \ | 56 | && ac_type='long long' \ |
57 | || ac_type='long' | 57 | || ac_type='long' |
58 | AC_DEFINE_UNQUOTED(intmax_t, $ac_type, | 58 | AC_DEFINE_UNQUOTED(intmax_t, $ac_type, |
diff --git a/gl/m4/lib-link.m4 b/gl/m4/lib-link.m4 index f157d983..e3d26fc4 100644 --- a/gl/m4/lib-link.m4 +++ b/gl/m4/lib-link.m4 | |||
@@ -1,4 +1,4 @@ | |||
1 | # lib-link.m4 serial 13 (gettext-0.16.2) | 1 | # lib-link.m4 serial 13 (gettext-0.17) |
2 | dnl Copyright (C) 2001-2007 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2001-2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
diff --git a/gl/m4/localcharset.m4 b/gl/m4/localcharset.m4 new file mode 100644 index 00000000..b2b77338 --- /dev/null +++ b/gl/m4/localcharset.m4 | |||
@@ -0,0 +1,16 @@ | |||
1 | # localcharset.m4 serial 5 | ||
2 | dnl Copyright (C) 2002, 2004, 2006 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | AC_DEFUN([gl_LOCALCHARSET], | ||
8 | [ | ||
9 | dnl Prerequisites of lib/localcharset.c. | ||
10 | AC_REQUIRE([AM_LANGINFO_CODESET]) | ||
11 | AC_CHECK_DECLS_ONCE(getc_unlocked) | ||
12 | |||
13 | dnl Prerequisites of the lib/Makefile.am snippet. | ||
14 | AC_REQUIRE([AC_CANONICAL_HOST]) | ||
15 | AC_REQUIRE([gl_GLIBC21]) | ||
16 | ]) | ||
diff --git a/gl/m4/lock.m4 b/gl/m4/lock.m4 index 0224f2ff..91119335 100644 --- a/gl/m4/lock.m4 +++ b/gl/m4/lock.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # lock.m4 serial 6 (gettext-0.16) | 1 | # lock.m4 serial 7 (gettext-0.17) |
2 | dnl Copyright (C) 2005-2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2005-2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -35,7 +35,12 @@ AC_DEFUN([gl_LOCK_EARLY_BODY], | |||
35 | AC_BEFORE([$0], [gl_ARGP])dnl | 35 | AC_BEFORE([$0], [gl_ARGP])dnl |
36 | 36 | ||
37 | AC_REQUIRE([AC_CANONICAL_HOST]) | 37 | AC_REQUIRE([AC_CANONICAL_HOST]) |
38 | AC_REQUIRE([AC_GNU_SOURCE]) dnl needed for pthread_rwlock_t on glibc systems | 38 | dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems. |
39 | dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes | ||
40 | dnl AC_GNU_SOURCE. | ||
41 | m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], | ||
42 | [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], | ||
43 | [AC_REQUIRE([AC_GNU_SOURCE])]) | ||
39 | dnl Check for multithreading. | 44 | dnl Check for multithreading. |
40 | AC_ARG_ENABLE(threads, | 45 | AC_ARG_ENABLE(threads, |
41 | AC_HELP_STRING([--enable-threads={posix|solaris|pth|win32}], [specify multithreading API]) | 46 | AC_HELP_STRING([--enable-threads={posix|solaris|pth|win32}], [specify multithreading API]) |
diff --git a/gl/m4/longdouble.m4 b/gl/m4/longdouble.m4 deleted file mode 100644 index 25590f47..00000000 --- a/gl/m4/longdouble.m4 +++ /dev/null | |||
@@ -1,31 +0,0 @@ | |||
1 | # longdouble.m4 serial 2 (gettext-0.15) | ||
2 | dnl Copyright (C) 2002-2003, 2006 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | dnl From Bruno Haible. | ||
8 | dnl Test whether the compiler supports the 'long double' type. | ||
9 | dnl Prerequisite: AC_PROG_CC | ||
10 | |||
11 | dnl This file is only needed in autoconf <= 2.59. Newer versions of autoconf | ||
12 | dnl have a macro AC_TYPE_LONG_DOUBLE with identical semantics. | ||
13 | |||
14 | AC_DEFUN([gt_TYPE_LONGDOUBLE], | ||
15 | [ | ||
16 | AC_CACHE_CHECK([for long double], gt_cv_c_long_double, | ||
17 | [if test "$GCC" = yes; then | ||
18 | gt_cv_c_long_double=yes | ||
19 | else | ||
20 | AC_TRY_COMPILE([ | ||
21 | /* The Stardent Vistra knows sizeof(long double), but does not support it. */ | ||
22 | long double foo = 0.0; | ||
23 | /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ | ||
24 | int array [2*(sizeof(long double) >= sizeof(double)) - 1]; | ||
25 | ], , | ||
26 | gt_cv_c_long_double=yes, gt_cv_c_long_double=no) | ||
27 | fi]) | ||
28 | if test $gt_cv_c_long_double = yes; then | ||
29 | AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.]) | ||
30 | fi | ||
31 | ]) | ||
diff --git a/gl/m4/longlong.m4 b/gl/m4/longlong.m4 index 1f9e862e..15bf9dac 100644 --- a/gl/m4/longlong.m4 +++ b/gl/m4/longlong.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # longlong.m4 serial 10 | 1 | # longlong.m4 serial 13 |
2 | dnl Copyright (C) 1999-2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 1999-2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -7,8 +7,8 @@ dnl with or without modifications, as long as this notice is preserved. | |||
7 | dnl From Paul Eggert. | 7 | dnl From Paul Eggert. |
8 | 8 | ||
9 | # Define HAVE_LONG_LONG_INT if 'long long int' works. | 9 | # Define HAVE_LONG_LONG_INT if 'long long int' works. |
10 | # This fixes a bug in Autoconf 2.60, but can be removed once we | 10 | # This fixes a bug in Autoconf 2.61, but can be removed once we |
11 | # assume 2.61 everywhere. | 11 | # assume 2.62 everywhere. |
12 | 12 | ||
13 | # Note: If the type 'long long int' exists but is only 32 bits large | 13 | # Note: If the type 'long long int' exists but is only 32 bits large |
14 | # (as on some very old compilers), HAVE_LONG_LONG_INT will not be | 14 | # (as on some very old compilers), HAVE_LONG_LONG_INT will not be |
@@ -18,20 +18,11 @@ AC_DEFUN([AC_TYPE_LONG_LONG_INT], | |||
18 | [ | 18 | [ |
19 | AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], | 19 | AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], |
20 | [AC_LINK_IFELSE( | 20 | [AC_LINK_IFELSE( |
21 | [AC_LANG_PROGRAM( | 21 | [_AC_TYPE_LONG_LONG_SNIPPET], |
22 | [[long long int ll = 9223372036854775807ll; | ||
23 | long long int nll = -9223372036854775807LL; | ||
24 | typedef int a[((-9223372036854775807LL < 0 | ||
25 | && 0 < 9223372036854775807ll) | ||
26 | ? 1 : -1)]; | ||
27 | int i = 63;]], | ||
28 | [[long long int llmax = 9223372036854775807ll; | ||
29 | return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | ||
30 | | (llmax / ll) | (llmax % ll));]])], | ||
31 | [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. | 22 | [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. |
32 | dnl If cross compiling, assume the bug isn't important, since | 23 | dnl If cross compiling, assume the bug isn't important, since |
33 | dnl nobody cross compiles for this platform as far as we know. | 24 | dnl nobody cross compiles for this platform as far as we know. |
34 | AC_RUN_IFELSE( | 25 | AC_RUN_IFELSE( |
35 | [AC_LANG_PROGRAM( | 26 | [AC_LANG_PROGRAM( |
36 | [[@%:@include <limits.h> | 27 | [[@%:@include <limits.h> |
37 | @%:@ifndef LLONG_MAX | 28 | @%:@ifndef LLONG_MAX |
@@ -60,13 +51,56 @@ AC_DEFUN([AC_TYPE_LONG_LONG_INT], | |||
60 | fi | 51 | fi |
61 | ]) | 52 | ]) |
62 | 53 | ||
63 | # This macro is obsolescent and should go away soon. | 54 | # Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. |
64 | AC_DEFUN([gl_AC_TYPE_LONG_LONG], | 55 | # This fixes a bug in Autoconf 2.61, but can be removed once we |
56 | # assume 2.62 everywhere. | ||
57 | |||
58 | # Note: If the type 'unsigned long long int' exists but is only 32 bits | ||
59 | # large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT | ||
60 | # will not be defined. In this case you can treat 'unsigned long long int' | ||
61 | # like 'unsigned long int'. | ||
62 | |||
63 | AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], | ||
65 | [ | 64 | [ |
66 | AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) | 65 | AC_CACHE_CHECK([for unsigned long long int], |
67 | ac_cv_type_long_long=$ac_cv_type_long_long_int | 66 | [ac_cv_type_unsigned_long_long_int], |
68 | if test $ac_cv_type_long_long = yes; then | 67 | [AC_LINK_IFELSE( |
69 | AC_DEFINE(HAVE_LONG_LONG, 1, | 68 | [_AC_TYPE_LONG_LONG_SNIPPET], |
70 | [Define if you have the 'long long' type.]) | 69 | [ac_cv_type_unsigned_long_long_int=yes], |
70 | [ac_cv_type_unsigned_long_long_int=no])]) | ||
71 | if test $ac_cv_type_unsigned_long_long_int = yes; then | ||
72 | AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1, | ||
73 | [Define to 1 if the system has the type `unsigned long long int'.]) | ||
71 | fi | 74 | fi |
72 | ]) | 75 | ]) |
76 | |||
77 | # Expands to a C program that can be used to test for simultaneous support | ||
78 | # of 'long long' and 'unsigned long long'. We don't want to say that | ||
79 | # 'long long' is available if 'unsigned long long' is not, or vice versa, | ||
80 | # because too many programs rely on the symmetry between signed and unsigned | ||
81 | # integer types (excluding 'bool'). | ||
82 | AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], | ||
83 | [ | ||
84 | AC_LANG_PROGRAM( | ||
85 | [[/* For now, do not test the preprocessor; as of 2007 there are too many | ||
86 | implementations with broken preprocessors. Perhaps this can | ||
87 | be revisited in 2012. In the meantime, code should not expect | ||
88 | #if to work with literals wider than 32 bits. */ | ||
89 | /* Test literals. */ | ||
90 | long long int ll = 9223372036854775807ll; | ||
91 | long long int nll = -9223372036854775807LL; | ||
92 | unsigned long long int ull = 18446744073709551615ULL; | ||
93 | /* Test constant expressions. */ | ||
94 | typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) | ||
95 | ? 1 : -1)]; | ||
96 | typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 | ||
97 | ? 1 : -1)]; | ||
98 | int i = 63;]], | ||
99 | [[/* Test availability of runtime routines for shift and division. */ | ||
100 | long long int llmax = 9223372036854775807ll; | ||
101 | unsigned long long int ullmax = 18446744073709551615ull; | ||
102 | return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | ||
103 | | (llmax / ll) | (llmax % ll) | ||
104 | | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | ||
105 | | (ullmax / ull) | (ullmax % ull));]]) | ||
106 | ]) | ||
diff --git a/gl/m4/malloc.m4 b/gl/m4/malloc.m4 new file mode 100644 index 00000000..764f2a9f --- /dev/null +++ b/gl/m4/malloc.m4 | |||
@@ -0,0 +1,41 @@ | |||
1 | # malloc.m4 serial 8 | ||
2 | dnl Copyright (C) 2007 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | # gl_FUNC_MALLOC_POSIX | ||
8 | # -------------------- | ||
9 | # Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it | ||
10 | # fails), and replace malloc if it is not. | ||
11 | AC_DEFUN([gl_FUNC_MALLOC_POSIX], | ||
12 | [ | ||
13 | AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) | ||
14 | if test $gl_cv_func_malloc_posix = yes; then | ||
15 | HAVE_MALLOC_POSIX=1 | ||
16 | AC_DEFINE([HAVE_MALLOC_POSIX], 1, | ||
17 | [Define if the 'malloc' function is POSIX compliant.]) | ||
18 | else | ||
19 | AC_LIBOBJ([malloc]) | ||
20 | HAVE_MALLOC_POSIX=0 | ||
21 | fi | ||
22 | AC_SUBST([HAVE_MALLOC_POSIX]) | ||
23 | ]) | ||
24 | |||
25 | # Test whether malloc, realloc, calloc are POSIX compliant, | ||
26 | # Set gl_cv_func_malloc_posix to yes or no accordingly. | ||
27 | AC_DEFUN([gl_CHECK_MALLOC_POSIX], | ||
28 | [ | ||
29 | AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant], | ||
30 | [gl_cv_func_malloc_posix], | ||
31 | [ | ||
32 | dnl It is too dangerous to try to allocate a large amount of memory: | ||
33 | dnl some systems go to their knees when you do that. So assume that | ||
34 | dnl all Unix implementations of the function are POSIX compliant. | ||
35 | AC_TRY_COMPILE([], | ||
36 | [#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ | ||
37 | choke me | ||
38 | #endif | ||
39 | ], [gl_cv_func_malloc_posix=yes], [gl_cv_func_malloc_posix=no]) | ||
40 | ]) | ||
41 | ]) | ||
diff --git a/gl/m4/mbchar.m4 b/gl/m4/mbchar.m4 deleted file mode 100644 index 5380941b..00000000 --- a/gl/m4/mbchar.m4 +++ /dev/null | |||
@@ -1,14 +0,0 @@ | |||
1 | # mbchar.m4 serial 5 | ||
2 | dnl Copyright (C) 2005-2007 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | dnl autoconf tests required for use of mbchar.m4 | ||
8 | dnl From Bruno Haible. | ||
9 | |||
10 | AC_DEFUN([gl_MBCHAR], | ||
11 | [ | ||
12 | AC_REQUIRE([AC_GNU_SOURCE]) | ||
13 | AC_LIBOBJ([mbchar]) | ||
14 | ]) | ||
diff --git a/gl/m4/mbiter.m4 b/gl/m4/mbiter.m4 deleted file mode 100644 index 7d51af10..00000000 --- a/gl/m4/mbiter.m4 +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
1 | # mbiter.m4 serial 2 | ||
2 | dnl Copyright (C) 2005 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | dnl autoconf tests required for use of mbiter.h | ||
8 | dnl From Bruno Haible. | ||
9 | |||
10 | AC_DEFUN([gl_MBITER], | ||
11 | [ | ||
12 | AC_REQUIRE([AC_TYPE_MBSTATE_T]) | ||
13 | dnl The following line is that so the user can test HAVE_MBRTOWC before | ||
14 | dnl #include "mbiter.h" or "mbuiter.h". | ||
15 | AC_REQUIRE([gl_FUNC_MBRTOWC]) | ||
16 | : | ||
17 | ]) | ||
diff --git a/gl/m4/mbrtowc.m4 b/gl/m4/mbrtowc.m4 deleted file mode 100644 index a3bd9114..00000000 --- a/gl/m4/mbrtowc.m4 +++ /dev/null | |||
@@ -1,31 +0,0 @@ | |||
1 | # mbrtowc.m4 serial 8 | ||
2 | dnl Copyright (C) 2001-2002, 2004-2005 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | dnl From Paul Eggert | ||
8 | |||
9 | dnl This file can be removed, and gl_FUNC_MBRTOWC replaced with | ||
10 | dnl AC_FUNC_MBRTOWC, when autoconf 2.60 can be assumed everywhere. | ||
11 | |||
12 | AC_DEFUN([gl_FUNC_MBRTOWC], | ||
13 | [ | ||
14 | dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60. | ||
15 | AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared], | ||
16 | gl_cv_func_mbrtowc, | ||
17 | [AC_LINK_IFELSE( | ||
18 | [AC_LANG_PROGRAM( | ||
19 | [[#include <wchar.h>]], | ||
20 | [[wchar_t wc; | ||
21 | char const s[] = ""; | ||
22 | size_t n = 1; | ||
23 | mbstate_t state; | ||
24 | return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])], | ||
25 | gl_cv_func_mbrtowc=yes, | ||
26 | gl_cv_func_mbrtowc=no)]) | ||
27 | if test $gl_cv_func_mbrtowc = yes; then | ||
28 | AC_DEFINE([HAVE_MBRTOWC], 1, | ||
29 | [Define to 1 if mbrtowc and mbstate_t are properly declared.]) | ||
30 | fi | ||
31 | ]) | ||
diff --git a/gl/m4/memchr.m4 b/gl/m4/memchr.m4 deleted file mode 100644 index 91b8636e..00000000 --- a/gl/m4/memchr.m4 +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | # memchr.m4 serial 4 | ||
2 | dnl Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | AC_DEFUN([gl_FUNC_MEMCHR], | ||
8 | [ | ||
9 | AC_REPLACE_FUNCS(memchr) | ||
10 | if test $ac_cv_func_memchr = no; then | ||
11 | gl_PREREQ_MEMCHR | ||
12 | fi | ||
13 | ]) | ||
14 | |||
15 | # Prerequisites of lib/memchr.c. | ||
16 | AC_DEFUN([gl_PREREQ_MEMCHR], [ | ||
17 | AC_CHECK_HEADERS(bp-sym.h) | ||
18 | ]) | ||
diff --git a/gl/m4/minmax.m4 b/gl/m4/minmax.m4 deleted file mode 100644 index bbd1ba0b..00000000 --- a/gl/m4/minmax.m4 +++ /dev/null | |||
@@ -1,41 +0,0 @@ | |||
1 | # minmax.m4 serial 2 | ||
2 | dnl Copyright (C) 2005 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | AC_PREREQ(2.52) | ||
8 | |||
9 | AC_DEFUN([gl_MINMAX], | ||
10 | [ | ||
11 | AC_REQUIRE([gl_PREREQ_MINMAX]) | ||
12 | ]) | ||
13 | |||
14 | # Prerequisites of lib/minmax.h. | ||
15 | AC_DEFUN([gl_PREREQ_MINMAX], | ||
16 | [ | ||
17 | gl_MINMAX_IN_HEADER([limits.h]) | ||
18 | gl_MINMAX_IN_HEADER([sys/param.h]) | ||
19 | ]) | ||
20 | |||
21 | dnl gl_MINMAX_IN_HEADER(HEADER) | ||
22 | dnl The parameter has to be a literal header name; it cannot be macro, | ||
23 | dnl nor a shell variable. (Because autoheader collects only AC_DEFINE | ||
24 | dnl invocations with a literal macro name.) | ||
25 | AC_DEFUN([gl_MINMAX_IN_HEADER], | ||
26 | [ | ||
27 | m4_pushdef([header], AS_TR_SH([$1])) | ||
28 | m4_pushdef([HEADER], AS_TR_CPP([$1])) | ||
29 | AC_CACHE_CHECK([whether <$1> defines MIN and MAX], | ||
30 | [gl_cv_minmax_in_]header, | ||
31 | [AC_TRY_COMPILE([#include <$1> | ||
32 | int x = MIN (42, 17);], [], | ||
33 | [gl_cv_minmax_in_]header[=yes], | ||
34 | [gl_cv_minmax_in_]header[=no])]) | ||
35 | if test $gl_cv_minmax_in_[]header = yes; then | ||
36 | AC_DEFINE([HAVE_MINMAX_IN_]HEADER, 1, | ||
37 | [Define to 1 if <$1> defines the MIN and MAX macros.]) | ||
38 | fi | ||
39 | m4_popdef([HEADER]) | ||
40 | m4_popdef([header]) | ||
41 | ]) | ||
diff --git a/gl/m4/netinet_in_h.m4 b/gl/m4/netinet_in_h.m4 index d73531a0..096be740 100644 --- a/gl/m4/netinet_in_h.m4 +++ b/gl/m4/netinet_in_h.m4 | |||
@@ -1,18 +1,30 @@ | |||
1 | # netinet_in_h.m4 serial 1 | 1 | # netinet_in_h.m4 serial 3 |
2 | dnl Copyright (C) 2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2006-2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
6 | 6 | ||
7 | dnl Written by Simon Josefsson | ||
8 | |||
9 | AC_DEFUN([gl_HEADER_NETINET_IN], | 7 | AC_DEFUN([gl_HEADER_NETINET_IN], |
10 | [ | 8 | [ |
11 | AC_CHECK_HEADERS_ONCE([netinet/in.h]) | 9 | AC_CACHE_CHECK([whether <netinet/in.h> is self-contained], |
12 | if test $ac_cv_header_netinet_in_h = yes; then | 10 | [gl_cv_header_netinet_in_h_selfcontained], |
11 | [ | ||
12 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <netinet/in.h>], [])], | ||
13 | [gl_cv_header_netinet_in_h_selfcontained=yes], | ||
14 | [gl_cv_header_netinet_in_h_selfcontained=no]) | ||
15 | ]) | ||
16 | if test $gl_cv_header_netinet_in_h_selfcontained = yes; then | ||
13 | NETINET_IN_H='' | 17 | NETINET_IN_H='' |
14 | else | 18 | else |
15 | NETINET_IN_H='netinet/in.h' | 19 | NETINET_IN_H='netinet/in.h' |
20 | AC_CHECK_HEADERS([netinet/in.h]) | ||
21 | gl_CHECK_NEXT_HEADERS([netinet/in.h]) | ||
22 | if test $ac_cv_header_netinet_in_h = yes; then | ||
23 | HAVE_NETINET_IN_H=1 | ||
24 | else | ||
25 | HAVE_NETINET_IN_H=0 | ||
26 | fi | ||
27 | AC_SUBST([HAVE_NETINET_IN_H]) | ||
16 | fi | 28 | fi |
17 | AC_SUBST(NETINET_IN_H) | 29 | AC_SUBST([NETINET_IN_H]) |
18 | ]) | 30 | ]) |
diff --git a/gl/m4/po.m4 b/gl/m4/po.m4 index 00133ef3..0734762a 100644 --- a/gl/m4/po.m4 +++ b/gl/m4/po.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # po.m4 serial 13 (gettext-0.15) | 1 | # po.m4 serial 15 (gettext-0.17) |
2 | dnl Copyright (C) 1995-2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -27,6 +27,10 @@ AC_DEFUN([AM_PO_SUBDIRS], | |||
27 | AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake | 27 | AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake |
28 | AC_REQUIRE([AM_NLS])dnl | 28 | AC_REQUIRE([AM_NLS])dnl |
29 | 29 | ||
30 | dnl Release version of the gettext macros. This is used to ensure that | ||
31 | dnl the gettext macros and po/Makefile.in.in are in sync. | ||
32 | AC_SUBST([GETTEXT_MACRO_VERSION], [0.17]) | ||
33 | |||
30 | dnl Perform the following tests also if --disable-nls has been given, | 34 | dnl Perform the following tests also if --disable-nls has been given, |
31 | dnl because they are needed for "make dist" to work. | 35 | dnl because they are needed for "make dist" to work. |
32 | 36 | ||
@@ -84,6 +88,10 @@ changequote([,])dnl | |||
84 | test -n "$localedir" || localedir='${datadir}/locale' | 88 | test -n "$localedir" || localedir='${datadir}/locale' |
85 | AC_SUBST([localedir]) | 89 | AC_SUBST([localedir]) |
86 | 90 | ||
91 | dnl Support for AM_XGETTEXT_OPTION. | ||
92 | test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= | ||
93 | AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) | ||
94 | |||
87 | AC_CONFIG_COMMANDS([po-directories], [[ | 95 | AC_CONFIG_COMMANDS([po-directories], [[ |
88 | for ac_file in $CONFIG_FILES; do | 96 | for ac_file in $CONFIG_FILES; do |
89 | # Support "outfile[:infile[:infile...]]" | 97 | # Support "outfile[:infile[:infile...]]" |
@@ -426,3 +434,16 @@ EOF | |||
426 | fi | 434 | fi |
427 | mv "$ac_file.tmp" "$ac_file" | 435 | mv "$ac_file.tmp" "$ac_file" |
428 | ]) | 436 | ]) |
437 | |||
438 | dnl Initializes the accumulator used by AM_XGETTEXT_OPTION. | ||
439 | AC_DEFUN([AM_XGETTEXT_OPTION_INIT], | ||
440 | [ | ||
441 | XGETTEXT_EXTRA_OPTIONS= | ||
442 | ]) | ||
443 | |||
444 | dnl Registers an option to be passed to xgettext in the po subdirectory. | ||
445 | AC_DEFUN([AM_XGETTEXT_OPTION], | ||
446 | [ | ||
447 | AC_REQUIRE([AM_XGETTEXT_OPTION_INIT]) | ||
448 | XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1" | ||
449 | ]) | ||
diff --git a/gl/m4/printf-posix.m4 b/gl/m4/printf-posix.m4 index af10170a..14ba6128 100644 --- a/gl/m4/printf-posix.m4 +++ b/gl/m4/printf-posix.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # printf-posix.m4 serial 2 (gettext-0.13.1) | 1 | # printf-posix.m4 serial 3 (gettext-0.17) |
2 | dnl Copyright (C) 2003 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -28,7 +28,7 @@ int main () | |||
28 | }], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no, | 28 | }], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no, |
29 | [ | 29 | [ |
30 | AC_EGREP_CPP(notposix, [ | 30 | AC_EGREP_CPP(notposix, [ |
31 | #if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ | 31 | #if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ |
32 | notposix | 32 | notposix |
33 | #endif | 33 | #endif |
34 | ], gt_cv_func_printf_posix="guessing no", | 34 | ], gt_cv_func_printf_posix="guessing no", |
diff --git a/gl/m4/regex.m4 b/gl/m4/regex.m4 index 25da645e..7da6efed 100644 --- a/gl/m4/regex.m4 +++ b/gl/m4/regex.m4 | |||
@@ -1,4 +1,4 @@ | |||
1 | #serial 42 | 1 | #serial 48 |
2 | 2 | ||
3 | # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, | 3 | # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, |
4 | # 2006, 2007 Free Software Foundation, Inc. | 4 | # 2006, 2007 Free Software Foundation, Inc. |
@@ -18,9 +18,12 @@ AC_DEFUN([gl_REGEX], | |||
18 | 18 | ||
19 | AC_ARG_WITH([included-regex], | 19 | AC_ARG_WITH([included-regex], |
20 | [AC_HELP_STRING([--without-included-regex], | 20 | [AC_HELP_STRING([--without-included-regex], |
21 | [don't compile regex; this is the default on | 21 | [don't compile regex; this is the default on 32-bit |
22 | systems with recent-enough versions of the GNU C | 22 | systems with recent-enough versions of the GNU C |
23 | Library (use with caution on other systems)])]) | 23 | Library (use with caution on other systems). |
24 | On systems with 64-bit ptrdiff_t and 32-bit int, | ||
25 | --with-included-regex is the default, in case | ||
26 | regex functions operate on very long strings (>2GB)])]) | ||
24 | 27 | ||
25 | case $with_included_regex in #( | 28 | case $with_included_regex in #( |
26 | yes|no) ac_use_included_regex=$with_included_regex | 29 | yes|no) ac_use_included_regex=$with_included_regex |
@@ -29,8 +32,7 @@ AC_DEFUN([gl_REGEX], | |||
29 | # If the system regex support is good enough that it passes the | 32 | # If the system regex support is good enough that it passes the |
30 | # following run test, then default to *not* using the included regex.c. | 33 | # following run test, then default to *not* using the included regex.c. |
31 | # If cross compiling, assume the test would fail and use the included | 34 | # If cross compiling, assume the test would fail and use the included |
32 | # regex.c. The first failing regular expression is from `Spencer ere | 35 | # regex.c. |
33 | # test #75' in grep-2.3. | ||
34 | AC_CACHE_CHECK([for working re_compile_pattern], | 36 | AC_CACHE_CHECK([for working re_compile_pattern], |
35 | [gl_cv_func_re_compile_pattern_working], | 37 | [gl_cv_func_re_compile_pattern_working], |
36 | [AC_RUN_IFELSE( | 38 | [AC_RUN_IFELSE( |
@@ -74,68 +76,91 @@ AC_DEFUN([gl_REGEX], | |||
74 | } | 76 | } |
75 | #endif | 77 | #endif |
76 | 78 | ||
79 | /* This test is from glibc bug 3957, reported by Andrew Mackey. */ | ||
80 | re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); | ||
81 | memset (®ex, 0, sizeof regex); | ||
82 | s = re_compile_pattern ("a[^x]b", 6, ®ex); | ||
83 | if (s) | ||
84 | return 1; | ||
85 | |||
86 | /* This should fail, but succeeds for glibc-2.5. */ | ||
87 | if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) | ||
88 | return 1; | ||
89 | |||
90 | /* This regular expression is from Spencer ere test number 75 | ||
91 | in grep-2.3. */ | ||
77 | re_set_syntax (RE_SYNTAX_POSIX_EGREP); | 92 | re_set_syntax (RE_SYNTAX_POSIX_EGREP); |
78 | memset (®ex, 0, sizeof (regex)); | 93 | memset (®ex, 0, sizeof regex); |
79 | for (i = 0; i <= UCHAR_MAX; i++) | 94 | for (i = 0; i <= UCHAR_MAX; i++) |
80 | folded_chars[i] = i; | 95 | folded_chars[i] = i; |
81 | regex.translate = folded_chars; | 96 | regex.translate = folded_chars; |
82 | s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, ®ex); | 97 | s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, ®ex); |
83 | /* This should fail with _Invalid character class name_ error. */ | 98 | /* This should fail with _Invalid character class name_ error. */ |
84 | if (!s) | 99 | if (!s) |
85 | exit (1); | 100 | return 1; |
86 | 101 | ||
87 | /* This should succeed, but does not for e.g. glibc-2.1.3. */ | 102 | /* This should succeed, but does not for glibc-2.1.3. */ |
88 | memset (®ex, 0, sizeof (regex)); | 103 | memset (®ex, 0, sizeof regex); |
89 | s = re_compile_pattern ("{1", 2, ®ex); | 104 | s = re_compile_pattern ("{1", 2, ®ex); |
90 | 105 | ||
91 | if (s) | 106 | if (s) |
92 | exit (1); | 107 | return 1; |
93 | 108 | ||
94 | /* The following example is derived from a problem report | 109 | /* The following example is derived from a problem report |
95 | against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ | 110 | against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ |
96 | memset (®ex, 0, sizeof (regex)); | 111 | memset (®ex, 0, sizeof regex); |
97 | s = re_compile_pattern ("[an\371]*n", 7, ®ex); | 112 | s = re_compile_pattern ("[an\371]*n", 7, ®ex); |
98 | if (s) | 113 | if (s) |
99 | exit (1); | 114 | return 1; |
100 | 115 | ||
101 | /* This should match, but does not for e.g. glibc-2.2.1. */ | 116 | /* This should match, but does not for glibc-2.2.1. */ |
102 | if (re_match (®ex, "an", 2, 0, ®s) != 2) | 117 | if (re_match (®ex, "an", 2, 0, ®s) != 2) |
103 | exit (1); | 118 | return 1; |
104 | 119 | ||
105 | memset (®ex, 0, sizeof (regex)); | 120 | memset (®ex, 0, sizeof regex); |
106 | s = re_compile_pattern ("x", 1, ®ex); | 121 | s = re_compile_pattern ("x", 1, ®ex); |
107 | if (s) | 122 | if (s) |
108 | exit (1); | 123 | return 1; |
109 | 124 | ||
110 | /* The version of regex.c in e.g. GNU libc-2.2.93 did not | 125 | /* glibc-2.2.93 does not work with a negative RANGE argument. */ |
111 | work with a negative RANGE argument. */ | ||
112 | if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) | 126 | if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) |
113 | exit (1); | 127 | return 1; |
114 | 128 | ||
115 | /* The version of regex.c in older versions of gnulib | 129 | /* The version of regex.c in older versions of gnulib |
116 | ignored RE_ICASE. Detect that problem too. */ | 130 | ignored RE_ICASE. Detect that problem too. */ |
117 | memset (®ex, 0, sizeof (regex)); | ||
118 | re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); | 131 | re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); |
132 | memset (®ex, 0, sizeof regex); | ||
119 | s = re_compile_pattern ("x", 1, ®ex); | 133 | s = re_compile_pattern ("x", 1, ®ex); |
120 | if (s) | 134 | if (s) |
121 | exit (1); | 135 | return 1; |
122 | 136 | ||
123 | if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) | 137 | if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) |
124 | exit (1); | 138 | return 1; |
139 | |||
140 | /* Catch a bug reported by Vin Shelton in | ||
141 | http://lists.gnu.org/archive/html/bug-coreutils/2007-06/msg00089.html | ||
142 | */ | ||
143 | re_set_syntax (RE_SYNTAX_POSIX_BASIC | ||
144 | & ~RE_CONTEXT_INVALID_DUP | ||
145 | & ~RE_NO_EMPTY_RANGES); | ||
146 | memset (®ex, 0, sizeof regex); | ||
147 | s = re_compile_pattern ("[[:alnum:]_-]\\\\+$", 16, ®ex); | ||
148 | if (s) | ||
149 | return 1; | ||
125 | 150 | ||
126 | /* REG_STARTEND was added to glibc on 2004-01-15. | 151 | /* REG_STARTEND was added to glibc on 2004-01-15. |
127 | Reject older versions. */ | 152 | Reject older versions. */ |
128 | if (! REG_STARTEND) | 153 | if (! REG_STARTEND) |
129 | exit (1); | 154 | return 1; |
130 | 155 | ||
131 | /* Reject hosts whose regoff_t values are too narrow. | 156 | /* Reject hosts whose regoff_t values are too narrow. |
132 | These include glibc 2.3.5 on hosts with 64-bit ptrdiff_t | 157 | These include glibc 2.3.5 on hosts with 64-bit ptrdiff_t |
133 | and 32-bit int. */ | 158 | and 32-bit int. */ |
134 | if (sizeof (regoff_t) < sizeof (ptrdiff_t) | 159 | if (sizeof (regoff_t) < sizeof (ptrdiff_t) |
135 | || sizeof (regoff_t) < sizeof (ssize_t)) | 160 | || sizeof (regoff_t) < sizeof (ssize_t)) |
136 | exit (1); | 161 | return 1; |
137 | 162 | ||
138 | exit (0);]])], | 163 | return 0;]])], |
139 | [gl_cv_func_re_compile_pattern_working=yes], | 164 | [gl_cv_func_re_compile_pattern_working=yes], |
140 | [gl_cv_func_re_compile_pattern_working=no], | 165 | [gl_cv_func_re_compile_pattern_working=no], |
141 | dnl When crosscompiling, assume it is not working. | 166 | dnl When crosscompiling, assume it is not working. |
@@ -190,9 +215,8 @@ AC_DEFUN([gl_REGEX], | |||
190 | # Prerequisites of lib/regex.c and lib/regex_internal.c. | 215 | # Prerequisites of lib/regex.c and lib/regex_internal.c. |
191 | AC_DEFUN([gl_PREREQ_REGEX], | 216 | AC_DEFUN([gl_PREREQ_REGEX], |
192 | [ | 217 | [ |
193 | AC_REQUIRE([AC_GNU_SOURCE]) | 218 | AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) |
194 | AC_REQUIRE([AC_C_RESTRICT]) | 219 | AC_REQUIRE([AC_C_RESTRICT]) |
195 | AC_REQUIRE([AM_LANGINFO_CODESET]) | 220 | AC_CHECK_FUNCS_ONCE([isblank iswctype mbrtowc wcrtomb wcscoll]) |
196 | AC_CHECK_FUNCS_ONCE([iswctype mbrtowc mempcpy wcrtomb wcscoll]) | ||
197 | AC_CHECK_DECLS([isblank], [], [], [#include <ctype.h>]) | 221 | AC_CHECK_DECLS([isblank], [], [], [#include <ctype.h>]) |
198 | ]) | 222 | ]) |
diff --git a/gl/m4/snprintf.m4 b/gl/m4/snprintf.m4 index 432e0375..f21200dc 100644 --- a/gl/m4/snprintf.m4 +++ b/gl/m4/snprintf.m4 | |||
@@ -1,13 +1,29 @@ | |||
1 | # snprintf.m4 serial 2 | 1 | # snprintf.m4 serial 4 |
2 | dnl Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
6 | 6 | ||
7 | AC_DEFUN([gl_FUNC_SNPRINTF], | 7 | AC_DEFUN([gl_FUNC_SNPRINTF], |
8 | [ | 8 | [ |
9 | AC_REPLACE_FUNCS(snprintf) | 9 | AC_REQUIRE([gl_STDIO_H_DEFAULTS]) |
10 | AC_CHECK_DECLS_ONCE(snprintf) | 10 | AC_CHECK_FUNCS([snprintf]) |
11 | if test $ac_cv_func_snprintf = no; then | ||
12 | gl_REPLACE_SNPRINTF | ||
13 | fi | ||
14 | AC_CHECK_DECLS_ONCE([snprintf]) | ||
15 | if test $ac_cv_have_decl_snprintf = no; then | ||
16 | HAVE_DECL_SNPRINTF=0 | ||
17 | fi | ||
18 | ]) | ||
19 | |||
20 | AC_DEFUN([gl_REPLACE_SNPRINTF], | ||
21 | [ | ||
22 | AC_REQUIRE([gl_STDIO_H_DEFAULTS]) | ||
23 | AC_LIBOBJ([snprintf]) | ||
24 | if test $ac_cv_func_snprintf = yes; then | ||
25 | REPLACE_SNPRINTF=1 | ||
26 | fi | ||
11 | gl_PREREQ_SNPRINTF | 27 | gl_PREREQ_SNPRINTF |
12 | ]) | 28 | ]) |
13 | 29 | ||
diff --git a/gl/m4/socklen.m4 b/gl/m4/socklen.m4 index 5e3765a6..b755757b 100644 --- a/gl/m4/socklen.m4 +++ b/gl/m4/socklen.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # socklen.m4 serial 4 | 1 | # socklen.m4 serial 6 |
2 | dnl Copyright (C) 2005, 2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -12,14 +12,14 @@ dnl types for the argument to getsockopt, getpeername, etc. So we | |||
12 | dnl have to test to find something that will work. | 12 | dnl have to test to find something that will work. |
13 | 13 | ||
14 | dnl On mingw32, socklen_t is in ws2tcpip.h ('int'), so we try to find | 14 | dnl On mingw32, socklen_t is in ws2tcpip.h ('int'), so we try to find |
15 | dnl it there first. That file is included by gnulib's socket_.h, which | 15 | dnl it there first. That file is included by gnulib's sys_socket.in.h, which |
16 | dnl all users of this module should include. Cygwin must not include | 16 | dnl all users of this module should include. Cygwin must not include |
17 | dnl ws2tcpip.h. | 17 | dnl ws2tcpip.h. |
18 | AC_DEFUN([gl_TYPE_SOCKLEN_T], | 18 | AC_DEFUN([gl_TYPE_SOCKLEN_T], |
19 | [AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl | 19 | [AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl |
20 | AC_CHECK_TYPE([socklen_t], , | 20 | AC_CHECK_TYPE([socklen_t], , |
21 | [AC_MSG_CHECKING([for socklen_t equivalent]) | 21 | [AC_MSG_CHECKING([for socklen_t equivalent]) |
22 | AC_CACHE_VAL([gl_cv_gl_cv_socklen_t_equiv], | 22 | AC_CACHE_VAL([gl_cv_socklen_t_equiv], |
23 | [# Systems have either "struct sockaddr *" or | 23 | [# Systems have either "struct sockaddr *" or |
24 | # "void *" as the second argument to getpeername | 24 | # "void *" as the second argument to getpeername |
25 | gl_cv_socklen_t_equiv= | 25 | gl_cv_socklen_t_equiv= |
diff --git a/gl/m4/stdint.m4 b/gl/m4/stdint.m4 index 1a4b4a6a..bb6c34fe 100644 --- a/gl/m4/stdint.m4 +++ b/gl/m4/stdint.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # stdint.m4 serial 22 | 1 | # stdint.m4 serial 29 |
2 | dnl Copyright (C) 2001-2002, 2004-2007 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2001-2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -45,32 +45,32 @@ AC_DEFUN([gl_STDINT_H], | |||
45 | fi | 45 | fi |
46 | AC_SUBST([HAVE_SYS_TYPES_H]) | 46 | AC_SUBST([HAVE_SYS_TYPES_H]) |
47 | 47 | ||
48 | dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_stdint_h. | 48 | gl_CHECK_NEXT_HEADERS([stdint.h]) |
49 | if test $ac_cv_header_stdint_h = yes; then | 49 | if test $ac_cv_header_stdint_h = yes; then |
50 | gl_ABSOLUTE_HEADER([stdint.h]) | ||
51 | ABSOLUTE_STDINT_H=\"$gl_cv_absolute_stdint_h\" | ||
52 | HAVE_STDINT_H=1 | 50 | HAVE_STDINT_H=1 |
53 | else | 51 | else |
54 | ABSOLUTE_STDINT_H=\"no/such/file/stdint.h\" | ||
55 | HAVE_STDINT_H=0 | 52 | HAVE_STDINT_H=0 |
56 | fi | 53 | fi |
57 | AC_SUBST([ABSOLUTE_STDINT_H]) | ||
58 | AC_SUBST([HAVE_STDINT_H]) | 54 | AC_SUBST([HAVE_STDINT_H]) |
59 | 55 | ||
60 | dnl Now see whether we need a substitute <stdint.h>. Use | 56 | dnl Now see whether we need a substitute <stdint.h>. |
61 | dnl ABSOLUTE_STDINT_H, not <stdint.h>, so that it also works during | ||
62 | dnl a "config.status --recheck" if a stdint.h has been | ||
63 | dnl created in the build directory. | ||
64 | if test $ac_cv_header_stdint_h = yes; then | 57 | if test $ac_cv_header_stdint_h = yes; then |
65 | AC_CACHE_CHECK([whether stdint.h conforms to C99], | 58 | AC_CACHE_CHECK([whether stdint.h conforms to C99], |
66 | [gl_cv_header_working_stdint_h], | 59 | [gl_cv_header_working_stdint_h], |
67 | [gl_cv_header_working_stdint_h=no | 60 | [gl_cv_header_working_stdint_h=no |
68 | AC_COMPILE_IFELSE([ | 61 | AC_COMPILE_IFELSE([ |
69 | AC_LANG_PROGRAM([[ | 62 | AC_LANG_PROGRAM([[ |
70 | #include <stddef.h> | ||
71 | #define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ | 63 | #define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ |
72 | #define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ | 64 | #define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ |
73 | #include ABSOLUTE_STDINT_H | 65 | #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ |
66 | #include <stdint.h> | ||
67 | /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ | ||
68 | #if !(defined WCHAR_MIN && defined WCHAR_MAX) | ||
69 | #error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" | ||
70 | #endif | ||
71 | ] | ||
72 | gl_STDINT_INCLUDES | ||
73 | [ | ||
74 | #ifdef INT8_MAX | 74 | #ifdef INT8_MAX |
75 | int8_t a1 = INT8_MAX; | 75 | int8_t a1 = INT8_MAX; |
76 | int8_t a1min = INT8_MIN; | 76 | int8_t a1min = INT8_MIN; |
@@ -142,12 +142,32 @@ uintptr_t h = UINTPTR_MAX; | |||
142 | #endif | 142 | #endif |
143 | intmax_t i = INTMAX_MAX; | 143 | intmax_t i = INTMAX_MAX; |
144 | uintmax_t j = UINTMAX_MAX; | 144 | uintmax_t j = UINTMAX_MAX; |
145 | |||
146 | #include <limits.h> /* for CHAR_BIT */ | ||
147 | #define TYPE_MINIMUM(t) \ | ||
148 | ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) | ||
149 | #define TYPE_MAXIMUM(t) \ | ||
150 | ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))) | ||
145 | struct s { | 151 | struct s { |
146 | int check_PTRDIFF: PTRDIFF_MIN < 0 && 0 < PTRDIFF_MAX ? 1 : -1; | 152 | int check_PTRDIFF: |
147 | int check_SIG_ATOMIC: SIG_ATOMIC_MIN <= 0 && 0 < SIG_ATOMIC_MAX ? 1 : -1; | 153 | PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) |
148 | int check_SIZE: 0 < SIZE_MAX ? 1 : -1; | 154 | && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) |
149 | int check_WCHAR: WCHAR_MIN <= 0 && 0 < WCHAR_MAX ? 1 : -1; | 155 | ? 1 : -1; |
150 | int check_WINT: WINT_MIN <= 0 && 0 < WINT_MAX ? 1 : -1; | 156 | /* Detect bug in FreeBSD 6.0 / ia64. */ |
157 | int check_SIG_ATOMIC: | ||
158 | SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) | ||
159 | && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) | ||
160 | ? 1 : -1; | ||
161 | int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; | ||
162 | int check_WCHAR: | ||
163 | WCHAR_MIN == TYPE_MINIMUM (wchar_t) | ||
164 | && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) | ||
165 | ? 1 : -1; | ||
166 | /* Detect bug in mingw. */ | ||
167 | int check_WINT: | ||
168 | WINT_MIN == TYPE_MINIMUM (wint_t) | ||
169 | && WINT_MAX == TYPE_MAXIMUM (wint_t) | ||
170 | ? 1 : -1; | ||
151 | 171 | ||
152 | /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ | 172 | /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ |
153 | int check_UINT8_C: | 173 | int check_UINT8_C: |
@@ -202,6 +222,10 @@ struct s { | |||
202 | fi | 222 | fi |
203 | AC_SUBST([HAVE_SYS_BITYPES_H]) | 223 | AC_SUBST([HAVE_SYS_BITYPES_H]) |
204 | 224 | ||
225 | dnl Check for <wchar.h> (missing in Linux uClibc when built without wide | ||
226 | dnl character support). | ||
227 | AC_CHECK_HEADERS_ONCE([wchar.h]) | ||
228 | |||
205 | gl_STDINT_TYPE_PROPERTIES | 229 | gl_STDINT_TYPE_PROPERTIES |
206 | STDINT_H=stdint.h | 230 | STDINT_H=stdint.h |
207 | fi | 231 | fi |
@@ -337,14 +361,16 @@ AC_DEFUN([gl_STDINT_INCLUDES], | |||
337 | included before <wchar.h>. */ | 361 | included before <wchar.h>. */ |
338 | #include <stddef.h> | 362 | #include <stddef.h> |
339 | #include <signal.h> | 363 | #include <signal.h> |
340 | #include <stdio.h> | 364 | #if HAVE_WCHAR_H |
341 | #include <time.h> | 365 | # include <stdio.h> |
342 | #include <wchar.h> | 366 | # include <time.h> |
367 | # include <wchar.h> | ||
368 | #endif | ||
343 | ]]) | 369 | ]]) |
344 | 370 | ||
345 | dnl gl_STDINT_TYPE_PROPERTIES | 371 | dnl gl_STDINT_TYPE_PROPERTIES |
346 | dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t | 372 | dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t |
347 | dnl of interest to stdint_.h. | 373 | dnl of interest to stdint.in.h. |
348 | AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], | 374 | AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], |
349 | [ | 375 | [ |
350 | gl_STDINT_BITSIZEOF([ptrdiff_t sig_atomic_t size_t wchar_t wint_t], | 376 | gl_STDINT_BITSIZEOF([ptrdiff_t sig_atomic_t size_t wchar_t wint_t], |
diff --git a/gl/m4/stdio_h.m4 b/gl/m4/stdio_h.m4 new file mode 100644 index 00000000..a40d4180 --- /dev/null +++ b/gl/m4/stdio_h.m4 | |||
@@ -0,0 +1,85 @@ | |||
1 | # stdio_h.m4 serial 9 | ||
2 | dnl Copyright (C) 2007 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | AC_DEFUN([gl_STDIO_H], | ||
8 | [ | ||
9 | AC_REQUIRE([gl_STDIO_H_DEFAULTS]) | ||
10 | gl_CHECK_NEXT_HEADERS([stdio.h]) | ||
11 | ]) | ||
12 | |||
13 | AC_DEFUN([gl_STDIO_MODULE_INDICATOR], | ||
14 | [ | ||
15 | dnl Use AC_REQUIRE here, so that the default settings are expanded once only. | ||
16 | AC_REQUIRE([gl_STDIO_H_DEFAULTS]) | ||
17 | GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 | ||
18 | ]) | ||
19 | |||
20 | AC_DEFUN([gl_STDIO_H_DEFAULTS], | ||
21 | [ | ||
22 | GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX]) | ||
23 | GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX]) | ||
24 | GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF]) | ||
25 | GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX]) | ||
26 | GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX]) | ||
27 | GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX]) | ||
28 | GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF]) | ||
29 | GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX]) | ||
30 | GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF]) | ||
31 | GNULIB_FOPEN=0; AC_SUBST([GNULIB_FOPEN]) | ||
32 | GNULIB_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN]) | ||
33 | GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK]) | ||
34 | GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO]) | ||
35 | GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL]) | ||
36 | GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO]) | ||
37 | GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH]) | ||
38 | GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM]) | ||
39 | GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE]) | ||
40 | dnl Assume proper GNU behavior unless another module says otherwise. | ||
41 | REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF]) | ||
42 | REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) | ||
43 | REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF]) | ||
44 | REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF]) | ||
45 | REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) | ||
46 | HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF]) | ||
47 | REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF]) | ||
48 | HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF]) | ||
49 | REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) | ||
50 | REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF]) | ||
51 | HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF]) | ||
52 | REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) | ||
53 | REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN]) | ||
54 | REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN]) | ||
55 | HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO]) | ||
56 | REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO]) | ||
57 | REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK]) | ||
58 | HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO]) | ||
59 | REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO]) | ||
60 | REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL]) | ||
61 | REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH]) | ||
62 | HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM]) | ||
63 | HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE]) | ||
64 | REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE]) | ||
65 | ]) | ||
66 | |||
67 | dnl Code shared by fseeko and ftello. Determine if large files are supported, | ||
68 | dnl but stdin does not start as a large file by default. | ||
69 | AC_DEFUN([gl_STDIN_LARGE_OFFSET], | ||
70 | [ | ||
71 | AC_CACHE_CHECK([whether stdin defaults to large file offsets], | ||
72 | [gl_cv_var_stdin_large_offset], | ||
73 | [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], | ||
74 | [#if defined __SL64 && defined __SCLE /* cygwin */ | ||
75 | /* Cygwin 1.5.24 and earlier fail to put stdin in 64-bit mode, making | ||
76 | fseeko/ftello needlessly fail. This bug was fixed in 1.5.25, and | ||
77 | it is easier to do a version check than building a runtime test. */ | ||
78 | # include <cygwin/version.h> | ||
79 | # if CYGWIN_VERSION_DLL_COMBINED < CYGWIN_VERSION_DLL_MAKE_COMBINED (1005, 25) | ||
80 | choke me | ||
81 | # endif | ||
82 | #endif])], | ||
83 | [gl_cv_var_stdin_large_offset=yes], | ||
84 | [gl_cv_var_stdin_large_offset=no])]) | ||
85 | ]) | ||
diff --git a/gl/m4/stdlib_h.m4 b/gl/m4/stdlib_h.m4 new file mode 100644 index 00000000..fe4ce122 --- /dev/null +++ b/gl/m4/stdlib_h.m4 | |||
@@ -0,0 +1,42 @@ | |||
1 | # stdlib_h.m4 serial 5 | ||
2 | dnl Copyright (C) 2007 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | AC_DEFUN([gl_STDLIB_H], | ||
8 | [ | ||
9 | AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) | ||
10 | gl_CHECK_NEXT_HEADERS([stdlib.h]) | ||
11 | ]) | ||
12 | |||
13 | AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], | ||
14 | [ | ||
15 | dnl Use AC_REQUIRE here, so that the default settings are expanded once only. | ||
16 | AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) | ||
17 | GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 | ||
18 | ]) | ||
19 | |||
20 | AC_DEFUN([gl_STDLIB_H_DEFAULTS], | ||
21 | [ | ||
22 | GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX]) | ||
23 | GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX]) | ||
24 | GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX]) | ||
25 | GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT]) | ||
26 | GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP]) | ||
27 | GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP]) | ||
28 | GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV]) | ||
29 | GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV]) | ||
30 | GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV]) | ||
31 | dnl Assume proper GNU behavior unless another module says otherwise. | ||
32 | HAVE_CALLOC_POSIX=1; AC_SUBST([HAVE_CALLOC_POSIX]) | ||
33 | HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) | ||
34 | HAVE_MALLOC_POSIX=1; AC_SUBST([HAVE_MALLOC_POSIX]) | ||
35 | HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) | ||
36 | HAVE_REALLOC_POSIX=1; AC_SUBST([HAVE_REALLOC_POSIX]) | ||
37 | HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) | ||
38 | HAVE_UNSETENV=1; AC_SUBST([HAVE_UNSETENV]) | ||
39 | REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) | ||
40 | REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) | ||
41 | VOID_UNSETENV=0; AC_SUBST([VOID_UNSETENV]) | ||
42 | ]) | ||
diff --git a/gl/m4/strcase.m4 b/gl/m4/strcase.m4 deleted file mode 100644 index ae827907..00000000 --- a/gl/m4/strcase.m4 +++ /dev/null | |||
@@ -1,39 +0,0 @@ | |||
1 | # strcase.m4 serial 4 | ||
2 | dnl Copyright (C) 2002, 2005-2006 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | AC_DEFUN([gl_STRCASE], | ||
8 | [ | ||
9 | gl_FUNC_STRCASECMP | ||
10 | gl_FUNC_STRNCASECMP | ||
11 | ]) | ||
12 | |||
13 | AC_DEFUN([gl_FUNC_STRCASECMP], | ||
14 | [ | ||
15 | dnl No known system has a strcasecmp() function that works correctly in | ||
16 | dnl multibyte locales. Therefore we use our version always. | ||
17 | AC_LIBOBJ(strcasecmp) | ||
18 | gl_PREREQ_STRCASECMP | ||
19 | ]) | ||
20 | |||
21 | AC_DEFUN([gl_FUNC_STRNCASECMP], | ||
22 | [ | ||
23 | AC_REPLACE_FUNCS(strncasecmp) | ||
24 | AC_CHECK_DECLS(strncasecmp) | ||
25 | if test $ac_cv_func_strncasecmp = no; then | ||
26 | gl_PREREQ_STRNCASECMP | ||
27 | fi | ||
28 | ]) | ||
29 | |||
30 | # Prerequisites of lib/strcasecmp.c. | ||
31 | AC_DEFUN([gl_PREREQ_STRCASECMP], [ | ||
32 | AC_REQUIRE([gl_FUNC_MBRTOWC]) | ||
33 | : | ||
34 | ]) | ||
35 | |||
36 | # Prerequisites of lib/strncasecmp.c. | ||
37 | AC_DEFUN([gl_PREREQ_STRNCASECMP], [ | ||
38 | : | ||
39 | ]) | ||
diff --git a/gl/m4/strdup.m4 b/gl/m4/strdup.m4 index f7786e94..8796e9e0 100644 --- a/gl/m4/strdup.m4 +++ b/gl/m4/strdup.m4 | |||
@@ -1,13 +1,20 @@ | |||
1 | # strdup.m4 serial 7 | 1 | # strdup.m4 serial 9 |
2 | dnl Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. | 2 | |
3 | dnl Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software | ||
4 | dnl Foundation, Inc. | ||
5 | |||
3 | dnl This file is free software; the Free Software Foundation | 6 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 7 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 8 | dnl with or without modifications, as long as this notice is preserved. |
6 | 9 | ||
7 | AC_DEFUN([gl_FUNC_STRDUP], | 10 | AC_DEFUN([gl_FUNC_STRDUP], |
8 | [ | 11 | [ |
12 | AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) | ||
9 | AC_REPLACE_FUNCS(strdup) | 13 | AC_REPLACE_FUNCS(strdup) |
10 | AC_CHECK_DECLS_ONCE(strdup) | 14 | AC_CHECK_DECLS_ONCE(strdup) |
15 | if test $ac_cv_have_decl_strdup = no; then | ||
16 | HAVE_DECL_STRDUP=0 | ||
17 | fi | ||
11 | gl_PREREQ_STRDUP | 18 | gl_PREREQ_STRDUP |
12 | ]) | 19 | ]) |
13 | 20 | ||
diff --git a/gl/m4/strerror.m4 b/gl/m4/strerror.m4 new file mode 100644 index 00000000..eb7d45aa --- /dev/null +++ b/gl/m4/strerror.m4 | |||
@@ -0,0 +1,47 @@ | |||
1 | # strerror.m4 serial 7 | ||
2 | dnl Copyright (C) 2002, 2007 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | AC_DEFUN([gl_FUNC_STRERROR], | ||
8 | [ | ||
9 | AC_REQUIRE([gl_FUNC_STRERROR_SEPARATE]) | ||
10 | if test $gl_cv_func_working_strerror = no; then | ||
11 | AC_LIBOBJ([strerror]) | ||
12 | AC_DEFINE_UNQUOTED([REPLACE_STRERROR], [$REPLACE_STRERROR], | ||
13 | [Define this to 1 if strerror is broken.]) | ||
14 | fi | ||
15 | ]) | ||
16 | |||
17 | # Like gl_FUNC_STRERROR, except prepare for separate compilation (no AC_LIBOBJ). | ||
18 | AC_DEFUN([gl_FUNC_STRERROR_SEPARATE], | ||
19 | [ | ||
20 | AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) | ||
21 | AC_CACHE_CHECK([for working strerror function], | ||
22 | [gl_cv_func_working_strerror], | ||
23 | [AC_RUN_IFELSE( | ||
24 | [AC_LANG_PROGRAM( | ||
25 | [#include <string.h> | ||
26 | ], | ||
27 | [return !*strerror (-2);])], | ||
28 | [gl_cv_func_working_strerror=yes], | ||
29 | [gl_cv_func_working_strerror=no], | ||
30 | [dnl Assume crossbuild works if it compiles. | ||
31 | AC_COMPILE_IFELSE( | ||
32 | [AC_LANG_PROGRAM( | ||
33 | [#include <string.h> | ||
34 | ], | ||
35 | [return !*strerror (-2);])], | ||
36 | [gl_cv_func_working_strerror=yes], | ||
37 | [gl_cv_func_working_strerror=no])])]) | ||
38 | if test $gl_cv_func_working_strerror = no ; then | ||
39 | REPLACE_STRERROR=1 | ||
40 | gl_PREREQ_STRERROR | ||
41 | fi | ||
42 | ]) | ||
43 | |||
44 | # Prerequisites of lib/strerror.c. | ||
45 | AC_DEFUN([gl_PREREQ_STRERROR], [ | ||
46 | AC_CHECK_DECLS([strerror]) | ||
47 | ]) | ||
diff --git a/gl/m4/string_h.m4 b/gl/m4/string_h.m4 new file mode 100644 index 00000000..766d7e98 --- /dev/null +++ b/gl/m4/string_h.m4 | |||
@@ -0,0 +1,87 @@ | |||
1 | # Configure a GNU-like replacement for <string.h>. | ||
2 | |||
3 | # Copyright (C) 2007, 2008 Free Software Foundation, Inc. | ||
4 | # This file is free software; the Free Software Foundation | ||
5 | # gives unlimited permission to copy and/or distribute it, | ||
6 | # with or without modifications, as long as this notice is preserved. | ||
7 | |||
8 | # serial 4 | ||
9 | |||
10 | # Written by Paul Eggert. | ||
11 | |||
12 | AC_DEFUN([gl_HEADER_STRING_H], | ||
13 | [ | ||
14 | dnl Use AC_REQUIRE here, so that the default behavior below is expanded | ||
15 | dnl once only, before all statements that occur in other macros. | ||
16 | AC_REQUIRE([gl_HEADER_STRING_H_BODY]) | ||
17 | ]) | ||
18 | |||
19 | AC_DEFUN([gl_HEADER_STRING_H_BODY], | ||
20 | [ | ||
21 | AC_REQUIRE([AC_C_RESTRICT]) | ||
22 | AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) | ||
23 | gl_CHECK_NEXT_HEADERS([string.h]) | ||
24 | ]) | ||
25 | |||
26 | AC_DEFUN([gl_STRING_MODULE_INDICATOR], | ||
27 | [ | ||
28 | dnl Use AC_REQUIRE here, so that the default settings are expanded once only. | ||
29 | AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) | ||
30 | GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 | ||
31 | ]) | ||
32 | |||
33 | AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], | ||
34 | [ | ||
35 | GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) | ||
36 | GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) | ||
37 | GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) | ||
38 | GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) | ||
39 | GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) | ||
40 | GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) | ||
41 | GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) | ||
42 | GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) | ||
43 | GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) | ||
44 | GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) | ||
45 | GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) | ||
46 | GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) | ||
47 | GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) | ||
48 | GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) | ||
49 | GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) | ||
50 | GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) | ||
51 | GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) | ||
52 | GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) | ||
53 | GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) | ||
54 | GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) | ||
55 | GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) | ||
56 | GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) | ||
57 | GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) | ||
58 | GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) | ||
59 | GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) | ||
60 | GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) | ||
61 | GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) | ||
62 | GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) | ||
63 | GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) | ||
64 | GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) | ||
65 | dnl Assume proper GNU behavior unless another module says otherwise. | ||
66 | HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) | ||
67 | HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) | ||
68 | HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) | ||
69 | HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) | ||
70 | HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) | ||
71 | HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) | ||
72 | HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) | ||
73 | HAVE_STRNDUP=1; AC_SUBST([HAVE_STRNDUP]) | ||
74 | HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) | ||
75 | HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) | ||
76 | HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) | ||
77 | HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) | ||
78 | HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) | ||
79 | HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) | ||
80 | HAVE_DECL_STRERROR=1; AC_SUBST([HAVE_DECL_STRERROR]) | ||
81 | HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) | ||
82 | REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) | ||
83 | REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) | ||
84 | REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) | ||
85 | REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) | ||
86 | REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) | ||
87 | ]) | ||
diff --git a/gl/m4/strndup.m4 b/gl/m4/strndup.m4 index dd5780b6..f7934ef8 100644 --- a/gl/m4/strndup.m4 +++ b/gl/m4/strndup.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # strndup.m4 serial 11 | 1 | # strndup.m4 serial 14 |
2 | dnl Copyright (C) 2002-2003, 2005-2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2002-2003, 2005-2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -7,15 +7,19 @@ dnl with or without modifications, as long as this notice is preserved. | |||
7 | AC_DEFUN([gl_FUNC_STRNDUP], | 7 | AC_DEFUN([gl_FUNC_STRNDUP], |
8 | [ | 8 | [ |
9 | dnl Persuade glibc <string.h> to declare strndup(). | 9 | dnl Persuade glibc <string.h> to declare strndup(). |
10 | AC_REQUIRE([AC_GNU_SOURCE]) | 10 | AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) |
11 | 11 | ||
12 | AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) | ||
12 | AC_CHECK_DECLS_ONCE([strndup]) | 13 | AC_CHECK_DECLS_ONCE([strndup]) |
14 | if test $ac_cv_have_decl_strndup = no; then | ||
15 | HAVE_DECL_STRNDUP=0 | ||
16 | fi | ||
13 | 17 | ||
14 | # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. | 18 | # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. |
15 | AC_CACHE_CHECK([for working strndup], gl_cv_func_strndup, | 19 | AC_CACHE_CHECK([for working strndup], gl_cv_func_strndup, |
16 | [AC_RUN_IFELSE([ | 20 | [AC_RUN_IFELSE([ |
17 | AC_LANG_PROGRAM([#include <string.h> | 21 | AC_LANG_PROGRAM([#include <string.h> |
18 | #include <stdlib.h>], [[ | 22 | #include <stdlib.h>], [[ |
19 | #ifndef HAVE_DECL_STRNDUP | 23 | #ifndef HAVE_DECL_STRNDUP |
20 | extern char *strndup (const char *, size_t); | 24 | extern char *strndup (const char *, size_t); |
21 | #endif | 25 | #endif |
@@ -39,6 +43,7 @@ AC_DEFUN([gl_FUNC_STRNDUP], | |||
39 | AC_DEFINE([HAVE_STRNDUP], 1, | 43 | AC_DEFINE([HAVE_STRNDUP], 1, |
40 | [Define if you have the strndup() function and it works.]) | 44 | [Define if you have the strndup() function and it works.]) |
41 | else | 45 | else |
46 | HAVE_STRNDUP=0 | ||
42 | AC_LIBOBJ([strndup]) | 47 | AC_LIBOBJ([strndup]) |
43 | gl_PREREQ_STRNDUP | 48 | gl_PREREQ_STRNDUP |
44 | fi | 49 | fi |
diff --git a/gl/m4/strnlen.m4 b/gl/m4/strnlen.m4 index 0213a8ae..d8307eda 100644 --- a/gl/m4/strnlen.m4 +++ b/gl/m4/strnlen.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # strnlen.m4 serial 6 | 1 | # strnlen.m4 serial 9 |
2 | dnl Copyright (C) 2002-2003, 2005, 2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2002-2003, 2005-2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -7,11 +7,17 @@ dnl with or without modifications, as long as this notice is preserved. | |||
7 | AC_DEFUN([gl_FUNC_STRNLEN], | 7 | AC_DEFUN([gl_FUNC_STRNLEN], |
8 | [ | 8 | [ |
9 | dnl Persuade glibc <string.h> to declare strnlen(). | 9 | dnl Persuade glibc <string.h> to declare strnlen(). |
10 | AC_REQUIRE([AC_GNU_SOURCE]) | 10 | AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) |
11 | |||
12 | AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) | ||
13 | AC_CHECK_DECLS_ONCE([strnlen]) | ||
14 | if test $ac_cv_have_decl_strnlen = no; then | ||
15 | HAVE_DECL_STRNLEN=0 | ||
16 | fi | ||
11 | 17 | ||
12 | AC_FUNC_STRNLEN | 18 | AC_FUNC_STRNLEN |
13 | if test $ac_cv_func_strnlen_working = no; then | 19 | if test $ac_cv_func_strnlen_working = no; then |
14 | # This is necessary because automake-1.6.1 doens't understand | 20 | # This is necessary because automake-1.6.1 doesn't understand |
15 | # that the above use of AC_FUNC_STRNLEN means we may have to use | 21 | # that the above use of AC_FUNC_STRNLEN means we may have to use |
16 | # lib/strnlen.c. | 22 | # lib/strnlen.c. |
17 | #AC_LIBOBJ(strnlen) | 23 | #AC_LIBOBJ(strnlen) |
@@ -22,6 +28,4 @@ AC_DEFUN([gl_FUNC_STRNLEN], | |||
22 | ]) | 28 | ]) |
23 | 29 | ||
24 | # Prerequisites of lib/strnlen.c. | 30 | # Prerequisites of lib/strnlen.c. |
25 | AC_DEFUN([gl_PREREQ_STRNLEN], [ | 31 | AC_DEFUN([gl_PREREQ_STRNLEN], [:]) |
26 | AC_CHECK_DECLS_ONCE(strnlen) | ||
27 | ]) | ||
diff --git a/gl/m4/sys_socket_h.m4 b/gl/m4/sys_socket_h.m4 index d3e45b48..d9659c2d 100644 --- a/gl/m4/sys_socket_h.m4 +++ b/gl/m4/sys_socket_h.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # sys_socket_h.m4 serial 2 | 1 | # sys_socket_h.m4 serial 4 |
2 | dnl Copyright (C) 2005, 2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -8,16 +8,44 @@ dnl From Simon Josefsson. | |||
8 | 8 | ||
9 | AC_DEFUN([gl_HEADER_SYS_SOCKET], | 9 | AC_DEFUN([gl_HEADER_SYS_SOCKET], |
10 | [ | 10 | [ |
11 | AC_CHECK_HEADERS_ONCE([sys/socket.h]) | 11 | AC_CACHE_CHECK([whether <sys/socket.h> is self-contained], |
12 | if test $ac_cv_header_sys_socket_h = yes; then | 12 | [gl_cv_header_sys_socket_h_selfcontained], |
13 | [ | ||
14 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/socket.h>], [])], | ||
15 | [gl_cv_header_sys_socket_h_selfcontained=yes], | ||
16 | [gl_cv_header_sys_socket_h_selfcontained=no]) | ||
17 | ]) | ||
18 | if test $gl_cv_header_sys_socket_h_selfcontained = yes; then | ||
13 | SYS_SOCKET_H='' | 19 | SYS_SOCKET_H='' |
14 | else | 20 | else |
15 | dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make | ||
16 | dnl the check for those headers unconditional; yet cygwin reports | ||
17 | dnl that the headers are present but cannot be compiled (since on | ||
18 | dnl cygwin, all socket information should come from sys/socket.h). | ||
19 | AC_CHECK_HEADERS([winsock2.h ws2tcpip.h]) | ||
20 | SYS_SOCKET_H='sys/socket.h' | 21 | SYS_SOCKET_H='sys/socket.h' |
22 | |||
23 | gl_CHECK_NEXT_HEADERS([sys/socket.h]) | ||
24 | if test $ac_cv_header_sys_socket_h = yes; then | ||
25 | HAVE_SYS_SOCKET_H=1 | ||
26 | HAVE_WINSOCK2_H=0 | ||
27 | HAVE_WS2TCPIP_H=0 | ||
28 | else | ||
29 | HAVE_SYS_SOCKET_H=0 | ||
30 | dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make | ||
31 | dnl the check for those headers unconditional; yet cygwin reports | ||
32 | dnl that the headers are present but cannot be compiled (since on | ||
33 | dnl cygwin, all socket information should come from sys/socket.h). | ||
34 | AC_CHECK_HEADERS([winsock2.h ws2tcpip.h]) | ||
35 | if test $ac_cv_header_winsock2_h = yes; then | ||
36 | HAVE_WINSOCK2_H=1 | ||
37 | else | ||
38 | HAVE_WINSOCK2_H=0 | ||
39 | fi | ||
40 | if test $ac_cv_header_ws2tcpip_h = yes; then | ||
41 | HAVE_WS2TCPIP_H=1 | ||
42 | else | ||
43 | HAVE_WS2TCPIP_H=0 | ||
44 | fi | ||
45 | fi | ||
46 | AC_SUBST([HAVE_SYS_SOCKET_H]) | ||
47 | AC_SUBST([HAVE_WINSOCK2_H]) | ||
48 | AC_SUBST([HAVE_WS2TCPIP_H]) | ||
21 | fi | 49 | fi |
22 | AC_SUBST(SYS_SOCKET_H) | 50 | AC_SUBST([SYS_SOCKET_H]) |
23 | ]) | 51 | ]) |
diff --git a/gl/m4/uintmax_t.m4 b/gl/m4/uintmax_t.m4 index bf83ed74..641c4898 100644 --- a/gl/m4/uintmax_t.m4 +++ b/gl/m4/uintmax_t.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # uintmax_t.m4 serial 9 | 1 | # uintmax_t.m4 serial 10 |
2 | dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 1997-2004, 2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -16,8 +16,8 @@ AC_DEFUN([gl_AC_TYPE_UINTMAX_T], | |||
16 | AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) | 16 | AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) |
17 | AC_REQUIRE([gl_AC_HEADER_STDINT_H]) | 17 | AC_REQUIRE([gl_AC_HEADER_STDINT_H]) |
18 | if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then | 18 | if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then |
19 | AC_REQUIRE([gl_AC_TYPE_UNSIGNED_LONG_LONG]) | 19 | AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) |
20 | test $ac_cv_type_unsigned_long_long = yes \ | 20 | test $ac_cv_type_unsigned_long_long_int = yes \ |
21 | && ac_type='unsigned long long' \ | 21 | && ac_type='unsigned long long' \ |
22 | || ac_type='unsigned long' | 22 | || ac_type='unsigned long' |
23 | AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, | 23 | AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, |
diff --git a/gl/m4/ulonglong.m4 b/gl/m4/ulonglong.m4 deleted file mode 100644 index 9fae98e3..00000000 --- a/gl/m4/ulonglong.m4 +++ /dev/null | |||
@@ -1,48 +0,0 @@ | |||
1 | # ulonglong.m4 serial 6 | ||
2 | dnl Copyright (C) 1999-2006 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | dnl From Paul Eggert. | ||
8 | |||
9 | # Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. | ||
10 | # This fixes a bug in Autoconf 2.60, but can be removed once we | ||
11 | # assume 2.61 everywhere. | ||
12 | |||
13 | # Note: If the type 'unsigned long long int' exists but is only 32 bits | ||
14 | # large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT | ||
15 | # will not be defined. In this case you can treat 'unsigned long long int' | ||
16 | # like 'unsigned long int'. | ||
17 | |||
18 | AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], | ||
19 | [ | ||
20 | AC_CACHE_CHECK([for unsigned long long int], | ||
21 | [ac_cv_type_unsigned_long_long_int], | ||
22 | [AC_LINK_IFELSE( | ||
23 | [AC_LANG_PROGRAM( | ||
24 | [[unsigned long long int ull = 18446744073709551615ULL; | ||
25 | typedef int a[(18446744073709551615ULL <= (unsigned long long int) -1 | ||
26 | ? 1 : -1)]; | ||
27 | int i = 63;]], | ||
28 | [[unsigned long long int ullmax = 18446744073709551615ull; | ||
29 | return (ull << 63 | ull >> 63 | ull << i | ull >> i | ||
30 | | ullmax / ull | ullmax % ull);]])], | ||
31 | [ac_cv_type_unsigned_long_long_int=yes], | ||
32 | [ac_cv_type_unsigned_long_long_int=no])]) | ||
33 | if test $ac_cv_type_unsigned_long_long_int = yes; then | ||
34 | AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1, | ||
35 | [Define to 1 if the system has the type `unsigned long long int'.]) | ||
36 | fi | ||
37 | ]) | ||
38 | |||
39 | # This macro is obsolescent and should go away soon. | ||
40 | AC_DEFUN([gl_AC_TYPE_UNSIGNED_LONG_LONG], | ||
41 | [ | ||
42 | AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) | ||
43 | ac_cv_type_unsigned_long_long=$ac_cv_type_unsigned_long_long_int | ||
44 | if test $ac_cv_type_unsigned_long_long = yes; then | ||
45 | AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, | ||
46 | [Define if you have the 'unsigned long long' type.]) | ||
47 | fi | ||
48 | ]) | ||
diff --git a/gl/m4/unistd_h.m4 b/gl/m4/unistd_h.m4 index 9d499dfe..4b8857ca 100644 --- a/gl/m4/unistd_h.m4 +++ b/gl/m4/unistd_h.m4 | |||
@@ -1,32 +1,61 @@ | |||
1 | # unistd_h.m4 serial 3 | 1 | # unistd_h.m4 serial 10 |
2 | dnl Copyright (C) 2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2006-2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
6 | 6 | ||
7 | dnl Written by Simon Josefsson | 7 | dnl Written by Simon Josefsson, Bruno Haible. |
8 | 8 | ||
9 | AC_DEFUN([gl_HEADER_UNISTD], | 9 | AC_DEFUN([gl_UNISTD_H], |
10 | [ | 10 | [ |
11 | AC_CHECK_HEADERS([unistd.h], [ | 11 | dnl Use AC_REQUIRE here, so that the default behavior below is expanded |
12 | UNISTD_H='' | 12 | dnl once only, before all statements that occur in other macros. |
13 | ], [ | 13 | AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) |
14 | UNISTD_H='unistd.h' | 14 | |
15 | ]) | 15 | gl_CHECK_NEXT_HEADERS([unistd.h]) |
16 | AC_SUBST(UNISTD_H) | ||
17 | dnl This module decides to build unistd.h if it is missing. | ||
18 | dnl The fchdir module decides to build unistd.h if fchdir() is missing. | ||
19 | dnl Therefore check for the prerequisites of lib/unistd.h always. | ||
20 | gl_PREREQ_UNISTD | ||
21 | ]) | ||
22 | 16 | ||
23 | dnl Prerequisites of lib/unistd.h. | ||
24 | AC_DEFUN([gl_PREREQ_UNISTD], | ||
25 | [ | ||
26 | AC_CHECK_HEADERS_ONCE([unistd.h]) | 17 | AC_CHECK_HEADERS_ONCE([unistd.h]) |
27 | if test $ac_cv_header_unistd_h = yes; then | 18 | if test $ac_cv_header_unistd_h = yes; then |
28 | gl_ABSOLUTE_HEADER([unistd.h]) | 19 | HAVE_UNISTD_H=1 |
29 | ABSOLUTE_UNISTD_H=\"$gl_cv_absolute_unistd_h\" | 20 | else |
21 | HAVE_UNISTD_H=0 | ||
30 | fi | 22 | fi |
31 | AC_SUBST([ABSOLUTE_UNISTD_H]) | 23 | AC_SUBST([HAVE_UNISTD_H]) |
24 | ]) | ||
25 | |||
26 | AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], | ||
27 | [ | ||
28 | dnl Use AC_REQUIRE here, so that the default settings are expanded once only. | ||
29 | AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) | ||
30 | GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 | ||
31 | ]) | ||
32 | |||
33 | AC_DEFUN([gl_UNISTD_H_DEFAULTS], | ||
34 | [ | ||
35 | GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) | ||
36 | GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2]) | ||
37 | GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR]) | ||
38 | GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE]) | ||
39 | GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD]) | ||
40 | GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R]) | ||
41 | GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE]) | ||
42 | GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN]) | ||
43 | GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK]) | ||
44 | GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK]) | ||
45 | GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP]) | ||
46 | dnl Assume proper GNU behavior unless another module says otherwise. | ||
47 | HAVE_DUP2=1; AC_SUBST([HAVE_DUP2]) | ||
48 | HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) | ||
49 | HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) | ||
50 | HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) | ||
51 | HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) | ||
52 | HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) | ||
53 | HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) | ||
54 | HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) | ||
55 | REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) | ||
56 | REPLACE_FCHDIR=0; AC_SUBST([REPLACE_FCHDIR]) | ||
57 | REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) | ||
58 | REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) | ||
59 | REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) | ||
60 | REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) | ||
32 | ]) | 61 | ]) |
diff --git a/gl/m4/vasnprintf.m4 b/gl/m4/vasnprintf.m4 index 72c9a13e..c4d3f4fa 100644 --- a/gl/m4/vasnprintf.m4 +++ b/gl/m4/vasnprintf.m4 | |||
@@ -1,5 +1,5 @@ | |||
1 | # vasnprintf.m4 serial 7 | 1 | # vasnprintf.m4 serial 24 |
2 | dnl Copyright (C) 2002-2004, 2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2002-2004, 2006-2008 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
@@ -7,23 +7,33 @@ dnl with or without modifications, as long as this notice is preserved. | |||
7 | AC_DEFUN([gl_FUNC_VASNPRINTF], | 7 | AC_DEFUN([gl_FUNC_VASNPRINTF], |
8 | [ | 8 | [ |
9 | AC_REQUIRE([gl_EOVERFLOW]) | 9 | AC_REQUIRE([gl_EOVERFLOW]) |
10 | AC_REPLACE_FUNCS(vasnprintf) | 10 | AC_CHECK_FUNCS_ONCE([vasnprintf]) |
11 | if test $ac_cv_func_vasnprintf = no; then | 11 | if test $ac_cv_func_vasnprintf = no; then |
12 | AC_LIBOBJ(printf-args) | 12 | gl_REPLACE_VASNPRINTF |
13 | AC_LIBOBJ(printf-parse) | ||
14 | AC_LIBOBJ(asnprintf) | ||
15 | gl_PREREQ_PRINTF_ARGS | ||
16 | gl_PREREQ_PRINTF_PARSE | ||
17 | gl_PREREQ_VASNPRINTF | ||
18 | gl_PREREQ_ASNPRINTF | ||
19 | fi | 13 | fi |
20 | ]) | 14 | ]) |
21 | 15 | ||
16 | AC_DEFUN([gl_REPLACE_VASNPRINTF], | ||
17 | [ | ||
18 | AC_CHECK_FUNCS_ONCE([vasnprintf]) | ||
19 | AC_LIBOBJ([vasnprintf]) | ||
20 | AC_LIBOBJ([printf-args]) | ||
21 | AC_LIBOBJ([printf-parse]) | ||
22 | AC_LIBOBJ([asnprintf]) | ||
23 | if test $ac_cv_func_vasnprintf = yes; then | ||
24 | AC_DEFINE([REPLACE_VASNPRINTF], 1, | ||
25 | [Define if vasnprintf exists but is overridden by gnulib.]) | ||
26 | fi | ||
27 | gl_PREREQ_PRINTF_ARGS | ||
28 | gl_PREREQ_PRINTF_PARSE | ||
29 | gl_PREREQ_VASNPRINTF | ||
30 | gl_PREREQ_ASNPRINTF | ||
31 | ]) | ||
32 | |||
22 | # Prequisites of lib/printf-args.h, lib/printf-args.c. | 33 | # Prequisites of lib/printf-args.h, lib/printf-args.c. |
23 | AC_DEFUN([gl_PREREQ_PRINTF_ARGS], | 34 | AC_DEFUN([gl_PREREQ_PRINTF_ARGS], |
24 | [ | 35 | [ |
25 | AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) | 36 | AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) |
26 | AC_REQUIRE([gt_TYPE_LONGDOUBLE]) | ||
27 | AC_REQUIRE([gt_TYPE_WCHAR_T]) | 37 | AC_REQUIRE([gt_TYPE_WCHAR_T]) |
28 | AC_REQUIRE([gt_TYPE_WINT_T]) | 38 | AC_REQUIRE([gt_TYPE_WINT_T]) |
29 | ]) | 39 | ]) |
@@ -32,11 +42,13 @@ AC_DEFUN([gl_PREREQ_PRINTF_ARGS], | |||
32 | AC_DEFUN([gl_PREREQ_PRINTF_PARSE], | 42 | AC_DEFUN([gl_PREREQ_PRINTF_PARSE], |
33 | [ | 43 | [ |
34 | AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) | 44 | AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) |
35 | AC_REQUIRE([gt_TYPE_LONGDOUBLE]) | ||
36 | AC_REQUIRE([gt_TYPE_WCHAR_T]) | 45 | AC_REQUIRE([gt_TYPE_WCHAR_T]) |
37 | AC_REQUIRE([gt_TYPE_WINT_T]) | 46 | AC_REQUIRE([gt_TYPE_WINT_T]) |
38 | AC_REQUIRE([AC_TYPE_SIZE_T]) | 47 | AC_REQUIRE([AC_TYPE_SIZE_T]) |
39 | AC_CHECK_TYPES(ptrdiff_t) | 48 | AC_CHECK_TYPE([ptrdiff_t], , |
49 | [AC_DEFINE([ptrdiff_t], [long], | ||
50 | [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) | ||
51 | ]) | ||
40 | AC_REQUIRE([gt_AC_TYPE_INTMAX_T]) | 52 | AC_REQUIRE([gt_AC_TYPE_INTMAX_T]) |
41 | ]) | 53 | ]) |
42 | 54 | ||
@@ -45,10 +57,202 @@ AC_DEFUN([gl_PREREQ_VASNPRINTF], | |||
45 | [ | 57 | [ |
46 | AC_REQUIRE([AC_FUNC_ALLOCA]) | 58 | AC_REQUIRE([AC_FUNC_ALLOCA]) |
47 | AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) | 59 | AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) |
48 | AC_REQUIRE([gt_TYPE_LONGDOUBLE]) | ||
49 | AC_REQUIRE([gt_TYPE_WCHAR_T]) | 60 | AC_REQUIRE([gt_TYPE_WCHAR_T]) |
50 | AC_REQUIRE([gt_TYPE_WINT_T]) | 61 | AC_REQUIRE([gt_TYPE_WINT_T]) |
51 | AC_CHECK_FUNCS(snprintf wcslen) | 62 | AC_CHECK_FUNCS(snprintf wcslen) |
63 | dnl Use the _snprintf function only if it is declared (because on NetBSD it | ||
64 | dnl is defined as a weak alias of snprintf; we prefer to use the latter). | ||
65 | AC_CHECK_DECLS([_snprintf], , , [#include <stdio.h>]) | ||
66 | ]) | ||
67 | |||
68 | # Extra prerequisites of lib/vasnprintf.c for supporting 'long double' | ||
69 | # arguments. | ||
70 | AC_DEFUN([gl_PREREQ_VASNPRINTF_LONG_DOUBLE], | ||
71 | [ | ||
72 | AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) | ||
73 | case "$gl_cv_func_printf_long_double" in | ||
74 | *yes) | ||
75 | ;; | ||
76 | *) | ||
77 | AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], 1, | ||
78 | [Define if the vasnprintf implementation needs special code for | ||
79 | 'long double' arguments.]) | ||
80 | ;; | ||
81 | esac | ||
82 | ]) | ||
83 | |||
84 | # Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double' | ||
85 | # arguments. | ||
86 | AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE], | ||
87 | [ | ||
88 | AC_REQUIRE([gl_PRINTF_INFINITE]) | ||
89 | case "$gl_cv_func_printf_infinite" in | ||
90 | *yes) | ||
91 | ;; | ||
92 | *) | ||
93 | AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], 1, | ||
94 | [Define if the vasnprintf implementation needs special code for | ||
95 | infinite 'double' arguments.]) | ||
96 | ;; | ||
97 | esac | ||
98 | ]) | ||
99 | |||
100 | # Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double' | ||
101 | # arguments. | ||
102 | AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE], | ||
103 | [ | ||
104 | AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) | ||
105 | dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if | ||
106 | dnl NEED_PRINTF_LONG_DOUBLE is already set. | ||
107 | AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE]) | ||
108 | case "$gl_cv_func_printf_long_double" in | ||
109 | *yes) | ||
110 | case "$gl_cv_func_printf_infinite_long_double" in | ||
111 | *yes) | ||
112 | ;; | ||
113 | *) | ||
114 | AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], 1, | ||
115 | [Define if the vasnprintf implementation needs special code for | ||
116 | infinite 'long double' arguments.]) | ||
117 | ;; | ||
118 | esac | ||
119 | ;; | ||
120 | esac | ||
121 | ]) | ||
122 | |||
123 | # Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive. | ||
124 | AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A], | ||
125 | [ | ||
126 | AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) | ||
127 | case "$gl_cv_func_printf_directive_a" in | ||
128 | *yes) | ||
129 | ;; | ||
130 | *) | ||
131 | AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], 1, | ||
132 | [Define if the vasnprintf implementation needs special code for | ||
133 | the 'a' and 'A' directives.]) | ||
134 | AC_CHECK_FUNCS([nl_langinfo]) | ||
135 | ;; | ||
136 | esac | ||
137 | ]) | ||
138 | |||
139 | # Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive. | ||
140 | AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F], | ||
141 | [ | ||
142 | AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) | ||
143 | case "$gl_cv_func_printf_directive_f" in | ||
144 | *yes) | ||
145 | ;; | ||
146 | *) | ||
147 | AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], 1, | ||
148 | [Define if the vasnprintf implementation needs special code for | ||
149 | the 'F' directive.]) | ||
150 | ;; | ||
151 | esac | ||
152 | ]) | ||
153 | |||
154 | # Extra prerequisites of lib/vasnprintf.c for supporting the ' flag. | ||
155 | AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING], | ||
156 | [ | ||
157 | AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) | ||
158 | case "$gl_cv_func_printf_flag_grouping" in | ||
159 | *yes) | ||
160 | ;; | ||
161 | *) | ||
162 | AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], 1, | ||
163 | [Define if the vasnprintf implementation needs special code for the | ||
164 | ' flag.]) | ||
165 | ;; | ||
166 | esac | ||
167 | ]) | ||
168 | |||
169 | # Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag. | ||
170 | AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST], | ||
171 | [ | ||
172 | AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) | ||
173 | case "$gl_cv_func_printf_flag_leftadjust" in | ||
174 | *yes) | ||
175 | ;; | ||
176 | *) | ||
177 | AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], 1, | ||
178 | [Define if the vasnprintf implementation needs special code for the | ||
179 | '-' flag.]) | ||
180 | ;; | ||
181 | esac | ||
182 | ]) | ||
183 | |||
184 | # Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag. | ||
185 | AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO], | ||
186 | [ | ||
187 | AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) | ||
188 | case "$gl_cv_func_printf_flag_zero" in | ||
189 | *yes) | ||
190 | ;; | ||
191 | *) | ||
192 | AC_DEFINE([NEED_PRINTF_FLAG_ZERO], 1, | ||
193 | [Define if the vasnprintf implementation needs special code for the | ||
194 | 0 flag.]) | ||
195 | ;; | ||
196 | esac | ||
197 | ]) | ||
198 | |||
199 | # Extra prerequisites of lib/vasnprintf.c for supporting large precisions. | ||
200 | AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION], | ||
201 | [ | ||
202 | AC_REQUIRE([gl_PRINTF_PRECISION]) | ||
203 | case "$gl_cv_func_printf_precision" in | ||
204 | *yes) | ||
205 | ;; | ||
206 | *) | ||
207 | AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], 1, | ||
208 | [Define if the vasnprintf implementation needs special code for | ||
209 | supporting large precisions without arbitrary bounds.]) | ||
210 | AC_DEFINE([NEED_PRINTF_DOUBLE], 1, | ||
211 | [Define if the vasnprintf implementation needs special code for | ||
212 | 'double' arguments.]) | ||
213 | AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], 1, | ||
214 | [Define if the vasnprintf implementation needs special code for | ||
215 | 'long double' arguments.]) | ||
216 | ;; | ||
217 | esac | ||
218 | ]) | ||
219 | |||
220 | # Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory | ||
221 | # conditions. | ||
222 | AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM], | ||
223 | [ | ||
224 | AC_REQUIRE([gl_PRINTF_ENOMEM]) | ||
225 | case "$gl_cv_func_printf_enomem" in | ||
226 | *yes) | ||
227 | ;; | ||
228 | *) | ||
229 | AC_DEFINE([NEED_PRINTF_ENOMEM], 1, | ||
230 | [Define if the vasnprintf implementation needs special code for | ||
231 | surviving out-of-memory conditions.]) | ||
232 | AC_DEFINE([NEED_PRINTF_DOUBLE], 1, | ||
233 | [Define if the vasnprintf implementation needs special code for | ||
234 | 'double' arguments.]) | ||
235 | AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], 1, | ||
236 | [Define if the vasnprintf implementation needs special code for | ||
237 | 'long double' arguments.]) | ||
238 | ;; | ||
239 | esac | ||
240 | ]) | ||
241 | |||
242 | # Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance. | ||
243 | AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS], | ||
244 | [ | ||
245 | AC_REQUIRE([gl_PREREQ_VASNPRINTF]) | ||
246 | gl_PREREQ_VASNPRINTF_LONG_DOUBLE | ||
247 | gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE | ||
248 | gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE | ||
249 | gl_PREREQ_VASNPRINTF_DIRECTIVE_A | ||
250 | gl_PREREQ_VASNPRINTF_DIRECTIVE_F | ||
251 | gl_PREREQ_VASNPRINTF_FLAG_GROUPING | ||
252 | gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST | ||
253 | gl_PREREQ_VASNPRINTF_FLAG_ZERO | ||
254 | gl_PREREQ_VASNPRINTF_PRECISION | ||
255 | gl_PREREQ_VASNPRINTF_ENOMEM | ||
52 | ]) | 256 | ]) |
53 | 257 | ||
54 | # Prerequisites of lib/asnprintf.c. | 258 | # Prerequisites of lib/asnprintf.c. |
diff --git a/gl/m4/vasprintf.m4 b/gl/m4/vasprintf.m4 index 18ca6327..074b03cf 100644 --- a/gl/m4/vasprintf.m4 +++ b/gl/m4/vasprintf.m4 | |||
@@ -1,25 +1,37 @@ | |||
1 | # vasprintf.m4 serial 2 | 1 | # vasprintf.m4 serial 6 |
2 | dnl Copyright (C) 2002-2003, 2006 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2002-2003, 2006-2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
6 | 6 | ||
7 | AC_DEFUN([gl_FUNC_VASPRINTF], | 7 | AC_DEFUN([gl_FUNC_VASPRINTF], |
8 | [ | 8 | [ |
9 | AC_REPLACE_FUNCS(vasprintf) | 9 | AC_CHECK_FUNCS([vasprintf]) |
10 | if test $ac_cv_func_vasprintf = no; then | 10 | if test $ac_cv_func_vasprintf = no; then |
11 | AC_LIBOBJ(asprintf) | 11 | gl_REPLACE_VASPRINTF |
12 | gl_PREREQ_VASPRINTF_H | ||
13 | gl_PREREQ_VASPRINTF | ||
14 | gl_PREREQ_ASPRINTF | ||
15 | fi | 12 | fi |
16 | ]) | 13 | ]) |
17 | 14 | ||
18 | # Prerequisites of lib/vasprintf.h. | 15 | AC_DEFUN([gl_REPLACE_VASPRINTF], |
16 | [ | ||
17 | AC_LIBOBJ([vasprintf]) | ||
18 | AC_LIBOBJ([asprintf]) | ||
19 | AC_REQUIRE([gl_STDIO_H_DEFAULTS]) | ||
20 | if test $ac_cv_func_vasprintf = yes; then | ||
21 | REPLACE_VASPRINTF=1 | ||
22 | else | ||
23 | HAVE_VASPRINTF=0 | ||
24 | fi | ||
25 | gl_PREREQ_VASPRINTF_H | ||
26 | gl_PREREQ_VASPRINTF | ||
27 | gl_PREREQ_ASPRINTF | ||
28 | ]) | ||
29 | |||
30 | # Prerequisites of the vasprintf portion of lib/stdio.h. | ||
19 | AC_DEFUN([gl_PREREQ_VASPRINTF_H], | 31 | AC_DEFUN([gl_PREREQ_VASPRINTF_H], |
20 | [ | 32 | [ |
21 | dnl Persuade glibc <stdio.h> to declare asprintf() and vasprintf(). | 33 | dnl Persuade glibc <stdio.h> to declare asprintf() and vasprintf(). |
22 | AC_REQUIRE([AC_GNU_SOURCE]) | 34 | AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) |
23 | ]) | 35 | ]) |
24 | 36 | ||
25 | # Prerequisites of lib/vasprintf.c. | 37 | # Prerequisites of lib/vasprintf.c. |
diff --git a/gl/m4/vsnprintf.m4 b/gl/m4/vsnprintf.m4 index cb8a9b18..accc79f8 100644 --- a/gl/m4/vsnprintf.m4 +++ b/gl/m4/vsnprintf.m4 | |||
@@ -1,13 +1,29 @@ | |||
1 | # vsnprintf.m4 serial 2 | 1 | # vsnprintf.m4 serial 4 |
2 | dnl Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
6 | 6 | ||
7 | AC_DEFUN([gl_FUNC_VSNPRINTF], | 7 | AC_DEFUN([gl_FUNC_VSNPRINTF], |
8 | [ | 8 | [ |
9 | AC_REPLACE_FUNCS(vsnprintf) | 9 | AC_REQUIRE([gl_STDIO_H_DEFAULTS]) |
10 | AC_CHECK_DECLS_ONCE(vsnprintf) | 10 | AC_CHECK_FUNCS([vsnprintf]) |
11 | if test $ac_cv_func_vsnprintf = no; then | ||
12 | gl_REPLACE_VSNPRINTF | ||
13 | fi | ||
14 | AC_CHECK_DECLS_ONCE([vsnprintf]) | ||
15 | if test $ac_cv_have_decl_vsnprintf = no; then | ||
16 | HAVE_DECL_VSNPRINTF=0 | ||
17 | fi | ||
18 | ]) | ||
19 | |||
20 | AC_DEFUN([gl_REPLACE_VSNPRINTF], | ||
21 | [ | ||
22 | AC_REQUIRE([gl_STDIO_H_DEFAULTS]) | ||
23 | AC_LIBOBJ([vsnprintf]) | ||
24 | if test $ac_cv_func_vsnprintf = yes; then | ||
25 | REPLACE_VSNPRINTF=1 | ||
26 | fi | ||
11 | gl_PREREQ_VSNPRINTF | 27 | gl_PREREQ_VSNPRINTF |
12 | ]) | 28 | ]) |
13 | 29 | ||
diff --git a/gl/m4/wchar.m4 b/gl/m4/wchar.m4 index 068f22d3..70b1248f 100644 --- a/gl/m4/wchar.m4 +++ b/gl/m4/wchar.m4 | |||
@@ -7,23 +7,48 @@ dnl with or without modifications, as long as this notice is preserved. | |||
7 | 7 | ||
8 | dnl Written by Eric Blake. | 8 | dnl Written by Eric Blake. |
9 | 9 | ||
10 | # wchar.m4 serial 1 | 10 | # wchar.m4 serial 4 |
11 | 11 | ||
12 | AC_DEFUN([gl_WCHAR_H], | 12 | AC_DEFUN([gl_WCHAR_H], |
13 | [ | 13 | [ |
14 | AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) | ||
14 | AC_CACHE_CHECK([whether <wchar.h> is standalone], | 15 | AC_CACHE_CHECK([whether <wchar.h> is standalone], |
15 | [gl_cv_header_wchar_h_standalone], | 16 | [gl_cv_header_wchar_h_standalone], |
16 | [AC_COMPILE_IFELSE([[#include <wchar.h> | 17 | [AC_COMPILE_IFELSE([[#include <wchar.h> |
17 | wchar_t w;]], | 18 | wchar_t w;]], |
18 | [gl_cv_header_wchar_h_standalone=yes], | 19 | [gl_cv_header_wchar_h_standalone=yes], |
19 | [gl_cv_header_wchar_h_standalone=no])]) | 20 | [gl_cv_header_wchar_h_standalone=no])]) |
20 | if test $gl_cv_header_wchar_h_standalone = yes; then | 21 | if test $gl_cv_header_wchar_h_standalone != yes; then |
21 | WCHAR_H= | ||
22 | else | ||
23 | gl_ABSOLUTE_HEADER([wchar.h]) | ||
24 | ABSOLUTE_WCHAR_H=\"$gl_cv_absolute_wchar_h\" | ||
25 | WCHAR_H=wchar.h | 22 | WCHAR_H=wchar.h |
26 | fi | 23 | fi |
27 | AC_SUBST([ABSOLUTE_WCHAR_H]) | 24 | |
25 | dnl Prepare for creating substitute <wchar.h>. | ||
26 | dnl Do it always: WCHAR_H may be empty here but can be set later. | ||
27 | dnl Check for <wchar.h> (missing in Linux uClibc when built without wide | ||
28 | dnl character support). | ||
29 | AC_CHECK_HEADERS_ONCE([wchar.h]) | ||
30 | if test $ac_cv_header_wchar_h = yes; then | ||
31 | HAVE_WCHAR_H=1 | ||
32 | else | ||
33 | HAVE_WCHAR_H=0 | ||
34 | fi | ||
35 | AC_SUBST([HAVE_WCHAR_H]) | ||
36 | gl_CHECK_NEXT_HEADERS([wchar.h]) | ||
37 | ]) | ||
38 | |||
39 | AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], | ||
40 | [ | ||
41 | dnl Use AC_REQUIRE here, so that the default settings are expanded once only. | ||
42 | AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) | ||
43 | GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 | ||
44 | ]) | ||
45 | |||
46 | AC_DEFUN([gl_WCHAR_H_DEFAULTS], | ||
47 | [ | ||
48 | GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH]) | ||
49 | dnl Assume proper GNU behavior unless another module says otherwise. | ||
50 | HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) | ||
51 | REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) | ||
52 | WCHAR_H= | ||
28 | AC_SUBST([WCHAR_H]) | 53 | AC_SUBST([WCHAR_H]) |
29 | ]) | 54 | ]) |
diff --git a/gl/m4/wctype.m4 b/gl/m4/wctype.m4 index 62994c62..7483c4fe 100644 --- a/gl/m4/wctype.m4 +++ b/gl/m4/wctype.m4 | |||
@@ -10,6 +10,12 @@ dnl Written by Paul Eggert. | |||
10 | AC_DEFUN([gl_WCTYPE_H], | 10 | AC_DEFUN([gl_WCTYPE_H], |
11 | [ | 11 | [ |
12 | AC_CHECK_FUNCS_ONCE([iswcntrl]) | 12 | AC_CHECK_FUNCS_ONCE([iswcntrl]) |
13 | if test $ac_cv_func_iswcntrl = yes; then | ||
14 | HAVE_ISWCNTRL=1 | ||
15 | else | ||
16 | HAVE_ISWCNTRL=0 | ||
17 | fi | ||
18 | AC_SUBST([HAVE_ISWCNTRL]) | ||
13 | AC_CHECK_HEADERS_ONCE([wctype.h]) | 19 | AC_CHECK_HEADERS_ONCE([wctype.h]) |
14 | AC_REQUIRE([AC_C_INLINE]) | 20 | AC_REQUIRE([AC_C_INLINE]) |
15 | 21 | ||
@@ -23,19 +29,16 @@ AC_DEFUN([gl_WCTYPE_H], | |||
23 | 29 | ||
24 | WCTYPE_H=wctype.h | 30 | WCTYPE_H=wctype.h |
25 | if test $ac_cv_header_wctype_h = yes; then | 31 | if test $ac_cv_header_wctype_h = yes; then |
26 | if test "$ac_cv_func_iswcntrl" = yes; then | 32 | if test $ac_cv_func_iswcntrl = yes; then |
27 | WCTYPE_H= | 33 | WCTYPE_H= |
28 | fi | 34 | fi |
29 | dnl Compute ABSOLUTE_WCTYPE_H even if WCTYPE_H is empty, | 35 | dnl Compute NEXT_WCTYPE_H even if WCTYPE_H is empty, |
30 | dnl for the benefit of builds from non-distclean directories. | 36 | dnl for the benefit of builds from non-distclean directories. |
31 | gl_ABSOLUTE_HEADER([wctype.h]) | 37 | gl_CHECK_NEXT_HEADERS([wctype.h]) |
32 | ABSOLUTE_WCTYPE_H=\"$gl_cv_absolute_wctype_h\" | ||
33 | HAVE_WCTYPE_H=1 | 38 | HAVE_WCTYPE_H=1 |
34 | else | 39 | else |
35 | ABSOLUTE_WCTYPE_H=\"no/such/file/wctype.h\" | ||
36 | HAVE_WCTYPE_H=0 | 40 | HAVE_WCTYPE_H=0 |
37 | fi | 41 | fi |
38 | AC_SUBST([ABSOLUTE_WCTYPE_H]) | ||
39 | AC_SUBST([HAVE_WCTYPE_H]) | 42 | AC_SUBST([HAVE_WCTYPE_H]) |
40 | AC_SUBST([WCTYPE_H]) | 43 | AC_SUBST([WCTYPE_H]) |
41 | ]) | 44 | ]) |
diff --git a/gl/m4/wcwidth.m4 b/gl/m4/wcwidth.m4 deleted file mode 100644 index b4834991..00000000 --- a/gl/m4/wcwidth.m4 +++ /dev/null | |||
@@ -1,30 +0,0 @@ | |||
1 | # wcwidth.m4 serial 8 | ||
2 | dnl Copyright (C) 2006, 2007 Free Software Foundation, Inc. | ||
3 | dnl This file is free software; the Free Software Foundation | ||
4 | dnl gives unlimited permission to copy and/or distribute it, | ||
5 | dnl with or without modifications, as long as this notice is preserved. | ||
6 | |||
7 | AC_DEFUN([gl_FUNC_WCWIDTH], | ||
8 | [ | ||
9 | dnl Persuade glibc <wchar.h> to declare wcwidth(). | ||
10 | AC_REQUIRE([AC_GNU_SOURCE]) | ||
11 | |||
12 | AC_REQUIRE([AC_C_INLINE]) | ||
13 | AC_REQUIRE([gt_TYPE_WCHAR_T]) | ||
14 | AC_REQUIRE([gt_TYPE_WINT_T]) | ||
15 | |||
16 | AC_CHECK_HEADERS_ONCE([wchar.h]) | ||
17 | AC_CHECK_FUNCS_ONCE([wcwidth]) | ||
18 | |||
19 | AC_CHECK_DECLS([wcwidth], [], [], [ | ||
20 | /* AIX 3.2.5 declares wcwidth in <string.h>. */ | ||
21 | #include <string.h> | ||
22 | /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before | ||
23 | <wchar.h>. | ||
24 | BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included | ||
25 | before <wchar.h>. */ | ||
26 | #include <stddef.h> | ||
27 | #include <stdio.h> | ||
28 | #include <time.h> | ||
29 | #include <wchar.h> | ||
30 | ])]) | ||
diff --git a/gl/m4/wint_t.m4 b/gl/m4/wint_t.m4 index 3706c047..af5ed936 100644 --- a/gl/m4/wint_t.m4 +++ b/gl/m4/wint_t.m4 | |||
@@ -1,4 +1,4 @@ | |||
1 | # wint_t.m4 serial 2 (gettext-0.12) | 1 | # wint_t.m4 serial 2 (gettext-0.17) |
2 | dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
diff --git a/gl/malloc.c b/gl/malloc.c index d4dae3e1..f2f66637 100644 --- a/gl/malloc.c +++ b/gl/malloc.c | |||
@@ -1,10 +1,10 @@ | |||
1 | /* malloc() function that is glibc compatible. | 1 | /* malloc() function that is glibc compatible. |
2 | 2 | ||
3 | Copyright (C) 1997, 1998, 2006 Free Software Foundation, Inc. | 3 | Copyright (C) 1997, 1998, 2006, 2007 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3, or (at your option) |
8 | any later version. | 8 | any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
@@ -16,20 +16,42 @@ | |||
16 | along with this program; if not, write to the Free Software Foundation, | 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. */ | 17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
18 | 18 | ||
19 | /* written by Jim Meyering */ | 19 | /* written by Jim Meyering and Bruno Haible */ |
20 | 20 | ||
21 | #include <config.h> | 21 | #include <config.h> |
22 | #undef malloc | 22 | /* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */ |
23 | #ifdef malloc | ||
24 | # define NEED_MALLOC_GNU | ||
25 | # undef malloc | ||
26 | #endif | ||
23 | 27 | ||
28 | /* Specification. */ | ||
24 | #include <stdlib.h> | 29 | #include <stdlib.h> |
25 | 30 | ||
31 | #include <errno.h> | ||
32 | |||
33 | /* Call the system's malloc below. */ | ||
34 | #undef malloc | ||
35 | |||
26 | /* Allocate an N-byte block of memory from the heap. | 36 | /* Allocate an N-byte block of memory from the heap. |
27 | If N is zero, allocate a 1-byte block. */ | 37 | If N is zero, allocate a 1-byte block. */ |
28 | 38 | ||
29 | void * | 39 | void * |
30 | rpl_malloc (size_t n) | 40 | rpl_malloc (size_t n) |
31 | { | 41 | { |
42 | void *result; | ||
43 | |||
44 | #ifdef NEED_MALLOC_GNU | ||
32 | if (n == 0) | 45 | if (n == 0) |
33 | n = 1; | 46 | n = 1; |
34 | return malloc (n); | 47 | #endif |
48 | |||
49 | result = malloc (n); | ||
50 | |||
51 | #if !HAVE_MALLOC_POSIX | ||
52 | if (result == NULL) | ||
53 | errno = ENOMEM; | ||
54 | #endif | ||
55 | |||
56 | return result; | ||
35 | } | 57 | } |
diff --git a/gl/mbchar.c b/gl/mbchar.c deleted file mode 100644 index 95373f58..00000000 --- a/gl/mbchar.c +++ /dev/null | |||
@@ -1,36 +0,0 @@ | |||
1 | /* Copyright (C) 2001, 2006 Free Software Foundation, Inc. | ||
2 | |||
3 | This program is free software; you can redistribute it and/or modify | ||
4 | it under the terms of the GNU General Public License as published by | ||
5 | the Free Software Foundation; either version 2, or (at your option) | ||
6 | any later version. | ||
7 | |||
8 | This program is distributed in the hope that it will be useful, | ||
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
11 | GNU General Public License for more details. | ||
12 | |||
13 | You should have received a copy of the GNU General Public License | ||
14 | along with this program; if not, write to the Free Software Foundation, | ||
15 | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||
16 | |||
17 | |||
18 | #include <config.h> | ||
19 | |||
20 | #include <limits.h> | ||
21 | |||
22 | #include "mbchar.h" | ||
23 | |||
24 | #if IS_BASIC_ASCII | ||
25 | |||
26 | /* Bit table of characters in the ISO C "basic character set". */ | ||
27 | const unsigned int is_basic_table [UCHAR_MAX / 32 + 1] = | ||
28 | { | ||
29 | 0x00001a00, /* '\t' '\v' '\f' */ | ||
30 | 0xffffffef, /* ' '...'#' '%'...'?' */ | ||
31 | 0xfffffffe, /* 'A'...'Z' '[' '\\' ']' '^' '_' */ | ||
32 | 0x7ffffffe /* 'a'...'z' '{' '|' '}' '~' */ | ||
33 | /* The remaining bits are 0. */ | ||
34 | }; | ||
35 | |||
36 | #endif /* IS_BASIC_ASCII */ | ||
diff --git a/gl/mbchar.h b/gl/mbchar.h deleted file mode 100644 index f3e28ef5..00000000 --- a/gl/mbchar.h +++ /dev/null | |||
@@ -1,353 +0,0 @@ | |||
1 | /* Multibyte character data type. | ||
2 | Copyright (C) 2001, 2005-2006 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program 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 | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||
17 | |||
18 | /* Written by Bruno Haible <bruno@clisp.org>. */ | ||
19 | |||
20 | /* A multibyte character is a short subsequence of a char* string, | ||
21 | representing a single wide character. | ||
22 | |||
23 | We use multibyte characters instead of wide characters because of | ||
24 | the following goals: | ||
25 | 1) correct multibyte handling, i.e. operate according to the LC_CTYPE | ||
26 | locale, | ||
27 | 2) ease of maintenance, i.e. the maintainer needs not know all details | ||
28 | of the ISO C 99 standard, | ||
29 | 3) don't fail grossly if the input is not in the encoding set by the | ||
30 | locale, because often different encodings are in use in the same | ||
31 | countries (ISO-8859-1/UTF-8, EUC-JP/Shift_JIS, ...), | ||
32 | 4) fast in the case of ASCII characters, | ||
33 | 5) portability, i.e. don't make unportable assumptions about wchar_t. | ||
34 | |||
35 | Multibyte characters are only accessed through the mb* macros. | ||
36 | |||
37 | mb_ptr (mbc) | ||
38 | return a pointer to the beginning of the multibyte sequence. | ||
39 | |||
40 | mb_len (mbc) | ||
41 | returns the number of bytes occupied by the multibyte sequence. | ||
42 | Always > 0. | ||
43 | |||
44 | mb_iseq (mbc, sc) | ||
45 | returns true if mbc is the standard ASCII character sc. | ||
46 | |||
47 | mb_isnul (mbc) | ||
48 | returns true if mbc is the nul character. | ||
49 | |||
50 | mb_cmp (mbc1, mbc2) | ||
51 | returns a positive, zero, or negative value depending on whether mbc1 | ||
52 | sorts after, same or before mbc2. | ||
53 | |||
54 | mb_casecmp (mbc1, mbc2) | ||
55 | returns a positive, zero, or negative value depending on whether mbc1 | ||
56 | sorts after, same or before mbc2, modulo upper/lowercase conversion. | ||
57 | |||
58 | mb_equal (mbc1, mbc2) | ||
59 | returns true if mbc1 and mbc2 are equal. | ||
60 | |||
61 | mb_caseequal (mbc1, mbc2) | ||
62 | returns true if mbc1 and mbc2 are equal modulo upper/lowercase conversion. | ||
63 | |||
64 | mb_isalnum (mbc) | ||
65 | returns true if mbc is alphanumeric. | ||
66 | |||
67 | mb_isalpha (mbc) | ||
68 | returns true if mbc is alphabetic. | ||
69 | |||
70 | mb_isascii(mbc) | ||
71 | returns true if mbc is plain ASCII. | ||
72 | |||
73 | mb_isblank (mbc) | ||
74 | returns true if mbc is a blank. | ||
75 | |||
76 | mb_iscntrl (mbc) | ||
77 | returns true if mbc is a control character. | ||
78 | |||
79 | mb_isdigit (mbc) | ||
80 | returns true if mbc is a decimal digit. | ||
81 | |||
82 | mb_isgraph (mbc) | ||
83 | returns true if mbc is a graphic character. | ||
84 | |||
85 | mb_islower (mbc) | ||
86 | returns true if mbc is lowercase. | ||
87 | |||
88 | mb_isprint (mbc) | ||
89 | returns true if mbc is a printable character. | ||
90 | |||
91 | mb_ispunct (mbc) | ||
92 | returns true if mbc is a punctuation character. | ||
93 | |||
94 | mb_isspace (mbc) | ||
95 | returns true if mbc is a space character. | ||
96 | |||
97 | mb_isupper (mbc) | ||
98 | returns true if mbc is uppercase. | ||
99 | |||
100 | mb_isxdigit (mbc) | ||
101 | returns true if mbc is a hexadecimal digit. | ||
102 | |||
103 | mb_width (mbc) | ||
104 | returns the number of columns on the output device occupied by mbc. | ||
105 | Always >= 0. | ||
106 | |||
107 | mb_putc (mbc, stream) | ||
108 | outputs mbc on stream, a byte oriented FILE stream opened for output. | ||
109 | |||
110 | mb_setascii (&mbc, sc) | ||
111 | assigns the standard ASCII character sc to mbc. | ||
112 | |||
113 | mb_copy (&destmbc, &srcmbc) | ||
114 | copies srcmbc to destmbc. | ||
115 | |||
116 | Here are the function prototypes of the macros. | ||
117 | |||
118 | extern const char * mb_ptr (const mbchar_t mbc); | ||
119 | extern size_t mb_len (const mbchar_t mbc); | ||
120 | extern bool mb_iseq (const mbchar_t mbc, char sc); | ||
121 | extern bool mb_isnul (const mbchar_t mbc); | ||
122 | extern int mb_cmp (const mbchar_t mbc1, const mbchar_t mbc2); | ||
123 | extern int mb_casecmp (const mbchar_t mbc1, const mbchar_t mbc2); | ||
124 | extern bool mb_equal (const mbchar_t mbc1, const mbchar_t mbc2); | ||
125 | extern bool mb_caseequal (const mbchar_t mbc1, const mbchar_t mbc2); | ||
126 | extern bool mb_isalnum (const mbchar_t mbc); | ||
127 | extern bool mb_isalpha (const mbchar_t mbc); | ||
128 | extern bool mb_isascii (const mbchar_t mbc); | ||
129 | extern bool mb_isblank (const mbchar_t mbc); | ||
130 | extern bool mb_iscntrl (const mbchar_t mbc); | ||
131 | extern bool mb_isdigit (const mbchar_t mbc); | ||
132 | extern bool mb_isgraph (const mbchar_t mbc); | ||
133 | extern bool mb_islower (const mbchar_t mbc); | ||
134 | extern bool mb_isprint (const mbchar_t mbc); | ||
135 | extern bool mb_ispunct (const mbchar_t mbc); | ||
136 | extern bool mb_isspace (const mbchar_t mbc); | ||
137 | extern bool mb_isupper (const mbchar_t mbc); | ||
138 | extern bool mb_isxdigit (const mbchar_t mbc); | ||
139 | extern int mb_width (const mbchar_t mbc); | ||
140 | extern void mb_putc (const mbchar_t mbc, FILE *stream); | ||
141 | extern void mb_setascii (mbchar_t *new, char sc); | ||
142 | extern void mb_copy (mbchar_t *new, const mbchar_t *old); | ||
143 | */ | ||
144 | |||
145 | #ifndef _MBCHAR_H | ||
146 | #define _MBCHAR_H 1 | ||
147 | |||
148 | #include <stdbool.h> | ||
149 | #include <string.h> | ||
150 | |||
151 | /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before | ||
152 | <wchar.h>. | ||
153 | BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before | ||
154 | <wchar.h>. */ | ||
155 | #include <stdio.h> | ||
156 | #include <time.h> | ||
157 | #include <wchar.h> | ||
158 | #include <wctype.h> | ||
159 | |||
160 | #include "wcwidth.h" | ||
161 | |||
162 | #define MBCHAR_BUF_SIZE 24 | ||
163 | |||
164 | struct mbchar | ||
165 | { | ||
166 | const char *ptr; /* pointer to current character */ | ||
167 | size_t bytes; /* number of bytes of current character, > 0 */ | ||
168 | bool wc_valid; /* true if wc is a valid wide character */ | ||
169 | wchar_t wc; /* if wc_valid: the current character */ | ||
170 | char buf[MBCHAR_BUF_SIZE]; /* room for the bytes, used for file input only */ | ||
171 | }; | ||
172 | |||
173 | /* EOF (not a real character) is represented with bytes = 0 and | ||
174 | wc_valid = false. */ | ||
175 | |||
176 | typedef struct mbchar mbchar_t; | ||
177 | |||
178 | /* Access the current character. */ | ||
179 | #define mb_ptr(mbc) ((mbc).ptr) | ||
180 | #define mb_len(mbc) ((mbc).bytes) | ||
181 | |||
182 | /* Comparison of characters. */ | ||
183 | #define mb_iseq(mbc, sc) ((mbc).wc_valid && (mbc).wc == (sc)) | ||
184 | #define mb_isnul(mbc) ((mbc).wc_valid && (mbc).wc == 0) | ||
185 | #define mb_cmp(mbc1, mbc2) \ | ||
186 | ((mbc1).wc_valid \ | ||
187 | ? ((mbc2).wc_valid \ | ||
188 | ? (int) (mbc1).wc - (int) (mbc2).wc \ | ||
189 | : -1) \ | ||
190 | : ((mbc2).wc_valid \ | ||
191 | ? 1 \ | ||
192 | : (mbc1).bytes == (mbc2).bytes \ | ||
193 | ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \ | ||
194 | : (mbc1).bytes < (mbc2).bytes \ | ||
195 | ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \ | ||
196 | : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1))) | ||
197 | #define mb_casecmp(mbc1, mbc2) \ | ||
198 | ((mbc1).wc_valid \ | ||
199 | ? ((mbc2).wc_valid \ | ||
200 | ? (int) towlower ((mbc1).wc) - (int) towlower ((mbc2).wc) \ | ||
201 | : -1) \ | ||
202 | : ((mbc2).wc_valid \ | ||
203 | ? 1 \ | ||
204 | : (mbc1).bytes == (mbc2).bytes \ | ||
205 | ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \ | ||
206 | : (mbc1).bytes < (mbc2).bytes \ | ||
207 | ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \ | ||
208 | : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1))) | ||
209 | #define mb_equal(mbc1, mbc2) \ | ||
210 | ((mbc1).wc_valid && (mbc2).wc_valid \ | ||
211 | ? (mbc1).wc == (mbc2).wc \ | ||
212 | : (mbc1).bytes == (mbc2).bytes \ | ||
213 | && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0) | ||
214 | #define mb_caseequal(mbc1, mbc2) \ | ||
215 | ((mbc1).wc_valid && (mbc2).wc_valid \ | ||
216 | ? towlower ((mbc1).wc) == towlower ((mbc2).wc) \ | ||
217 | : (mbc1).bytes == (mbc2).bytes \ | ||
218 | && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0) | ||
219 | |||
220 | /* <ctype.h>, <wctype.h> classification. */ | ||
221 | #define mb_isascii(mbc) \ | ||
222 | ((mbc).wc_valid && (mbc).wc >= 0 && (mbc).wc <= 127) | ||
223 | #define mb_isalnum(mbc) ((mbc).wc_valid && iswalnum ((mbc).wc)) | ||
224 | #define mb_isalpha(mbc) ((mbc).wc_valid && iswalpha ((mbc).wc)) | ||
225 | #define mb_isblank(mbc) ((mbc).wc_valid && iswblank ((mbc).wc)) | ||
226 | #define mb_iscntrl(mbc) ((mbc).wc_valid && iswcntrl ((mbc).wc)) | ||
227 | #define mb_isdigit(mbc) ((mbc).wc_valid && iswdigit ((mbc).wc)) | ||
228 | #define mb_isgraph(mbc) ((mbc).wc_valid && iswgraph ((mbc).wc)) | ||
229 | #define mb_islower(mbc) ((mbc).wc_valid && iswlower ((mbc).wc)) | ||
230 | #define mb_isprint(mbc) ((mbc).wc_valid && iswprint ((mbc).wc)) | ||
231 | #define mb_ispunct(mbc) ((mbc).wc_valid && iswpunct ((mbc).wc)) | ||
232 | #define mb_isspace(mbc) ((mbc).wc_valid && iswspace ((mbc).wc)) | ||
233 | #define mb_isupper(mbc) ((mbc).wc_valid && iswupper ((mbc).wc)) | ||
234 | #define mb_isxdigit(mbc) ((mbc).wc_valid && iswxdigit ((mbc).wc)) | ||
235 | |||
236 | /* Extra <wchar.h> function. */ | ||
237 | |||
238 | /* Unprintable characters appear as a small box of width 1. */ | ||
239 | #define MB_UNPRINTABLE_WIDTH 1 | ||
240 | |||
241 | static inline int | ||
242 | mb_width_aux (wint_t wc) | ||
243 | { | ||
244 | int w = wcwidth (wc); | ||
245 | /* For unprintable characters, arbitrarily return 0 for control characters | ||
246 | and MB_UNPRINTABLE_WIDTH otherwise. */ | ||
247 | return (w >= 0 ? w : iswcntrl (wc) ? 0 : MB_UNPRINTABLE_WIDTH); | ||
248 | } | ||
249 | |||
250 | #define mb_width(mbc) \ | ||
251 | ((mbc).wc_valid ? mb_width_aux ((mbc).wc) : MB_UNPRINTABLE_WIDTH) | ||
252 | |||
253 | /* Output. */ | ||
254 | #define mb_putc(mbc, stream) fwrite ((mbc).ptr, 1, (mbc).bytes, (stream)) | ||
255 | |||
256 | /* Assignment. */ | ||
257 | #define mb_setascii(mbc, sc) \ | ||
258 | ((mbc)->ptr = (mbc)->buf, (mbc)->bytes = 1, (mbc)->wc_valid = 1, \ | ||
259 | (mbc)->wc = (mbc)->buf[0] = (sc)) | ||
260 | |||
261 | /* Copying a character. */ | ||
262 | static inline void | ||
263 | mb_copy (mbchar_t *new_mbc, const mbchar_t *old_mbc) | ||
264 | { | ||
265 | if (old_mbc->ptr == &old_mbc->buf[0]) | ||
266 | { | ||
267 | memcpy (&new_mbc->buf[0], &old_mbc->buf[0], old_mbc->bytes); | ||
268 | new_mbc->ptr = &new_mbc->buf[0]; | ||
269 | } | ||
270 | else | ||
271 | new_mbc->ptr = old_mbc->ptr; | ||
272 | new_mbc->bytes = old_mbc->bytes; | ||
273 | if ((new_mbc->wc_valid = old_mbc->wc_valid)) | ||
274 | new_mbc->wc = old_mbc->wc; | ||
275 | } | ||
276 | |||
277 | |||
278 | /* is_basic(c) tests whether the single-byte character c is in the | ||
279 | ISO C "basic character set". | ||
280 | This is a convenience function, and is in this file only to share code | ||
281 | between mbiter_multi.h and mbfile_multi.h. */ | ||
282 | #if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ | ||
283 | && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ | ||
284 | && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ | ||
285 | && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ | ||
286 | && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ | ||
287 | && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ | ||
288 | && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ | ||
289 | && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ | ||
290 | && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ | ||
291 | && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ | ||
292 | && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ | ||
293 | && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ | ||
294 | && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ | ||
295 | && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ | ||
296 | && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ | ||
297 | && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ | ||
298 | && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ | ||
299 | && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ | ||
300 | && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ | ||
301 | && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ | ||
302 | && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ | ||
303 | && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ | ||
304 | && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) | ||
305 | /* The character set is ISO-646, not EBCDIC. */ | ||
306 | # define IS_BASIC_ASCII 1 | ||
307 | |||
308 | extern const unsigned int is_basic_table[]; | ||
309 | |||
310 | static inline bool | ||
311 | is_basic (char c) | ||
312 | { | ||
313 | return (is_basic_table [(unsigned char) c >> 5] >> ((unsigned char) c & 31)) | ||
314 | & 1; | ||
315 | } | ||
316 | |||
317 | #else | ||
318 | |||
319 | static inline bool | ||
320 | is_basic (char c) | ||
321 | { | ||
322 | switch (c) | ||
323 | { | ||
324 | case '\t': case '\v': case '\f': | ||
325 | case ' ': case '!': case '"': case '#': case '%': | ||
326 | case '&': case '\'': case '(': case ')': case '*': | ||
327 | case '+': case ',': case '-': case '.': case '/': | ||
328 | case '0': case '1': case '2': case '3': case '4': | ||
329 | case '5': case '6': case '7': case '8': case '9': | ||
330 | case ':': case ';': case '<': case '=': case '>': | ||
331 | case '?': | ||
332 | case 'A': case 'B': case 'C': case 'D': case 'E': | ||
333 | case 'F': case 'G': case 'H': case 'I': case 'J': | ||
334 | case 'K': case 'L': case 'M': case 'N': case 'O': | ||
335 | case 'P': case 'Q': case 'R': case 'S': case 'T': | ||
336 | case 'U': case 'V': case 'W': case 'X': case 'Y': | ||
337 | case 'Z': | ||
338 | case '[': case '\\': case ']': case '^': case '_': | ||
339 | case 'a': case 'b': case 'c': case 'd': case 'e': | ||
340 | case 'f': case 'g': case 'h': case 'i': case 'j': | ||
341 | case 'k': case 'l': case 'm': case 'n': case 'o': | ||
342 | case 'p': case 'q': case 'r': case 's': case 't': | ||
343 | case 'u': case 'v': case 'w': case 'x': case 'y': | ||
344 | case 'z': case '{': case '|': case '}': case '~': | ||
345 | return 1; | ||
346 | default: | ||
347 | return 0; | ||
348 | } | ||
349 | } | ||
350 | |||
351 | #endif | ||
352 | |||
353 | #endif /* _MBCHAR_H */ | ||
diff --git a/gl/mbuiter.h b/gl/mbuiter.h deleted file mode 100644 index 9da3a6c7..00000000 --- a/gl/mbuiter.h +++ /dev/null | |||
@@ -1,203 +0,0 @@ | |||
1 | /* Iterating through multibyte strings: macros for multi-byte encodings. | ||
2 | Copyright (C) 2001, 2005 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program 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 | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||
17 | |||
18 | /* Written by Bruno Haible <bruno@clisp.org>. */ | ||
19 | |||
20 | /* The macros in this file implement forward iteration through a | ||
21 | multi-byte string, without knowing its length a-priori. | ||
22 | |||
23 | With these macros, an iteration loop that looks like | ||
24 | |||
25 | char *iter; | ||
26 | for (iter = buf; *iter != '\0'; iter++) | ||
27 | { | ||
28 | do_something (*iter); | ||
29 | } | ||
30 | |||
31 | becomes | ||
32 | |||
33 | mbui_iterator_t iter; | ||
34 | for (mbui_init (iter, buf); mbui_avail (iter); mbui_advance (iter)) | ||
35 | { | ||
36 | do_something (mbui_cur_ptr (iter), mb_len (mbui_cur (iter))); | ||
37 | } | ||
38 | |||
39 | The benefit of these macros over plain use of mbrtowc is: | ||
40 | - Handling of invalid multibyte sequences is possible without | ||
41 | making the code more complicated, while still preserving the | ||
42 | invalid multibyte sequences. | ||
43 | |||
44 | Compared to mbiter.h, the macros here don't need to know the string's | ||
45 | length a-priori. The downside is that at each step, the look-ahead | ||
46 | that guards against overrunning the terminating '\0' is more expensive. | ||
47 | The mbui_* macros are therefore suitable when there is a high probability | ||
48 | that only the first few multibyte characters need to be inspected. | ||
49 | Whereas the mbi_* macros are better if usually the iteration runs | ||
50 | through the entire string. | ||
51 | |||
52 | mbui_iterator_t | ||
53 | is a type usable for variable declarations. | ||
54 | |||
55 | mbui_init (iter, startptr) | ||
56 | initializes the iterator, starting at startptr. | ||
57 | |||
58 | mbui_avail (iter) | ||
59 | returns true if there are more multibyte chracters available before | ||
60 | the end of string is reached. In this case, mbui_cur (iter) is | ||
61 | initialized to the next multibyte chracter. | ||
62 | |||
63 | mbui_advance (iter) | ||
64 | advances the iterator by one multibyte character. | ||
65 | |||
66 | mbui_cur (iter) | ||
67 | returns the current multibyte character, of type mbchar_t. All the | ||
68 | macros defined in mbchar.h can be used on it. | ||
69 | |||
70 | mbui_cur_ptr (iter) | ||
71 | return a pointer to the beginning of the current multibyte character. | ||
72 | |||
73 | mbui_reloc (iter, ptrdiff) | ||
74 | relocates iterator when the string is moved by ptrdiff bytes. | ||
75 | |||
76 | Here are the function prototypes of the macros. | ||
77 | |||
78 | extern void mbui_init (mbui_iterator_t iter, const char *startptr); | ||
79 | extern bool mbui_avail (mbui_iterator_t iter); | ||
80 | extern void mbui_advance (mbui_iterator_t iter); | ||
81 | extern mbchar_t mbui_cur (mbui_iterator_t iter); | ||
82 | extern const char * mbui_cur_ptr (mbui_iterator_t iter); | ||
83 | extern void mbui_reloc (mbui_iterator_t iter, ptrdiff_t ptrdiff); | ||
84 | */ | ||
85 | |||
86 | #ifndef _MBUITER_H | ||
87 | #define _MBUITER_H 1 | ||
88 | |||
89 | #include <assert.h> | ||
90 | #include <stdbool.h> | ||
91 | #include <stdlib.h> | ||
92 | |||
93 | /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before | ||
94 | <wchar.h>. | ||
95 | BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before | ||
96 | <wchar.h>. */ | ||
97 | #include <stdio.h> | ||
98 | #include <time.h> | ||
99 | #include <wchar.h> | ||
100 | |||
101 | #include "mbchar.h" | ||
102 | #include "strnlen1.h" | ||
103 | |||
104 | struct mbuiter_multi | ||
105 | { | ||
106 | bool in_shift; /* true if next byte may not be interpreted as ASCII */ | ||
107 | mbstate_t state; /* if in_shift: current shift state */ | ||
108 | bool next_done; /* true if mbui_avail has already filled the following */ | ||
109 | struct mbchar cur; /* the current character: | ||
110 | const char *cur.ptr pointer to current character | ||
111 | The following are only valid after mbui_avail. | ||
112 | size_t cur.bytes number of bytes of current character | ||
113 | bool cur.wc_valid true if wc is a valid wide character | ||
114 | wchar_t cur.wc if wc_valid: the current character | ||
115 | */ | ||
116 | }; | ||
117 | |||
118 | static inline void | ||
119 | mbuiter_multi_next (struct mbuiter_multi *iter) | ||
120 | { | ||
121 | if (iter->next_done) | ||
122 | return; | ||
123 | if (iter->in_shift) | ||
124 | goto with_shift; | ||
125 | /* Handle most ASCII characters quickly, without calling mbrtowc(). */ | ||
126 | if (is_basic (*iter->cur.ptr)) | ||
127 | { | ||
128 | /* These characters are part of the basic character set. ISO C 99 | ||
129 | guarantees that their wide character code is identical to their | ||
130 | char code. */ | ||
131 | iter->cur.bytes = 1; | ||
132 | iter->cur.wc = *iter->cur.ptr; | ||
133 | iter->cur.wc_valid = true; | ||
134 | } | ||
135 | else | ||
136 | { | ||
137 | assert (mbsinit (&iter->state)); | ||
138 | iter->in_shift = true; | ||
139 | with_shift: | ||
140 | iter->cur.bytes = mbrtowc (&iter->cur.wc, iter->cur.ptr, | ||
141 | strnlen1 (iter->cur.ptr, MB_CUR_MAX), | ||
142 | &iter->state); | ||
143 | if (iter->cur.bytes == (size_t) -1) | ||
144 | { | ||
145 | /* An invalid multibyte sequence was encountered. */ | ||
146 | iter->cur.bytes = 1; | ||
147 | iter->cur.wc_valid = false; | ||
148 | /* Whether to set iter->in_shift = false and reset iter->state | ||
149 | or not is not very important; the string is bogus anyway. */ | ||
150 | } | ||
151 | else if (iter->cur.bytes == (size_t) -2) | ||
152 | { | ||
153 | /* An incomplete multibyte character at the end. */ | ||
154 | iter->cur.bytes = strlen (iter->cur.ptr); | ||
155 | iter->cur.wc_valid = false; | ||
156 | /* Whether to set iter->in_shift = false and reset iter->state | ||
157 | or not is not important; the string end is reached anyway. */ | ||
158 | } | ||
159 | else | ||
160 | { | ||
161 | if (iter->cur.bytes == 0) | ||
162 | { | ||
163 | /* A null wide character was encountered. */ | ||
164 | iter->cur.bytes = 1; | ||
165 | assert (*iter->cur.ptr == '\0'); | ||
166 | assert (iter->cur.wc == 0); | ||
167 | } | ||
168 | iter->cur.wc_valid = true; | ||
169 | |||
170 | /* When in the initial state, we can go back treating ASCII | ||
171 | characters more quickly. */ | ||
172 | if (mbsinit (&iter->state)) | ||
173 | iter->in_shift = false; | ||
174 | } | ||
175 | } | ||
176 | iter->next_done = true; | ||
177 | } | ||
178 | |||
179 | static inline void | ||
180 | mbuiter_multi_reloc (struct mbuiter_multi *iter, ptrdiff_t ptrdiff) | ||
181 | { | ||
182 | iter->cur.ptr += ptrdiff; | ||
183 | } | ||
184 | |||
185 | /* Iteration macros. */ | ||
186 | typedef struct mbuiter_multi mbui_iterator_t; | ||
187 | #define mbui_init(iter, startptr) \ | ||
188 | ((iter).cur.ptr = (startptr), \ | ||
189 | (iter).in_shift = false, memset (&(iter).state, '\0', sizeof (mbstate_t)), \ | ||
190 | (iter).next_done = false) | ||
191 | #define mbui_avail(iter) \ | ||
192 | (mbuiter_multi_next (&(iter)), !mb_isnul ((iter).cur)) | ||
193 | #define mbui_advance(iter) \ | ||
194 | ((iter).cur.ptr += (iter).cur.bytes, (iter).next_done = false) | ||
195 | |||
196 | /* Access to the current character. */ | ||
197 | #define mbui_cur(iter) (iter).cur | ||
198 | #define mbui_cur_ptr(iter) (iter).cur.ptr | ||
199 | |||
200 | /* Relocation. */ | ||
201 | #define mbui_reloc(iter, ptrdiff) mbuiter_multi_reloc (&iter, ptrdiff) | ||
202 | |||
203 | #endif /* _MBUITER_H */ | ||
diff --git a/gl/memchr.c b/gl/memchr.c deleted file mode 100644 index d44ad6de..00000000 --- a/gl/memchr.c +++ /dev/null | |||
@@ -1,201 +0,0 @@ | |||
1 | /* Copyright (C) 1991, 1993, 1996, 1997, 1999, 2000, 2003, 2004, 2006 Free | ||
2 | Software Foundation, Inc. | ||
3 | |||
4 | Based on strlen implementation by Torbjorn Granlund (tege@sics.se), | ||
5 | with help from Dan Sahlin (dan@sics.se) and | ||
6 | commentary by Jim Blandy (jimb@ai.mit.edu); | ||
7 | adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), | ||
8 | and implemented by Roland McGrath (roland@ai.mit.edu). | ||
9 | |||
10 | NOTE: The canonical source of this file is maintained with the GNU C Library. | ||
11 | Bugs can be reported to bug-glibc@prep.ai.mit.edu. | ||
12 | |||
13 | This program is free software; you can redistribute it and/or modify it | ||
14 | under the terms of the GNU General Public License as published by the | ||
15 | Free Software Foundation; either version 2, or (at your option) any | ||
16 | later version. | ||
17 | |||
18 | This program is distributed in the hope that it will be useful, | ||
19 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
20 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
21 | GNU General Public License for more details. | ||
22 | |||
23 | You should have received a copy of the GNU General Public License | ||
24 | along with this program; if not, write to the Free Software Foundation, | ||
25 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
26 | |||
27 | #ifndef _LIBC | ||
28 | # include <config.h> | ||
29 | #endif | ||
30 | |||
31 | #include <string.h> | ||
32 | |||
33 | #include <stddef.h> | ||
34 | |||
35 | #if defined _LIBC | ||
36 | # include <memcopy.h> | ||
37 | #else | ||
38 | # define reg_char char | ||
39 | #endif | ||
40 | |||
41 | #include <limits.h> | ||
42 | |||
43 | #if HAVE_BP_SYM_H || defined _LIBC | ||
44 | # include <bp-sym.h> | ||
45 | #else | ||
46 | # define BP_SYM(sym) sym | ||
47 | #endif | ||
48 | |||
49 | #undef memchr | ||
50 | #undef __memchr | ||
51 | |||
52 | /* Search no more than N bytes of S for C. */ | ||
53 | void * | ||
54 | __memchr (void const *s, int c_in, size_t n) | ||
55 | { | ||
56 | const unsigned char *char_ptr; | ||
57 | const unsigned long int *longword_ptr; | ||
58 | unsigned long int longword, magic_bits, charmask; | ||
59 | unsigned reg_char c; | ||
60 | int i; | ||
61 | |||
62 | c = (unsigned char) c_in; | ||
63 | |||
64 | /* Handle the first few characters by reading one character at a time. | ||
65 | Do this until CHAR_PTR is aligned on a longword boundary. */ | ||
66 | for (char_ptr = (const unsigned char *) s; | ||
67 | n > 0 && (size_t) char_ptr % sizeof longword != 0; | ||
68 | --n, ++char_ptr) | ||
69 | if (*char_ptr == c) | ||
70 | return (void *) char_ptr; | ||
71 | |||
72 | /* All these elucidatory comments refer to 4-byte longwords, | ||
73 | but the theory applies equally well to any size longwords. */ | ||
74 | |||
75 | longword_ptr = (const unsigned long int *) char_ptr; | ||
76 | |||
77 | /* Bits 31, 24, 16, and 8 of this number are zero. Call these bits | ||
78 | the "holes." Note that there is a hole just to the left of | ||
79 | each byte, with an extra at the end: | ||
80 | |||
81 | bits: 01111110 11111110 11111110 11111111 | ||
82 | bytes: AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD | ||
83 | |||
84 | The 1-bits make sure that carries propagate to the next 0-bit. | ||
85 | The 0-bits provide holes for carries to fall into. */ | ||
86 | |||
87 | /* Set MAGIC_BITS to be this pattern of 1 and 0 bits. | ||
88 | Set CHARMASK to be a longword, each of whose bytes is C. */ | ||
89 | |||
90 | magic_bits = 0xfefefefe; | ||
91 | charmask = c | (c << 8); | ||
92 | charmask |= charmask << 16; | ||
93 | #if 0xffffffffU < ULONG_MAX | ||
94 | magic_bits |= magic_bits << 32; | ||
95 | charmask |= charmask << 32; | ||
96 | if (8 < sizeof longword) | ||
97 | for (i = 64; i < sizeof longword * 8; i *= 2) | ||
98 | { | ||
99 | magic_bits |= magic_bits << i; | ||
100 | charmask |= charmask << i; | ||
101 | } | ||
102 | #endif | ||
103 | magic_bits = (ULONG_MAX >> 1) & (magic_bits | 1); | ||
104 | |||
105 | /* Instead of the traditional loop which tests each character, | ||
106 | we will test a longword at a time. The tricky part is testing | ||
107 | if *any of the four* bytes in the longword in question are zero. */ | ||
108 | while (n >= sizeof longword) | ||
109 | { | ||
110 | /* We tentatively exit the loop if adding MAGIC_BITS to | ||
111 | LONGWORD fails to change any of the hole bits of LONGWORD. | ||
112 | |||
113 | 1) Is this safe? Will it catch all the zero bytes? | ||
114 | Suppose there is a byte with all zeros. Any carry bits | ||
115 | propagating from its left will fall into the hole at its | ||
116 | least significant bit and stop. Since there will be no | ||
117 | carry from its most significant bit, the LSB of the | ||
118 | byte to the left will be unchanged, and the zero will be | ||
119 | detected. | ||
120 | |||
121 | 2) Is this worthwhile? Will it ignore everything except | ||
122 | zero bytes? Suppose every byte of LONGWORD has a bit set | ||
123 | somewhere. There will be a carry into bit 8. If bit 8 | ||
124 | is set, this will carry into bit 16. If bit 8 is clear, | ||
125 | one of bits 9-15 must be set, so there will be a carry | ||
126 | into bit 16. Similarly, there will be a carry into bit | ||
127 | 24. If one of bits 24-30 is set, there will be a carry | ||
128 | into bit 31, so all of the hole bits will be changed. | ||
129 | |||
130 | The one misfire occurs when bits 24-30 are clear and bit | ||
131 | 31 is set; in this case, the hole at bit 31 is not | ||
132 | changed. If we had access to the processor carry flag, | ||
133 | we could close this loophole by putting the fourth hole | ||
134 | at bit 32! | ||
135 | |||
136 | So it ignores everything except 128's, when they're aligned | ||
137 | properly. | ||
138 | |||
139 | 3) But wait! Aren't we looking for C, not zero? | ||
140 | Good point. So what we do is XOR LONGWORD with a longword, | ||
141 | each of whose bytes is C. This turns each byte that is C | ||
142 | into a zero. */ | ||
143 | |||
144 | longword = *longword_ptr++ ^ charmask; | ||
145 | |||
146 | /* Add MAGIC_BITS to LONGWORD. */ | ||
147 | if ((((longword + magic_bits) | ||
148 | |||
149 | /* Set those bits that were unchanged by the addition. */ | ||
150 | ^ ~longword) | ||
151 | |||
152 | /* Look at only the hole bits. If any of the hole bits | ||
153 | are unchanged, most likely one of the bytes was a | ||
154 | zero. */ | ||
155 | & ~magic_bits) != 0) | ||
156 | { | ||
157 | /* Which of the bytes was C? If none of them were, it was | ||
158 | a misfire; continue the search. */ | ||
159 | |||
160 | const unsigned char *cp = (const unsigned char *) (longword_ptr - 1); | ||
161 | |||
162 | if (cp[0] == c) | ||
163 | return (void *) cp; | ||
164 | if (cp[1] == c) | ||
165 | return (void *) &cp[1]; | ||
166 | if (cp[2] == c) | ||
167 | return (void *) &cp[2]; | ||
168 | if (cp[3] == c) | ||
169 | return (void *) &cp[3]; | ||
170 | if (4 < sizeof longword && cp[4] == c) | ||
171 | return (void *) &cp[4]; | ||
172 | if (5 < sizeof longword && cp[5] == c) | ||
173 | return (void *) &cp[5]; | ||
174 | if (6 < sizeof longword && cp[6] == c) | ||
175 | return (void *) &cp[6]; | ||
176 | if (7 < sizeof longword && cp[7] == c) | ||
177 | return (void *) &cp[7]; | ||
178 | if (8 < sizeof longword) | ||
179 | for (i = 8; i < sizeof longword; i++) | ||
180 | if (cp[i] == c) | ||
181 | return (void *) &cp[i]; | ||
182 | } | ||
183 | |||
184 | n -= sizeof longword; | ||
185 | } | ||
186 | |||
187 | char_ptr = (const unsigned char *) longword_ptr; | ||
188 | |||
189 | while (n-- > 0) | ||
190 | { | ||
191 | if (*char_ptr == c) | ||
192 | return (void *) char_ptr; | ||
193 | else | ||
194 | ++char_ptr; | ||
195 | } | ||
196 | |||
197 | return 0; | ||
198 | } | ||
199 | #ifdef weak_alias | ||
200 | weak_alias (__memchr, BP_SYM (memchr)) | ||
201 | #endif | ||
diff --git a/gl/minmax.h b/gl/minmax.h deleted file mode 100644 index 975ea76d..00000000 --- a/gl/minmax.h +++ /dev/null | |||
@@ -1,60 +0,0 @@ | |||
1 | /* MIN, MAX macros. | ||
2 | Copyright (C) 1995, 1998, 2001, 2003, 2005 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program 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 | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | |||
18 | #ifndef _MINMAX_H | ||
19 | #define _MINMAX_H | ||
20 | |||
21 | /* Note: MIN, MAX are also defined in <sys/param.h> on some systems | ||
22 | (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about | ||
23 | MIN, MAX macro redefinitions on some systems; the workaround is to | ||
24 | #include this file as the last one among the #include list. */ | ||
25 | |||
26 | /* Before we define the following symbols we get the <limits.h> file | ||
27 | since otherwise we get redefinitions on some systems if <limits.h> is | ||
28 | included after this file. Likewise for <sys/param.h>. | ||
29 | If more than one of these system headers define MIN and MAX, pick just | ||
30 | one of the headers (because the definitions most likely are the same). */ | ||
31 | #if HAVE_MINMAX_IN_LIMITS_H | ||
32 | # include <limits.h> | ||
33 | #elif HAVE_MINMAX_IN_SYS_PARAM_H | ||
34 | # include <sys/param.h> | ||
35 | #endif | ||
36 | |||
37 | /* Note: MIN and MAX should be used with two arguments of the | ||
38 | same type. They might not return the minimum and maximum of their two | ||
39 | arguments, if the arguments have different types or have unusual | ||
40 | floating-point values. For example, on a typical host with 32-bit 'int', | ||
41 | 64-bit 'long long', and 64-bit IEEE 754 'double' types: | ||
42 | |||
43 | MAX (-1, 2147483648) returns 4294967295. | ||
44 | MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. | ||
45 | MAX (NaN, 0.0) returns 0.0. | ||
46 | MAX (+0.0, -0.0) returns -0.0. | ||
47 | |||
48 | and in each case the answer is in some sense bogus. */ | ||
49 | |||
50 | /* MAX(a,b) returns the maximum of A and B. */ | ||
51 | #ifndef MAX | ||
52 | # define MAX(a,b) ((a) > (b) ? (a) : (b)) | ||
53 | #endif | ||
54 | |||
55 | /* MIN(a,b) returns the minimum of A and B. */ | ||
56 | #ifndef MIN | ||
57 | # define MIN(a,b) ((a) < (b) ? (a) : (b)) | ||
58 | #endif | ||
59 | |||
60 | #endif /* _MINMAX_H */ | ||
diff --git a/gl/mountlist.c b/gl/mountlist.c index bb01f91e..4c975c63 100644 --- a/gl/mountlist.c +++ b/gl/mountlist.c | |||
@@ -1,12 +1,12 @@ | |||
1 | /* mountlist.c -- return a list of mounted file systems | 1 | /* mountlist.c -- return a list of mounted file systems |
2 | 2 | ||
3 | Copyright (C) 1991, 1992, 1997, 1998, 1999, 2000, 2001, 2002, 2003, | 3 | Copyright (C) 1991, 1992, 1997, 1998, 1999, 2000, 2001, 2002, 2003, |
4 | 2004, 2005, 2006 Free Software Foundation, Inc. | 4 | 2004, 2005, 2006, 2007 Free Software Foundation, Inc. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3 of the License, or |
9 | any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -14,8 +14,7 @@ | |||
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License | 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, | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 18 | ||
20 | #include <config.h> | 19 | #include <config.h> |
21 | 20 | ||
@@ -28,10 +27,6 @@ | |||
28 | 27 | ||
29 | #include "xalloc.h" | 28 | #include "xalloc.h" |
30 | 29 | ||
31 | #ifndef strstr | ||
32 | char *strstr (); | ||
33 | #endif | ||
34 | |||
35 | #include <errno.h> | 30 | #include <errno.h> |
36 | 31 | ||
37 | #include <fcntl.h> | 32 | #include <fcntl.h> |
diff --git a/gl/mountlist.h b/gl/mountlist.h index 7f5a6f77..e54bb49e 100644 --- a/gl/mountlist.h +++ b/gl/mountlist.h | |||
@@ -3,10 +3,10 @@ | |||
3 | Copyright (C) 1991, 1992, 1998, 2000, 2001, 2002, 2003, 2004, 2005 | 3 | Copyright (C) 1991, 1992, 1998, 2000, 2001, 2002, 2003, 2004, 2005 |
4 | Free Software Foundation, Inc. | 4 | Free Software Foundation, Inc. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3 of the License, or |
9 | any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -14,8 +14,7 @@ | |||
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License | 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, | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 18 | ||
20 | #ifndef MOUNTLIST_H_ | 19 | #ifndef MOUNTLIST_H_ |
21 | # define MOUNTLIST_H_ | 20 | # define MOUNTLIST_H_ |
diff --git a/gl/strnlen1.h b/gl/netinet_in.in.h index 7ce7d0c8..c45e53b6 100644 --- a/gl/strnlen1.h +++ b/gl/netinet_in.in.h | |||
@@ -1,9 +1,9 @@ | |||
1 | /* Find the length of STRING + 1, but scan at most MAXLEN bytes. | 1 | /* Substitute for <netinet/in.h>. |
2 | Copyright (C) 2005 Free Software Foundation, Inc. | 2 | Copyright (C) 2007 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3, or (at your option) |
7 | any later version. | 7 | any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
@@ -15,26 +15,29 @@ | |||
15 | along with this program; if not, write to the Free Software Foundation, | 15 | along with this program; if not, write to the Free Software Foundation, |
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | 16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
17 | 17 | ||
18 | #ifndef _STRNLEN1_H | 18 | #ifndef _GL_NETINET_IN_H |
19 | #define _STRNLEN1_H | ||
20 | 19 | ||
21 | #include <stddef.h> | 20 | #if @HAVE_NETINET_IN_H@ |
22 | 21 | ||
22 | /* On many platforms, <netinet/in.h> assumes prior inclusion of | ||
23 | <sys/types.h>. */ | ||
24 | # include <sys/types.h> | ||
25 | |||
26 | /* The include_next requires a split double-inclusion guard. */ | ||
27 | # @INCLUDE_NEXT@ @NEXT_NETINET_IN_H@ | ||
23 | 28 | ||
24 | #ifdef __cplusplus | ||
25 | extern "C" { | ||
26 | #endif | 29 | #endif |
27 | 30 | ||
31 | #ifndef _GL_NETINET_IN_H | ||
32 | #define _GL_NETINET_IN_H | ||
28 | 33 | ||
29 | /* Find the length of STRING + 1, but scan at most MAXLEN bytes. | 34 | #if !@HAVE_NETINET_IN_H@ |
30 | If no '\0' terminator is found in that many characters, return MAXLEN. */ | ||
31 | /* This is the same as strnlen (string, maxlen - 1) + 1. */ | ||
32 | extern size_t strnlen1 (const char *string, size_t maxlen); | ||
33 | 35 | ||
36 | /* A platform that lacks <netinet/in.h>. */ | ||
34 | 37 | ||
35 | #ifdef __cplusplus | 38 | # include <sys/socket.h> |
36 | } | ||
37 | #endif | ||
38 | 39 | ||
40 | #endif | ||
39 | 41 | ||
40 | #endif /* _STRNLEN1_H */ | 42 | #endif /* _GL_NETINET_IN_H */ |
43 | #endif /* _GL_NETINET_IN_H */ | ||
diff --git a/gl/open-safer.c b/gl/open-safer.c index 04a72eb7..ce493d5e 100644 --- a/gl/open-safer.c +++ b/gl/open-safer.c | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 2005, 2006 Free Software Foundation, Inc. | 3 | Copyright (C) 2005, 2006 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | /* Written by Paul Eggert. */ | 18 | /* Written by Paul Eggert. */ |
20 | 19 | ||
diff --git a/gl/pipe-safer.c b/gl/pipe-safer.c index e4431b33..0fc68505 100644 --- a/gl/pipe-safer.c +++ b/gl/pipe-safer.c | |||
@@ -1,10 +1,10 @@ | |||
1 | /* Invoke pipe, but avoid some glitches. | 1 | /* Invoke pipe, but avoid some glitches. |
2 | Copyright (C) 2005, 2006 Free Software Foundation, Inc. | 2 | Copyright (C) 2005, 2006 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software: you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3 of the License, or |
7 | any later version. | 7 | (at your option) any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -12,8 +12,7 @@ | |||
12 | GNU General Public License for more details. | 12 | GNU General Public License for more details. |
13 | 13 | ||
14 | You should have received a copy of the GNU General Public License | 14 | You should have received a copy of the GNU General Public License |
15 | along with this program; if not, write to the Free Software Foundation, | 15 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | 16 | ||
18 | /* Written by Jim Meyering. */ | 17 | /* Written by Jim Meyering. */ |
19 | 18 | ||
diff --git a/gl/printf-args.c b/gl/printf-args.c index 358801c9..871c720a 100644 --- a/gl/printf-args.c +++ b/gl/printf-args.c | |||
@@ -1,9 +1,9 @@ | |||
1 | /* Decomposed printf argument list. | 1 | /* Decomposed printf argument list. |
2 | Copyright (C) 1999, 2002-2003, 2005-2006 Free Software Foundation, Inc. | 2 | Copyright (C) 1999, 2002-2003, 2005-2007 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3, or (at your option) |
7 | any later version. | 7 | any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
@@ -15,16 +15,25 @@ | |||
15 | with this program; if not, write to the Free Software Foundation, | 15 | with this program; if not, write to the Free Software Foundation, |
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | 16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
17 | 17 | ||
18 | #include <config.h> | 18 | /* This file can be parametrized with the following macros: |
19 | ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. | ||
20 | PRINTF_FETCHARGS Name of the function to be defined. | ||
21 | STATIC Set to 'static' to declare the function static. */ | ||
22 | |||
23 | #ifndef PRINTF_FETCHARGS | ||
24 | # include <config.h> | ||
25 | #endif | ||
19 | 26 | ||
20 | /* Specification. */ | 27 | /* Specification. */ |
21 | #include "printf-args.h" | 28 | #ifndef PRINTF_FETCHARGS |
29 | # include "printf-args.h" | ||
30 | #endif | ||
22 | 31 | ||
23 | #ifdef STATIC | 32 | #ifdef STATIC |
24 | STATIC | 33 | STATIC |
25 | #endif | 34 | #endif |
26 | int | 35 | int |
27 | printf_fetchargs (va_list args, arguments *a) | 36 | PRINTF_FETCHARGS (va_list args, arguments *a) |
28 | { | 37 | { |
29 | size_t i; | 38 | size_t i; |
30 | argument *ap; | 39 | argument *ap; |
@@ -56,7 +65,7 @@ printf_fetchargs (va_list args, arguments *a) | |||
56 | case TYPE_ULONGINT: | 65 | case TYPE_ULONGINT: |
57 | ap->a.a_ulongint = va_arg (args, unsigned long int); | 66 | ap->a.a_ulongint = va_arg (args, unsigned long int); |
58 | break; | 67 | break; |
59 | #ifdef HAVE_LONG_LONG_INT | 68 | #if HAVE_LONG_LONG_INT |
60 | case TYPE_LONGLONGINT: | 69 | case TYPE_LONGLONGINT: |
61 | ap->a.a_longlongint = va_arg (args, long long int); | 70 | ap->a.a_longlongint = va_arg (args, long long int); |
62 | break; | 71 | break; |
@@ -67,15 +76,13 @@ printf_fetchargs (va_list args, arguments *a) | |||
67 | case TYPE_DOUBLE: | 76 | case TYPE_DOUBLE: |
68 | ap->a.a_double = va_arg (args, double); | 77 | ap->a.a_double = va_arg (args, double); |
69 | break; | 78 | break; |
70 | #ifdef HAVE_LONG_DOUBLE | ||
71 | case TYPE_LONGDOUBLE: | 79 | case TYPE_LONGDOUBLE: |
72 | ap->a.a_longdouble = va_arg (args, long double); | 80 | ap->a.a_longdouble = va_arg (args, long double); |
73 | break; | 81 | break; |
74 | #endif | ||
75 | case TYPE_CHAR: | 82 | case TYPE_CHAR: |
76 | ap->a.a_char = va_arg (args, int); | 83 | ap->a.a_char = va_arg (args, int); |
77 | break; | 84 | break; |
78 | #ifdef HAVE_WINT_T | 85 | #if HAVE_WINT_T |
79 | case TYPE_WIDE_CHAR: | 86 | case TYPE_WIDE_CHAR: |
80 | /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by | 87 | /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by |
81 | default argument promotions", this is not the case in mingw32, | 88 | default argument promotions", this is not the case in mingw32, |
@@ -94,7 +101,7 @@ printf_fetchargs (va_list args, arguments *a) | |||
94 | if (ap->a.a_string == NULL) | 101 | if (ap->a.a_string == NULL) |
95 | ap->a.a_string = "(NULL)"; | 102 | ap->a.a_string = "(NULL)"; |
96 | break; | 103 | break; |
97 | #ifdef HAVE_WCHAR_T | 104 | #if HAVE_WCHAR_T |
98 | case TYPE_WIDE_STRING: | 105 | case TYPE_WIDE_STRING: |
99 | ap->a.a_wide_string = va_arg (args, const wchar_t *); | 106 | ap->a.a_wide_string = va_arg (args, const wchar_t *); |
100 | /* A null pointer is an invalid argument for "%ls", but in practice | 107 | /* A null pointer is an invalid argument for "%ls", but in practice |
@@ -128,11 +135,50 @@ printf_fetchargs (va_list args, arguments *a) | |||
128 | case TYPE_COUNT_LONGINT_POINTER: | 135 | case TYPE_COUNT_LONGINT_POINTER: |
129 | ap->a.a_count_longint_pointer = va_arg (args, long int *); | 136 | ap->a.a_count_longint_pointer = va_arg (args, long int *); |
130 | break; | 137 | break; |
131 | #ifdef HAVE_LONG_LONG_INT | 138 | #if HAVE_LONG_LONG_INT |
132 | case TYPE_COUNT_LONGLONGINT_POINTER: | 139 | case TYPE_COUNT_LONGLONGINT_POINTER: |
133 | ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); | 140 | ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); |
134 | break; | 141 | break; |
135 | #endif | 142 | #endif |
143 | #if ENABLE_UNISTDIO | ||
144 | /* The unistdio extensions. */ | ||
145 | case TYPE_U8_STRING: | ||
146 | ap->a.a_u8_string = va_arg (args, const uint8_t *); | ||
147 | /* A null pointer is an invalid argument for "%U", but in practice | ||
148 | it occurs quite frequently in printf statements that produce | ||
149 | debug output. Use a fallback in this case. */ | ||
150 | if (ap->a.a_u8_string == NULL) | ||
151 | { | ||
152 | static const uint8_t u8_null_string[] = | ||
153 | { '(', 'N', 'U', 'L', 'L', ')', 0 }; | ||
154 | ap->a.a_u8_string = u8_null_string; | ||
155 | } | ||
156 | break; | ||
157 | case TYPE_U16_STRING: | ||
158 | ap->a.a_u16_string = va_arg (args, const uint16_t *); | ||
159 | /* A null pointer is an invalid argument for "%lU", but in practice | ||
160 | it occurs quite frequently in printf statements that produce | ||
161 | debug output. Use a fallback in this case. */ | ||
162 | if (ap->a.a_u16_string == NULL) | ||
163 | { | ||
164 | static const uint16_t u16_null_string[] = | ||
165 | { '(', 'N', 'U', 'L', 'L', ')', 0 }; | ||
166 | ap->a.a_u16_string = u16_null_string; | ||
167 | } | ||
168 | break; | ||
169 | case TYPE_U32_STRING: | ||
170 | ap->a.a_u32_string = va_arg (args, const uint32_t *); | ||
171 | /* A null pointer is an invalid argument for "%llU", but in practice | ||
172 | it occurs quite frequently in printf statements that produce | ||
173 | debug output. Use a fallback in this case. */ | ||
174 | if (ap->a.a_u32_string == NULL) | ||
175 | { | ||
176 | static const uint32_t u32_null_string[] = | ||
177 | { '(', 'N', 'U', 'L', 'L', ')', 0 }; | ||
178 | ap->a.a_u32_string = u32_null_string; | ||
179 | } | ||
180 | break; | ||
181 | #endif | ||
136 | default: | 182 | default: |
137 | /* Unknown type. */ | 183 | /* Unknown type. */ |
138 | return -1; | 184 | return -1; |
diff --git a/gl/printf-args.h b/gl/printf-args.h index 5759da0e..67cb990c 100644 --- a/gl/printf-args.h +++ b/gl/printf-args.h | |||
@@ -1,9 +1,9 @@ | |||
1 | /* Decomposed printf argument list. | 1 | /* Decomposed printf argument list. |
2 | Copyright (C) 1999, 2002-2003, 2006 Free Software Foundation, Inc. | 2 | Copyright (C) 1999, 2002-2003, 2006-2007 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3, or (at your option) |
7 | any later version. | 7 | any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
@@ -18,16 +18,26 @@ | |||
18 | #ifndef _PRINTF_ARGS_H | 18 | #ifndef _PRINTF_ARGS_H |
19 | #define _PRINTF_ARGS_H | 19 | #define _PRINTF_ARGS_H |
20 | 20 | ||
21 | /* This file can be parametrized with the following macros: | ||
22 | ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. | ||
23 | PRINTF_FETCHARGS Name of the function to be declared. | ||
24 | STATIC Set to 'static' to declare the function static. */ | ||
25 | |||
26 | /* Default parameters. */ | ||
27 | #ifndef PRINTF_FETCHARGS | ||
28 | # define PRINTF_FETCHARGS printf_fetchargs | ||
29 | #endif | ||
30 | |||
21 | /* Get size_t. */ | 31 | /* Get size_t. */ |
22 | #include <stddef.h> | 32 | #include <stddef.h> |
23 | 33 | ||
24 | /* Get wchar_t. */ | 34 | /* Get wchar_t. */ |
25 | #ifdef HAVE_WCHAR_T | 35 | #if HAVE_WCHAR_T |
26 | # include <stddef.h> | 36 | # include <stddef.h> |
27 | #endif | 37 | #endif |
28 | 38 | ||
29 | /* Get wint_t. */ | 39 | /* Get wint_t. */ |
30 | #ifdef HAVE_WINT_T | 40 | #if HAVE_WINT_T |
31 | # include <wchar.h> | 41 | # include <wchar.h> |
32 | #endif | 42 | #endif |
33 | 43 | ||
@@ -47,20 +57,18 @@ typedef enum | |||
47 | TYPE_UINT, | 57 | TYPE_UINT, |
48 | TYPE_LONGINT, | 58 | TYPE_LONGINT, |
49 | TYPE_ULONGINT, | 59 | TYPE_ULONGINT, |
50 | #ifdef HAVE_LONG_LONG_INT | 60 | #if HAVE_LONG_LONG_INT |
51 | TYPE_LONGLONGINT, | 61 | TYPE_LONGLONGINT, |
52 | TYPE_ULONGLONGINT, | 62 | TYPE_ULONGLONGINT, |
53 | #endif | 63 | #endif |
54 | TYPE_DOUBLE, | 64 | TYPE_DOUBLE, |
55 | #ifdef HAVE_LONG_DOUBLE | ||
56 | TYPE_LONGDOUBLE, | 65 | TYPE_LONGDOUBLE, |
57 | #endif | ||
58 | TYPE_CHAR, | 66 | TYPE_CHAR, |
59 | #ifdef HAVE_WINT_T | 67 | #if HAVE_WINT_T |
60 | TYPE_WIDE_CHAR, | 68 | TYPE_WIDE_CHAR, |
61 | #endif | 69 | #endif |
62 | TYPE_STRING, | 70 | TYPE_STRING, |
63 | #ifdef HAVE_WCHAR_T | 71 | #if HAVE_WCHAR_T |
64 | TYPE_WIDE_STRING, | 72 | TYPE_WIDE_STRING, |
65 | #endif | 73 | #endif |
66 | TYPE_POINTER, | 74 | TYPE_POINTER, |
@@ -68,9 +76,15 @@ typedef enum | |||
68 | TYPE_COUNT_SHORT_POINTER, | 76 | TYPE_COUNT_SHORT_POINTER, |
69 | TYPE_COUNT_INT_POINTER, | 77 | TYPE_COUNT_INT_POINTER, |
70 | TYPE_COUNT_LONGINT_POINTER | 78 | TYPE_COUNT_LONGINT_POINTER |
71 | #ifdef HAVE_LONG_LONG_INT | 79 | #if HAVE_LONG_LONG_INT |
72 | , TYPE_COUNT_LONGLONGINT_POINTER | 80 | , TYPE_COUNT_LONGLONGINT_POINTER |
73 | #endif | 81 | #endif |
82 | #if ENABLE_UNISTDIO | ||
83 | /* The unistdio extensions. */ | ||
84 | , TYPE_U8_STRING | ||
85 | , TYPE_U16_STRING | ||
86 | , TYPE_U32_STRING | ||
87 | #endif | ||
74 | } arg_type; | 88 | } arg_type; |
75 | 89 | ||
76 | /* Polymorphic argument */ | 90 | /* Polymorphic argument */ |
@@ -87,21 +101,19 @@ typedef struct | |||
87 | unsigned int a_uint; | 101 | unsigned int a_uint; |
88 | long int a_longint; | 102 | long int a_longint; |
89 | unsigned long int a_ulongint; | 103 | unsigned long int a_ulongint; |
90 | #ifdef HAVE_LONG_LONG_INT | 104 | #if HAVE_LONG_LONG_INT |
91 | long long int a_longlongint; | 105 | long long int a_longlongint; |
92 | unsigned long long int a_ulonglongint; | 106 | unsigned long long int a_ulonglongint; |
93 | #endif | 107 | #endif |
94 | float a_float; | 108 | float a_float; |
95 | double a_double; | 109 | double a_double; |
96 | #ifdef HAVE_LONG_DOUBLE | ||
97 | long double a_longdouble; | 110 | long double a_longdouble; |
98 | #endif | ||
99 | int a_char; | 111 | int a_char; |
100 | #ifdef HAVE_WINT_T | 112 | #if HAVE_WINT_T |
101 | wint_t a_wide_char; | 113 | wint_t a_wide_char; |
102 | #endif | 114 | #endif |
103 | const char* a_string; | 115 | const char* a_string; |
104 | #ifdef HAVE_WCHAR_T | 116 | #if HAVE_WCHAR_T |
105 | const wchar_t* a_wide_string; | 117 | const wchar_t* a_wide_string; |
106 | #endif | 118 | #endif |
107 | void* a_pointer; | 119 | void* a_pointer; |
@@ -109,9 +121,15 @@ typedef struct | |||
109 | short * a_count_short_pointer; | 121 | short * a_count_short_pointer; |
110 | int * a_count_int_pointer; | 122 | int * a_count_int_pointer; |
111 | long int * a_count_longint_pointer; | 123 | long int * a_count_longint_pointer; |
112 | #ifdef HAVE_LONG_LONG_INT | 124 | #if HAVE_LONG_LONG_INT |
113 | long long int * a_count_longlongint_pointer; | 125 | long long int * a_count_longlongint_pointer; |
114 | #endif | 126 | #endif |
127 | #if ENABLE_UNISTDIO | ||
128 | /* The unistdio extensions. */ | ||
129 | const uint8_t * a_u8_string; | ||
130 | const uint16_t * a_u16_string; | ||
131 | const uint32_t * a_u32_string; | ||
132 | #endif | ||
115 | } | 133 | } |
116 | a; | 134 | a; |
117 | } | 135 | } |
@@ -131,6 +149,6 @@ STATIC | |||
131 | #else | 149 | #else |
132 | extern | 150 | extern |
133 | #endif | 151 | #endif |
134 | int printf_fetchargs (va_list args, arguments *a); | 152 | int PRINTF_FETCHARGS (va_list args, arguments *a); |
135 | 153 | ||
136 | #endif /* _PRINTF_ARGS_H */ | 154 | #endif /* _PRINTF_ARGS_H */ |
diff --git a/gl/printf-parse.c b/gl/printf-parse.c index 9a86f773..28b9bd41 100644 --- a/gl/printf-parse.c +++ b/gl/printf-parse.c | |||
@@ -1,9 +1,9 @@ | |||
1 | /* Formatted output to strings. | 1 | /* Formatted output to strings. |
2 | Copyright (C) 1999-2000, 2002-2003, 2006 Free Software Foundation, Inc. | 2 | Copyright (C) 1999-2000, 2002-2003, 2006-2008 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3, or (at your option) |
7 | any later version. | 7 | any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
@@ -15,42 +15,63 @@ | |||
15 | with this program; if not, write to the Free Software Foundation, | 15 | with this program; if not, write to the Free Software Foundation, |
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | 16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
17 | 17 | ||
18 | #include <config.h> | 18 | /* This file can be parametrized with the following macros: |
19 | CHAR_T The element type of the format string. | ||
20 | CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters | ||
21 | in the format string are ASCII. | ||
22 | DIRECTIVE Structure denoting a format directive. | ||
23 | Depends on CHAR_T. | ||
24 | DIRECTIVES Structure denoting the set of format directives of a | ||
25 | format string. Depends on CHAR_T. | ||
26 | PRINTF_PARSE Function that parses a format string. | ||
27 | Depends on CHAR_T. | ||
28 | STATIC Set to 'static' to declare the function static. | ||
29 | ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ | ||
30 | |||
31 | #ifndef PRINTF_PARSE | ||
32 | # include <config.h> | ||
33 | #endif | ||
19 | 34 | ||
20 | /* Specification. */ | 35 | /* Specification. */ |
21 | #if WIDE_CHAR_VERSION | 36 | #ifndef PRINTF_PARSE |
22 | # include "wprintf-parse.h" | ||
23 | #else | ||
24 | # include "printf-parse.h" | 37 | # include "printf-parse.h" |
25 | #endif | 38 | #endif |
26 | 39 | ||
40 | /* Default parameters. */ | ||
41 | #ifndef PRINTF_PARSE | ||
42 | # define PRINTF_PARSE printf_parse | ||
43 | # define CHAR_T char | ||
44 | # define DIRECTIVE char_directive | ||
45 | # define DIRECTIVES char_directives | ||
46 | #endif | ||
47 | |||
27 | /* Get size_t, NULL. */ | 48 | /* Get size_t, NULL. */ |
28 | #include <stddef.h> | 49 | #include <stddef.h> |
29 | 50 | ||
30 | /* Get intmax_t. */ | 51 | /* Get intmax_t. */ |
31 | #if HAVE_STDINT_H_WITH_UINTMAX | 52 | #if defined IN_LIBINTL || defined IN_LIBASPRINTF |
53 | # if HAVE_STDINT_H_WITH_UINTMAX | ||
54 | # include <stdint.h> | ||
55 | # endif | ||
56 | # if HAVE_INTTYPES_H_WITH_UINTMAX | ||
57 | # include <inttypes.h> | ||
58 | # endif | ||
59 | #else | ||
32 | # include <stdint.h> | 60 | # include <stdint.h> |
33 | #endif | 61 | #endif |
34 | #if HAVE_INTTYPES_H_WITH_UINTMAX | ||
35 | # include <inttypes.h> | ||
36 | #endif | ||
37 | 62 | ||
38 | /* malloc(), realloc(), free(). */ | 63 | /* malloc(), realloc(), free(). */ |
39 | #include <stdlib.h> | 64 | #include <stdlib.h> |
40 | 65 | ||
66 | /* errno. */ | ||
67 | #include <errno.h> | ||
68 | |||
41 | /* Checked size_t computations. */ | 69 | /* Checked size_t computations. */ |
42 | #include "xsize.h" | 70 | #include "xsize.h" |
43 | 71 | ||
44 | #if WIDE_CHAR_VERSION | 72 | #if CHAR_T_ONLY_ASCII |
45 | # define PRINTF_PARSE wprintf_parse | 73 | /* c_isascii(). */ |
46 | # define CHAR_T wchar_t | 74 | # include "c-ctype.h" |
47 | # define DIRECTIVE wchar_t_directive | ||
48 | # define DIRECTIVES wchar_t_directives | ||
49 | #else | ||
50 | # define PRINTF_PARSE printf_parse | ||
51 | # define CHAR_T char | ||
52 | # define DIRECTIVE char_directive | ||
53 | # define DIRECTIVES char_directives | ||
54 | #endif | 75 | #endif |
55 | 76 | ||
56 | #ifdef STATIC | 77 | #ifdef STATIC |
@@ -71,7 +92,7 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
71 | d->dir = (DIRECTIVE *) malloc (d_allocated * sizeof (DIRECTIVE)); | 92 | d->dir = (DIRECTIVE *) malloc (d_allocated * sizeof (DIRECTIVE)); |
72 | if (d->dir == NULL) | 93 | if (d->dir == NULL) |
73 | /* Out of memory. */ | 94 | /* Out of memory. */ |
74 | return -1; | 95 | goto out_of_memory_1; |
75 | 96 | ||
76 | a->count = 0; | 97 | a->count = 0; |
77 | a_allocated = 0; | 98 | a_allocated = 0; |
@@ -91,13 +112,13 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
91 | memory_size = xtimes (a_allocated, sizeof (argument)); \ | 112 | memory_size = xtimes (a_allocated, sizeof (argument)); \ |
92 | if (size_overflow_p (memory_size)) \ | 113 | if (size_overflow_p (memory_size)) \ |
93 | /* Overflow, would lead to out of memory. */ \ | 114 | /* Overflow, would lead to out of memory. */ \ |
94 | goto error; \ | 115 | goto out_of_memory; \ |
95 | memory = (argument *) (a->arg \ | 116 | memory = (argument *) (a->arg \ |
96 | ? realloc (a->arg, memory_size) \ | 117 | ? realloc (a->arg, memory_size) \ |
97 | : malloc (memory_size)); \ | 118 | : malloc (memory_size)); \ |
98 | if (memory == NULL) \ | 119 | if (memory == NULL) \ |
99 | /* Out of memory. */ \ | 120 | /* Out of memory. */ \ |
100 | goto error; \ | 121 | goto out_of_memory; \ |
101 | a->arg = memory; \ | 122 | a->arg = memory; \ |
102 | } \ | 123 | } \ |
103 | while (a->count <= n) \ | 124 | while (a->count <= n) \ |
@@ -115,7 +136,7 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
115 | if (c == '%') | 136 | if (c == '%') |
116 | { | 137 | { |
117 | size_t arg_index = ARG_NONE; | 138 | size_t arg_index = ARG_NONE; |
118 | DIRECTIVE *dp = &d->dir[d->count];/* pointer to next directive */ | 139 | DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ |
119 | 140 | ||
120 | /* Initialize the next directive. */ | 141 | /* Initialize the next directive. */ |
121 | dp->dir_start = cp - 1; | 142 | dp->dir_start = cp - 1; |
@@ -326,7 +347,6 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
326 | flags += 8; | 347 | flags += 8; |
327 | cp++; | 348 | cp++; |
328 | } | 349 | } |
329 | #ifdef HAVE_INTMAX_T | ||
330 | else if (*cp == 'j') | 350 | else if (*cp == 'j') |
331 | { | 351 | { |
332 | if (sizeof (intmax_t) > sizeof (long)) | 352 | if (sizeof (intmax_t) > sizeof (long)) |
@@ -341,7 +361,6 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
341 | } | 361 | } |
342 | cp++; | 362 | cp++; |
343 | } | 363 | } |
344 | #endif | ||
345 | else if (*cp == 'z' || *cp == 'Z') | 364 | else if (*cp == 'z' || *cp == 'Z') |
346 | { | 365 | { |
347 | /* 'z' is standardized in ISO C 99, but glibc uses 'Z' | 366 | /* 'z' is standardized in ISO C 99, but glibc uses 'Z' |
@@ -373,6 +392,44 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
373 | } | 392 | } |
374 | cp++; | 393 | cp++; |
375 | } | 394 | } |
395 | #if defined __APPLE__ && defined __MACH__ | ||
396 | /* On MacOS X 10.3, PRIdMAX is defined as "qd". | ||
397 | We cannot change it to "lld" because PRIdMAX must also | ||
398 | be understood by the system's printf routines. */ | ||
399 | else if (*cp == 'q') | ||
400 | { | ||
401 | if (64 / 8 > sizeof (long)) | ||
402 | { | ||
403 | /* int64_t = long long */ | ||
404 | flags += 16; | ||
405 | } | ||
406 | else | ||
407 | { | ||
408 | /* int64_t = long */ | ||
409 | flags += 8; | ||
410 | } | ||
411 | cp++; | ||
412 | } | ||
413 | #endif | ||
414 | #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ | ||
415 | /* On native Win32, PRIdMAX is defined as "I64d". | ||
416 | We cannot change it to "lld" because PRIdMAX must also | ||
417 | be understood by the system's printf routines. */ | ||
418 | else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') | ||
419 | { | ||
420 | if (64 / 8 > sizeof (long)) | ||
421 | { | ||
422 | /* __int64 = long long */ | ||
423 | flags += 16; | ||
424 | } | ||
425 | else | ||
426 | { | ||
427 | /* __int64 = long */ | ||
428 | flags += 8; | ||
429 | } | ||
430 | cp += 3; | ||
431 | } | ||
432 | #endif | ||
376 | else | 433 | else |
377 | break; | 434 | break; |
378 | } | 435 | } |
@@ -382,7 +439,7 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
382 | switch (c) | 439 | switch (c) |
383 | { | 440 | { |
384 | case 'd': case 'i': | 441 | case 'd': case 'i': |
385 | #ifdef HAVE_LONG_LONG_INT | 442 | #if HAVE_LONG_LONG_INT |
386 | /* If 'long long' exists and is larger than 'long': */ | 443 | /* If 'long long' exists and is larger than 'long': */ |
387 | if (flags >= 16 || (flags & 4)) | 444 | if (flags >= 16 || (flags & 4)) |
388 | type = TYPE_LONGLONGINT; | 445 | type = TYPE_LONGLONGINT; |
@@ -400,7 +457,7 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
400 | type = TYPE_INT; | 457 | type = TYPE_INT; |
401 | break; | 458 | break; |
402 | case 'o': case 'u': case 'x': case 'X': | 459 | case 'o': case 'u': case 'x': case 'X': |
403 | #ifdef HAVE_LONG_LONG_INT | 460 | #if HAVE_LONG_LONG_INT |
404 | /* If 'long long' exists and is larger than 'long': */ | 461 | /* If 'long long' exists and is larger than 'long': */ |
405 | if (flags >= 16 || (flags & 4)) | 462 | if (flags >= 16 || (flags & 4)) |
406 | type = TYPE_ULONGLONGINT; | 463 | type = TYPE_ULONGLONGINT; |
@@ -419,16 +476,14 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
419 | break; | 476 | break; |
420 | case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': | 477 | case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': |
421 | case 'a': case 'A': | 478 | case 'a': case 'A': |
422 | #ifdef HAVE_LONG_DOUBLE | ||
423 | if (flags >= 16 || (flags & 4)) | 479 | if (flags >= 16 || (flags & 4)) |
424 | type = TYPE_LONGDOUBLE; | 480 | type = TYPE_LONGDOUBLE; |
425 | else | 481 | else |
426 | #endif | 482 | type = TYPE_DOUBLE; |
427 | type = TYPE_DOUBLE; | ||
428 | break; | 483 | break; |
429 | case 'c': | 484 | case 'c': |
430 | if (flags >= 8) | 485 | if (flags >= 8) |
431 | #ifdef HAVE_WINT_T | 486 | #if HAVE_WINT_T |
432 | type = TYPE_WIDE_CHAR; | 487 | type = TYPE_WIDE_CHAR; |
433 | #else | 488 | #else |
434 | goto error; | 489 | goto error; |
@@ -436,7 +491,7 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
436 | else | 491 | else |
437 | type = TYPE_CHAR; | 492 | type = TYPE_CHAR; |
438 | break; | 493 | break; |
439 | #ifdef HAVE_WINT_T | 494 | #if HAVE_WINT_T |
440 | case 'C': | 495 | case 'C': |
441 | type = TYPE_WIDE_CHAR; | 496 | type = TYPE_WIDE_CHAR; |
442 | c = 'c'; | 497 | c = 'c'; |
@@ -444,7 +499,7 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
444 | #endif | 499 | #endif |
445 | case 's': | 500 | case 's': |
446 | if (flags >= 8) | 501 | if (flags >= 8) |
447 | #ifdef HAVE_WCHAR_T | 502 | #if HAVE_WCHAR_T |
448 | type = TYPE_WIDE_STRING; | 503 | type = TYPE_WIDE_STRING; |
449 | #else | 504 | #else |
450 | goto error; | 505 | goto error; |
@@ -452,7 +507,7 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
452 | else | 507 | else |
453 | type = TYPE_STRING; | 508 | type = TYPE_STRING; |
454 | break; | 509 | break; |
455 | #ifdef HAVE_WCHAR_T | 510 | #if HAVE_WCHAR_T |
456 | case 'S': | 511 | case 'S': |
457 | type = TYPE_WIDE_STRING; | 512 | type = TYPE_WIDE_STRING; |
458 | c = 's'; | 513 | c = 's'; |
@@ -462,7 +517,7 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
462 | type = TYPE_POINTER; | 517 | type = TYPE_POINTER; |
463 | break; | 518 | break; |
464 | case 'n': | 519 | case 'n': |
465 | #ifdef HAVE_LONG_LONG_INT | 520 | #if HAVE_LONG_LONG_INT |
466 | /* If 'long long' exists and is larger than 'long': */ | 521 | /* If 'long long' exists and is larger than 'long': */ |
467 | if (flags >= 16 || (flags & 4)) | 522 | if (flags >= 16 || (flags & 4)) |
468 | type = TYPE_COUNT_LONGLONGINT_POINTER; | 523 | type = TYPE_COUNT_LONGLONGINT_POINTER; |
@@ -479,6 +534,17 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
479 | else | 534 | else |
480 | type = TYPE_COUNT_INT_POINTER; | 535 | type = TYPE_COUNT_INT_POINTER; |
481 | break; | 536 | break; |
537 | #if ENABLE_UNISTDIO | ||
538 | /* The unistdio extensions. */ | ||
539 | case 'U': | ||
540 | if (flags >= 16) | ||
541 | type = TYPE_U32_STRING; | ||
542 | else if (flags >= 8) | ||
543 | type = TYPE_U16_STRING; | ||
544 | else | ||
545 | type = TYPE_U8_STRING; | ||
546 | break; | ||
547 | #endif | ||
482 | case '%': | 548 | case '%': |
483 | type = TYPE_NONE; | 549 | type = TYPE_NONE; |
484 | break; | 550 | break; |
@@ -514,14 +580,21 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
514 | memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); | 580 | memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); |
515 | if (size_overflow_p (memory_size)) | 581 | if (size_overflow_p (memory_size)) |
516 | /* Overflow, would lead to out of memory. */ | 582 | /* Overflow, would lead to out of memory. */ |
517 | goto error; | 583 | goto out_of_memory; |
518 | memory = (DIRECTIVE *) realloc (d->dir, memory_size); | 584 | memory = (DIRECTIVE *) realloc (d->dir, memory_size); |
519 | if (memory == NULL) | 585 | if (memory == NULL) |
520 | /* Out of memory. */ | 586 | /* Out of memory. */ |
521 | goto error; | 587 | goto out_of_memory; |
522 | d->dir = memory; | 588 | d->dir = memory; |
523 | } | 589 | } |
524 | } | 590 | } |
591 | #if CHAR_T_ONLY_ASCII | ||
592 | else if (!c_isascii (c)) | ||
593 | { | ||
594 | /* Non-ASCII character. Not supported. */ | ||
595 | goto error; | ||
596 | } | ||
597 | #endif | ||
525 | } | 598 | } |
526 | d->dir[d->count].dir_start = cp; | 599 | d->dir[d->count].dir_start = cp; |
527 | 600 | ||
@@ -534,10 +607,21 @@ error: | |||
534 | free (a->arg); | 607 | free (a->arg); |
535 | if (d->dir) | 608 | if (d->dir) |
536 | free (d->dir); | 609 | free (d->dir); |
610 | errno = EINVAL; | ||
611 | return -1; | ||
612 | |||
613 | out_of_memory: | ||
614 | if (a->arg) | ||
615 | free (a->arg); | ||
616 | if (d->dir) | ||
617 | free (d->dir); | ||
618 | out_of_memory_1: | ||
619 | errno = ENOMEM; | ||
537 | return -1; | 620 | return -1; |
538 | } | 621 | } |
539 | 622 | ||
623 | #undef PRINTF_PARSE | ||
540 | #undef DIRECTIVES | 624 | #undef DIRECTIVES |
541 | #undef DIRECTIVE | 625 | #undef DIRECTIVE |
626 | #undef CHAR_T_ONLY_ASCII | ||
542 | #undef CHAR_T | 627 | #undef CHAR_T |
543 | #undef PRINTF_PARSE | ||
diff --git a/gl/printf-parse.h b/gl/printf-parse.h index 82a0d37c..e5d68d75 100644 --- a/gl/printf-parse.h +++ b/gl/printf-parse.h | |||
@@ -1,9 +1,9 @@ | |||
1 | /* Parse printf format string. | 1 | /* Parse printf format string. |
2 | Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc. | 2 | Copyright (C) 1999, 2002-2003, 2005, 2007 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3, or (at your option) |
7 | any later version. | 7 | any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
@@ -18,6 +18,10 @@ | |||
18 | #ifndef _PRINTF_PARSE_H | 18 | #ifndef _PRINTF_PARSE_H |
19 | #define _PRINTF_PARSE_H | 19 | #define _PRINTF_PARSE_H |
20 | 20 | ||
21 | /* This file can be parametrized with the following macros: | ||
22 | ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. | ||
23 | STATIC Set to 'static' to declare the function static. */ | ||
24 | |||
21 | #include "printf-args.h" | 25 | #include "printf-args.h" |
22 | 26 | ||
23 | 27 | ||
@@ -32,6 +36,9 @@ | |||
32 | /* arg_index value indicating that no argument is consumed. */ | 36 | /* arg_index value indicating that no argument is consumed. */ |
33 | #define ARG_NONE (~(size_t)0) | 37 | #define ARG_NONE (~(size_t)0) |
34 | 38 | ||
39 | /* xxx_directive: A parsed directive. | ||
40 | xxx_directives: A parsed format string. */ | ||
41 | |||
35 | /* A parsed directive. */ | 42 | /* A parsed directive. */ |
36 | typedef struct | 43 | typedef struct |
37 | { | 44 | { |
@@ -44,7 +51,7 @@ typedef struct | |||
44 | const char* precision_start; | 51 | const char* precision_start; |
45 | const char* precision_end; | 52 | const char* precision_end; |
46 | size_t precision_arg_index; | 53 | size_t precision_arg_index; |
47 | char conversion; /* d i o u x X f e E g G c s p n U % but not C S */ | 54 | char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ |
48 | size_t arg_index; | 55 | size_t arg_index; |
49 | } | 56 | } |
50 | char_directive; | 57 | char_directive; |
@@ -59,16 +66,114 @@ typedef struct | |||
59 | } | 66 | } |
60 | char_directives; | 67 | char_directives; |
61 | 68 | ||
69 | #if ENABLE_UNISTDIO | ||
70 | |||
71 | /* A parsed directive. */ | ||
72 | typedef struct | ||
73 | { | ||
74 | const uint8_t* dir_start; | ||
75 | const uint8_t* dir_end; | ||
76 | int flags; | ||
77 | const uint8_t* width_start; | ||
78 | const uint8_t* width_end; | ||
79 | size_t width_arg_index; | ||
80 | const uint8_t* precision_start; | ||
81 | const uint8_t* precision_end; | ||
82 | size_t precision_arg_index; | ||
83 | uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ | ||
84 | size_t arg_index; | ||
85 | } | ||
86 | u8_directive; | ||
87 | |||
88 | /* A parsed format string. */ | ||
89 | typedef struct | ||
90 | { | ||
91 | size_t count; | ||
92 | u8_directive *dir; | ||
93 | size_t max_width_length; | ||
94 | size_t max_precision_length; | ||
95 | } | ||
96 | u8_directives; | ||
97 | |||
98 | /* A parsed directive. */ | ||
99 | typedef struct | ||
100 | { | ||
101 | const uint16_t* dir_start; | ||
102 | const uint16_t* dir_end; | ||
103 | int flags; | ||
104 | const uint16_t* width_start; | ||
105 | const uint16_t* width_end; | ||
106 | size_t width_arg_index; | ||
107 | const uint16_t* precision_start; | ||
108 | const uint16_t* precision_end; | ||
109 | size_t precision_arg_index; | ||
110 | uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ | ||
111 | size_t arg_index; | ||
112 | } | ||
113 | u16_directive; | ||
114 | |||
115 | /* A parsed format string. */ | ||
116 | typedef struct | ||
117 | { | ||
118 | size_t count; | ||
119 | u16_directive *dir; | ||
120 | size_t max_width_length; | ||
121 | size_t max_precision_length; | ||
122 | } | ||
123 | u16_directives; | ||
124 | |||
125 | /* A parsed directive. */ | ||
126 | typedef struct | ||
127 | { | ||
128 | const uint32_t* dir_start; | ||
129 | const uint32_t* dir_end; | ||
130 | int flags; | ||
131 | const uint32_t* width_start; | ||
132 | const uint32_t* width_end; | ||
133 | size_t width_arg_index; | ||
134 | const uint32_t* precision_start; | ||
135 | const uint32_t* precision_end; | ||
136 | size_t precision_arg_index; | ||
137 | uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ | ||
138 | size_t arg_index; | ||
139 | } | ||
140 | u32_directive; | ||
141 | |||
142 | /* A parsed format string. */ | ||
143 | typedef struct | ||
144 | { | ||
145 | size_t count; | ||
146 | u32_directive *dir; | ||
147 | size_t max_width_length; | ||
148 | size_t max_precision_length; | ||
149 | } | ||
150 | u32_directives; | ||
151 | |||
152 | #endif | ||
153 | |||
62 | 154 | ||
63 | /* Parses the format string. Fills in the number N of directives, and fills | 155 | /* Parses the format string. Fills in the number N of directives, and fills |
64 | in directives[0], ..., directives[N-1], and sets directives[N].dir_start | 156 | in directives[0], ..., directives[N-1], and sets directives[N].dir_start |
65 | to the end of the format string. Also fills in the arg_type fields of the | 157 | to the end of the format string. Also fills in the arg_type fields of the |
66 | arguments and the needed count of arguments. */ | 158 | arguments and the needed count of arguments. */ |
67 | #ifdef STATIC | 159 | #if ENABLE_UNISTDIO |
68 | STATIC | 160 | extern int |
161 | ulc_printf_parse (const char *format, char_directives *d, arguments *a); | ||
162 | extern int | ||
163 | u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); | ||
164 | extern int | ||
165 | u16_printf_parse (const uint16_t *format, u16_directives *d, | ||
166 | arguments *a); | ||
167 | extern int | ||
168 | u32_printf_parse (const uint32_t *format, u32_directives *d, | ||
169 | arguments *a); | ||
69 | #else | 170 | #else |
171 | # ifdef STATIC | ||
172 | STATIC | ||
173 | # else | ||
70 | extern | 174 | extern |
71 | #endif | 175 | # endif |
72 | int printf_parse (const char *format, char_directives *d, arguments *a); | 176 | int printf_parse (const char *format, char_directives *d, arguments *a); |
177 | #endif | ||
73 | 178 | ||
74 | #endif /* _PRINTF_PARSE_H */ | 179 | #endif /* _PRINTF_PARSE_H */ |
diff --git a/gl/ref-add.sin b/gl/ref-add.sin new file mode 100644 index 00000000..222d7529 --- /dev/null +++ b/gl/ref-add.sin | |||
@@ -0,0 +1,30 @@ | |||
1 | # Add this package to a list of references stored in a text file. | ||
2 | # | ||
3 | # Copyright (C) 2000 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 3, 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 along | ||
16 | # 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 Bruno Haible <haible@clisp.cons.org>. | ||
20 | # | ||
21 | /^# Packages using this file: / { | ||
22 | s/# Packages using this file:// | ||
23 | ta | ||
24 | :a | ||
25 | s/ @PACKAGE@ / @PACKAGE@ / | ||
26 | tb | ||
27 | s/ $/ @PACKAGE@ / | ||
28 | :b | ||
29 | s/^/# Packages using this file:/ | ||
30 | } | ||
diff --git a/gl/ref-del.sin b/gl/ref-del.sin new file mode 100644 index 00000000..1bf073e1 --- /dev/null +++ b/gl/ref-del.sin | |||
@@ -0,0 +1,25 @@ | |||
1 | # Remove this package from a list of references stored in a text file. | ||
2 | # | ||
3 | # Copyright (C) 2000 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 3, 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 along | ||
16 | # 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 Bruno Haible <haible@clisp.cons.org>. | ||
20 | # | ||
21 | /^# Packages using this file: / { | ||
22 | s/# Packages using this file:// | ||
23 | s/ @PACKAGE@ / / | ||
24 | s/^/# Packages using this file:/ | ||
25 | } | ||
diff --git a/gl/regcomp.c b/gl/regcomp.c index 8df6bb80..8827e03c 100644 --- a/gl/regcomp.c +++ b/gl/regcomp.c | |||
@@ -1,11 +1,11 @@ | |||
1 | /* Extended regular expression matching and search library. | 1 | /* Extended regular expression matching and search library. |
2 | Copyright (C) 2002,2003,2004,2005,2006 Free Software Foundation, Inc. | 2 | Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc. |
3 | This file is part of the GNU C Library. | 3 | This file is part of the GNU C Library. |
4 | Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. | 4 | Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3, or (at your option) |
9 | any later version. | 9 | any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
@@ -451,8 +451,8 @@ re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, | |||
451 | 451 | ||
452 | int | 452 | int |
453 | regcomp (preg, pattern, cflags) | 453 | regcomp (preg, pattern, cflags) |
454 | regex_t *__restrict preg; | 454 | regex_t *_Restrict_ preg; |
455 | const char *__restrict pattern; | 455 | const char *_Restrict_ pattern; |
456 | int cflags; | 456 | int cflags; |
457 | { | 457 | { |
458 | reg_errcode_t ret; | 458 | reg_errcode_t ret; |
@@ -515,13 +515,13 @@ weak_alias (__regcomp, regcomp) | |||
515 | size_t | 515 | size_t |
516 | regerror (errcode, preg, errbuf, errbuf_size) | 516 | regerror (errcode, preg, errbuf, errbuf_size) |
517 | int errcode; | 517 | int errcode; |
518 | const regex_t *__restrict preg; | 518 | const regex_t *_Restrict_ preg; |
519 | char *__restrict errbuf; | 519 | char *_Restrict_ errbuf; |
520 | size_t errbuf_size; | 520 | size_t errbuf_size; |
521 | #else /* size_t might promote */ | 521 | #else /* size_t might promote */ |
522 | size_t | 522 | size_t |
523 | regerror (int errcode, const regex_t *__restrict preg, | 523 | regerror (int errcode, const regex_t *_Restrict_ preg, |
524 | char *__restrict errbuf, size_t errbuf_size) | 524 | char *_Restrict_ errbuf, size_t errbuf_size) |
525 | #endif | 525 | #endif |
526 | { | 526 | { |
527 | const char *msg; | 527 | const char *msg; |
@@ -542,17 +542,13 @@ regerror (int errcode, const regex_t *__restrict preg, | |||
542 | 542 | ||
543 | if (BE (errbuf_size != 0, 1)) | 543 | if (BE (errbuf_size != 0, 1)) |
544 | { | 544 | { |
545 | size_t cpy_size = msg_size; | ||
545 | if (BE (msg_size > errbuf_size, 0)) | 546 | if (BE (msg_size > errbuf_size, 0)) |
546 | { | 547 | { |
547 | #if defined HAVE_MEMPCPY || defined _LIBC | 548 | cpy_size = errbuf_size - 1; |
548 | *((char *) __mempcpy (errbuf, msg, errbuf_size - 1)) = '\0'; | 549 | errbuf[cpy_size] = '\0'; |
549 | #else | ||
550 | memcpy (errbuf, msg, errbuf_size - 1); | ||
551 | errbuf[errbuf_size - 1] = 0; | ||
552 | #endif | ||
553 | } | 550 | } |
554 | else | 551 | memcpy (errbuf, msg, cpy_size); |
555 | memcpy (errbuf, msg, msg_size); | ||
556 | } | 552 | } |
557 | 553 | ||
558 | return msg_size; | 554 | return msg_size; |
@@ -833,9 +829,6 @@ static reg_errcode_t | |||
833 | init_dfa (re_dfa_t *dfa, size_t pat_len) | 829 | init_dfa (re_dfa_t *dfa, size_t pat_len) |
834 | { | 830 | { |
835 | __re_size_t table_size; | 831 | __re_size_t table_size; |
836 | #ifndef _LIBC | ||
837 | char *codeset_name; | ||
838 | #endif | ||
839 | #ifdef RE_ENABLE_I18N | 832 | #ifdef RE_ENABLE_I18N |
840 | size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t)); | 833 | size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t)); |
841 | #else | 834 | #else |
@@ -879,22 +872,7 @@ init_dfa (re_dfa_t *dfa, size_t pat_len) | |||
879 | dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII) | 872 | dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII) |
880 | != 0); | 873 | != 0); |
881 | #else | 874 | #else |
882 | # ifdef HAVE_LANGINFO_CODESET | 875 | if (strcmp (locale_charset (), "UTF-8") == 0) |
883 | codeset_name = nl_langinfo (CODESET); | ||
884 | # else | ||
885 | codeset_name = getenv ("LC_ALL"); | ||
886 | if (codeset_name == NULL || codeset_name[0] == '\0') | ||
887 | codeset_name = getenv ("LC_CTYPE"); | ||
888 | if (codeset_name == NULL || codeset_name[0] == '\0') | ||
889 | codeset_name = getenv ("LANG"); | ||
890 | if (codeset_name == NULL) | ||
891 | codeset_name = ""; | ||
892 | else if (strchr (codeset_name, '.') != NULL) | ||
893 | codeset_name = strchr (codeset_name, '.') + 1; | ||
894 | # endif | ||
895 | |||
896 | if (strcasecmp (codeset_name, "UTF-8") == 0 | ||
897 | || strcasecmp (codeset_name, "UTF8") == 0) | ||
898 | dfa->is_utf8 = 1; | 876 | dfa->is_utf8 = 1; |
899 | 877 | ||
900 | /* We check exhaustively in the loop below if this charset is a | 878 | /* We check exhaustively in the loop below if this charset is a |
@@ -1071,7 +1049,7 @@ optimize_utf8 (re_dfa_t *dfa) | |||
1071 | mb_chars = true; | 1049 | mb_chars = true; |
1072 | break; | 1050 | break; |
1073 | case ANCHOR: | 1051 | case ANCHOR: |
1074 | switch (dfa->nodes[node].opr.idx) | 1052 | switch (dfa->nodes[node].opr.ctx_type) |
1075 | { | 1053 | { |
1076 | case LINE_FIRST: | 1054 | case LINE_FIRST: |
1077 | case LINE_LAST: | 1055 | case LINE_LAST: |
@@ -3074,7 +3052,7 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, | |||
3074 | #endif /* not RE_ENABLE_I18N */ | 3052 | #endif /* not RE_ENABLE_I18N */ |
3075 | non_match = true; | 3053 | non_match = true; |
3076 | if (syntax & RE_HAT_LISTS_NOT_NEWLINE) | 3054 | if (syntax & RE_HAT_LISTS_NOT_NEWLINE) |
3077 | bitset_set (sbcset, '\0'); | 3055 | bitset_set (sbcset, '\n'); |
3078 | re_string_skip_bytes (regexp, token_len); /* Skip a token. */ | 3056 | re_string_skip_bytes (regexp, token_len); /* Skip a token. */ |
3079 | token_len = peek_token_bracket (token, regexp, syntax); | 3057 | token_len = peek_token_bracket (token, regexp, syntax); |
3080 | if (BE (token->type == END_OF_RE, 0)) | 3058 | if (BE (token->type == END_OF_RE, 0)) |
@@ -3605,10 +3583,6 @@ build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, | |||
3605 | if (non_match) | 3583 | if (non_match) |
3606 | { | 3584 | { |
3607 | #ifdef RE_ENABLE_I18N | 3585 | #ifdef RE_ENABLE_I18N |
3608 | /* | ||
3609 | if (syntax & RE_HAT_LISTS_NOT_NEWLINE) | ||
3610 | bitset_set(cset->sbcset, '\0'); | ||
3611 | */ | ||
3612 | mbcset->non_match = 1; | 3586 | mbcset->non_match = 1; |
3613 | #endif /* not RE_ENABLE_I18N */ | 3587 | #endif /* not RE_ENABLE_I18N */ |
3614 | } | 3588 | } |
@@ -5,7 +5,7 @@ | |||
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3, or (at your option) |
9 | any later version. | 9 | any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
@@ -6,7 +6,7 @@ | |||
6 | 6 | ||
7 | This program is free software; you can redistribute it and/or modify | 7 | This program is free software; you can redistribute it and/or modify |
8 | it under the terms of the GNU General Public License as published by | 8 | it under the terms of the GNU General Public License as published by |
9 | the Free Software Foundation; either version 2, or (at your option) | 9 | the Free Software Foundation; either version 3, or (at your option) |
10 | any later version. | 10 | any later version. |
11 | 11 | ||
12 | This program is distributed in the hope that it will be useful, | 12 | This program is distributed in the hope that it will be useful, |
@@ -625,41 +625,45 @@ extern int re_exec (const char *); | |||
625 | #endif | 625 | #endif |
626 | 626 | ||
627 | /* GCC 2.95 and later have "__restrict"; C99 compilers have | 627 | /* GCC 2.95 and later have "__restrict"; C99 compilers have |
628 | "restrict", and "configure" may have defined "restrict". */ | 628 | "restrict", and "configure" may have defined "restrict". |
629 | #ifndef __restrict | 629 | Other compilers use __restrict, __restrict__, and _Restrict, and |
630 | # if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)) | 630 | 'configure' might #define 'restrict' to those words, so pick a |
631 | # if defined restrict || 199901L <= __STDC_VERSION__ | 631 | different name. */ |
632 | # define __restrict restrict | 632 | #ifndef _Restrict_ |
633 | # else | 633 | # if 199901L <= __STDC_VERSION__ |
634 | # define __restrict | 634 | # define _Restrict_ restrict |
635 | # endif | 635 | # elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) |
636 | # define _Restrict_ __restrict | ||
637 | # else | ||
638 | # define _Restrict_ | ||
636 | # endif | 639 | # endif |
637 | #endif | 640 | #endif |
638 | /* gcc 3.1 and up support the [restrict] syntax. Don't trust | 641 | /* gcc 3.1 and up support the [restrict] syntax. Don't trust |
639 | sys/cdefs.h's definition of __restrict_arr, though, as it | 642 | sys/cdefs.h's definition of __restrict_arr, though, as it |
640 | mishandles gcc -ansi -pedantic. */ | 643 | mishandles gcc -ansi -pedantic. */ |
641 | #undef __restrict_arr | 644 | #ifndef _Restrict_arr_ |
642 | #if ((199901L <= __STDC_VERSION__ \ | 645 | # if ((199901L <= __STDC_VERSION__ \ |
643 | || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) \ | 646 | || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) \ |
644 | && !__STRICT_ANSI__)) \ | 647 | && !__STRICT_ANSI__)) \ |
645 | && !defined __GNUG__) | 648 | && !defined __GNUG__) |
646 | # define __restrict_arr __restrict | 649 | # define _Restrict_arr_ _Restrict_ |
647 | #else | 650 | # else |
648 | # define __restrict_arr | 651 | # define _Restrict_arr_ |
652 | # endif | ||
649 | #endif | 653 | #endif |
650 | 654 | ||
651 | /* POSIX compatibility. */ | 655 | /* POSIX compatibility. */ |
652 | extern int regcomp (regex_t *__restrict __preg, | 656 | extern int regcomp (regex_t *_Restrict_ __preg, |
653 | const char *__restrict __pattern, | 657 | const char *_Restrict_ __pattern, |
654 | int __cflags); | 658 | int __cflags); |
655 | 659 | ||
656 | extern int regexec (const regex_t *__restrict __preg, | 660 | extern int regexec (const regex_t *_Restrict_ __preg, |
657 | const char *__restrict __string, size_t __nmatch, | 661 | const char *_Restrict_ __string, size_t __nmatch, |
658 | regmatch_t __pmatch[__restrict_arr], | 662 | regmatch_t __pmatch[_Restrict_arr_], |
659 | int __eflags); | 663 | int __eflags); |
660 | 664 | ||
661 | extern size_t regerror (int __errcode, const regex_t *__restrict __preg, | 665 | extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg, |
662 | char *__restrict __errbuf, size_t __errbuf_size); | 666 | char *_Restrict_ __errbuf, size_t __errbuf_size); |
663 | 667 | ||
664 | extern void regfree (regex_t *__preg); | 668 | extern void regfree (regex_t *__preg); |
665 | 669 | ||
diff --git a/gl/regex_internal.c b/gl/regex_internal.c index 78e16f33..cf3bf1bb 100644 --- a/gl/regex_internal.c +++ b/gl/regex_internal.c | |||
@@ -1,11 +1,12 @@ | |||
1 | /* Extended regular expression matching and search library. | 1 | /* Extended regular expression matching and search library. |
2 | Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. | 2 | Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software |
3 | Foundation, Inc. | ||
3 | This file is part of the GNU C Library. | 4 | This file is part of the GNU C Library. |
4 | Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. | 5 | Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. |
5 | 6 | ||
6 | This program is free software; you can redistribute it and/or modify | 7 | 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 | 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 | the Free Software Foundation; either version 3, or (at your option) |
9 | any later version. | 10 | any later version. |
10 | 11 | ||
11 | This program is distributed in the hope that it will be useful, | 12 | This program is distributed in the hope that it will be useful, |
@@ -706,7 +707,7 @@ re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags) | |||
706 | 707 | ||
707 | if (pstr->is_utf8) | 708 | if (pstr->is_utf8) |
708 | { | 709 | { |
709 | const unsigned char *raw, *p, *q, *end; | 710 | const unsigned char *raw, *p, *end; |
710 | 711 | ||
711 | /* Special case UTF-8. Multi-byte chars start with any | 712 | /* Special case UTF-8. Multi-byte chars start with any |
712 | byte other than 0x80 - 0xbf. */ | 713 | byte other than 0x80 - 0xbf. */ |
@@ -735,13 +736,11 @@ re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags) | |||
735 | unsigned char buf[6]; | 736 | unsigned char buf[6]; |
736 | size_t mbclen; | 737 | size_t mbclen; |
737 | 738 | ||
738 | q = p; | ||
739 | if (BE (pstr->trans != NULL, 0)) | 739 | if (BE (pstr->trans != NULL, 0)) |
740 | { | 740 | { |
741 | int i = mlen < 6 ? mlen : 6; | 741 | int i = mlen < 6 ? mlen : 6; |
742 | while (--i >= 0) | 742 | while (--i >= 0) |
743 | buf[i] = pstr->trans[p[i]]; | 743 | buf[i] = pstr->trans[p[i]]; |
744 | q = buf; | ||
745 | } | 744 | } |
746 | /* XXX Don't use mbrtowc, we know which conversion | 745 | /* XXX Don't use mbrtowc, we know which conversion |
747 | to use (UTF-8 -> UCS4). */ | 746 | to use (UTF-8 -> UCS4). */ |
diff --git a/gl/regex_internal.h b/gl/regex_internal.h index b0f7e657..f96291d0 100644 --- a/gl/regex_internal.h +++ b/gl/regex_internal.h | |||
@@ -5,7 +5,7 @@ | |||
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3, or (at your option) |
9 | any later version. | 9 | any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
@@ -27,12 +27,10 @@ | |||
27 | #include <stdlib.h> | 27 | #include <stdlib.h> |
28 | #include <string.h> | 28 | #include <string.h> |
29 | 29 | ||
30 | #ifndef _LIBC | 30 | #ifdef _LIBC |
31 | # include "strcase.h" | ||
32 | #endif | ||
33 | |||
34 | #if defined HAVE_LANGINFO_H || defined HAVE_LANGINFO_CODESET || defined _LIBC | ||
35 | # include <langinfo.h> | 31 | # include <langinfo.h> |
32 | #else | ||
33 | # include "localcharset.h" | ||
36 | #endif | 34 | #endif |
37 | #if defined HAVE_LOCALE_H || defined _LIBC | 35 | #if defined HAVE_LOCALE_H || defined _LIBC |
38 | # include <locale.h> | 36 | # include <locale.h> |
@@ -50,7 +48,7 @@ | |||
50 | #endif | 48 | #endif |
51 | 49 | ||
52 | /* In case that the system doesn't have isblank(). */ | 50 | /* In case that the system doesn't have isblank(). */ |
53 | #if !defined _LIBC && !HAVE_DECL_ISBLANK && !defined isblank | 51 | #if !defined _LIBC && ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK)) |
54 | # define isblank(ch) ((ch) == ' ' || (ch) == '\t') | 52 | # define isblank(ch) ((ch) == ' ' || (ch) == '\t') |
55 | #endif | 53 | #endif |
56 | 54 | ||
@@ -116,9 +114,6 @@ | |||
116 | # define __wctype wctype | 114 | # define __wctype wctype |
117 | # define __iswctype iswctype | 115 | # define __iswctype iswctype |
118 | # define __btowc btowc | 116 | # define __btowc btowc |
119 | # ifndef __mempcpy | ||
120 | # define __mempcpy mempcpy | ||
121 | # endif | ||
122 | # define __wcrtomb wcrtomb | 117 | # define __wcrtomb wcrtomb |
123 | # define __regfree regfree | 118 | # define __regfree regfree |
124 | # define attribute_hidden | 119 | # define attribute_hidden |
diff --git a/gl/regexec.c b/gl/regexec.c index 7c186aa2..ac6c258e 100644 --- a/gl/regexec.c +++ b/gl/regexec.c | |||
@@ -1,11 +1,12 @@ | |||
1 | /* Extended regular expression matching and search library. | 1 | /* Extended regular expression matching and search library. |
2 | Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. | 2 | Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, |
3 | Inc. | ||
3 | This file is part of the GNU C Library. | 4 | This file is part of the GNU C Library. |
4 | Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. | 5 | Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. |
5 | 6 | ||
6 | This program is free software; you can redistribute it and/or modify | 7 | 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 | 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 | the Free Software Foundation; either version 3, or (at your option) |
9 | any later version. | 10 | any later version. |
10 | 11 | ||
11 | This program is distributed in the hope that it will be useful, | 12 | This program is distributed in the hope that it will be useful, |
@@ -221,10 +222,10 @@ static reg_errcode_t extend_buffers (re_match_context_t *mctx) | |||
221 | 222 | ||
222 | int | 223 | int |
223 | regexec (preg, string, nmatch, pmatch, eflags) | 224 | regexec (preg, string, nmatch, pmatch, eflags) |
224 | const regex_t *__restrict preg; | 225 | const regex_t *_Restrict_ preg; |
225 | const char *__restrict string; | 226 | const char *_Restrict_ string; |
226 | size_t nmatch; | 227 | size_t nmatch; |
227 | regmatch_t pmatch[]; | 228 | regmatch_t pmatch[_Restrict_arr_]; |
228 | int eflags; | 229 | int eflags; |
229 | { | 230 | { |
230 | reg_errcode_t err; | 231 | reg_errcode_t err; |
@@ -267,8 +268,8 @@ __typeof__ (__regexec) __compat_regexec; | |||
267 | 268 | ||
268 | int | 269 | int |
269 | attribute_compat_text_section | 270 | attribute_compat_text_section |
270 | __compat_regexec (const regex_t *__restrict preg, | 271 | __compat_regexec (const regex_t *_Restrict_ preg, |
271 | const char *__restrict string, size_t nmatch, | 272 | const char *_Restrict_ string, size_t nmatch, |
272 | regmatch_t pmatch[], int eflags) | 273 | regmatch_t pmatch[], int eflags) |
273 | { | 274 | { |
274 | return regexec (preg, string, nmatch, pmatch, | 275 | return regexec (preg, string, nmatch, pmatch, |
@@ -2338,7 +2339,7 @@ transit_state (reg_errcode_t *err, re_match_context_t *mctx, | |||
2338 | } | 2339 | } |
2339 | 2340 | ||
2340 | /* Update the state_log if we need */ | 2341 | /* Update the state_log if we need */ |
2341 | re_dfastate_t * | 2342 | static re_dfastate_t * |
2342 | internal_function | 2343 | internal_function |
2343 | merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, | 2344 | merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, |
2344 | re_dfastate_t *next_state) | 2345 | re_dfastate_t *next_state) |
diff --git a/gl/safe-read.c b/gl/safe-read.c index b7bf1d5c..0cb1edee 100644 --- a/gl/safe-read.c +++ b/gl/safe-read.c | |||
@@ -3,10 +3,10 @@ | |||
3 | Copyright (C) 1993, 1994, 1998, 2002, 2003, 2004, 2005, 2006 Free | 3 | Copyright (C) 1993, 1994, 1998, 2002, 2003, 2004, 2005, 2006 Free |
4 | Software Foundation, Inc. | 4 | Software Foundation, Inc. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3 of the License, or |
9 | any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -14,8 +14,7 @@ | |||
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License | 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, | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 18 | ||
20 | #include <config.h> | 19 | #include <config.h> |
21 | 20 | ||
diff --git a/gl/safe-read.h b/gl/safe-read.h index 3451955a..ba191713 100644 --- a/gl/safe-read.h +++ b/gl/safe-read.h | |||
@@ -1,10 +1,10 @@ | |||
1 | /* An interface to read() that retries after interrupts. | 1 | /* An interface to read() that retries after interrupts. |
2 | Copyright (C) 2002, 2006 Free Software Foundation, Inc. | 2 | Copyright (C) 2002, 2006 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software: you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3 of the License, or |
7 | any later version. | 7 | (at your option) any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -12,8 +12,7 @@ | |||
12 | GNU General Public License for more details. | 12 | GNU General Public License for more details. |
13 | 13 | ||
14 | You should have received a copy of the GNU General Public License | 14 | You should have received a copy of the GNU General Public License |
15 | along with this program; if not, write to the Free Software Foundation, | 15 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | 16 | ||
18 | #include <stddef.h> | 17 | #include <stddef.h> |
19 | 18 | ||
diff --git a/gl/safe-write.c b/gl/safe-write.c index 4c375a6c..b644f7cf 100644 --- a/gl/safe-write.c +++ b/gl/safe-write.c | |||
@@ -1,10 +1,10 @@ | |||
1 | /* An interface to write that retries after interrupts. | 1 | /* An interface to write that retries after interrupts. |
2 | Copyright (C) 2002 Free Software Foundation, Inc. | 2 | Copyright (C) 2002 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software: you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3 of the License, or |
7 | any later version. | 7 | (at your option) any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -12,8 +12,7 @@ | |||
12 | GNU General Public License for more details. | 12 | GNU General Public License for more details. |
13 | 13 | ||
14 | You should have received a copy of the GNU General Public License | 14 | You should have received a copy of the GNU General Public License |
15 | along with this program; if not, write to the Free Software Foundation, | 15 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | 16 | ||
18 | #define SAFE_WRITE | 17 | #define SAFE_WRITE |
19 | #include "safe-read.c" | 18 | #include "safe-read.c" |
diff --git a/gl/safe-write.h b/gl/safe-write.h index c1946362..da036a97 100644 --- a/gl/safe-write.h +++ b/gl/safe-write.h | |||
@@ -1,10 +1,10 @@ | |||
1 | /* An interface to write() that retries after interrupts. | 1 | /* An interface to write() that retries after interrupts. |
2 | Copyright (C) 2002 Free Software Foundation, Inc. | 2 | Copyright (C) 2002 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software: you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3 of the License, or |
7 | any later version. | 7 | (at your option) any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -12,8 +12,7 @@ | |||
12 | GNU General Public License for more details. | 12 | GNU General Public License for more details. |
13 | 13 | ||
14 | You should have received a copy of the GNU General Public License | 14 | You should have received a copy of the GNU General Public License |
15 | along with this program; if not, write to the Free Software Foundation, | 15 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | 16 | ||
18 | #include <stddef.h> | 17 | #include <stddef.h> |
19 | 18 | ||
diff --git a/gl/size_max.h b/gl/size_max.h index ed0bc137..2ccc5f08 100644 --- a/gl/size_max.h +++ b/gl/size_max.h | |||
@@ -4,7 +4,7 @@ | |||
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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3, or (at your option) |
8 | any later version. | 8 | any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
diff --git a/gl/snprintf.c b/gl/snprintf.c index db1ca9af..960cfdb4 100644 --- a/gl/snprintf.c +++ b/gl/snprintf.c | |||
@@ -1,10 +1,10 @@ | |||
1 | /* Formatted output to strings. | 1 | /* Formatted output to strings. |
2 | Copyright (C) 2004, 2006 Free Software Foundation, Inc. | 2 | Copyright (C) 2004, 2006-2007 Free Software Foundation, Inc. |
3 | Written by Simon Josefsson and Paul Eggert. | 3 | Written by Simon Josefsson and Paul Eggert. |
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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3, or (at your option) |
8 | any later version. | 8 | any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
@@ -18,7 +18,8 @@ | |||
18 | 18 | ||
19 | #include <config.h> | 19 | #include <config.h> |
20 | 20 | ||
21 | #include "snprintf.h" | 21 | /* Specification. */ |
22 | #include <stdio.h> | ||
22 | 23 | ||
23 | #include <errno.h> | 24 | #include <errno.h> |
24 | #include <limits.h> | 25 | #include <limits.h> |
@@ -37,7 +38,7 @@ | |||
37 | additional length SIZE limit how much is written into STR. Returns | 38 | additional length SIZE limit how much is written into STR. Returns |
38 | string length of formatted string (which may be larger than SIZE). | 39 | string length of formatted string (which may be larger than SIZE). |
39 | STR may be NULL, in which case nothing will be written. On error, | 40 | STR may be NULL, in which case nothing will be written. On error, |
40 | return a negative value. */ | 41 | return a negative value. */ |
41 | int | 42 | int |
42 | snprintf (char *str, size_t size, const char *format, ...) | 43 | snprintf (char *str, size_t size, const char *format, ...) |
43 | { | 44 | { |
diff --git a/gl/snprintf.h b/gl/snprintf.h deleted file mode 100644 index 5032b9e8..00000000 --- a/gl/snprintf.h +++ /dev/null | |||
@@ -1,29 +0,0 @@ | |||
1 | /* Formatted output to strings. | ||
2 | Copyright (C) 2004 Free Software Foundation, Inc. | ||
3 | Written by Simon Josefsson. | ||
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 along | ||
16 | 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 | #ifndef SNPRINTF_H | ||
20 | #define SNPRINTF_H | ||
21 | |||
22 | /* Get snprintf declaration, if available. */ | ||
23 | #include <stdio.h> | ||
24 | |||
25 | #if defined HAVE_DECL_SNPRINTF && !HAVE_DECL_SNPRINTF | ||
26 | int snprintf (char *str, size_t size, const char *format, ...); | ||
27 | #endif | ||
28 | |||
29 | #endif /* SNPRINTF_H */ | ||
diff --git a/gl/stdbool_.h b/gl/stdbool.in.h index efa80ba9..171d70ab 100644 --- a/gl/stdbool_.h +++ b/gl/stdbool.in.h | |||
@@ -1,9 +1,9 @@ | |||
1 | /* Copyright (C) 2001, 2002, 2003, 2006 Free Software Foundation, Inc. | 1 | /* Copyright (C) 2001, 2002, 2003, 2006, 2007 Free Software Foundation, Inc. |
2 | Written by Bruno Haible <haible@clisp.cons.org>, 2001. | 2 | Written by Bruno Haible <haible@clisp.cons.org>, 2001. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3, or (at your option) |
7 | any later version. | 7 | any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
@@ -15,8 +15,8 @@ | |||
15 | along with this program; if not, write to the Free Software Foundation, | 15 | along with this program; if not, write to the Free Software Foundation, |
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | 16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
17 | 17 | ||
18 | #ifndef _STDBOOL_H | 18 | #ifndef _GL_STDBOOL_H |
19 | #define _STDBOOL_H | 19 | #define _GL_STDBOOL_H |
20 | 20 | ||
21 | /* ISO C 99 <stdbool.h> for platforms that lack it. */ | 21 | /* ISO C 99 <stdbool.h> for platforms that lack it. */ |
22 | 22 | ||
@@ -41,6 +41,9 @@ | |||
41 | 41 | ||
42 | - You cannot assume that _Bool is a typedef; it might be a macro. | 42 | - You cannot assume that _Bool is a typedef; it might be a macro. |
43 | 43 | ||
44 | - Bit-fields of type 'bool' are not supported. Portable code | ||
45 | should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. | ||
46 | |||
44 | - In C99, casts and automatic conversions to '_Bool' or 'bool' are | 47 | - In C99, casts and automatic conversions to '_Bool' or 'bool' are |
45 | performed in such a way that every nonzero value gets converted | 48 | performed in such a way that every nonzero value gets converted |
46 | to 'true', and zero gets converted to 'false'. This doesn't work | 49 | to 'true', and zero gets converted to 'false'. This doesn't work |
@@ -94,10 +97,11 @@ typedef bool _Bool; | |||
94 | "warning: _Bool is a keyword in ISO C99". | 97 | "warning: _Bool is a keyword in ISO C99". |
95 | Use of an enum type, with IRIX cc, leads to a stupid | 98 | Use of an enum type, with IRIX cc, leads to a stupid |
96 | "warning(1185): enumerated type mixed with another type". | 99 | "warning(1185): enumerated type mixed with another type". |
97 | The only benefit of the enum type, debuggability, is not important | 100 | Even the existence of an enum type, without a typedef, |
98 | with these compilers. So use 'signed char' and no typedef. */ | 101 | "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. |
102 | The only benefit of the enum, debuggability, is not important | ||
103 | with these compilers. So use 'signed char' and no enum. */ | ||
99 | # define _Bool signed char | 104 | # define _Bool signed char |
100 | enum { false = 0, true = 1 }; | ||
101 | # else | 105 | # else |
102 | /* With this compiler, trust the _Bool type if the compiler has it. */ | 106 | /* With this compiler, trust the _Bool type if the compiler has it. */ |
103 | # if !@HAVE__BOOL@ | 107 | # if !@HAVE__BOOL@ |
@@ -112,4 +116,4 @@ typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; | |||
112 | #define true 1 | 116 | #define true 1 |
113 | #define __bool_true_false_are_defined 1 | 117 | #define __bool_true_false_are_defined 1 |
114 | 118 | ||
115 | #endif /* _STDBOOL_H */ | 119 | #endif /* _GL_STDBOOL_H */ |
diff --git a/gl/stdint_.h b/gl/stdint.in.h index 64ec8c5b..67baceb6 100644 --- a/gl/stdint_.h +++ b/gl/stdint.in.h | |||
@@ -4,7 +4,7 @@ | |||
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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3, or (at your option) |
8 | any later version. | 8 | any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
@@ -16,14 +16,19 @@ | |||
16 | along with this program; if not, write to the Free Software Foundation, | 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. */ | 17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
18 | 18 | ||
19 | #ifndef _GL_STDINT_H | ||
20 | #define _GL_STDINT_H | ||
21 | |||
22 | /* | 19 | /* |
23 | * ISO C 99 <stdint.h> for platforms that lack it. | 20 | * ISO C 99 <stdint.h> for platforms that lack it. |
24 | * <http://www.opengroup.org/susv3xbd/stdint.h.html> | 21 | * <http://www.opengroup.org/susv3xbd/stdint.h.html> |
25 | */ | 22 | */ |
26 | 23 | ||
24 | #ifndef _GL_STDINT_H | ||
25 | |||
26 | /* When including a system file that in turn includes <inttypes.h>, | ||
27 | use the system <inttypes.h>, not our substitute. This avoids | ||
28 | problems with (for example) VMS, whose <sys/bitypes.h> includes | ||
29 | <inttypes.h>. */ | ||
30 | #define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H | ||
31 | |||
27 | /* Get those types that are already defined in other system include | 32 | /* Get those types that are already defined in other system include |
28 | files, so that we can "#define int8_t signed char" below without | 33 | files, so that we can "#define int8_t signed char" below without |
29 | worrying about a later system include file containing a "typedef | 34 | worrying about a later system include file containing a "typedef |
@@ -42,16 +47,20 @@ | |||
42 | /* Other systems may have an incomplete or buggy <stdint.h>. | 47 | /* Other systems may have an incomplete or buggy <stdint.h>. |
43 | Include it before <inttypes.h>, since any "#include <stdint.h>" | 48 | Include it before <inttypes.h>, since any "#include <stdint.h>" |
44 | in <inttypes.h> would reinclude us, skipping our contents because | 49 | in <inttypes.h> would reinclude us, skipping our contents because |
45 | _GL_STDINT_H is defined. */ | 50 | _GL_STDINT_H is defined. |
46 | # include @ABSOLUTE_STDINT_H@ | 51 | The include_next requires a split double-inclusion guard. */ |
52 | # @INCLUDE_NEXT@ @NEXT_STDINT_H@ | ||
47 | #endif | 53 | #endif |
48 | 54 | ||
55 | #if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H | ||
56 | #define _GL_STDINT_H | ||
57 | |||
49 | /* <sys/types.h> defines some of the stdint.h types as well, on glibc, | 58 | /* <sys/types.h> defines some of the stdint.h types as well, on glibc, |
50 | IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>). | 59 | IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>). |
51 | AIX 5.2 <sys/types.h> isn't needed and causes troubles. | 60 | AIX 5.2 <sys/types.h> isn't needed and causes troubles. |
52 | MacOS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but | 61 | MacOS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but |
53 | relies on the system <stdint.h> definitions, so include | 62 | relies on the system <stdint.h> definitions, so include |
54 | <sys/types.h> after @ABSOLUTE_STDINT_H@. */ | 63 | <sys/types.h> after @NEXT_STDINT_H@. */ |
55 | #if @HAVE_SYS_TYPES_H@ && ! defined _AIX | 64 | #if @HAVE_SYS_TYPES_H@ && ! defined _AIX |
56 | # include <sys/types.h> | 65 | # include <sys/types.h> |
57 | #endif | 66 | #endif |
@@ -63,9 +72,7 @@ | |||
63 | /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines | 72 | /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines |
64 | int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. | 73 | int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. |
65 | <inttypes.h> also defines intptr_t and uintptr_t. */ | 74 | <inttypes.h> also defines intptr_t and uintptr_t. */ |
66 | # define _GL_JUST_INCLUDE_ABSOLUTE_INTTYPES_H | ||
67 | # include <inttypes.h> | 75 | # include <inttypes.h> |
68 | # undef _GL_JUST_INCLUDE_ABSOLUTE_INTTYPES_H | ||
69 | #elif @HAVE_SYS_INTTYPES_H@ | 76 | #elif @HAVE_SYS_INTTYPES_H@ |
70 | /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and | 77 | /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and |
71 | the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ | 78 | the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ |
@@ -88,6 +95,8 @@ | |||
88 | 95 | ||
89 | #endif | 96 | #endif |
90 | 97 | ||
98 | #undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H | ||
99 | |||
91 | /* Minimum and maximum values for a integer type under the usual assumption. | 100 | /* Minimum and maximum values for a integer type under the usual assumption. |
92 | Return an unspecified value if BITS == 0, adding a check to pacify | 101 | Return an unspecified value if BITS == 0, adding a check to pacify |
93 | picky compilers. */ | 102 | picky compilers. */ |
@@ -98,7 +107,10 @@ | |||
98 | #define _STDINT_MAX(signed, bits, zero) \ | 107 | #define _STDINT_MAX(signed, bits, zero) \ |
99 | ((signed) \ | 108 | ((signed) \ |
100 | ? ~ _STDINT_MIN (signed, bits, zero) \ | 109 | ? ~ _STDINT_MIN (signed, bits, zero) \ |
101 | : ((((zero) + 1) << ((bits) ? (bits) - 1 : 0)) - 1) * 2 + 1) | 110 | : /* The expression for the unsigned case. The subtraction of (signed) \ |
111 | is a nop in the unsigned case and avoids "signed integer overflow" \ | ||
112 | warnings in the signed case. */ \ | ||
113 | ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) | ||
102 | 114 | ||
103 | /* 7.18.1.1. Exact-width integer types */ | 115 | /* 7.18.1.1. Exact-width integer types */ |
104 | 116 | ||
@@ -120,22 +132,34 @@ | |||
120 | #define int32_t int | 132 | #define int32_t int |
121 | #define uint32_t unsigned int | 133 | #define uint32_t unsigned int |
122 | 134 | ||
123 | #undef int64_t | 135 | /* Do not undefine int64_t if gnulib is not being used with 64-bit |
136 | types, since otherwise it breaks platforms like Tandem/NSK. */ | ||
124 | #if LONG_MAX >> 31 >> 31 == 1 | 137 | #if LONG_MAX >> 31 >> 31 == 1 |
138 | # undef int64_t | ||
125 | # define int64_t long int | 139 | # define int64_t long int |
140 | # define GL_INT64_T | ||
126 | #elif defined _MSC_VER | 141 | #elif defined _MSC_VER |
142 | # undef int64_t | ||
127 | # define int64_t __int64 | 143 | # define int64_t __int64 |
144 | # define GL_INT64_T | ||
128 | #elif @HAVE_LONG_LONG_INT@ | 145 | #elif @HAVE_LONG_LONG_INT@ |
146 | # undef int64_t | ||
129 | # define int64_t long long int | 147 | # define int64_t long long int |
148 | # define GL_INT64_T | ||
130 | #endif | 149 | #endif |
131 | 150 | ||
132 | #undef uint64_t | ||
133 | #if ULONG_MAX >> 31 >> 31 >> 1 == 1 | 151 | #if ULONG_MAX >> 31 >> 31 >> 1 == 1 |
152 | # undef uint64_t | ||
134 | # define uint64_t unsigned long int | 153 | # define uint64_t unsigned long int |
154 | # define GL_UINT64_T | ||
135 | #elif defined _MSC_VER | 155 | #elif defined _MSC_VER |
156 | # undef uint64_t | ||
136 | # define uint64_t unsigned __int64 | 157 | # define uint64_t unsigned __int64 |
158 | # define GL_UINT64_T | ||
137 | #elif @HAVE_UNSIGNED_LONG_LONG_INT@ | 159 | #elif @HAVE_UNSIGNED_LONG_LONG_INT@ |
160 | # undef uint64_t | ||
138 | # define uint64_t unsigned long long int | 161 | # define uint64_t unsigned long long int |
162 | # define GL_UINT64_T | ||
139 | #endif | 163 | #endif |
140 | 164 | ||
141 | /* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */ | 165 | /* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */ |
@@ -164,10 +188,10 @@ | |||
164 | #define uint_least16_t uint16_t | 188 | #define uint_least16_t uint16_t |
165 | #define int_least32_t int32_t | 189 | #define int_least32_t int32_t |
166 | #define uint_least32_t uint32_t | 190 | #define uint_least32_t uint32_t |
167 | #ifdef int64_t | 191 | #ifdef GL_INT64_T |
168 | # define int_least64_t int64_t | 192 | # define int_least64_t int64_t |
169 | #endif | 193 | #endif |
170 | #ifdef uint64_t | 194 | #ifdef GL_UINT64_T |
171 | # define uint_least64_t uint64_t | 195 | # define uint_least64_t uint64_t |
172 | #endif | 196 | #endif |
173 | 197 | ||
@@ -195,10 +219,10 @@ | |||
195 | #define uint_fast16_t unsigned int_fast16_t | 219 | #define uint_fast16_t unsigned int_fast16_t |
196 | #define int_fast32_t long int | 220 | #define int_fast32_t long int |
197 | #define uint_fast32_t unsigned int_fast32_t | 221 | #define uint_fast32_t unsigned int_fast32_t |
198 | #ifdef int64_t | 222 | #ifdef GL_INT64_T |
199 | # define int_fast64_t int64_t | 223 | # define int_fast64_t int64_t |
200 | #endif | 224 | #endif |
201 | #ifdef uint64_t | 225 | #ifdef GL_UINT64_T |
202 | # define uint_fast64_t uint64_t | 226 | # define uint_fast64_t uint64_t |
203 | #endif | 227 | #endif |
204 | 228 | ||
@@ -217,7 +241,7 @@ | |||
217 | #undef intmax_t | 241 | #undef intmax_t |
218 | #if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 | 242 | #if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 |
219 | # define intmax_t long long int | 243 | # define intmax_t long long int |
220 | #elif defined int64_t | 244 | #elif defined GL_INT64_T |
221 | # define intmax_t int64_t | 245 | # define intmax_t int64_t |
222 | #else | 246 | #else |
223 | # define intmax_t long int | 247 | # define intmax_t long int |
@@ -226,12 +250,17 @@ | |||
226 | #undef uintmax_t | 250 | #undef uintmax_t |
227 | #if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 | 251 | #if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 |
228 | # define uintmax_t unsigned long long int | 252 | # define uintmax_t unsigned long long int |
229 | #elif defined uint64_t | 253 | #elif defined GL_UINT64_T |
230 | # define uintmax_t uint64_t | 254 | # define uintmax_t uint64_t |
231 | #else | 255 | #else |
232 | # define uintmax_t unsigned long int | 256 | # define uintmax_t unsigned long int |
233 | #endif | 257 | #endif |
234 | 258 | ||
259 | /* Verify that intmax_t and uintmax_t have the same size. Too much code | ||
260 | breaks if this is not the case. If this check fails, the reason is likely | ||
261 | to be found in the autoconf macros. */ | ||
262 | typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1]; | ||
263 | |||
235 | /* 7.18.2. Limits of specified-width integer types */ | 264 | /* 7.18.2. Limits of specified-width integer types */ |
236 | 265 | ||
237 | #if ! defined __cplusplus || defined __STDC_LIMIT_MACROS | 266 | #if ! defined __cplusplus || defined __STDC_LIMIT_MACROS |
@@ -264,13 +293,15 @@ | |||
264 | 293 | ||
265 | #undef INT64_MIN | 294 | #undef INT64_MIN |
266 | #undef INT64_MAX | 295 | #undef INT64_MAX |
267 | #ifdef int64_t | 296 | #ifdef GL_INT64_T |
268 | # define INT64_MIN (~ INT64_MAX) | 297 | /* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 |
298 | evaluates the latter incorrectly in preprocessor expressions. */ | ||
299 | # define INT64_MIN (- INTMAX_C (1) << 63) | ||
269 | # define INT64_MAX INTMAX_C (9223372036854775807) | 300 | # define INT64_MAX INTMAX_C (9223372036854775807) |
270 | #endif | 301 | #endif |
271 | 302 | ||
272 | #undef UINT64_MAX | 303 | #undef UINT64_MAX |
273 | #ifdef uint64_t | 304 | #ifdef GL_UINT64_T |
274 | # define UINT64_MAX UINTMAX_C (18446744073709551615) | 305 | # define UINT64_MAX UINTMAX_C (18446744073709551615) |
275 | #endif | 306 | #endif |
276 | 307 | ||
@@ -303,13 +334,13 @@ | |||
303 | 334 | ||
304 | #undef INT_LEAST64_MIN | 335 | #undef INT_LEAST64_MIN |
305 | #undef INT_LEAST64_MAX | 336 | #undef INT_LEAST64_MAX |
306 | #ifdef int64_t | 337 | #ifdef GL_INT64_T |
307 | # define INT_LEAST64_MIN INT64_MIN | 338 | # define INT_LEAST64_MIN INT64_MIN |
308 | # define INT_LEAST64_MAX INT64_MAX | 339 | # define INT_LEAST64_MAX INT64_MAX |
309 | #endif | 340 | #endif |
310 | 341 | ||
311 | #undef UINT_LEAST64_MAX | 342 | #undef UINT_LEAST64_MAX |
312 | #ifdef uint64_t | 343 | #ifdef GL_UINT64_T |
313 | # define UINT_LEAST64_MAX UINT64_MAX | 344 | # define UINT_LEAST64_MAX UINT64_MAX |
314 | #endif | 345 | #endif |
315 | 346 | ||
@@ -342,13 +373,13 @@ | |||
342 | 373 | ||
343 | #undef INT_FAST64_MIN | 374 | #undef INT_FAST64_MIN |
344 | #undef INT_FAST64_MAX | 375 | #undef INT_FAST64_MAX |
345 | #ifdef int64_t | 376 | #ifdef GL_INT64_T |
346 | # define INT_FAST64_MIN INT64_MIN | 377 | # define INT_FAST64_MIN INT64_MIN |
347 | # define INT_FAST64_MAX INT64_MAX | 378 | # define INT_FAST64_MAX INT64_MAX |
348 | #endif | 379 | #endif |
349 | 380 | ||
350 | #undef UINT_FAST64_MAX | 381 | #undef UINT_FAST64_MAX |
351 | #ifdef uint64_t | 382 | #ifdef GL_UINT64_T |
352 | # define UINT_FAST64_MAX UINT64_MAX | 383 | # define UINT_FAST64_MAX UINT64_MAX |
353 | #endif | 384 | #endif |
354 | 385 | ||
@@ -365,10 +396,11 @@ | |||
365 | 396 | ||
366 | #undef INTMAX_MIN | 397 | #undef INTMAX_MIN |
367 | #undef INTMAX_MAX | 398 | #undef INTMAX_MAX |
368 | #define INTMAX_MIN (~ INTMAX_MAX) | ||
369 | #ifdef INT64_MAX | 399 | #ifdef INT64_MAX |
400 | # define INTMAX_MIN INT64_MIN | ||
370 | # define INTMAX_MAX INT64_MAX | 401 | # define INTMAX_MAX INT64_MAX |
371 | #else | 402 | #else |
403 | # define INTMAX_MIN INT32_MIN | ||
372 | # define INTMAX_MAX INT32_MAX | 404 | # define INTMAX_MAX INT32_MAX |
373 | #endif | 405 | #endif |
374 | 406 | ||
@@ -469,7 +501,7 @@ | |||
469 | #undef INTMAX_C | 501 | #undef INTMAX_C |
470 | #if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 | 502 | #if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 |
471 | # define INTMAX_C(x) x##LL | 503 | # define INTMAX_C(x) x##LL |
472 | #elif defined int64_t | 504 | #elif defined GL_INT64_T |
473 | # define INTMAX_C(x) INT64_C(x) | 505 | # define INTMAX_C(x) INT64_C(x) |
474 | #else | 506 | #else |
475 | # define INTMAX_C(x) x##L | 507 | # define INTMAX_C(x) x##L |
@@ -478,7 +510,7 @@ | |||
478 | #undef UINTMAX_C | 510 | #undef UINTMAX_C |
479 | #if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 | 511 | #if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 |
480 | # define UINTMAX_C(x) x##ULL | 512 | # define UINTMAX_C(x) x##ULL |
481 | #elif defined uint64_t | 513 | #elif defined GL_UINT64_T |
482 | # define UINTMAX_C(x) UINT64_C(x) | 514 | # define UINTMAX_C(x) UINT64_C(x) |
483 | #else | 515 | #else |
484 | # define UINTMAX_C(x) x##UL | 516 | # define UINTMAX_C(x) x##UL |
@@ -487,3 +519,4 @@ | |||
487 | #endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */ | 519 | #endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */ |
488 | 520 | ||
489 | #endif /* _GL_STDINT_H */ | 521 | #endif /* _GL_STDINT_H */ |
522 | #endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ | ||
diff --git a/gl/stdio.in.h b/gl/stdio.in.h new file mode 100644 index 00000000..434fa8e7 --- /dev/null +++ b/gl/stdio.in.h | |||
@@ -0,0 +1,382 @@ | |||
1 | /* A GNU-like <stdio.h>. | ||
2 | |||
3 | Copyright (C) 2004, 2007-2008 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 3, 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 | #if defined __need_FILE || defined __need___FILE | ||
20 | /* Special invocation convention inside glibc header files. */ | ||
21 | |||
22 | #@INCLUDE_NEXT@ @NEXT_STDIO_H@ | ||
23 | |||
24 | #else | ||
25 | /* Normal invocation convention. */ | ||
26 | |||
27 | #ifndef _GL_STDIO_H | ||
28 | |||
29 | /* The include_next requires a split double-inclusion guard. */ | ||
30 | #@INCLUDE_NEXT@ @NEXT_STDIO_H@ | ||
31 | |||
32 | #ifndef _GL_STDIO_H | ||
33 | #define _GL_STDIO_H | ||
34 | |||
35 | #include <stdarg.h> | ||
36 | #include <stddef.h> | ||
37 | |||
38 | #if (@GNULIB_FSEEKO@ && @REPLACE_FSEEKO@) \ | ||
39 | || (@GNULIB_FTELLO@ && @REPLACE_FTELLO@) \ | ||
40 | || (@GNULIB_GETDELIM@ && !@HAVE_DECL_GETDELIM@) \ | ||
41 | || (@GNULIB_GETLINE@ && (!@HAVE_DECL_GETLINE@ || @REPLACE_GETLINE@)) | ||
42 | /* Get off_t and ssize_t. */ | ||
43 | # include <sys/types.h> | ||
44 | #endif | ||
45 | |||
46 | #ifndef __attribute__ | ||
47 | /* This feature is available in gcc versions 2.5 and later. */ | ||
48 | # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) | ||
49 | # define __attribute__(Spec) /* empty */ | ||
50 | # endif | ||
51 | /* The __-protected variants of `format' and `printf' attributes | ||
52 | are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ | ||
53 | # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) | ||
54 | # define __format__ format | ||
55 | # define __printf__ printf | ||
56 | # endif | ||
57 | #endif | ||
58 | |||
59 | |||
60 | /* The definition of GL_LINK_WARNING is copied here. */ | ||
61 | |||
62 | |||
63 | #ifdef __cplusplus | ||
64 | extern "C" { | ||
65 | #endif | ||
66 | |||
67 | |||
68 | #if @GNULIB_FPRINTF_POSIX@ | ||
69 | # if @REPLACE_FPRINTF@ | ||
70 | # define fprintf rpl_fprintf | ||
71 | extern int fprintf (FILE *fp, const char *format, ...) | ||
72 | __attribute__ ((__format__ (__printf__, 2, 3))); | ||
73 | # endif | ||
74 | #elif defined GNULIB_POSIXCHECK | ||
75 | # undef fprintf | ||
76 | # define fprintf \ | ||
77 | (GL_LINK_WARNING ("fprintf is not always POSIX compliant - " \ | ||
78 | "use gnulib module fprintf-posix for portable " \ | ||
79 | "POSIX compliance"), \ | ||
80 | fprintf) | ||
81 | #endif | ||
82 | |||
83 | #if @GNULIB_VFPRINTF_POSIX@ | ||
84 | # if @REPLACE_VFPRINTF@ | ||
85 | # define vfprintf rpl_vfprintf | ||
86 | extern int vfprintf (FILE *fp, const char *format, va_list args) | ||
87 | __attribute__ ((__format__ (__printf__, 2, 0))); | ||
88 | # endif | ||
89 | #elif defined GNULIB_POSIXCHECK | ||
90 | # undef vfprintf | ||
91 | # define vfprintf(s,f,a) \ | ||
92 | (GL_LINK_WARNING ("vfprintf is not always POSIX compliant - " \ | ||
93 | "use gnulib module vfprintf-posix for portable " \ | ||
94 | "POSIX compliance"), \ | ||
95 | vfprintf (s, f, a)) | ||
96 | #endif | ||
97 | |||
98 | #if @GNULIB_PRINTF_POSIX@ | ||
99 | # if @REPLACE_PRINTF@ | ||
100 | /* Don't break __attribute__((format(printf,M,N))). */ | ||
101 | # define printf __printf__ | ||
102 | extern int printf (const char *format, ...) | ||
103 | __attribute__ ((__format__ (__printf__, 1, 2))); | ||
104 | # endif | ||
105 | #elif defined GNULIB_POSIXCHECK | ||
106 | # undef printf | ||
107 | # define printf \ | ||
108 | (GL_LINK_WARNING ("printf is not always POSIX compliant - " \ | ||
109 | "use gnulib module printf-posix for portable " \ | ||
110 | "POSIX compliance"), \ | ||
111 | printf) | ||
112 | /* Don't break __attribute__((format(printf,M,N))). */ | ||
113 | # define format(kind,m,n) format (__##kind##__, m, n) | ||
114 | # define __format__(kind,m,n) __format__ (__##kind##__, m, n) | ||
115 | # define ____printf____ __printf__ | ||
116 | # define ____scanf____ __scanf__ | ||
117 | # define ____strftime____ __strftime__ | ||
118 | # define ____strfmon____ __strfmon__ | ||
119 | #endif | ||
120 | |||
121 | #if @GNULIB_VPRINTF_POSIX@ | ||
122 | # if @REPLACE_VPRINTF@ | ||
123 | # define vprintf rpl_vprintf | ||
124 | extern int vprintf (const char *format, va_list args) | ||
125 | __attribute__ ((__format__ (__printf__, 1, 0))); | ||
126 | # endif | ||
127 | #elif defined GNULIB_POSIXCHECK | ||
128 | # undef vprintf | ||
129 | # define vprintf(f,a) \ | ||
130 | (GL_LINK_WARNING ("vprintf is not always POSIX compliant - " \ | ||
131 | "use gnulib module vprintf-posix for portable " \ | ||
132 | "POSIX compliance"), \ | ||
133 | vprintf (f, a)) | ||
134 | #endif | ||
135 | |||
136 | #if @GNULIB_SNPRINTF@ | ||
137 | # if @REPLACE_SNPRINTF@ | ||
138 | # define snprintf rpl_snprintf | ||
139 | # endif | ||
140 | # if @REPLACE_SNPRINTF@ || !@HAVE_DECL_SNPRINTF@ | ||
141 | extern int snprintf (char *str, size_t size, const char *format, ...) | ||
142 | __attribute__ ((__format__ (__printf__, 3, 4))); | ||
143 | # endif | ||
144 | #elif defined GNULIB_POSIXCHECK | ||
145 | # undef snprintf | ||
146 | # define snprintf \ | ||
147 | (GL_LINK_WARNING ("snprintf is unportable - " \ | ||
148 | "use gnulib module snprintf for portability"), \ | ||
149 | snprintf) | ||
150 | #endif | ||
151 | |||
152 | #if @GNULIB_VSNPRINTF@ | ||
153 | # if @REPLACE_VSNPRINTF@ | ||
154 | # define vsnprintf rpl_vsnprintf | ||
155 | # endif | ||
156 | # if @REPLACE_VSNPRINTF@ || !@HAVE_DECL_VSNPRINTF@ | ||
157 | extern int vsnprintf (char *str, size_t size, const char *format, va_list args) | ||
158 | __attribute__ ((__format__ (__printf__, 3, 0))); | ||
159 | # endif | ||
160 | #elif defined GNULIB_POSIXCHECK | ||
161 | # undef vsnprintf | ||
162 | # define vsnprintf(b,s,f,a) \ | ||
163 | (GL_LINK_WARNING ("vsnprintf is unportable - " \ | ||
164 | "use gnulib module vsnprintf for portability"), \ | ||
165 | vsnprintf (b, s, f, a)) | ||
166 | #endif | ||
167 | |||
168 | #if @GNULIB_SPRINTF_POSIX@ | ||
169 | # if @REPLACE_SPRINTF@ | ||
170 | # define sprintf rpl_sprintf | ||
171 | extern int sprintf (char *str, const char *format, ...) | ||
172 | __attribute__ ((__format__ (__printf__, 2, 3))); | ||
173 | # endif | ||
174 | #elif defined GNULIB_POSIXCHECK | ||
175 | # undef sprintf | ||
176 | # define sprintf \ | ||
177 | (GL_LINK_WARNING ("sprintf is not always POSIX compliant - " \ | ||
178 | "use gnulib module sprintf-posix for portable " \ | ||
179 | "POSIX compliance"), \ | ||
180 | sprintf) | ||
181 | #endif | ||
182 | |||
183 | #if @GNULIB_VSPRINTF_POSIX@ | ||
184 | # if @REPLACE_VSPRINTF@ | ||
185 | # define vsprintf rpl_vsprintf | ||
186 | extern int vsprintf (char *str, const char *format, va_list args) | ||
187 | __attribute__ ((__format__ (__printf__, 2, 0))); | ||
188 | # endif | ||
189 | #elif defined GNULIB_POSIXCHECK | ||
190 | # undef vsprintf | ||
191 | # define vsprintf(b,f,a) \ | ||
192 | (GL_LINK_WARNING ("vsprintf is not always POSIX compliant - " \ | ||
193 | "use gnulib module vsprintf-posix for portable " \ | ||
194 | "POSIX compliance"), \ | ||
195 | vsprintf (b, f, a)) | ||
196 | #endif | ||
197 | |||
198 | #if @GNULIB_VASPRINTF@ | ||
199 | # if @REPLACE_VASPRINTF@ | ||
200 | # define asprintf rpl_asprintf | ||
201 | # define vasprintf rpl_vasprintf | ||
202 | # endif | ||
203 | # if @REPLACE_VASPRINTF@ || !@HAVE_VASPRINTF@ | ||
204 | /* Write formatted output to a string dynamically allocated with malloc(). | ||
205 | If the memory allocation succeeds, store the address of the string in | ||
206 | *RESULT and return the number of resulting bytes, excluding the trailing | ||
207 | NUL. Upon memory allocation error, or some other error, return -1. */ | ||
208 | extern int asprintf (char **result, const char *format, ...) | ||
209 | __attribute__ ((__format__ (__printf__, 2, 3))); | ||
210 | extern int vasprintf (char **result, const char *format, va_list args) | ||
211 | __attribute__ ((__format__ (__printf__, 2, 0))); | ||
212 | # endif | ||
213 | #endif | ||
214 | |||
215 | #if @GNULIB_FOPEN@ | ||
216 | # if @REPLACE_FOPEN@ | ||
217 | # define fopen rpl_fopen | ||
218 | extern FILE * fopen (const char *filename, const char *mode); | ||
219 | # endif | ||
220 | #elif defined GNULIB_POSIXCHECK | ||
221 | # undef fopen | ||
222 | # define fopen(f,m) \ | ||
223 | (GL_LINK_WARNING ("fopen on Win32 platforms is not POSIX compatible - " \ | ||
224 | "use gnulib module fopen for portability"), \ | ||
225 | fopen (f, m)) | ||
226 | #endif | ||
227 | |||
228 | #if @GNULIB_FREOPEN@ | ||
229 | # if @REPLACE_FREOPEN@ | ||
230 | # define freopen rpl_freopen | ||
231 | extern FILE * freopen (const char *filename, const char *mode, FILE *stream); | ||
232 | # endif | ||
233 | #elif defined GNULIB_POSIXCHECK | ||
234 | # undef freopen | ||
235 | # define freopen(f,m,s) \ | ||
236 | (GL_LINK_WARNING ("freopen on Win32 platforms is not POSIX compatible - " \ | ||
237 | "use gnulib module freopen for portability"), \ | ||
238 | freopen (f, m, s)) | ||
239 | #endif | ||
240 | |||
241 | #if @GNULIB_FSEEKO@ | ||
242 | # if @REPLACE_FSEEKO@ | ||
243 | /* Provide fseek, fseeko functions that are aware of a preceding | ||
244 | fflush(), and which detect pipes. */ | ||
245 | # define fseeko rpl_fseeko | ||
246 | extern int fseeko (FILE *fp, off_t offset, int whence); | ||
247 | # define fseek(fp, offset, whence) fseeko (fp, (off_t)(offset), whence) | ||
248 | # endif | ||
249 | #elif defined GNULIB_POSIXCHECK | ||
250 | # undef fseeko | ||
251 | # define fseeko(f,o,w) \ | ||
252 | (GL_LINK_WARNING ("fseeko is unportable - " \ | ||
253 | "use gnulib module fseeko for portability"), \ | ||
254 | fseeko (f, o, w)) | ||
255 | #endif | ||
256 | |||
257 | #if @GNULIB_FSEEK@ && @REPLACE_FSEEK@ | ||
258 | extern int rpl_fseek (FILE *fp, long offset, int whence); | ||
259 | # undef fseek | ||
260 | # if defined GNULIB_POSIXCHECK | ||
261 | # define fseek(f,o,w) \ | ||
262 | (GL_LINK_WARNING ("fseek cannot handle files larger than 4 GB " \ | ||
263 | "on 32-bit platforms - " \ | ||
264 | "use fseeko function for handling of large files"), \ | ||
265 | rpl_fseek (f, o, w)) | ||
266 | # else | ||
267 | # define fseek rpl_fseek | ||
268 | # endif | ||
269 | #elif defined GNULIB_POSIXCHECK | ||
270 | # ifndef fseek | ||
271 | # define fseek(f,o,w) \ | ||
272 | (GL_LINK_WARNING ("fseek cannot handle files larger than 4 GB " \ | ||
273 | "on 32-bit platforms - " \ | ||
274 | "use fseeko function for handling of large files"), \ | ||
275 | fseek (f, o, w)) | ||
276 | # endif | ||
277 | #endif | ||
278 | |||
279 | #if @GNULIB_FTELLO@ | ||
280 | # if @REPLACE_FTELLO@ | ||
281 | # define ftello rpl_ftello | ||
282 | extern off_t ftello (FILE *fp); | ||
283 | # define ftell(fp) ftello (fp) | ||
284 | # endif | ||
285 | #elif defined GNULIB_POSIXCHECK | ||
286 | # undef ftello | ||
287 | # define ftello(f) \ | ||
288 | (GL_LINK_WARNING ("ftello is unportable - " \ | ||
289 | "use gnulib module ftello for portability"), \ | ||
290 | ftello (f)) | ||
291 | #endif | ||
292 | |||
293 | #if @GNULIB_FTELL@ && @REPLACE_FTELL@ | ||
294 | extern long rpl_ftell (FILE *fp); | ||
295 | # undef ftell | ||
296 | # if GNULIB_POSIXCHECK | ||
297 | # define ftell(f) \ | ||
298 | (GL_LINK_WARNING ("ftell cannot handle files larger than 4 GB " \ | ||
299 | "on 32-bit platforms - " \ | ||
300 | "use ftello function for handling of large files"), \ | ||
301 | rpl_ftell (f)) | ||
302 | # else | ||
303 | # define ftell rpl_ftell | ||
304 | # endif | ||
305 | #elif defined GNULIB_POSIXCHECK | ||
306 | # ifndef ftell | ||
307 | # define ftell(f) \ | ||
308 | (GL_LINK_WARNING ("ftell cannot handle files larger than 4 GB " \ | ||
309 | "on 32-bit platforms - " \ | ||
310 | "use ftello function for handling of large files"), \ | ||
311 | ftell (f)) | ||
312 | # endif | ||
313 | #endif | ||
314 | |||
315 | #if @GNULIB_FFLUSH@ | ||
316 | # if @REPLACE_FFLUSH@ | ||
317 | # define fflush rpl_fflush | ||
318 | /* Flush all pending data on STREAM according to POSIX rules. Both | ||
319 | output and seekable input streams are supported. | ||
320 | Note! LOSS OF DATA can occur if fflush is applied on an input stream | ||
321 | that is _not_seekable_ or on an update stream that is _not_seekable_ | ||
322 | and in which the most recent operation was input. Seekability can | ||
323 | be tested with lseek(fileno(fp),0,SEEK_CUR). */ | ||
324 | extern int fflush (FILE *gl_stream); | ||
325 | # endif | ||
326 | #elif defined GNULIB_POSIXCHECK | ||
327 | # undef fflush | ||
328 | # define fflush(f) \ | ||
329 | (GL_LINK_WARNING ("fflush is not always POSIX compliant - " \ | ||
330 | "use gnulib module fflush for portable " \ | ||
331 | "POSIX compliance"), \ | ||
332 | fflush (f)) | ||
333 | #endif | ||
334 | |||
335 | #if @GNULIB_GETDELIM@ | ||
336 | # if !@HAVE_DECL_GETDELIM@ | ||
337 | /* Read input, up to (and including) the next occurrence of DELIMITER, from | ||
338 | STREAM, store it in *LINEPTR (and NUL-terminate it). | ||
339 | *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE | ||
340 | bytes of space. It is realloc'd as necessary. | ||
341 | Return the number of bytes read and stored at *LINEPTR (not including the | ||
342 | NUL terminator), or -1 on error or EOF. */ | ||
343 | extern ssize_t getdelim (char **lineptr, size_t *linesize, int delimiter, | ||
344 | FILE *stream); | ||
345 | # endif | ||
346 | #elif defined GNULIB_POSIXCHECK | ||
347 | # undef getdelim | ||
348 | # define getdelim(l, s, d, f) \ | ||
349 | (GL_LINK_WARNING ("getdelim is unportable - " \ | ||
350 | "use gnulib module getdelim for portability"), \ | ||
351 | getdelim (l, s, d, f)) | ||
352 | #endif | ||
353 | |||
354 | #if @GNULIB_GETLINE@ | ||
355 | # if @REPLACE_GETLINE@ | ||
356 | # undef getline | ||
357 | # define getline rpl_getline | ||
358 | # endif | ||
359 | # if !@HAVE_DECL_GETLINE@ || @REPLACE_GETLINE@ | ||
360 | /* Read a line, up to (and including) the next newline, from STREAM, store it | ||
361 | in *LINEPTR (and NUL-terminate it). | ||
362 | *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE | ||
363 | bytes of space. It is realloc'd as necessary. | ||
364 | Return the number of bytes read and stored at *LINEPTR (not including the | ||
365 | NUL terminator), or -1 on error or EOF. */ | ||
366 | extern ssize_t getline (char **lineptr, size_t *linesize, FILE *stream); | ||
367 | # endif | ||
368 | #elif defined GNULIB_POSIXCHECK | ||
369 | # undef getline | ||
370 | # define getline(l, s, f) \ | ||
371 | (GL_LINK_WARNING ("getline is unportable - " \ | ||
372 | "use gnulib module getline for portability"), \ | ||
373 | getline (l, s, f)) | ||
374 | #endif | ||
375 | |||
376 | #ifdef __cplusplus | ||
377 | } | ||
378 | #endif | ||
379 | |||
380 | #endif /* _GL_STDIO_H */ | ||
381 | #endif /* _GL_STDIO_H */ | ||
382 | #endif | ||
diff --git a/gl/stdlib.in.h b/gl/stdlib.in.h new file mode 100644 index 00000000..100ff526 --- /dev/null +++ b/gl/stdlib.in.h | |||
@@ -0,0 +1,208 @@ | |||
1 | /* A GNU-like <stdlib.h>. | ||
2 | |||
3 | Copyright (C) 1995, 2001-2004, 2006-2007 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 3 of the License, or | ||
8 | (at your option) 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, see <http://www.gnu.org/licenses/>. */ | ||
17 | |||
18 | #if defined __need_malloc_and_calloc | ||
19 | /* Special invocation convention inside glibc header files. */ | ||
20 | |||
21 | #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ | ||
22 | |||
23 | #else | ||
24 | /* Normal invocation convention. */ | ||
25 | |||
26 | #ifndef _GL_STDLIB_H | ||
27 | |||
28 | /* The include_next requires a split double-inclusion guard. */ | ||
29 | #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ | ||
30 | |||
31 | #ifndef _GL_STDLIB_H | ||
32 | #define _GL_STDLIB_H | ||
33 | |||
34 | |||
35 | /* The definition of GL_LINK_WARNING is copied here. */ | ||
36 | |||
37 | |||
38 | /* Some systems do not define EXIT_*, despite otherwise supporting C89. */ | ||
39 | #ifndef EXIT_SUCCESS | ||
40 | # define EXIT_SUCCESS 0 | ||
41 | #endif | ||
42 | /* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere | ||
43 | with proper operation of xargs. */ | ||
44 | #ifndef EXIT_FAILURE | ||
45 | # define EXIT_FAILURE 1 | ||
46 | #elif EXIT_FAILURE != 1 | ||
47 | # undef EXIT_FAILURE | ||
48 | # define EXIT_FAILURE 1 | ||
49 | #endif | ||
50 | |||
51 | |||
52 | #ifdef __cplusplus | ||
53 | extern "C" { | ||
54 | #endif | ||
55 | |||
56 | |||
57 | #if @GNULIB_MALLOC_POSIX@ | ||
58 | # if !@HAVE_MALLOC_POSIX@ | ||
59 | # undef malloc | ||
60 | # define malloc rpl_malloc | ||
61 | extern void * malloc (size_t size); | ||
62 | # endif | ||
63 | #elif defined GNULIB_POSIXCHECK | ||
64 | # undef malloc | ||
65 | # define malloc(s) \ | ||
66 | (GL_LINK_WARNING ("malloc is not POSIX compliant everywhere - " \ | ||
67 | "use gnulib module malloc-posix for portability"), \ | ||
68 | malloc (s)) | ||
69 | #endif | ||
70 | |||
71 | |||
72 | #if @GNULIB_REALLOC_POSIX@ | ||
73 | # if !@HAVE_REALLOC_POSIX@ | ||
74 | # undef realloc | ||
75 | # define realloc rpl_realloc | ||
76 | extern void * realloc (void *ptr, size_t size); | ||
77 | # endif | ||
78 | #elif defined GNULIB_POSIXCHECK | ||
79 | # undef realloc | ||
80 | # define realloc(p,s) \ | ||
81 | (GL_LINK_WARNING ("realloc is not POSIX compliant everywhere - " \ | ||
82 | "use gnulib module realloc-posix for portability"), \ | ||
83 | realloc (p, s)) | ||
84 | #endif | ||
85 | |||
86 | |||
87 | #if @GNULIB_CALLOC_POSIX@ | ||
88 | # if !@HAVE_CALLOC_POSIX@ | ||
89 | # undef calloc | ||
90 | # define calloc rpl_calloc | ||
91 | extern void * calloc (size_t nmemb, size_t size); | ||
92 | # endif | ||
93 | #elif defined GNULIB_POSIXCHECK | ||
94 | # undef calloc | ||
95 | # define calloc(n,s) \ | ||
96 | (GL_LINK_WARNING ("calloc is not POSIX compliant everywhere - " \ | ||
97 | "use gnulib module calloc-posix for portability"), \ | ||
98 | calloc (n, s)) | ||
99 | #endif | ||
100 | |||
101 | |||
102 | #if @GNULIB_GETSUBOPT@ | ||
103 | /* Assuming *OPTIONP is a comma separated list of elements of the form | ||
104 | "token" or "token=value", getsubopt parses the first of these elements. | ||
105 | If the first element refers to a "token" that is member of the given | ||
106 | NULL-terminated array of tokens: | ||
107 | - It replaces the comma with a NUL byte, updates *OPTIONP to point past | ||
108 | the first option and the comma, sets *VALUEP to the value of the | ||
109 | element (or NULL if it doesn't contain an "=" sign), | ||
110 | - It returns the index of the "token" in the given array of tokens. | ||
111 | Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. | ||
112 | For more details see the POSIX:2001 specification. | ||
113 | http://www.opengroup.org/susv3xsh/getsubopt.html */ | ||
114 | # if !@HAVE_GETSUBOPT@ | ||
115 | extern int getsubopt (char **optionp, char *const *tokens, char **valuep); | ||
116 | # endif | ||
117 | #elif defined GNULIB_POSIXCHECK | ||
118 | # undef getsubopt | ||
119 | # define getsubopt(o,t,v) \ | ||
120 | (GL_LINK_WARNING ("getsubopt is unportable - " \ | ||
121 | "use gnulib module getsubopt for portability"), \ | ||
122 | getsubopt (o, t, v)) | ||
123 | #endif | ||
124 | |||
125 | |||
126 | #if @GNULIB_MKDTEMP@ | ||
127 | # if !@HAVE_MKDTEMP@ | ||
128 | /* Create a unique temporary directory from TEMPLATE. | ||
129 | The last six characters of TEMPLATE must be "XXXXXX"; | ||
130 | they are replaced with a string that makes the directory name unique. | ||
131 | Returns TEMPLATE, or a null pointer if it cannot get a unique name. | ||
132 | The directory is created mode 700. */ | ||
133 | extern char * mkdtemp (char * /*template*/); | ||
134 | # endif | ||
135 | #elif defined GNULIB_POSIXCHECK | ||
136 | # undef mkdtemp | ||
137 | # define mkdtemp(t) \ | ||
138 | (GL_LINK_WARNING ("mkdtemp is unportable - " \ | ||
139 | "use gnulib module mkdtemp for portability"), \ | ||
140 | mkdtemp (t)) | ||
141 | #endif | ||
142 | |||
143 | |||
144 | #if @GNULIB_MKSTEMP@ | ||
145 | # if @REPLACE_MKSTEMP@ | ||
146 | /* Create a unique temporary file from TEMPLATE. | ||
147 | The last six characters of TEMPLATE must be "XXXXXX"; | ||
148 | they are replaced with a string that makes the file name unique. | ||
149 | The file is then created, ensuring it didn't exist before. | ||
150 | The file is created read-write (mask at least 0600 & ~umask), but it may be | ||
151 | world-readable and world-writable (mask 0666 & ~umask), depending on the | ||
152 | implementation. | ||
153 | Returns the open file descriptor if successful, otherwise -1 and errno | ||
154 | set. */ | ||
155 | # define mkstemp rpl_mkstemp | ||
156 | extern int mkstemp (char * /*template*/); | ||
157 | # else | ||
158 | /* On MacOS X 10.3, only <unistd.h> declares mkstemp. */ | ||
159 | # include <unistd.h> | ||
160 | # endif | ||
161 | #elif defined GNULIB_POSIXCHECK | ||
162 | # undef mkstemp | ||
163 | # define mkstemp(t) \ | ||
164 | (GL_LINK_WARNING ("mkstemp is unportable - " \ | ||
165 | "use gnulib module mkstemp for portability"), \ | ||
166 | mkstemp (t)) | ||
167 | #endif | ||
168 | |||
169 | |||
170 | #if @GNULIB_PUTENV@ | ||
171 | # if @REPLACE_PUTENV@ | ||
172 | # undef putenv | ||
173 | # define putenv rpl_putenv | ||
174 | extern int putenv (char *string); | ||
175 | # endif | ||
176 | #endif | ||
177 | |||
178 | |||
179 | #if @GNULIB_SETENV@ | ||
180 | # if !@HAVE_SETENV@ | ||
181 | /* Set NAME to VALUE in the environment. | ||
182 | If REPLACE is nonzero, overwrite an existing value. */ | ||
183 | extern int setenv (const char *name, const char *value, int replace); | ||
184 | # endif | ||
185 | #endif | ||
186 | |||
187 | |||
188 | #if @GNULIB_UNSETENV@ | ||
189 | # if @HAVE_UNSETENV@ | ||
190 | # if @VOID_UNSETENV@ | ||
191 | /* On some systems, unsetenv() returns void. | ||
192 | This is the case for MacOS X 10.3, FreeBSD 4.8, NetBSD 1.6, OpenBSD 3.4. */ | ||
193 | # define unsetenv(name) ((unsetenv)(name), 0) | ||
194 | # endif | ||
195 | # else | ||
196 | /* Remove the variable NAME from the environment. */ | ||
197 | extern int unsetenv (const char *name); | ||
198 | # endif | ||
199 | #endif | ||
200 | |||
201 | |||
202 | #ifdef __cplusplus | ||
203 | } | ||
204 | #endif | ||
205 | |||
206 | #endif /* _GL_STDLIB_H */ | ||
207 | #endif /* _GL_STDLIB_H */ | ||
208 | #endif | ||
diff --git a/gl/strcase.h b/gl/strcase.h deleted file mode 100644 index 07d4c9a4..00000000 --- a/gl/strcase.h +++ /dev/null | |||
@@ -1,56 +0,0 @@ | |||
1 | /* Case-insensitive string comparison functions. | ||
2 | Copyright (C) 1995-1996, 2001, 2003, 2005-2006 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program 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 | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | |||
18 | #ifndef _STRCASE_H | ||
19 | #define _STRCASE_H | ||
20 | |||
21 | #include <stddef.h> | ||
22 | /* Include header files with a possibly conflicting declarations of strcasecmp | ||
23 | before we define it as a macro, so that they will be no-ops if included | ||
24 | after strcasecmp is defined as a macro. */ | ||
25 | #include <string.h> | ||
26 | |||
27 | #ifdef __cplusplus | ||
28 | extern "C" { | ||
29 | #endif | ||
30 | |||
31 | |||
32 | /* No known system has a strcasecmp() function that works correctly in | ||
33 | multibyte locales. Therefore we use our version always. */ | ||
34 | #define strcasecmp rpl_strcasecmp | ||
35 | /* Compare strings S1 and S2, ignoring case, returning less than, equal to or | ||
36 | greater than zero if S1 is lexicographically less than, equal to or greater | ||
37 | than S2. | ||
38 | Note: This function may, in multibyte locales, return 0 for strings of | ||
39 | different lengths! */ | ||
40 | extern int strcasecmp (const char *s1, const char *s2); | ||
41 | |||
42 | /* Compare no more than N characters of strings S1 and S2, ignoring case, | ||
43 | returning less than, equal to or greater than zero if S1 is | ||
44 | lexicographically less than, equal to or greater than S2. | ||
45 | Note: This function can not work correctly in multibyte locales. */ | ||
46 | #if ! HAVE_DECL_STRNCASECMP | ||
47 | extern int strncasecmp (const char *s1, const char *s2, size_t n); | ||
48 | #endif | ||
49 | |||
50 | |||
51 | #ifdef __cplusplus | ||
52 | } | ||
53 | #endif | ||
54 | |||
55 | |||
56 | #endif /* _STRCASE_H */ | ||
diff --git a/gl/strcasecmp.c b/gl/strcasecmp.c deleted file mode 100644 index 99d5dd22..00000000 --- a/gl/strcasecmp.c +++ /dev/null | |||
@@ -1,103 +0,0 @@ | |||
1 | /* Case-insensitive string comparison function. | ||
2 | Copyright (C) 1998-1999, 2005-2006 Free Software Foundation, Inc. | ||
3 | Written by Bruno Haible <bruno@clisp.org>, 2005, | ||
4 | based on earlier glibc code. | ||
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 | #include <config.h> | ||
21 | |||
22 | /* Specification. */ | ||
23 | #include "strcase.h" | ||
24 | |||
25 | #include <ctype.h> | ||
26 | #include <limits.h> | ||
27 | |||
28 | #if HAVE_MBRTOWC | ||
29 | # include "mbuiter.h" | ||
30 | #endif | ||
31 | |||
32 | #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) | ||
33 | |||
34 | /* Compare strings S1 and S2, ignoring case, returning less than, equal to or | ||
35 | greater than zero if S1 is lexicographically less than, equal to or greater | ||
36 | than S2. | ||
37 | Note: This function may, in multibyte locales, return 0 for strings of | ||
38 | different lengths! */ | ||
39 | int | ||
40 | strcasecmp (const char *s1, const char *s2) | ||
41 | { | ||
42 | if (s1 == s2) | ||
43 | return 0; | ||
44 | |||
45 | /* Be careful not to look at the entire extent of s1 or s2 until needed. | ||
46 | This is useful because when two strings differ, the difference is | ||
47 | most often already in the very few first characters. */ | ||
48 | #if HAVE_MBRTOWC | ||
49 | if (MB_CUR_MAX > 1) | ||
50 | { | ||
51 | mbui_iterator_t iter1; | ||
52 | mbui_iterator_t iter2; | ||
53 | |||
54 | mbui_init (iter1, s1); | ||
55 | mbui_init (iter2, s2); | ||
56 | |||
57 | while (mbui_avail (iter1) && mbui_avail (iter2)) | ||
58 | { | ||
59 | int cmp = mb_casecmp (mbui_cur (iter1), mbui_cur (iter2)); | ||
60 | |||
61 | if (cmp != 0) | ||
62 | return cmp; | ||
63 | |||
64 | mbui_advance (iter1); | ||
65 | mbui_advance (iter2); | ||
66 | } | ||
67 | if (mbui_avail (iter1)) | ||
68 | /* s2 terminated before s1. */ | ||
69 | return 1; | ||
70 | if (mbui_avail (iter2)) | ||
71 | /* s1 terminated before s2. */ | ||
72 | return -1; | ||
73 | return 0; | ||
74 | } | ||
75 | else | ||
76 | #endif | ||
77 | { | ||
78 | const unsigned char *p1 = (const unsigned char *) s1; | ||
79 | const unsigned char *p2 = (const unsigned char *) s2; | ||
80 | unsigned char c1, c2; | ||
81 | |||
82 | do | ||
83 | { | ||
84 | c1 = TOLOWER (*p1); | ||
85 | c2 = TOLOWER (*p2); | ||
86 | |||
87 | if (c1 == '\0') | ||
88 | break; | ||
89 | |||
90 | ++p1; | ||
91 | ++p2; | ||
92 | } | ||
93 | while (c1 == c2); | ||
94 | |||
95 | if (UCHAR_MAX <= INT_MAX) | ||
96 | return c1 - c2; | ||
97 | else | ||
98 | /* On machines where 'char' and 'int' are types of the same size, the | ||
99 | difference of two 'unsigned char' values - including the sign bit - | ||
100 | doesn't fit in an 'int'. */ | ||
101 | return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); | ||
102 | } | ||
103 | } | ||
diff --git a/gl/strdup.c b/gl/strdup.c index 17d40d62..bebe5c8f 100644 --- a/gl/strdup.c +++ b/gl/strdup.c | |||
@@ -1,11 +1,11 @@ | |||
1 | /* Copyright (C) 1991, 1996, 1997, 1998, 2002, 2003, 2004, 2006 Free | 1 | /* Copyright (C) 1991, 1996, 1997, 1998, 2002, 2003, 2004, 2006, 2007 Free |
2 | Software Foundation, Inc. | 2 | Software Foundation, Inc. |
3 | 3 | ||
4 | This file is part of the GNU C Library. | 4 | This file is part of the GNU C Library. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3, or (at your option) |
9 | any later version. | 9 | any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
@@ -19,13 +19,13 @@ | |||
19 | 19 | ||
20 | #ifndef _LIBC | 20 | #ifndef _LIBC |
21 | # include <config.h> | 21 | # include <config.h> |
22 | /* Get specification. */ | ||
23 | # include "strdup.h" | ||
24 | #endif | 22 | #endif |
25 | 23 | ||
26 | #include <stdlib.h> | 24 | /* Get specification. */ |
27 | #include <string.h> | 25 | #include <string.h> |
28 | 26 | ||
27 | #include <stdlib.h> | ||
28 | |||
29 | #undef __strdup | 29 | #undef __strdup |
30 | #ifdef _LIBC | 30 | #ifdef _LIBC |
31 | # undef strdup | 31 | # undef strdup |
diff --git a/gl/strdup.h b/gl/strdup.h deleted file mode 100644 index 73e66e3d..00000000 --- a/gl/strdup.h +++ /dev/null | |||
@@ -1,39 +0,0 @@ | |||
1 | /* strdup.h -- duplicate a string | ||
2 | Copyright (C) 2004, 2006 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program 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 | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | |||
18 | #ifndef STRDUP_H_ | ||
19 | #define STRDUP_H_ | ||
20 | |||
21 | /* Get strdup declaration, if available. */ | ||
22 | #include <string.h> | ||
23 | |||
24 | #ifdef __cplusplus | ||
25 | extern "C" { | ||
26 | #endif | ||
27 | |||
28 | |||
29 | #if defined HAVE_DECL_STRDUP && !HAVE_DECL_STRDUP && !defined strdup | ||
30 | /* Duplicate S, returning an identical malloc'd string. */ | ||
31 | extern char *strdup (const char *s); | ||
32 | #endif | ||
33 | |||
34 | |||
35 | #ifdef __cplusplus | ||
36 | } | ||
37 | #endif | ||
38 | |||
39 | #endif /* STRDUP_H_ */ | ||
diff --git a/gl/strerror.c b/gl/strerror.c new file mode 100644 index 00000000..9fe437db --- /dev/null +++ b/gl/strerror.c | |||
@@ -0,0 +1,49 @@ | |||
1 | /* strerror.c --- POSIX compatible system error routine | ||
2 | |||
3 | Copyright (C) 2007 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 3 of the License, or | ||
8 | (at your option) 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, see <http://www.gnu.org/licenses/>. */ | ||
17 | |||
18 | #include <config.h> | ||
19 | |||
20 | #include <string.h> | ||
21 | |||
22 | #if REPLACE_STRERROR | ||
23 | |||
24 | # include <stdio.h> | ||
25 | |||
26 | # include "intprops.h" | ||
27 | |||
28 | # undef strerror | ||
29 | # if ! HAVE_DECL_STRERROR | ||
30 | # define strerror(n) NULL | ||
31 | # endif | ||
32 | |||
33 | char * | ||
34 | rpl_strerror (int n) | ||
35 | { | ||
36 | char *result = strerror (n); | ||
37 | |||
38 | if (result == NULL || result[0] == '\0') | ||
39 | { | ||
40 | static char const fmt[] = "Unknown error (%d)"; | ||
41 | static char mesg[sizeof fmt + INT_STRLEN_BOUND (n)]; | ||
42 | sprintf (mesg, fmt, n); | ||
43 | return mesg; | ||
44 | } | ||
45 | |||
46 | return result; | ||
47 | } | ||
48 | |||
49 | #endif | ||
diff --git a/gl/string.in.h b/gl/string.in.h new file mode 100644 index 00000000..5c7597ce --- /dev/null +++ b/gl/string.in.h | |||
@@ -0,0 +1,569 @@ | |||
1 | /* A GNU-like <string.h>. | ||
2 | |||
3 | Copyright (C) 1995-1996, 2001-2008 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 3, 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 | #ifndef _GL_STRING_H | ||
20 | |||
21 | /* The include_next requires a split double-inclusion guard. */ | ||
22 | #@INCLUDE_NEXT@ @NEXT_STRING_H@ | ||
23 | |||
24 | #ifndef _GL_STRING_H | ||
25 | #define _GL_STRING_H | ||
26 | |||
27 | |||
28 | #ifndef __attribute__ | ||
29 | /* This feature is available in gcc versions 2.5 and later. */ | ||
30 | # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) | ||
31 | # define __attribute__(Spec) /* empty */ | ||
32 | # endif | ||
33 | /* The attribute __pure__ was added in gcc 2.96. */ | ||
34 | # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) | ||
35 | # define __pure__ /* empty */ | ||
36 | # endif | ||
37 | #endif | ||
38 | |||
39 | |||
40 | /* The definition of GL_LINK_WARNING is copied here. */ | ||
41 | |||
42 | |||
43 | #ifdef __cplusplus | ||
44 | extern "C" { | ||
45 | #endif | ||
46 | |||
47 | |||
48 | /* Return the first occurrence of NEEDLE in HAYSTACK. */ | ||
49 | #if @GNULIB_MEMMEM@ | ||
50 | # if @REPLACE_MEMMEM@ | ||
51 | # define memmem rpl_memmem | ||
52 | # endif | ||
53 | # if ! @HAVE_DECL_MEMMEM@ || @REPLACE_MEMMEM@ | ||
54 | extern void *memmem (void const *__haystack, size_t __haystack_len, | ||
55 | void const *__needle, size_t __needle_len) | ||
56 | __attribute__ ((__pure__)); | ||
57 | # endif | ||
58 | #elif defined GNULIB_POSIXCHECK | ||
59 | # undef memmem | ||
60 | # define memmem(a,al,b,bl) \ | ||
61 | (GL_LINK_WARNING ("memmem is unportable and often quadratic - " \ | ||
62 | "use gnulib module memmem-simple for portability, " \ | ||
63 | "and module memmem for speed" ), \ | ||
64 | memmem (a, al, b, bl)) | ||
65 | #endif | ||
66 | |||
67 | /* Copy N bytes of SRC to DEST, return pointer to bytes after the | ||
68 | last written byte. */ | ||
69 | #if @GNULIB_MEMPCPY@ | ||
70 | # if ! @HAVE_MEMPCPY@ | ||
71 | extern void *mempcpy (void *restrict __dest, void const *restrict __src, | ||
72 | size_t __n); | ||
73 | # endif | ||
74 | #elif defined GNULIB_POSIXCHECK | ||
75 | # undef mempcpy | ||
76 | # define mempcpy(a,b,n) \ | ||
77 | (GL_LINK_WARNING ("mempcpy is unportable - " \ | ||
78 | "use gnulib module mempcpy for portability"), \ | ||
79 | mempcpy (a, b, n)) | ||
80 | #endif | ||
81 | |||
82 | /* Search backwards through a block for a byte (specified as an int). */ | ||
83 | #if @GNULIB_MEMRCHR@ | ||
84 | # if ! @HAVE_DECL_MEMRCHR@ | ||
85 | extern void *memrchr (void const *, int, size_t) | ||
86 | __attribute__ ((__pure__)); | ||
87 | # endif | ||
88 | #elif defined GNULIB_POSIXCHECK | ||
89 | # undef memrchr | ||
90 | # define memrchr(a,b,c) \ | ||
91 | (GL_LINK_WARNING ("memrchr is unportable - " \ | ||
92 | "use gnulib module memrchr for portability"), \ | ||
93 | memrchr (a, b, c)) | ||
94 | #endif | ||
95 | |||
96 | /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ | ||
97 | #if @GNULIB_STPCPY@ | ||
98 | # if ! @HAVE_STPCPY@ | ||
99 | extern char *stpcpy (char *restrict __dst, char const *restrict __src); | ||
100 | # endif | ||
101 | #elif defined GNULIB_POSIXCHECK | ||
102 | # undef stpcpy | ||
103 | # define stpcpy(a,b) \ | ||
104 | (GL_LINK_WARNING ("stpcpy is unportable - " \ | ||
105 | "use gnulib module stpcpy for portability"), \ | ||
106 | stpcpy (a, b)) | ||
107 | #endif | ||
108 | |||
109 | /* Copy no more than N bytes of SRC to DST, returning a pointer past the | ||
110 | last non-NUL byte written into DST. */ | ||
111 | #if @GNULIB_STPNCPY@ | ||
112 | # if ! @HAVE_STPNCPY@ | ||
113 | # define stpncpy gnu_stpncpy | ||
114 | extern char *stpncpy (char *restrict __dst, char const *restrict __src, | ||
115 | size_t __n); | ||
116 | # endif | ||
117 | #elif defined GNULIB_POSIXCHECK | ||
118 | # undef stpncpy | ||
119 | # define stpncpy(a,b,n) \ | ||
120 | (GL_LINK_WARNING ("stpncpy is unportable - " \ | ||
121 | "use gnulib module stpncpy for portability"), \ | ||
122 | stpncpy (a, b, n)) | ||
123 | #endif | ||
124 | |||
125 | #if defined GNULIB_POSIXCHECK | ||
126 | /* strchr() does not work with multibyte strings if the locale encoding is | ||
127 | GB18030 and the character to be searched is a digit. */ | ||
128 | # undef strchr | ||
129 | # define strchr(s,c) \ | ||
130 | (GL_LINK_WARNING ("strchr cannot work correctly on character strings " \ | ||
131 | "in some multibyte locales - " \ | ||
132 | "use mbschr if you care about internationalization"), \ | ||
133 | strchr (s, c)) | ||
134 | #endif | ||
135 | |||
136 | /* Find the first occurrence of C in S or the final NUL byte. */ | ||
137 | #if @GNULIB_STRCHRNUL@ | ||
138 | # if ! @HAVE_STRCHRNUL@ | ||
139 | extern char *strchrnul (char const *__s, int __c_in) | ||
140 | __attribute__ ((__pure__)); | ||
141 | # endif | ||
142 | #elif defined GNULIB_POSIXCHECK | ||
143 | # undef strchrnul | ||
144 | # define strchrnul(a,b) \ | ||
145 | (GL_LINK_WARNING ("strchrnul is unportable - " \ | ||
146 | "use gnulib module strchrnul for portability"), \ | ||
147 | strchrnul (a, b)) | ||
148 | #endif | ||
149 | |||
150 | /* Duplicate S, returning an identical malloc'd string. */ | ||
151 | #if @GNULIB_STRDUP@ | ||
152 | # if ! @HAVE_DECL_STRDUP@ && ! defined strdup | ||
153 | extern char *strdup (char const *__s); | ||
154 | # endif | ||
155 | #elif defined GNULIB_POSIXCHECK | ||
156 | # undef strdup | ||
157 | # define strdup(a) \ | ||
158 | (GL_LINK_WARNING ("strdup is unportable - " \ | ||
159 | "use gnulib module strdup for portability"), \ | ||
160 | strdup (a)) | ||
161 | #endif | ||
162 | |||
163 | /* Return a newly allocated copy of at most N bytes of STRING. */ | ||
164 | #if @GNULIB_STRNDUP@ | ||
165 | # if ! @HAVE_STRNDUP@ | ||
166 | # undef strndup | ||
167 | # define strndup rpl_strndup | ||
168 | # endif | ||
169 | # if ! @HAVE_STRNDUP@ || ! @HAVE_DECL_STRNDUP@ | ||
170 | extern char *strndup (char const *__string, size_t __n); | ||
171 | # endif | ||
172 | #elif defined GNULIB_POSIXCHECK | ||
173 | # undef strndup | ||
174 | # define strndup(a,n) \ | ||
175 | (GL_LINK_WARNING ("strndup is unportable - " \ | ||
176 | "use gnulib module strndup for portability"), \ | ||
177 | strndup (a, n)) | ||
178 | #endif | ||
179 | |||
180 | /* Find the length (number of bytes) of STRING, but scan at most | ||
181 | MAXLEN bytes. If no '\0' terminator is found in that many bytes, | ||
182 | return MAXLEN. */ | ||
183 | #if @GNULIB_STRNLEN@ | ||
184 | # if ! @HAVE_DECL_STRNLEN@ | ||
185 | extern size_t strnlen (char const *__string, size_t __maxlen) | ||
186 | __attribute__ ((__pure__)); | ||
187 | # endif | ||
188 | #elif defined GNULIB_POSIXCHECK | ||
189 | # undef strnlen | ||
190 | # define strnlen(a,n) \ | ||
191 | (GL_LINK_WARNING ("strnlen is unportable - " \ | ||
192 | "use gnulib module strnlen for portability"), \ | ||
193 | strnlen (a, n)) | ||
194 | #endif | ||
195 | |||
196 | #if defined GNULIB_POSIXCHECK | ||
197 | /* strcspn() assumes the second argument is a list of single-byte characters. | ||
198 | Even in this simple case, it does not work with multibyte strings if the | ||
199 | locale encoding is GB18030 and one of the characters to be searched is a | ||
200 | digit. */ | ||
201 | # undef strcspn | ||
202 | # define strcspn(s,a) \ | ||
203 | (GL_LINK_WARNING ("strcspn cannot work correctly on character strings " \ | ||
204 | "in multibyte locales - " \ | ||
205 | "use mbscspn if you care about internationalization"), \ | ||
206 | strcspn (s, a)) | ||
207 | #endif | ||
208 | |||
209 | /* Find the first occurrence in S of any character in ACCEPT. */ | ||
210 | #if @GNULIB_STRPBRK@ | ||
211 | # if ! @HAVE_STRPBRK@ | ||
212 | extern char *strpbrk (char const *__s, char const *__accept) | ||
213 | __attribute__ ((__pure__)); | ||
214 | # endif | ||
215 | # if defined GNULIB_POSIXCHECK | ||
216 | /* strpbrk() assumes the second argument is a list of single-byte characters. | ||
217 | Even in this simple case, it does not work with multibyte strings if the | ||
218 | locale encoding is GB18030 and one of the characters to be searched is a | ||
219 | digit. */ | ||
220 | # undef strpbrk | ||
221 | # define strpbrk(s,a) \ | ||
222 | (GL_LINK_WARNING ("strpbrk cannot work correctly on character strings " \ | ||
223 | "in multibyte locales - " \ | ||
224 | "use mbspbrk if you care about internationalization"), \ | ||
225 | strpbrk (s, a)) | ||
226 | # endif | ||
227 | #elif defined GNULIB_POSIXCHECK | ||
228 | # undef strpbrk | ||
229 | # define strpbrk(s,a) \ | ||
230 | (GL_LINK_WARNING ("strpbrk is unportable - " \ | ||
231 | "use gnulib module strpbrk for portability"), \ | ||
232 | strpbrk (s, a)) | ||
233 | #endif | ||
234 | |||
235 | #if defined GNULIB_POSIXCHECK | ||
236 | /* strspn() assumes the second argument is a list of single-byte characters. | ||
237 | Even in this simple case, it cannot work with multibyte strings. */ | ||
238 | # undef strspn | ||
239 | # define strspn(s,a) \ | ||
240 | (GL_LINK_WARNING ("strspn cannot work correctly on character strings " \ | ||
241 | "in multibyte locales - " \ | ||
242 | "use mbsspn if you care about internationalization"), \ | ||
243 | strspn (s, a)) | ||
244 | #endif | ||
245 | |||
246 | #if defined GNULIB_POSIXCHECK | ||
247 | /* strrchr() does not work with multibyte strings if the locale encoding is | ||
248 | GB18030 and the character to be searched is a digit. */ | ||
249 | # undef strrchr | ||
250 | # define strrchr(s,c) \ | ||
251 | (GL_LINK_WARNING ("strrchr cannot work correctly on character strings " \ | ||
252 | "in some multibyte locales - " \ | ||
253 | "use mbsrchr if you care about internationalization"), \ | ||
254 | strrchr (s, c)) | ||
255 | #endif | ||
256 | |||
257 | /* Search the next delimiter (char listed in DELIM) starting at *STRINGP. | ||
258 | If one is found, overwrite it with a NUL, and advance *STRINGP | ||
259 | to point to the next char after it. Otherwise, set *STRINGP to NULL. | ||
260 | If *STRINGP was already NULL, nothing happens. | ||
261 | Return the old value of *STRINGP. | ||
262 | |||
263 | This is a variant of strtok() that is multithread-safe and supports | ||
264 | empty fields. | ||
265 | |||
266 | Caveat: It modifies the original string. | ||
267 | Caveat: These functions cannot be used on constant strings. | ||
268 | Caveat: The identity of the delimiting character is lost. | ||
269 | Caveat: It doesn't work with multibyte strings unless all of the delimiter | ||
270 | characters are ASCII characters < 0x30. | ||
271 | |||
272 | See also strtok_r(). */ | ||
273 | #if @GNULIB_STRSEP@ | ||
274 | # if ! @HAVE_STRSEP@ | ||
275 | extern char *strsep (char **restrict __stringp, char const *restrict __delim); | ||
276 | # endif | ||
277 | # if defined GNULIB_POSIXCHECK | ||
278 | # undef strsep | ||
279 | # define strsep(s,d) \ | ||
280 | (GL_LINK_WARNING ("strsep cannot work correctly on character strings " \ | ||
281 | "in multibyte locales - " \ | ||
282 | "use mbssep if you care about internationalization"), \ | ||
283 | strsep (s, d)) | ||
284 | # endif | ||
285 | #elif defined GNULIB_POSIXCHECK | ||
286 | # undef strsep | ||
287 | # define strsep(s,d) \ | ||
288 | (GL_LINK_WARNING ("strsep is unportable - " \ | ||
289 | "use gnulib module strsep for portability"), \ | ||
290 | strsep (s, d)) | ||
291 | #endif | ||
292 | |||
293 | #if @GNULIB_STRSTR@ | ||
294 | # if @REPLACE_STRSTR@ | ||
295 | # define strstr rpl_strstr | ||
296 | char *strstr (const char *haystack, const char *needle) | ||
297 | __attribute__ ((__pure__)); | ||
298 | # endif | ||
299 | #elif defined GNULIB_POSIXCHECK | ||
300 | /* strstr() does not work with multibyte strings if the locale encoding is | ||
301 | different from UTF-8: | ||
302 | POSIX says that it operates on "strings", and "string" in POSIX is defined | ||
303 | as a sequence of bytes, not of characters. */ | ||
304 | # undef strstr | ||
305 | # define strstr(a,b) \ | ||
306 | (GL_LINK_WARNING ("strstr is quadratic on many systems, and cannot " \ | ||
307 | "work correctly on character strings in most " \ | ||
308 | "multibyte locales - " \ | ||
309 | "use mbsstr if you care about internationalization, " \ | ||
310 | "or use strstr if you care about speed"), \ | ||
311 | strstr (a, b)) | ||
312 | #endif | ||
313 | |||
314 | /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive | ||
315 | comparison. */ | ||
316 | #if @GNULIB_STRCASESTR@ | ||
317 | # if @REPLACE_STRCASESTR@ | ||
318 | # define strcasestr rpl_strcasestr | ||
319 | # endif | ||
320 | # if ! @HAVE_STRCASESTR@ || @REPLACE_STRCASESTR@ | ||
321 | extern char *strcasestr (const char *haystack, const char *needle) | ||
322 | __attribute__ ((__pure__)); | ||
323 | # endif | ||
324 | #elif defined GNULIB_POSIXCHECK | ||
325 | /* strcasestr() does not work with multibyte strings: | ||
326 | It is a glibc extension, and glibc implements it only for unibyte | ||
327 | locales. */ | ||
328 | # undef strcasestr | ||
329 | # define strcasestr(a,b) \ | ||
330 | (GL_LINK_WARNING ("strcasestr does work correctly on character strings " \ | ||
331 | "in multibyte locales - " \ | ||
332 | "use mbscasestr if you care about " \ | ||
333 | "internationalization, or use c-strcasestr if you want " \ | ||
334 | "a locale independent function"), \ | ||
335 | strcasestr (a, b)) | ||
336 | #endif | ||
337 | |||
338 | /* Parse S into tokens separated by characters in DELIM. | ||
339 | If S is NULL, the saved pointer in SAVE_PTR is used as | ||
340 | the next starting point. For example: | ||
341 | char s[] = "-abc-=-def"; | ||
342 | char *sp; | ||
343 | x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" | ||
344 | x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL | ||
345 | x = strtok_r(NULL, "=", &sp); // x = NULL | ||
346 | // s = "abc\0-def\0" | ||
347 | |||
348 | This is a variant of strtok() that is multithread-safe. | ||
349 | |||
350 | For the POSIX documentation for this function, see: | ||
351 | http://www.opengroup.org/susv3xsh/strtok.html | ||
352 | |||
353 | Caveat: It modifies the original string. | ||
354 | Caveat: These functions cannot be used on constant strings. | ||
355 | Caveat: The identity of the delimiting character is lost. | ||
356 | Caveat: It doesn't work with multibyte strings unless all of the delimiter | ||
357 | characters are ASCII characters < 0x30. | ||
358 | |||
359 | See also strsep(). */ | ||
360 | #if @GNULIB_STRTOK_R@ | ||
361 | # if ! @HAVE_DECL_STRTOK_R@ | ||
362 | extern char *strtok_r (char *restrict s, char const *restrict delim, | ||
363 | char **restrict save_ptr); | ||
364 | # endif | ||
365 | # if defined GNULIB_POSIXCHECK | ||
366 | # undef strtok_r | ||
367 | # define strtok_r(s,d,p) \ | ||
368 | (GL_LINK_WARNING ("strtok_r cannot work correctly on character strings " \ | ||
369 | "in multibyte locales - " \ | ||
370 | "use mbstok_r if you care about internationalization"), \ | ||
371 | strtok_r (s, d, p)) | ||
372 | # endif | ||
373 | #elif defined GNULIB_POSIXCHECK | ||
374 | # undef strtok_r | ||
375 | # define strtok_r(s,d,p) \ | ||
376 | (GL_LINK_WARNING ("strtok_r is unportable - " \ | ||
377 | "use gnulib module strtok_r for portability"), \ | ||
378 | strtok_r (s, d, p)) | ||
379 | #endif | ||
380 | |||
381 | |||
382 | /* The following functions are not specified by POSIX. They are gnulib | ||
383 | extensions. */ | ||
384 | |||
385 | #if @GNULIB_MBSLEN@ | ||
386 | /* Return the number of multibyte characters in the character string STRING. | ||
387 | This considers multibyte characters, unlike strlen, which counts bytes. */ | ||
388 | extern size_t mbslen (const char *string); | ||
389 | #endif | ||
390 | |||
391 | #if @GNULIB_MBSNLEN@ | ||
392 | /* Return the number of multibyte characters in the character string starting | ||
393 | at STRING and ending at STRING + LEN. */ | ||
394 | extern size_t mbsnlen (const char *string, size_t len); | ||
395 | #endif | ||
396 | |||
397 | #if @GNULIB_MBSCHR@ | ||
398 | /* Locate the first single-byte character C in the character string STRING, | ||
399 | and return a pointer to it. Return NULL if C is not found in STRING. | ||
400 | Unlike strchr(), this function works correctly in multibyte locales with | ||
401 | encodings such as GB18030. */ | ||
402 | # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ | ||
403 | extern char * mbschr (const char *string, int c); | ||
404 | #endif | ||
405 | |||
406 | #if @GNULIB_MBSRCHR@ | ||
407 | /* Locate the last single-byte character C in the character string STRING, | ||
408 | and return a pointer to it. Return NULL if C is not found in STRING. | ||
409 | Unlike strrchr(), this function works correctly in multibyte locales with | ||
410 | encodings such as GB18030. */ | ||
411 | # define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */ | ||
412 | extern char * mbsrchr (const char *string, int c); | ||
413 | #endif | ||
414 | |||
415 | #if @GNULIB_MBSSTR@ | ||
416 | /* Find the first occurrence of the character string NEEDLE in the character | ||
417 | string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. | ||
418 | Unlike strstr(), this function works correctly in multibyte locales with | ||
419 | encodings different from UTF-8. */ | ||
420 | extern char * mbsstr (const char *haystack, const char *needle); | ||
421 | #endif | ||
422 | |||
423 | #if @GNULIB_MBSCASECMP@ | ||
424 | /* Compare the character strings S1 and S2, ignoring case, returning less than, | ||
425 | equal to or greater than zero if S1 is lexicographically less than, equal to | ||
426 | or greater than S2. | ||
427 | Note: This function may, in multibyte locales, return 0 for strings of | ||
428 | different lengths! | ||
429 | Unlike strcasecmp(), this function works correctly in multibyte locales. */ | ||
430 | extern int mbscasecmp (const char *s1, const char *s2); | ||
431 | #endif | ||
432 | |||
433 | #if @GNULIB_MBSNCASECMP@ | ||
434 | /* Compare the initial segment of the character string S1 consisting of at most | ||
435 | N characters with the initial segment of the character string S2 consisting | ||
436 | of at most N characters, ignoring case, returning less than, equal to or | ||
437 | greater than zero if the initial segment of S1 is lexicographically less | ||
438 | than, equal to or greater than the initial segment of S2. | ||
439 | Note: This function may, in multibyte locales, return 0 for initial segments | ||
440 | of different lengths! | ||
441 | Unlike strncasecmp(), this function works correctly in multibyte locales. | ||
442 | But beware that N is not a byte count but a character count! */ | ||
443 | extern int mbsncasecmp (const char *s1, const char *s2, size_t n); | ||
444 | #endif | ||
445 | |||
446 | #if @GNULIB_MBSPCASECMP@ | ||
447 | /* Compare the initial segment of the character string STRING consisting of | ||
448 | at most mbslen (PREFIX) characters with the character string PREFIX, | ||
449 | ignoring case, returning less than, equal to or greater than zero if this | ||
450 | initial segment is lexicographically less than, equal to or greater than | ||
451 | PREFIX. | ||
452 | Note: This function may, in multibyte locales, return 0 if STRING is of | ||
453 | smaller length than PREFIX! | ||
454 | Unlike strncasecmp(), this function works correctly in multibyte | ||
455 | locales. */ | ||
456 | extern char * mbspcasecmp (const char *string, const char *prefix); | ||
457 | #endif | ||
458 | |||
459 | #if @GNULIB_MBSCASESTR@ | ||
460 | /* Find the first occurrence of the character string NEEDLE in the character | ||
461 | string HAYSTACK, using case-insensitive comparison. | ||
462 | Note: This function may, in multibyte locales, return success even if | ||
463 | strlen (haystack) < strlen (needle) ! | ||
464 | Unlike strcasestr(), this function works correctly in multibyte locales. */ | ||
465 | extern char * mbscasestr (const char *haystack, const char *needle); | ||
466 | #endif | ||
467 | |||
468 | #if @GNULIB_MBSCSPN@ | ||
469 | /* Find the first occurrence in the character string STRING of any character | ||
470 | in the character string ACCEPT. Return the number of bytes from the | ||
471 | beginning of the string to this occurrence, or to the end of the string | ||
472 | if none exists. | ||
473 | Unlike strcspn(), this function works correctly in multibyte locales. */ | ||
474 | extern size_t mbscspn (const char *string, const char *accept); | ||
475 | #endif | ||
476 | |||
477 | #if @GNULIB_MBSPBRK@ | ||
478 | /* Find the first occurrence in the character string STRING of any character | ||
479 | in the character string ACCEPT. Return the pointer to it, or NULL if none | ||
480 | exists. | ||
481 | Unlike strpbrk(), this function works correctly in multibyte locales. */ | ||
482 | # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ | ||
483 | extern char * mbspbrk (const char *string, const char *accept); | ||
484 | #endif | ||
485 | |||
486 | #if @GNULIB_MBSSPN@ | ||
487 | /* Find the first occurrence in the character string STRING of any character | ||
488 | not in the character string REJECT. Return the number of bytes from the | ||
489 | beginning of the string to this occurrence, or to the end of the string | ||
490 | if none exists. | ||
491 | Unlike strspn(), this function works correctly in multibyte locales. */ | ||
492 | extern size_t mbsspn (const char *string, const char *reject); | ||
493 | #endif | ||
494 | |||
495 | #if @GNULIB_MBSSEP@ | ||
496 | /* Search the next delimiter (multibyte character listed in the character | ||
497 | string DELIM) starting at the character string *STRINGP. | ||
498 | If one is found, overwrite it with a NUL, and advance *STRINGP to point | ||
499 | to the next multibyte character after it. Otherwise, set *STRINGP to NULL. | ||
500 | If *STRINGP was already NULL, nothing happens. | ||
501 | Return the old value of *STRINGP. | ||
502 | |||
503 | This is a variant of mbstok_r() that supports empty fields. | ||
504 | |||
505 | Caveat: It modifies the original string. | ||
506 | Caveat: These functions cannot be used on constant strings. | ||
507 | Caveat: The identity of the delimiting character is lost. | ||
508 | |||
509 | See also mbstok_r(). */ | ||
510 | extern char * mbssep (char **stringp, const char *delim); | ||
511 | #endif | ||
512 | |||
513 | #if @GNULIB_MBSTOK_R@ | ||
514 | /* Parse the character string STRING into tokens separated by characters in | ||
515 | the character string DELIM. | ||
516 | If STRING is NULL, the saved pointer in SAVE_PTR is used as | ||
517 | the next starting point. For example: | ||
518 | char s[] = "-abc-=-def"; | ||
519 | char *sp; | ||
520 | x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" | ||
521 | x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL | ||
522 | x = mbstok_r(NULL, "=", &sp); // x = NULL | ||
523 | // s = "abc\0-def\0" | ||
524 | |||
525 | Caveat: It modifies the original string. | ||
526 | Caveat: These functions cannot be used on constant strings. | ||
527 | Caveat: The identity of the delimiting character is lost. | ||
528 | |||
529 | See also mbssep(). */ | ||
530 | extern char * mbstok_r (char *string, const char *delim, char **save_ptr); | ||
531 | #endif | ||
532 | |||
533 | /* Map any int, typically from errno, into an error message. */ | ||
534 | #if @GNULIB_STRERROR@ | ||
535 | # if @REPLACE_STRERROR@ | ||
536 | # undef strerror | ||
537 | # define strerror rpl_strerror | ||
538 | extern char *strerror (int); | ||
539 | # endif | ||
540 | #elif defined GNULIB_POSIXCHECK | ||
541 | # undef strerror | ||
542 | # define strerror(e) \ | ||
543 | (GL_LINK_WARNING ("strerror is unportable - " \ | ||
544 | "use gnulib module strerror to guarantee non-NULL result"), \ | ||
545 | strerror (e)) | ||
546 | #endif | ||
547 | |||
548 | #if @GNULIB_STRSIGNAL@ | ||
549 | # if @REPLACE_STRSIGNAL@ | ||
550 | # define strsignal rpl_strsignal | ||
551 | # endif | ||
552 | # if ! @HAVE_DECL_STRSIGNAL@ || @REPLACE_STRSIGNAL@ | ||
553 | extern char *strsignal (int __sig); | ||
554 | # endif | ||
555 | #elif defined GNULIB_POSIXCHECK | ||
556 | # undef strsignal | ||
557 | # define strsignal(a) \ | ||
558 | (GL_LINK_WARNING ("strsignal is unportable - " \ | ||
559 | "use gnulib module strsignal for portability"), \ | ||
560 | strsignal (a)) | ||
561 | #endif | ||
562 | |||
563 | |||
564 | #ifdef __cplusplus | ||
565 | } | ||
566 | #endif | ||
567 | |||
568 | #endif /* _GL_STRING_H */ | ||
569 | #endif /* _GL_STRING_H */ | ||
diff --git a/gl/stripslash.c b/gl/stripslash.c index 342d497c..40844102 100644 --- a/gl/stripslash.c +++ b/gl/stripslash.c | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 1990, 2001, 2003-2006 Free Software Foundation, Inc. | 3 | Copyright (C) 1990, 2001, 2003-2006 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | #include <config.h> | 18 | #include <config.h> |
20 | 19 | ||
diff --git a/gl/strncasecmp.c b/gl/strncasecmp.c deleted file mode 100644 index f59b953a..00000000 --- a/gl/strncasecmp.c +++ /dev/null | |||
@@ -1,63 +0,0 @@ | |||
1 | /* strncasecmp.c -- case insensitive string comparator | ||
2 | Copyright (C) 1998-1999, 2005-2006 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program 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 | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | |||
18 | #include <config.h> | ||
19 | |||
20 | /* Specification. */ | ||
21 | #include "strcase.h" | ||
22 | |||
23 | #include <ctype.h> | ||
24 | #include <limits.h> | ||
25 | |||
26 | #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) | ||
27 | |||
28 | /* Compare no more than N bytes of strings S1 and S2, | ||
29 | ignoring case, returning less than, equal to or | ||
30 | greater than zero if S1 is lexicographically less | ||
31 | than, equal to or greater than S2. */ | ||
32 | |||
33 | int | ||
34 | strncasecmp (const char *s1, const char *s2, size_t n) | ||
35 | { | ||
36 | register const unsigned char *p1 = (const unsigned char *) s1; | ||
37 | register const unsigned char *p2 = (const unsigned char *) s2; | ||
38 | unsigned char c1, c2; | ||
39 | |||
40 | if (p1 == p2 || n == 0) | ||
41 | return 0; | ||
42 | |||
43 | do | ||
44 | { | ||
45 | c1 = TOLOWER (*p1); | ||
46 | c2 = TOLOWER (*p2); | ||
47 | |||
48 | if (--n == 0 || c1 == '\0') | ||
49 | break; | ||
50 | |||
51 | ++p1; | ||
52 | ++p2; | ||
53 | } | ||
54 | while (c1 == c2); | ||
55 | |||
56 | if (UCHAR_MAX <= INT_MAX) | ||
57 | return c1 - c2; | ||
58 | else | ||
59 | /* On machines where 'char' and 'int' are types of the same size, the | ||
60 | difference of two 'unsigned char' values - including the sign bit - | ||
61 | doesn't fit in an 'int'. */ | ||
62 | return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); | ||
63 | } | ||
diff --git a/gl/strndup.c b/gl/strndup.c index 290f494f..507e9c06 100644 --- a/gl/strndup.c +++ b/gl/strndup.c | |||
@@ -1,11 +1,11 @@ | |||
1 | /* A replacement function, for systems that lack strndup. | 1 | /* A replacement function, for systems that lack strndup. |
2 | 2 | ||
3 | Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2005, 2006 Free | 3 | Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2005, 2006, 2007 |
4 | Software Foundation, Inc. | 4 | Free Software Foundation, Inc. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms of the GNU General Public License as published by the | 7 | under the terms of the GNU General Public License as published by the |
8 | Free Software Foundation; either version 2, or (at your option) any | 8 | Free Software Foundation; either version 3, or (at your option) any |
9 | later version. | 9 | later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
@@ -18,12 +18,10 @@ | |||
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | 18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
19 | 19 | ||
20 | #include <config.h> | 20 | #include <config.h> |
21 | #include "strndup.h" | ||
22 | 21 | ||
23 | #include <stdlib.h> | ||
24 | #include <string.h> | 22 | #include <string.h> |
25 | 23 | ||
26 | #include "strnlen.h" | 24 | #include <stdlib.h> |
27 | 25 | ||
28 | char * | 26 | char * |
29 | strndup (char const *s, size_t n) | 27 | strndup (char const *s, size_t n) |
diff --git a/gl/strndup.h b/gl/strndup.h deleted file mode 100644 index b983dd22..00000000 --- a/gl/strndup.h +++ /dev/null | |||
@@ -1,32 +0,0 @@ | |||
1 | /* Duplicate a size-bounded string. | ||
2 | Copyright (C) 2003, 2006 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program 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 | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | |||
18 | /* Get size_t. */ | ||
19 | #include <stddef.h> | ||
20 | /* If HAVE_STRNDUP, get the strndup declaration. | ||
21 | If !HAVE_STRNDUP, include <string.h> now so that it doesn't cause | ||
22 | trouble if included later. */ | ||
23 | #include <string.h> | ||
24 | |||
25 | #if !HAVE_STRNDUP | ||
26 | # undef strndup | ||
27 | # define strndup rpl_strndup | ||
28 | # if !HAVE_DECL_STRNDUP /* Don't risk conflicting declarations. */ | ||
29 | /* Return a newly allocated copy of at most N bytes of STRING. */ | ||
30 | extern char *strndup (const char *string, size_t n); | ||
31 | # endif | ||
32 | #endif | ||
diff --git a/gl/strnlen.c b/gl/strnlen.c index 593fd1b7..93d1ac14 100644 --- a/gl/strnlen.c +++ b/gl/strnlen.c | |||
@@ -1,10 +1,10 @@ | |||
1 | /* Find the length of STRING, but scan at most MAXLEN characters. | 1 | /* Find the length of STRING, but scan at most MAXLEN characters. |
2 | Copyright (C) 2005, 2006 Free Software Foundation, Inc. | 2 | Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. |
3 | Written by Simon Josefsson. | 3 | Written by Simon Josefsson. |
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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3, or (at your option) |
8 | any later version. | 8 | any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
@@ -18,7 +18,7 @@ | |||
18 | 18 | ||
19 | #include <config.h> | 19 | #include <config.h> |
20 | 20 | ||
21 | #include "strnlen.h" | 21 | #include <string.h> |
22 | 22 | ||
23 | /* Find the length of STRING, but scan at most MAXLEN characters. | 23 | /* Find the length of STRING, but scan at most MAXLEN characters. |
24 | If no '\0' terminator is found in that many characters, return MAXLEN. */ | 24 | If no '\0' terminator is found in that many characters, return MAXLEN. */ |
diff --git a/gl/strnlen.h b/gl/strnlen.h deleted file mode 100644 index ba74dba7..00000000 --- a/gl/strnlen.h +++ /dev/null | |||
@@ -1,32 +0,0 @@ | |||
1 | /* Find the length of STRING, but scan at most MAXLEN characters. | ||
2 | Copyright (C) 2005 Free Software Foundation, Inc. | ||
3 | Written by Simon Josefsson. | ||
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 | #ifndef STRNLEN_H | ||
20 | #define STRNLEN_H | ||
21 | |||
22 | /* Get strnlen declaration, if available. */ | ||
23 | #include <string.h> | ||
24 | |||
25 | #if defined HAVE_DECL_STRNLEN && !HAVE_DECL_STRNLEN | ||
26 | /* Find the length (number of bytes) of STRING, but scan at most | ||
27 | MAXLEN bytes. If no '\0' terminator is found in that many bytes, | ||
28 | return MAXLEN. */ | ||
29 | extern size_t strnlen(const char *string, size_t maxlen); | ||
30 | #endif | ||
31 | |||
32 | #endif /* STRNLEN_H */ | ||
diff --git a/gl/strnlen1.c b/gl/strnlen1.c deleted file mode 100644 index 422ed9e8..00000000 --- a/gl/strnlen1.c +++ /dev/null | |||
@@ -1,36 +0,0 @@ | |||
1 | /* Find the length of STRING + 1, but scan at most MAXLEN bytes. | ||
2 | Copyright (C) 2005-2006 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program 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 | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | |||
18 | #include <config.h> | ||
19 | |||
20 | /* Specification. */ | ||
21 | #include "strnlen1.h" | ||
22 | |||
23 | #include <string.h> | ||
24 | |||
25 | /* Find the length of STRING + 1, but scan at most MAXLEN bytes. | ||
26 | If no '\0' terminator is found in that many characters, return MAXLEN. */ | ||
27 | /* This is the same as strnlen (string, maxlen - 1) + 1. */ | ||
28 | size_t | ||
29 | strnlen1 (const char *string, size_t maxlen) | ||
30 | { | ||
31 | const char *end = (const char *) memchr (string, '\0', maxlen); | ||
32 | if (end != NULL) | ||
33 | return end - string + 1; | ||
34 | else | ||
35 | return maxlen; | ||
36 | } | ||
diff --git a/gl/socket_.h b/gl/sys_socket.in.h index 8b28b5ed..5e0b097d 100644 --- a/gl/socket_.h +++ b/gl/sys_socket.in.h | |||
@@ -1,10 +1,10 @@ | |||
1 | /* Provide a sys/socket header file for systems lacking it (read: MinGW). | 1 | /* Provide a sys/socket header file for systems lacking it (read: MinGW). |
2 | Copyright (C) 2005, 2006 Free Software Foundation, Inc. | 2 | Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. |
3 | Written by Simon Josefsson. | 3 | Written by Simon Josefsson. |
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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3, or (at your option) |
8 | any later version. | 8 | any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
@@ -16,12 +16,30 @@ | |||
16 | along with this program; if not, write to the Free Software Foundation, | 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. */ | 17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
18 | 18 | ||
19 | #ifndef _SYS_SOCKET_H | 19 | /* This file is supposed to be used on platforms that lack <sys/socket.h> |
20 | #define _SYS_SOCKET_H | 20 | and on platforms where <sys/socket.h> cannot be included standalone. |
21 | It is intended to provide definitions and prototypes needed by an | ||
22 | application. */ | ||
21 | 23 | ||
22 | /* This file is supposed to be used on platforms that lack | 24 | #ifndef _GL_SYS_SOCKET_H |
23 | sys/socket.h. It is intended to provide definitions and prototypes | 25 | |
24 | needed by an application. | 26 | #if @HAVE_SYS_SOCKET_H@ |
27 | |||
28 | /* On many platforms, <sys/socket.h> assumes prior inclusion of | ||
29 | <sys/types.h>. */ | ||
30 | # include <sys/types.h> | ||
31 | |||
32 | /* The include_next requires a split double-inclusion guard. */ | ||
33 | # @INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@ | ||
34 | |||
35 | #endif | ||
36 | |||
37 | #ifndef _GL_SYS_SOCKET_H | ||
38 | #define _GL_SYS_SOCKET_H | ||
39 | |||
40 | #if !@HAVE_SYS_SOCKET_H@ | ||
41 | |||
42 | /* A platform that lacks <sys/socket.h>. | ||
25 | 43 | ||
26 | Currently only MinGW is supported. See the gnulib manual regarding | 44 | Currently only MinGW is supported. See the gnulib manual regarding |
27 | Windows sockets. MinGW has the header files winsock2.h and | 45 | Windows sockets. MinGW has the header files winsock2.h and |
@@ -39,32 +57,35 @@ | |||
39 | releases. */ | 57 | releases. */ |
40 | 58 | ||
41 | 59 | ||
42 | #if HAVE_WINSOCK2_H | 60 | # if @HAVE_WINSOCK2_H@ |
43 | # include <winsock2.h> | 61 | # include <winsock2.h> |
44 | #endif | 62 | # endif |
45 | #if HAVE_WS2TCPIP_H | 63 | # if @HAVE_WS2TCPIP_H@ |
46 | # include <ws2tcpip.h> | 64 | # include <ws2tcpip.h> |
47 | #endif | 65 | # endif |
48 | 66 | ||
49 | /* For shutdown(). */ | 67 | /* For shutdown(). */ |
50 | #if !defined SHUT_RD && defined SD_RECEIVE | 68 | # if !defined SHUT_RD && defined SD_RECEIVE |
51 | # define SHUT_RD SD_RECEIVE | 69 | # define SHUT_RD SD_RECEIVE |
52 | #endif | 70 | # endif |
53 | #if !defined SHUT_WR && defined SD_SEND | 71 | # if !defined SHUT_WR && defined SD_SEND |
54 | # define SHUT_WR SD_SEND | 72 | # define SHUT_WR SD_SEND |
55 | #endif | 73 | # endif |
56 | #if !defined SHUT_RDWR && defined SD_BOTH | 74 | # if !defined SHUT_RDWR && defined SD_BOTH |
57 | # define SHUT_RDWR SD_BOTH | 75 | # define SHUT_RDWR SD_BOTH |
58 | #endif | 76 | # endif |
59 | 77 | ||
60 | #if defined _WIN32 || defined __WIN32__ | 78 | # if defined _WIN32 || defined __WIN32__ |
61 | # define ENOTSOCK WSAENOTSOCK | 79 | # define ENOTSOCK WSAENOTSOCK |
62 | # define EADDRINUSE WSAEADDRINUSE | 80 | # define EADDRINUSE WSAEADDRINUSE |
63 | # define ENETRESET WSAENETRESET | 81 | # define ENETRESET WSAENETRESET |
64 | # define ECONNABORTED WSAECONNABORTED | 82 | # define ECONNABORTED WSAECONNABORTED |
65 | # define ECONNRESET WSAECONNRESET | 83 | # define ECONNRESET WSAECONNRESET |
66 | # define ENOTCONN WSAENOTCONN | 84 | # define ENOTCONN WSAENOTCONN |
67 | # define ESHUTDOWN WSAESHUTDOWN | 85 | # define ESHUTDOWN WSAESHUTDOWN |
68 | #endif | 86 | # endif |
87 | |||
88 | #endif /* HAVE_SYS_SOCKET_H */ | ||
69 | 89 | ||
70 | #endif /* _SYS_SOCKET_H */ | 90 | #endif /* _GL_SYS_SOCKET_H */ |
91 | #endif /* _GL_SYS_SOCKET_H */ | ||
diff --git a/gl/unistd--.h b/gl/unistd--.h index 1fe6ce8b..1a7fd785 100644 --- a/gl/unistd--.h +++ b/gl/unistd--.h | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 2005 Free Software Foundation, Inc. | 3 | Copyright (C) 2005 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | /* Written by Paul Eggert. */ | 18 | /* Written by Paul Eggert. */ |
20 | 19 | ||
diff --git a/gl/unistd-safer.h b/gl/unistd-safer.h index f95999d3..033e857d 100644 --- a/gl/unistd-safer.h +++ b/gl/unistd-safer.h | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. | 3 | Copyright (C) 2001, 2003, 2005 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | /* Written by Paul Eggert. */ | 18 | /* Written by Paul Eggert. */ |
20 | 19 | ||
diff --git a/gl/unistd.in.h b/gl/unistd.in.h new file mode 100644 index 00000000..a5dc04c9 --- /dev/null +++ b/gl/unistd.in.h | |||
@@ -0,0 +1,320 @@ | |||
1 | /* Substitute for and wrapper around <unistd.h>. | ||
2 | Copyright (C) 2004-2007 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 3, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program 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 | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | |||
18 | #ifndef _GL_UNISTD_H | ||
19 | |||
20 | /* The include_next requires a split double-inclusion guard. */ | ||
21 | #if @HAVE_UNISTD_H@ | ||
22 | # @INCLUDE_NEXT@ @NEXT_UNISTD_H@ | ||
23 | #endif | ||
24 | |||
25 | #ifndef _GL_UNISTD_H | ||
26 | #define _GL_UNISTD_H | ||
27 | |||
28 | /* mingw doesn't define the SEEK_* macros in <unistd.h>. */ | ||
29 | #if !(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) | ||
30 | # include <stdio.h> | ||
31 | #endif | ||
32 | |||
33 | /* mingw fails to declare _exit in <unistd.h>. */ | ||
34 | #include <stdlib.h> | ||
35 | |||
36 | /* The definition of GL_LINK_WARNING is copied here. */ | ||
37 | |||
38 | |||
39 | /* Declare overridden functions. */ | ||
40 | |||
41 | #ifdef __cplusplus | ||
42 | extern "C" { | ||
43 | #endif | ||
44 | |||
45 | |||
46 | #if @GNULIB_CHOWN@ | ||
47 | # if @REPLACE_CHOWN@ | ||
48 | # ifndef REPLACE_CHOWN | ||
49 | # define REPLACE_CHOWN 1 | ||
50 | # endif | ||
51 | # if REPLACE_CHOWN | ||
52 | /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE | ||
53 | to GID (if GID is not -1). Follow symbolic links. | ||
54 | Return 0 if successful, otherwise -1 and errno set. | ||
55 | See the POSIX:2001 specification | ||
56 | <http://www.opengroup.org/susv3xsh/chown.html>. */ | ||
57 | # define chown rpl_chown | ||
58 | extern int chown (const char *file, uid_t uid, gid_t gid); | ||
59 | # endif | ||
60 | # endif | ||
61 | #elif defined GNULIB_POSIXCHECK | ||
62 | # undef chown | ||
63 | # define chown(f,u,g) \ | ||
64 | (GL_LINK_WARNING ("chown fails to follow symlinks on some systems and " \ | ||
65 | "doesn't treat a uid or gid of -1 on some systems - " \ | ||
66 | "use gnulib module chown for portability"), \ | ||
67 | chown (f, u, g)) | ||
68 | #endif | ||
69 | |||
70 | |||
71 | #if @GNULIB_DUP2@ | ||
72 | # if !@HAVE_DUP2@ | ||
73 | /* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if | ||
74 | NEWFD = OLDFD, otherwise close NEWFD first if it is open. | ||
75 | Return 0 if successful, otherwise -1 and errno set. | ||
76 | See the POSIX:2001 specification | ||
77 | <http://www.opengroup.org/susv3xsh/dup2.html>. */ | ||
78 | extern int dup2 (int oldfd, int newfd); | ||
79 | # endif | ||
80 | #elif defined GNULIB_POSIXCHECK | ||
81 | # undef dup2 | ||
82 | # define dup2(o,n) \ | ||
83 | (GL_LINK_WARNING ("dup2 is unportable - " \ | ||
84 | "use gnulib module dup2 for portability"), \ | ||
85 | dup2 (o, n)) | ||
86 | #endif | ||
87 | |||
88 | |||
89 | #if @GNULIB_FCHDIR@ | ||
90 | # if @REPLACE_FCHDIR@ | ||
91 | |||
92 | /* Change the process' current working directory to the directory on which | ||
93 | the given file descriptor is open. | ||
94 | Return 0 if successful, otherwise -1 and errno set. | ||
95 | See the POSIX:2001 specification | ||
96 | <http://www.opengroup.org/susv3xsh/fchdir.html>. */ | ||
97 | extern int fchdir (int /*fd*/); | ||
98 | |||
99 | # define close rpl_close | ||
100 | extern int close (int); | ||
101 | # define dup rpl_dup | ||
102 | extern int dup (int); | ||
103 | # define dup2 rpl_dup2 | ||
104 | extern int dup2 (int, int); | ||
105 | |||
106 | # endif | ||
107 | #elif defined GNULIB_POSIXCHECK | ||
108 | # undef fchdir | ||
109 | # define fchdir(f) \ | ||
110 | (GL_LINK_WARNING ("fchdir is unportable - " \ | ||
111 | "use gnulib module fchdir for portability"), \ | ||
112 | fchdir (f)) | ||
113 | #endif | ||
114 | |||
115 | |||
116 | #if @GNULIB_FTRUNCATE@ | ||
117 | # if !@HAVE_FTRUNCATE@ | ||
118 | /* Change the size of the file to which FD is opened to become equal to LENGTH. | ||
119 | Return 0 if successful, otherwise -1 and errno set. | ||
120 | See the POSIX:2001 specification | ||
121 | <http://www.opengroup.org/susv3xsh/ftruncate.html>. */ | ||
122 | extern int ftruncate (int fd, off_t length); | ||
123 | # endif | ||
124 | #elif defined GNULIB_POSIXCHECK | ||
125 | # undef ftruncate | ||
126 | # define ftruncate(f,l) \ | ||
127 | (GL_LINK_WARNING ("ftruncate is unportable - " \ | ||
128 | "use gnulib module ftruncate for portability"), \ | ||
129 | ftruncate (f, l)) | ||
130 | #endif | ||
131 | |||
132 | |||
133 | #if @GNULIB_GETCWD@ | ||
134 | /* Include the headers that might declare getcwd so that they will not | ||
135 | cause confusion if included after this file. */ | ||
136 | # include <stdlib.h> | ||
137 | # if @REPLACE_GETCWD@ | ||
138 | /* Get the name of the current working directory, and put it in SIZE bytes | ||
139 | of BUF. | ||
140 | Return BUF if successful, or NULL if the directory couldn't be determined | ||
141 | or SIZE was too small. | ||
142 | See the POSIX:2001 specification | ||
143 | <http://www.opengroup.org/susv3xsh/getcwd.html>. | ||
144 | Additionally, the gnulib module 'getcwd' guarantees the following GNU | ||
145 | extension: If BUF is NULL, an array is allocated with 'malloc'; the array | ||
146 | is SIZE bytes long, unless SIZE == 0, in which case it is as big as | ||
147 | necessary. */ | ||
148 | # define getcwd rpl_getcwd | ||
149 | extern char * getcwd (char *buf, size_t size); | ||
150 | # endif | ||
151 | #elif defined GNULIB_POSIXCHECK | ||
152 | # undef getcwd | ||
153 | # define getcwd(b,s) \ | ||
154 | (GL_LINK_WARNING ("getcwd is unportable - " \ | ||
155 | "use gnulib module getcwd for portability"), \ | ||
156 | getcwd (b, s)) | ||
157 | #endif | ||
158 | |||
159 | |||
160 | #if @GNULIB_GETLOGIN_R@ | ||
161 | /* Copies the user's login name to NAME. | ||
162 | The array pointed to by NAME has room for SIZE bytes. | ||
163 | |||
164 | Returns 0 if successful. Upon error, an error number is returned, or -1 in | ||
165 | the case that the login name cannot be found but no specific error is | ||
166 | provided (this case is hopefully rare but is left open by the POSIX spec). | ||
167 | |||
168 | See <http://www.opengroup.org/susv3xsh/getlogin.html>. | ||
169 | */ | ||
170 | # if !@HAVE_DECL_GETLOGIN_R@ | ||
171 | # include <stddef.h> | ||
172 | extern int getlogin_r (char *name, size_t size); | ||
173 | # endif | ||
174 | #elif defined GNULIB_POSIXCHECK | ||
175 | # undef getlogin_r | ||
176 | # define getlogin_r(n,s) \ | ||
177 | (GL_LINK_WARNING ("getlogin_r is unportable - " \ | ||
178 | "use gnulib module getlogin_r for portability"), \ | ||
179 | getlogin_r (n, s)) | ||
180 | #endif | ||
181 | |||
182 | |||
183 | #if @GNULIB_GETPAGESIZE@ | ||
184 | # if @REPLACE_GETPAGESIZE@ | ||
185 | # define getpagesize rpl_getpagesize | ||
186 | extern int getpagesize (void); | ||
187 | # elif !@HAVE_GETPAGESIZE@ | ||
188 | /* This is for POSIX systems. */ | ||
189 | # if !defined getpagesize && defined _SC_PAGESIZE | ||
190 | # if ! (defined __VMS && __VMS_VER < 70000000) | ||
191 | # define getpagesize() sysconf (_SC_PAGESIZE) | ||
192 | # endif | ||
193 | # endif | ||
194 | /* This is for older VMS. */ | ||
195 | # if !defined getpagesize && defined __VMS | ||
196 | # ifdef __ALPHA | ||
197 | # define getpagesize() 8192 | ||
198 | # else | ||
199 | # define getpagesize() 512 | ||
200 | # endif | ||
201 | # endif | ||
202 | /* This is for BeOS. */ | ||
203 | # if !defined getpagesize && @HAVE_OS_H@ | ||
204 | # include <OS.h> | ||
205 | # if defined B_PAGE_SIZE | ||
206 | # define getpagesize() B_PAGE_SIZE | ||
207 | # endif | ||
208 | # endif | ||
209 | /* This is for AmigaOS4.0. */ | ||
210 | # if !defined getpagesize && defined __amigaos4__ | ||
211 | # define getpagesize() 2048 | ||
212 | # endif | ||
213 | /* This is for older Unix systems. */ | ||
214 | # if !defined getpagesize && @HAVE_SYS_PARAM_H@ | ||
215 | # include <sys/param.h> | ||
216 | # ifdef EXEC_PAGESIZE | ||
217 | # define getpagesize() EXEC_PAGESIZE | ||
218 | # else | ||
219 | # ifdef NBPG | ||
220 | # ifndef CLSIZE | ||
221 | # define CLSIZE 1 | ||
222 | # endif | ||
223 | # define getpagesize() (NBPG * CLSIZE) | ||
224 | # else | ||
225 | # ifdef NBPC | ||
226 | # define getpagesize() NBPC | ||
227 | # endif | ||
228 | # endif | ||
229 | # endif | ||
230 | # endif | ||
231 | # endif | ||
232 | #elif defined GNULIB_POSIXCHECK | ||
233 | # undef getpagesize | ||
234 | # define getpagesize() \ | ||
235 | (GL_LINK_WARNING ("getpagesize is unportable - " \ | ||
236 | "use gnulib module getpagesize for portability"), \ | ||
237 | getpagesize ()) | ||
238 | #endif | ||
239 | |||
240 | |||
241 | #if @GNULIB_LCHOWN@ | ||
242 | # if @REPLACE_LCHOWN@ | ||
243 | /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE | ||
244 | to GID (if GID is not -1). Do not follow symbolic links. | ||
245 | Return 0 if successful, otherwise -1 and errno set. | ||
246 | See the POSIX:2001 specification | ||
247 | <http://www.opengroup.org/susv3xsh/lchown.html>. */ | ||
248 | # define lchown rpl_lchown | ||
249 | extern int lchown (char const *file, uid_t owner, gid_t group); | ||
250 | # endif | ||
251 | #elif defined GNULIB_POSIXCHECK | ||
252 | # undef lchown | ||
253 | # define lchown(f,u,g) \ | ||
254 | (GL_LINK_WARNING ("lchown is unportable to pre-POSIX.1-2001 " \ | ||
255 | "systems - use gnulib module lchown for portability"), \ | ||
256 | lchown (f, u, g)) | ||
257 | #endif | ||
258 | |||
259 | |||
260 | #if @GNULIB_LSEEK@ | ||
261 | # if @REPLACE_LSEEK@ | ||
262 | /* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. | ||
263 | Return the new offset if successful, otherwise -1 and errno set. | ||
264 | See the POSIX:2001 specification | ||
265 | <http://www.opengroup.org/susv3xsh/lseek.html>. */ | ||
266 | # define lseek rpl_lseek | ||
267 | extern off_t lseek (int fd, off_t offset, int whence); | ||
268 | # endif | ||
269 | #elif defined GNULIB_POSIXCHECK | ||
270 | # undef lseek | ||
271 | # define lseek(f,o,w) \ | ||
272 | (GL_LINK_WARNING ("lseek does not fail with ESPIPE on pipes on some " \ | ||
273 | "systems - use gnulib module lseek for portability"), \ | ||
274 | lseek (f, o, w)) | ||
275 | #endif | ||
276 | |||
277 | |||
278 | #if @GNULIB_READLINK@ | ||
279 | /* Read the contents of the symbolic link FILE and place the first BUFSIZE | ||
280 | bytes of it into BUF. Return the number of bytes placed into BUF if | ||
281 | successful, otherwise -1 and errno set. | ||
282 | See the POSIX:2001 specification | ||
283 | <http://www.opengroup.org/susv3xsh/readlink.html>. */ | ||
284 | # if !@HAVE_READLINK@ | ||
285 | # include <stddef.h> | ||
286 | extern int readlink (const char *file, char *buf, size_t bufsize); | ||
287 | # endif | ||
288 | #elif defined GNULIB_POSIXCHECK | ||
289 | # undef readlink | ||
290 | # define readlink(f,b,s) \ | ||
291 | (GL_LINK_WARNING ("readlink is unportable - " \ | ||
292 | "use gnulib module readlink for portability"), \ | ||
293 | readlink (f, b, s)) | ||
294 | #endif | ||
295 | |||
296 | |||
297 | #if @GNULIB_SLEEP@ | ||
298 | /* Pause the execution of the current thread for N seconds. | ||
299 | Returns the number of seconds left to sleep. | ||
300 | See the POSIX:2001 specification | ||
301 | <http://www.opengroup.org/susv3xsh/sleep.html>. */ | ||
302 | # if !@HAVE_SLEEP@ | ||
303 | extern unsigned int sleep (unsigned int n); | ||
304 | # endif | ||
305 | #elif defined GNULIB_POSIXCHECK | ||
306 | # undef sleep | ||
307 | # define sleep(n) \ | ||
308 | (GL_LINK_WARNING ("sleep is unportable - " \ | ||
309 | "use gnulib module sleep for portability"), \ | ||
310 | sleep (n)) | ||
311 | #endif | ||
312 | |||
313 | |||
314 | #ifdef __cplusplus | ||
315 | } | ||
316 | #endif | ||
317 | |||
318 | |||
319 | #endif /* _GL_UNISTD_H */ | ||
320 | #endif /* _GL_UNISTD_H */ | ||
diff --git a/gl/unistd_.h b/gl/unistd_.h deleted file mode 100644 index 36fa6731..00000000 --- a/gl/unistd_.h +++ /dev/null | |||
@@ -1,52 +0,0 @@ | |||
1 | /* Substitute for and wrapper around <unistd.h>. | ||
2 | Copyright (C) 2006 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program 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 | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | |||
18 | #ifndef _GL_UNISTD_H | ||
19 | #define _GL_UNISTD_H | ||
20 | |||
21 | #if HAVE_UNISTD_H | ||
22 | # include @ABSOLUTE_UNISTD_H@ | ||
23 | #endif | ||
24 | |||
25 | |||
26 | /* Declare overridden functions. */ | ||
27 | |||
28 | #ifdef __cplusplus | ||
29 | extern "C" { | ||
30 | #endif | ||
31 | |||
32 | #ifdef FCHDIR_REPLACEMENT | ||
33 | |||
34 | /* Change the process' current working directory to the directory on which | ||
35 | the given file descriptor is open. */ | ||
36 | extern int fchdir (int /*fd*/); | ||
37 | |||
38 | # define close rpl_close | ||
39 | extern int close (int); | ||
40 | # define dup rpl_dup | ||
41 | extern int dup (int); | ||
42 | # define dup2 rpl_dup2 | ||
43 | extern int dup2 (int, int); | ||
44 | |||
45 | #endif | ||
46 | |||
47 | #ifdef __cplusplus | ||
48 | } | ||
49 | #endif | ||
50 | |||
51 | |||
52 | #endif /* _GL_UNISTD_H */ | ||
diff --git a/gl/vasnprintf.c b/gl/vasnprintf.c index 0fe2aada..d5b40286 100644 --- a/gl/vasnprintf.c +++ b/gl/vasnprintf.c | |||
@@ -1,9 +1,9 @@ | |||
1 | /* vsprintf with automatic memory allocation. | 1 | /* vsprintf with automatic memory allocation. |
2 | Copyright (C) 1999, 2002-2006 Free Software Foundation, Inc. | 2 | Copyright (C) 1999, 2002-2008 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3, or (at your option) |
7 | any later version. | 7 | any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
@@ -15,6 +15,35 @@ | |||
15 | with this program; if not, write to the Free Software Foundation, | 15 | with this program; if not, write to the Free Software Foundation, |
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | 16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
17 | 17 | ||
18 | /* This file can be parametrized with the following macros: | ||
19 | VASNPRINTF The name of the function being defined. | ||
20 | FCHAR_T The element type of the format string. | ||
21 | DCHAR_T The element type of the destination (result) string. | ||
22 | FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters | ||
23 | in the format string are ASCII. MUST be set if | ||
24 | FCHAR_T and DCHAR_T are not the same type. | ||
25 | DIRECTIVE Structure denoting a format directive. | ||
26 | Depends on FCHAR_T. | ||
27 | DIRECTIVES Structure denoting the set of format directives of a | ||
28 | format string. Depends on FCHAR_T. | ||
29 | PRINTF_PARSE Function that parses a format string. | ||
30 | Depends on FCHAR_T. | ||
31 | DCHAR_CPY memcpy like function for DCHAR_T[] arrays. | ||
32 | DCHAR_SET memset like function for DCHAR_T[] arrays. | ||
33 | DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. | ||
34 | SNPRINTF The system's snprintf (or similar) function. | ||
35 | This may be either snprintf or swprintf. | ||
36 | TCHAR_T The element type of the argument and result string | ||
37 | of the said SNPRINTF function. This may be either | ||
38 | char or wchar_t. The code exploits that | ||
39 | sizeof (TCHAR_T) | sizeof (DCHAR_T) and | ||
40 | alignof (TCHAR_T) <= alignof (DCHAR_T). | ||
41 | DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. | ||
42 | DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. | ||
43 | DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. | ||
44 | DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. | ||
45 | DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. */ | ||
46 | |||
18 | /* Tell glibc's <stdio.h> to provide a prototype for snprintf(). | 47 | /* Tell glibc's <stdio.h> to provide a prototype for snprintf(). |
19 | This must come before <config.h> because <config.h> may include | 48 | This must come before <config.h> because <config.h> may include |
20 | <features.h>, and once <features.h> has been included, it's too late. */ | 49 | <features.h>, and once <features.h> has been included, it's too late. */ |
@@ -22,35 +51,79 @@ | |||
22 | # define _GNU_SOURCE 1 | 51 | # define _GNU_SOURCE 1 |
23 | #endif | 52 | #endif |
24 | 53 | ||
25 | #include <config.h> | 54 | #ifndef VASNPRINTF |
55 | # include <config.h> | ||
56 | #endif | ||
26 | #ifndef IN_LIBINTL | 57 | #ifndef IN_LIBINTL |
27 | # include <alloca.h> | 58 | # include <alloca.h> |
28 | #endif | 59 | #endif |
29 | 60 | ||
30 | /* Specification. */ | 61 | /* Specification. */ |
31 | #if WIDE_CHAR_VERSION | 62 | #ifndef VASNPRINTF |
32 | # include "vasnwprintf.h" | 63 | # if WIDE_CHAR_VERSION |
33 | #else | 64 | # include "vasnwprintf.h" |
34 | # include "vasnprintf.h" | 65 | # else |
66 | # include "vasnprintf.h" | ||
67 | # endif | ||
35 | #endif | 68 | #endif |
36 | 69 | ||
70 | #include <locale.h> /* localeconv() */ | ||
37 | #include <stdio.h> /* snprintf(), sprintf() */ | 71 | #include <stdio.h> /* snprintf(), sprintf() */ |
38 | #include <stdlib.h> /* abort(), malloc(), realloc(), free() */ | 72 | #include <stdlib.h> /* abort(), malloc(), realloc(), free() */ |
39 | #include <string.h> /* memcpy(), strlen() */ | 73 | #include <string.h> /* memcpy(), strlen() */ |
40 | #include <errno.h> /* errno */ | 74 | #include <errno.h> /* errno */ |
41 | #include <limits.h> /* CHAR_BIT */ | 75 | #include <limits.h> /* CHAR_BIT */ |
42 | #include <float.h> /* DBL_MAX_EXP, LDBL_MAX_EXP */ | 76 | #include <float.h> /* DBL_MAX_EXP, LDBL_MAX_EXP */ |
43 | #if WIDE_CHAR_VERSION | 77 | #if HAVE_NL_LANGINFO |
44 | # include "wprintf-parse.h" | 78 | # include <langinfo.h> |
45 | #else | 79 | #endif |
46 | # include "printf-parse.h" | 80 | #ifndef VASNPRINTF |
81 | # if WIDE_CHAR_VERSION | ||
82 | # include "wprintf-parse.h" | ||
83 | # else | ||
84 | # include "printf-parse.h" | ||
85 | # endif | ||
47 | #endif | 86 | #endif |
48 | 87 | ||
49 | /* Checked size_t computations. */ | 88 | /* Checked size_t computations. */ |
50 | #include "xsize.h" | 89 | #include "xsize.h" |
51 | 90 | ||
52 | #ifdef HAVE_WCHAR_T | 91 | #if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL |
53 | # ifdef HAVE_WCSLEN | 92 | # include <math.h> |
93 | # include "float+.h" | ||
94 | #endif | ||
95 | |||
96 | #if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL | ||
97 | # include <math.h> | ||
98 | # include "isnand.h" | ||
99 | #endif | ||
100 | |||
101 | #if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL | ||
102 | # include <math.h> | ||
103 | # include "isnanl-nolibm.h" | ||
104 | # include "fpucw.h" | ||
105 | #endif | ||
106 | |||
107 | #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL | ||
108 | # include <math.h> | ||
109 | # include "isnand.h" | ||
110 | # include "printf-frexp.h" | ||
111 | #endif | ||
112 | |||
113 | #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL | ||
114 | # include <math.h> | ||
115 | # include "isnanl-nolibm.h" | ||
116 | # include "printf-frexpl.h" | ||
117 | # include "fpucw.h" | ||
118 | #endif | ||
119 | |||
120 | /* Some systems, like OSF/1 4.0 and Woe32, don't have EOVERFLOW. */ | ||
121 | #ifndef EOVERFLOW | ||
122 | # define EOVERFLOW E2BIG | ||
123 | #endif | ||
124 | |||
125 | #if HAVE_WCHAR_T | ||
126 | # if HAVE_WCSLEN | ||
54 | # define local_wcslen wcslen | 127 | # define local_wcslen wcslen |
55 | # else | 128 | # else |
56 | /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid | 129 | /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid |
@@ -72,12 +145,32 @@ local_wcslen (const wchar_t *s) | |||
72 | # endif | 145 | # endif |
73 | #endif | 146 | #endif |
74 | 147 | ||
148 | /* Default parameters. */ | ||
149 | #ifndef VASNPRINTF | ||
150 | # if WIDE_CHAR_VERSION | ||
151 | # define VASNPRINTF vasnwprintf | ||
152 | # define FCHAR_T wchar_t | ||
153 | # define DCHAR_T wchar_t | ||
154 | # define TCHAR_T wchar_t | ||
155 | # define DCHAR_IS_TCHAR 1 | ||
156 | # define DIRECTIVE wchar_t_directive | ||
157 | # define DIRECTIVES wchar_t_directives | ||
158 | # define PRINTF_PARSE wprintf_parse | ||
159 | # define DCHAR_CPY wmemcpy | ||
160 | # else | ||
161 | # define VASNPRINTF vasnprintf | ||
162 | # define FCHAR_T char | ||
163 | # define DCHAR_T char | ||
164 | # define TCHAR_T char | ||
165 | # define DCHAR_IS_TCHAR 1 | ||
166 | # define DIRECTIVE char_directive | ||
167 | # define DIRECTIVES char_directives | ||
168 | # define PRINTF_PARSE printf_parse | ||
169 | # define DCHAR_CPY memcpy | ||
170 | # endif | ||
171 | #endif | ||
75 | #if WIDE_CHAR_VERSION | 172 | #if WIDE_CHAR_VERSION |
76 | # define VASNPRINTF vasnwprintf | 173 | /* TCHAR_T is wchar_t. */ |
77 | # define CHAR_T wchar_t | ||
78 | # define DIRECTIVE wchar_t_directive | ||
79 | # define DIRECTIVES wchar_t_directives | ||
80 | # define PRINTF_PARSE wprintf_parse | ||
81 | # define USE_SNPRINTF 1 | 174 | # define USE_SNPRINTF 1 |
82 | # if HAVE_DECL__SNWPRINTF | 175 | # if HAVE_DECL__SNWPRINTF |
83 | /* On Windows, the function swprintf() has a different signature than | 176 | /* On Windows, the function swprintf() has a different signature than |
@@ -88,39 +181,1253 @@ local_wcslen (const wchar_t *s) | |||
88 | # define SNPRINTF swprintf | 181 | # define SNPRINTF swprintf |
89 | # endif | 182 | # endif |
90 | #else | 183 | #else |
91 | # define VASNPRINTF vasnprintf | 184 | /* TCHAR_T is char. */ |
92 | # define CHAR_T char | 185 | # /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. |
93 | # define DIRECTIVE char_directive | 186 | But don't use it on BeOS, since BeOS snprintf produces no output if the |
94 | # define DIRECTIVES char_directives | 187 | size argument is >= 0x3000000. */ |
95 | # define PRINTF_PARSE printf_parse | 188 | # if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ |
96 | # define USE_SNPRINTF (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) | 189 | # define USE_SNPRINTF 1 |
190 | # else | ||
191 | # define USE_SNPRINTF 0 | ||
192 | # endif | ||
97 | # if HAVE_DECL__SNPRINTF | 193 | # if HAVE_DECL__SNPRINTF |
98 | /* Windows. */ | 194 | /* Windows. */ |
99 | # define SNPRINTF _snprintf | 195 | # define SNPRINTF _snprintf |
100 | # else | 196 | # else |
101 | /* Unix. */ | 197 | /* Unix. */ |
102 | # define SNPRINTF snprintf | 198 | # define SNPRINTF snprintf |
199 | /* Here we need to call the native snprintf, not rpl_snprintf. */ | ||
200 | # undef snprintf | ||
103 | # endif | 201 | # endif |
104 | #endif | 202 | #endif |
203 | /* Here we need to call the native sprintf, not rpl_sprintf. */ | ||
204 | #undef sprintf | ||
105 | 205 | ||
106 | CHAR_T * | 206 | #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL |
107 | VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list args) | 207 | /* Determine the decimal-point character according to the current locale. */ |
208 | # ifndef decimal_point_char_defined | ||
209 | # define decimal_point_char_defined 1 | ||
210 | static char | ||
211 | decimal_point_char () | ||
108 | { | 212 | { |
109 | DIRECTIVES d; | 213 | const char *point; |
110 | arguments a; | 214 | /* Determine it in a multithread-safe way. We know nl_langinfo is |
215 | multithread-safe on glibc systems, but is not required to be multithread- | ||
216 | safe by POSIX. sprintf(), however, is multithread-safe. localeconv() | ||
217 | is rarely multithread-safe. */ | ||
218 | # if HAVE_NL_LANGINFO && __GLIBC__ | ||
219 | point = nl_langinfo (RADIXCHAR); | ||
220 | # elif 1 | ||
221 | char pointbuf[5]; | ||
222 | sprintf (pointbuf, "%#.0f", 1.0); | ||
223 | point = &pointbuf[1]; | ||
224 | # else | ||
225 | point = localeconv () -> decimal_point; | ||
226 | # endif | ||
227 | /* The decimal point is always a single byte: either '.' or ','. */ | ||
228 | return (point[0] != '\0' ? point[0] : '.'); | ||
229 | } | ||
230 | # endif | ||
231 | #endif | ||
111 | 232 | ||
112 | if (PRINTF_PARSE (format, &d, &a) < 0) | 233 | #if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL |
234 | |||
235 | /* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ | ||
236 | static int | ||
237 | is_infinite_or_zero (double x) | ||
238 | { | ||
239 | return isnand (x) || x + x == x; | ||
240 | } | ||
241 | |||
242 | #endif | ||
243 | |||
244 | #if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL | ||
245 | |||
246 | /* Equivalent to !isfinite(x), but does not require libm. */ | ||
247 | static int | ||
248 | is_infinitel (long double x) | ||
249 | { | ||
250 | return isnanl (x) || (x + x == x && x != 0.0L); | ||
251 | } | ||
252 | |||
253 | #endif | ||
254 | |||
255 | #if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL | ||
256 | |||
257 | /* Converting 'long double' to decimal without rare rounding bugs requires | ||
258 | real bignums. We use the naming conventions of GNU gmp, but vastly simpler | ||
259 | (and slower) algorithms. */ | ||
260 | |||
261 | typedef unsigned int mp_limb_t; | ||
262 | # define GMP_LIMB_BITS 32 | ||
263 | typedef int mp_limb_verify[2 * (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS) - 1]; | ||
264 | |||
265 | typedef unsigned long long mp_twolimb_t; | ||
266 | # define GMP_TWOLIMB_BITS 64 | ||
267 | typedef int mp_twolimb_verify[2 * (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS) - 1]; | ||
268 | |||
269 | /* Representation of a bignum >= 0. */ | ||
270 | typedef struct | ||
271 | { | ||
272 | size_t nlimbs; | ||
273 | mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ | ||
274 | } mpn_t; | ||
275 | |||
276 | /* Compute the product of two bignums >= 0. | ||
277 | Return the allocated memory in case of success, NULL in case of memory | ||
278 | allocation failure. */ | ||
279 | static void * | ||
280 | multiply (mpn_t src1, mpn_t src2, mpn_t *dest) | ||
281 | { | ||
282 | const mp_limb_t *p1; | ||
283 | const mp_limb_t *p2; | ||
284 | size_t len1; | ||
285 | size_t len2; | ||
286 | |||
287 | if (src1.nlimbs <= src2.nlimbs) | ||
113 | { | 288 | { |
114 | errno = EINVAL; | 289 | len1 = src1.nlimbs; |
290 | p1 = src1.limbs; | ||
291 | len2 = src2.nlimbs; | ||
292 | p2 = src2.limbs; | ||
293 | } | ||
294 | else | ||
295 | { | ||
296 | len1 = src2.nlimbs; | ||
297 | p1 = src2.limbs; | ||
298 | len2 = src1.nlimbs; | ||
299 | p2 = src1.limbs; | ||
300 | } | ||
301 | /* Now 0 <= len1 <= len2. */ | ||
302 | if (len1 == 0) | ||
303 | { | ||
304 | /* src1 or src2 is zero. */ | ||
305 | dest->nlimbs = 0; | ||
306 | dest->limbs = (mp_limb_t *) malloc (1); | ||
307 | } | ||
308 | else | ||
309 | { | ||
310 | /* Here 1 <= len1 <= len2. */ | ||
311 | size_t dlen; | ||
312 | mp_limb_t *dp; | ||
313 | size_t k, i, j; | ||
314 | |||
315 | dlen = len1 + len2; | ||
316 | dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); | ||
317 | if (dp == NULL) | ||
318 | return NULL; | ||
319 | for (k = len2; k > 0; ) | ||
320 | dp[--k] = 0; | ||
321 | for (i = 0; i < len1; i++) | ||
322 | { | ||
323 | mp_limb_t digit1 = p1[i]; | ||
324 | mp_twolimb_t carry = 0; | ||
325 | for (j = 0; j < len2; j++) | ||
326 | { | ||
327 | mp_limb_t digit2 = p2[j]; | ||
328 | carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; | ||
329 | carry += dp[i + j]; | ||
330 | dp[i + j] = (mp_limb_t) carry; | ||
331 | carry = carry >> GMP_LIMB_BITS; | ||
332 | } | ||
333 | dp[i + len2] = (mp_limb_t) carry; | ||
334 | } | ||
335 | /* Normalise. */ | ||
336 | while (dlen > 0 && dp[dlen - 1] == 0) | ||
337 | dlen--; | ||
338 | dest->nlimbs = dlen; | ||
339 | dest->limbs = dp; | ||
340 | } | ||
341 | return dest->limbs; | ||
342 | } | ||
343 | |||
344 | /* Compute the quotient of a bignum a >= 0 and a bignum b > 0. | ||
345 | a is written as a = q * b + r with 0 <= r < b. q is the quotient, r | ||
346 | the remainder. | ||
347 | Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, | ||
348 | q is incremented. | ||
349 | Return the allocated memory in case of success, NULL in case of memory | ||
350 | allocation failure. */ | ||
351 | static void * | ||
352 | divide (mpn_t a, mpn_t b, mpn_t *q) | ||
353 | { | ||
354 | /* Algorithm: | ||
355 | First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] | ||
356 | with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). | ||
357 | If m<n, then q:=0 and r:=a. | ||
358 | If m>=n=1, perform a single-precision division: | ||
359 | r:=0, j:=m, | ||
360 | while j>0 do | ||
361 | {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = | ||
362 | = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r<b[0]<beta} | ||
363 | j:=j-1, r:=r*beta+a[j], q[j]:=floor(r/b[0]), r:=r-b[0]*q[j]. | ||
364 | Normalise [q[m-1],...,q[0]], yields q. | ||
365 | If m>=n>1, perform a multiple-precision division: | ||
366 | We have a/b < beta^(m-n+1). | ||
367 | s:=intDsize-1-(hightest bit in b[n-1]), 0<=s<intDsize. | ||
368 | Shift a and b left by s bits, copying them. r:=a. | ||
369 | r=[r[m],...,r[0]], b=[b[n-1],...,b[0]] with b[n-1]>=beta/2. | ||
370 | For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} | ||
371 | Compute q* : | ||
372 | q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). | ||
373 | In case of overflow (q* >= beta) set q* := beta-1. | ||
374 | Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] | ||
375 | and c3 := b[n-2] * q*. | ||
376 | {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow | ||
377 | occurred. Furthermore 0 <= c3 < beta^2. | ||
378 | If there was overflow and | ||
379 | r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, | ||
380 | the next test can be skipped.} | ||
381 | While c3 > c2, {Here 0 <= c2 < c3 < beta^2} | ||
382 | Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. | ||
383 | If q* > 0: | ||
384 | Put r := r - b * q* * beta^j. In detail: | ||
385 | [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. | ||
386 | hence: u:=0, for i:=0 to n-1 do | ||
387 | u := u + q* * b[i], | ||
388 | r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), | ||
389 | u:=u div beta (+ 1, if carry in subtraction) | ||
390 | r[n+j]:=r[n+j]-u. | ||
391 | {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 | ||
392 | < q* + 1 <= beta, | ||
393 | the carry u does not overflow.} | ||
394 | If a negative carry occurs, put q* := q* - 1 | ||
395 | and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. | ||
396 | Set q[j] := q*. | ||
397 | Normalise [q[m-n],..,q[0]]; this yields the quotient q. | ||
398 | Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the | ||
399 | rest r. | ||
400 | The room for q[j] can be allocated at the memory location of r[n+j]. | ||
401 | Finally, round-to-even: | ||
402 | Shift r left by 1 bit. | ||
403 | If r > b or if r = b and q[0] is odd, q := q+1. | ||
404 | */ | ||
405 | const mp_limb_t *a_ptr = a.limbs; | ||
406 | size_t a_len = a.nlimbs; | ||
407 | const mp_limb_t *b_ptr = b.limbs; | ||
408 | size_t b_len = b.nlimbs; | ||
409 | mp_limb_t *roomptr; | ||
410 | mp_limb_t *tmp_roomptr = NULL; | ||
411 | mp_limb_t *q_ptr; | ||
412 | size_t q_len; | ||
413 | mp_limb_t *r_ptr; | ||
414 | size_t r_len; | ||
415 | |||
416 | /* Allocate room for a_len+2 digits. | ||
417 | (Need a_len+1 digits for the real division and 1 more digit for the | ||
418 | final rounding of q.) */ | ||
419 | roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); | ||
420 | if (roomptr == NULL) | ||
421 | return NULL; | ||
422 | |||
423 | /* Normalise a. */ | ||
424 | while (a_len > 0 && a_ptr[a_len - 1] == 0) | ||
425 | a_len--; | ||
426 | |||
427 | /* Normalise b. */ | ||
428 | for (;;) | ||
429 | { | ||
430 | if (b_len == 0) | ||
431 | /* Division by zero. */ | ||
432 | abort (); | ||
433 | if (b_ptr[b_len - 1] == 0) | ||
434 | b_len--; | ||
435 | else | ||
436 | break; | ||
437 | } | ||
438 | |||
439 | /* Here m = a_len >= 0 and n = b_len > 0. */ | ||
440 | |||
441 | if (a_len < b_len) | ||
442 | { | ||
443 | /* m<n: trivial case. q=0, r := copy of a. */ | ||
444 | r_ptr = roomptr; | ||
445 | r_len = a_len; | ||
446 | memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); | ||
447 | q_ptr = roomptr + a_len; | ||
448 | q_len = 0; | ||
449 | } | ||
450 | else if (b_len == 1) | ||
451 | { | ||
452 | /* n=1: single precision division. | ||
453 | beta^(m-1) <= a < beta^m ==> beta^(m-2) <= a/b < beta^m */ | ||
454 | r_ptr = roomptr; | ||
455 | q_ptr = roomptr + 1; | ||
456 | { | ||
457 | mp_limb_t den = b_ptr[0]; | ||
458 | mp_limb_t remainder = 0; | ||
459 | const mp_limb_t *sourceptr = a_ptr + a_len; | ||
460 | mp_limb_t *destptr = q_ptr + a_len; | ||
461 | size_t count; | ||
462 | for (count = a_len; count > 0; count--) | ||
463 | { | ||
464 | mp_twolimb_t num = | ||
465 | ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; | ||
466 | *--destptr = num / den; | ||
467 | remainder = num % den; | ||
468 | } | ||
469 | /* Normalise and store r. */ | ||
470 | if (remainder > 0) | ||
471 | { | ||
472 | r_ptr[0] = remainder; | ||
473 | r_len = 1; | ||
474 | } | ||
475 | else | ||
476 | r_len = 0; | ||
477 | /* Normalise q. */ | ||
478 | q_len = a_len; | ||
479 | if (q_ptr[q_len - 1] == 0) | ||
480 | q_len--; | ||
481 | } | ||
482 | } | ||
483 | else | ||
484 | { | ||
485 | /* n>1: multiple precision division. | ||
486 | beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> | ||
487 | beta^(m-n-1) <= a/b < beta^(m-n+1). */ | ||
488 | /* Determine s. */ | ||
489 | size_t s; | ||
490 | { | ||
491 | mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ | ||
492 | s = 31; | ||
493 | if (msd >= 0x10000) | ||
494 | { | ||
495 | msd = msd >> 16; | ||
496 | s -= 16; | ||
497 | } | ||
498 | if (msd >= 0x100) | ||
499 | { | ||
500 | msd = msd >> 8; | ||
501 | s -= 8; | ||
502 | } | ||
503 | if (msd >= 0x10) | ||
504 | { | ||
505 | msd = msd >> 4; | ||
506 | s -= 4; | ||
507 | } | ||
508 | if (msd >= 0x4) | ||
509 | { | ||
510 | msd = msd >> 2; | ||
511 | s -= 2; | ||
512 | } | ||
513 | if (msd >= 0x2) | ||
514 | { | ||
515 | msd = msd >> 1; | ||
516 | s -= 1; | ||
517 | } | ||
518 | } | ||
519 | /* 0 <= s < GMP_LIMB_BITS. | ||
520 | Copy b, shifting it left by s bits. */ | ||
521 | if (s > 0) | ||
522 | { | ||
523 | tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); | ||
524 | if (tmp_roomptr == NULL) | ||
525 | { | ||
526 | free (roomptr); | ||
527 | return NULL; | ||
528 | } | ||
529 | { | ||
530 | const mp_limb_t *sourceptr = b_ptr; | ||
531 | mp_limb_t *destptr = tmp_roomptr; | ||
532 | mp_twolimb_t accu = 0; | ||
533 | size_t count; | ||
534 | for (count = b_len; count > 0; count--) | ||
535 | { | ||
536 | accu += (mp_twolimb_t) *sourceptr++ << s; | ||
537 | *destptr++ = (mp_limb_t) accu; | ||
538 | accu = accu >> GMP_LIMB_BITS; | ||
539 | } | ||
540 | /* accu must be zero, since that was how s was determined. */ | ||
541 | if (accu != 0) | ||
542 | abort (); | ||
543 | } | ||
544 | b_ptr = tmp_roomptr; | ||
545 | } | ||
546 | /* Copy a, shifting it left by s bits, yields r. | ||
547 | Memory layout: | ||
548 | At the beginning: r = roomptr[0..a_len], | ||
549 | at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ | ||
550 | r_ptr = roomptr; | ||
551 | if (s == 0) | ||
552 | { | ||
553 | memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); | ||
554 | r_ptr[a_len] = 0; | ||
555 | } | ||
556 | else | ||
557 | { | ||
558 | const mp_limb_t *sourceptr = a_ptr; | ||
559 | mp_limb_t *destptr = r_ptr; | ||
560 | mp_twolimb_t accu = 0; | ||
561 | size_t count; | ||
562 | for (count = a_len; count > 0; count--) | ||
563 | { | ||
564 | accu += (mp_twolimb_t) *sourceptr++ << s; | ||
565 | *destptr++ = (mp_limb_t) accu; | ||
566 | accu = accu >> GMP_LIMB_BITS; | ||
567 | } | ||
568 | *destptr++ = (mp_limb_t) accu; | ||
569 | } | ||
570 | q_ptr = roomptr + b_len; | ||
571 | q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ | ||
572 | { | ||
573 | size_t j = a_len - b_len; /* m-n */ | ||
574 | mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ | ||
575 | mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ | ||
576 | mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ | ||
577 | ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; | ||
578 | /* Division loop, traversed m-n+1 times. | ||
579 | j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ | ||
580 | for (;;) | ||
581 | { | ||
582 | mp_limb_t q_star; | ||
583 | mp_limb_t c1; | ||
584 | if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ | ||
585 | { | ||
586 | /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ | ||
587 | mp_twolimb_t num = | ||
588 | ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) | ||
589 | | r_ptr[j + b_len - 1]; | ||
590 | q_star = num / b_msd; | ||
591 | c1 = num % b_msd; | ||
592 | } | ||
593 | else | ||
594 | { | ||
595 | /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ | ||
596 | q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ | ||
597 | /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta | ||
598 | <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta | ||
599 | <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) | ||
600 | {<= beta !}. | ||
601 | If yes, jump directly to the subtraction loop. | ||
602 | (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta | ||
603 | <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ | ||
604 | if (r_ptr[j + b_len] > b_msd | ||
605 | || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) | ||
606 | /* r[j+n] >= b[n-1]+1 or | ||
607 | r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a | ||
608 | carry. */ | ||
609 | goto subtract; | ||
610 | } | ||
611 | /* q_star = q*, | ||
612 | c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, <beta). */ | ||
613 | { | ||
614 | mp_twolimb_t c2 = /* c1*beta+r[j+n-2] */ | ||
615 | ((mp_twolimb_t) c1 << GMP_LIMB_BITS) | r_ptr[j + b_len - 2]; | ||
616 | mp_twolimb_t c3 = /* b[n-2] * q* */ | ||
617 | (mp_twolimb_t) b_2msd * (mp_twolimb_t) q_star; | ||
618 | /* While c2 < c3, increase c2 and decrease c3. | ||
619 | Consider c3-c2. While it is > 0, decrease it by | ||
620 | b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 | ||
621 | this can happen only twice. */ | ||
622 | if (c3 > c2) | ||
623 | { | ||
624 | q_star = q_star - 1; /* q* := q* - 1 */ | ||
625 | if (c3 - c2 > b_msdd) | ||
626 | q_star = q_star - 1; /* q* := q* - 1 */ | ||
627 | } | ||
628 | } | ||
629 | if (q_star > 0) | ||
630 | subtract: | ||
631 | { | ||
632 | /* Subtract r := r - b * q* * beta^j. */ | ||
633 | mp_limb_t cr; | ||
634 | { | ||
635 | const mp_limb_t *sourceptr = b_ptr; | ||
636 | mp_limb_t *destptr = r_ptr + j; | ||
637 | mp_twolimb_t carry = 0; | ||
638 | size_t count; | ||
639 | for (count = b_len; count > 0; count--) | ||
640 | { | ||
641 | /* Here 0 <= carry <= q*. */ | ||
642 | carry = | ||
643 | carry | ||
644 | + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ | ||
645 | + (mp_limb_t) ~(*destptr); | ||
646 | /* Here 0 <= carry <= beta*q* + beta-1. */ | ||
647 | *destptr++ = ~(mp_limb_t) carry; | ||
648 | carry = carry >> GMP_LIMB_BITS; /* <= q* */ | ||
649 | } | ||
650 | cr = (mp_limb_t) carry; | ||
651 | } | ||
652 | /* Subtract cr from r_ptr[j + b_len], then forget about | ||
653 | r_ptr[j + b_len]. */ | ||
654 | if (cr > r_ptr[j + b_len]) | ||
655 | { | ||
656 | /* Subtraction gave a carry. */ | ||
657 | q_star = q_star - 1; /* q* := q* - 1 */ | ||
658 | /* Add b back. */ | ||
659 | { | ||
660 | const mp_limb_t *sourceptr = b_ptr; | ||
661 | mp_limb_t *destptr = r_ptr + j; | ||
662 | mp_limb_t carry = 0; | ||
663 | size_t count; | ||
664 | for (count = b_len; count > 0; count--) | ||
665 | { | ||
666 | mp_limb_t source1 = *sourceptr++; | ||
667 | mp_limb_t source2 = *destptr; | ||
668 | *destptr++ = source1 + source2 + carry; | ||
669 | carry = | ||
670 | (carry | ||
671 | ? source1 >= (mp_limb_t) ~source2 | ||
672 | : source1 > (mp_limb_t) ~source2); | ||
673 | } | ||
674 | } | ||
675 | /* Forget about the carry and about r[j+n]. */ | ||
676 | } | ||
677 | } | ||
678 | /* q* is determined. Store it as q[j]. */ | ||
679 | q_ptr[j] = q_star; | ||
680 | if (j == 0) | ||
681 | break; | ||
682 | j--; | ||
683 | } | ||
684 | } | ||
685 | r_len = b_len; | ||
686 | /* Normalise q. */ | ||
687 | if (q_ptr[q_len - 1] == 0) | ||
688 | q_len--; | ||
689 | # if 0 /* Not needed here, since we need r only to compare it with b/2, and | ||
690 | b is shifted left by s bits. */ | ||
691 | /* Shift r right by s bits. */ | ||
692 | if (s > 0) | ||
693 | { | ||
694 | mp_limb_t ptr = r_ptr + r_len; | ||
695 | mp_twolimb_t accu = 0; | ||
696 | size_t count; | ||
697 | for (count = r_len; count > 0; count--) | ||
698 | { | ||
699 | accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; | ||
700 | accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); | ||
701 | *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); | ||
702 | } | ||
703 | } | ||
704 | # endif | ||
705 | /* Normalise r. */ | ||
706 | while (r_len > 0 && r_ptr[r_len - 1] == 0) | ||
707 | r_len--; | ||
708 | } | ||
709 | /* Compare r << 1 with b. */ | ||
710 | if (r_len > b_len) | ||
711 | goto increment_q; | ||
712 | { | ||
713 | size_t i; | ||
714 | for (i = b_len;;) | ||
715 | { | ||
716 | mp_limb_t r_i = | ||
717 | (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) | ||
718 | | (i < r_len ? r_ptr[i] << 1 : 0); | ||
719 | mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); | ||
720 | if (r_i > b_i) | ||
721 | goto increment_q; | ||
722 | if (r_i < b_i) | ||
723 | goto keep_q; | ||
724 | if (i == 0) | ||
725 | break; | ||
726 | i--; | ||
727 | } | ||
728 | } | ||
729 | if (q_len > 0 && ((q_ptr[0] & 1) != 0)) | ||
730 | /* q is odd. */ | ||
731 | increment_q: | ||
732 | { | ||
733 | size_t i; | ||
734 | for (i = 0; i < q_len; i++) | ||
735 | if (++(q_ptr[i]) != 0) | ||
736 | goto keep_q; | ||
737 | q_ptr[q_len++] = 1; | ||
738 | } | ||
739 | keep_q: | ||
740 | if (tmp_roomptr != NULL) | ||
741 | free (tmp_roomptr); | ||
742 | q->limbs = q_ptr; | ||
743 | q->nlimbs = q_len; | ||
744 | return roomptr; | ||
745 | } | ||
746 | |||
747 | /* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal | ||
748 | representation. | ||
749 | Destroys the contents of a. | ||
750 | Return the allocated memory - containing the decimal digits in low-to-high | ||
751 | order, terminated with a NUL character - in case of success, NULL in case | ||
752 | of memory allocation failure. */ | ||
753 | static char * | ||
754 | convert_to_decimal (mpn_t a, size_t extra_zeroes) | ||
755 | { | ||
756 | mp_limb_t *a_ptr = a.limbs; | ||
757 | size_t a_len = a.nlimbs; | ||
758 | /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ | ||
759 | size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); | ||
760 | char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes)); | ||
761 | if (c_ptr != NULL) | ||
762 | { | ||
763 | char *d_ptr = c_ptr; | ||
764 | for (; extra_zeroes > 0; extra_zeroes--) | ||
765 | *d_ptr++ = '0'; | ||
766 | while (a_len > 0) | ||
767 | { | ||
768 | /* Divide a by 10^9, in-place. */ | ||
769 | mp_limb_t remainder = 0; | ||
770 | mp_limb_t *ptr = a_ptr + a_len; | ||
771 | size_t count; | ||
772 | for (count = a_len; count > 0; count--) | ||
773 | { | ||
774 | mp_twolimb_t num = | ||
775 | ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; | ||
776 | *ptr = num / 1000000000; | ||
777 | remainder = num % 1000000000; | ||
778 | } | ||
779 | /* Store the remainder as 9 decimal digits. */ | ||
780 | for (count = 9; count > 0; count--) | ||
781 | { | ||
782 | *d_ptr++ = '0' + (remainder % 10); | ||
783 | remainder = remainder / 10; | ||
784 | } | ||
785 | /* Normalize a. */ | ||
786 | if (a_ptr[a_len - 1] == 0) | ||
787 | a_len--; | ||
788 | } | ||
789 | /* Remove leading zeroes. */ | ||
790 | while (d_ptr > c_ptr && d_ptr[-1] == '0') | ||
791 | d_ptr--; | ||
792 | /* But keep at least one zero. */ | ||
793 | if (d_ptr == c_ptr) | ||
794 | *d_ptr++ = '0'; | ||
795 | /* Terminate the string. */ | ||
796 | *d_ptr = '\0'; | ||
797 | } | ||
798 | return c_ptr; | ||
799 | } | ||
800 | |||
801 | # if NEED_PRINTF_LONG_DOUBLE | ||
802 | |||
803 | /* Assuming x is finite and >= 0: | ||
804 | write x as x = 2^e * m, where m is a bignum. | ||
805 | Return the allocated memory in case of success, NULL in case of memory | ||
806 | allocation failure. */ | ||
807 | static void * | ||
808 | decode_long_double (long double x, int *ep, mpn_t *mp) | ||
809 | { | ||
810 | mpn_t m; | ||
811 | int exp; | ||
812 | long double y; | ||
813 | size_t i; | ||
814 | |||
815 | /* Allocate memory for result. */ | ||
816 | m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; | ||
817 | m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); | ||
818 | if (m.limbs == NULL) | ||
819 | return NULL; | ||
820 | /* Split into exponential part and mantissa. */ | ||
821 | y = frexpl (x, &exp); | ||
822 | if (!(y >= 0.0L && y < 1.0L)) | ||
823 | abort (); | ||
824 | /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * LDBL_MANT_BIT), and the | ||
825 | latter is an integer. */ | ||
826 | /* Convert the mantissa (y * LDBL_MANT_BIT) to a sequence of limbs. | ||
827 | I'm not sure whether it's safe to cast a 'long double' value between | ||
828 | 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only | ||
829 | 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', | ||
830 | doesn't matter). */ | ||
831 | # if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 | ||
832 | # if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 | ||
833 | { | ||
834 | mp_limb_t hi, lo; | ||
835 | y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); | ||
836 | hi = (int) y; | ||
837 | y -= hi; | ||
838 | if (!(y >= 0.0L && y < 1.0L)) | ||
839 | abort (); | ||
840 | y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); | ||
841 | lo = (int) y; | ||
842 | y -= lo; | ||
843 | if (!(y >= 0.0L && y < 1.0L)) | ||
844 | abort (); | ||
845 | m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; | ||
846 | } | ||
847 | # else | ||
848 | { | ||
849 | mp_limb_t d; | ||
850 | y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); | ||
851 | d = (int) y; | ||
852 | y -= d; | ||
853 | if (!(y >= 0.0L && y < 1.0L)) | ||
854 | abort (); | ||
855 | m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; | ||
856 | } | ||
857 | # endif | ||
858 | # endif | ||
859 | for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) | ||
860 | { | ||
861 | mp_limb_t hi, lo; | ||
862 | y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); | ||
863 | hi = (int) y; | ||
864 | y -= hi; | ||
865 | if (!(y >= 0.0L && y < 1.0L)) | ||
866 | abort (); | ||
867 | y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); | ||
868 | lo = (int) y; | ||
869 | y -= lo; | ||
870 | if (!(y >= 0.0L && y < 1.0L)) | ||
871 | abort (); | ||
872 | m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; | ||
873 | } | ||
874 | #if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess | ||
875 | precision. */ | ||
876 | if (!(y == 0.0L)) | ||
877 | abort (); | ||
878 | #endif | ||
879 | /* Normalise. */ | ||
880 | while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) | ||
881 | m.nlimbs--; | ||
882 | *mp = m; | ||
883 | *ep = exp - LDBL_MANT_BIT; | ||
884 | return m.limbs; | ||
885 | } | ||
886 | |||
887 | # endif | ||
888 | |||
889 | # if NEED_PRINTF_DOUBLE | ||
890 | |||
891 | /* Assuming x is finite and >= 0: | ||
892 | write x as x = 2^e * m, where m is a bignum. | ||
893 | Return the allocated memory in case of success, NULL in case of memory | ||
894 | allocation failure. */ | ||
895 | static void * | ||
896 | decode_double (double x, int *ep, mpn_t *mp) | ||
897 | { | ||
898 | mpn_t m; | ||
899 | int exp; | ||
900 | double y; | ||
901 | size_t i; | ||
902 | |||
903 | /* Allocate memory for result. */ | ||
904 | m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; | ||
905 | m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); | ||
906 | if (m.limbs == NULL) | ||
907 | return NULL; | ||
908 | /* Split into exponential part and mantissa. */ | ||
909 | y = frexp (x, &exp); | ||
910 | if (!(y >= 0.0 && y < 1.0)) | ||
911 | abort (); | ||
912 | /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * DBL_MANT_BIT), and the | ||
913 | latter is an integer. */ | ||
914 | /* Convert the mantissa (y * DBL_MANT_BIT) to a sequence of limbs. | ||
915 | I'm not sure whether it's safe to cast a 'double' value between | ||
916 | 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only | ||
917 | 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', | ||
918 | doesn't matter). */ | ||
919 | # if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 | ||
920 | # if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 | ||
921 | { | ||
922 | mp_limb_t hi, lo; | ||
923 | y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); | ||
924 | hi = (int) y; | ||
925 | y -= hi; | ||
926 | if (!(y >= 0.0 && y < 1.0)) | ||
927 | abort (); | ||
928 | y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); | ||
929 | lo = (int) y; | ||
930 | y -= lo; | ||
931 | if (!(y >= 0.0 && y < 1.0)) | ||
932 | abort (); | ||
933 | m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; | ||
934 | } | ||
935 | # else | ||
936 | { | ||
937 | mp_limb_t d; | ||
938 | y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); | ||
939 | d = (int) y; | ||
940 | y -= d; | ||
941 | if (!(y >= 0.0 && y < 1.0)) | ||
942 | abort (); | ||
943 | m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; | ||
944 | } | ||
945 | # endif | ||
946 | # endif | ||
947 | for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) | ||
948 | { | ||
949 | mp_limb_t hi, lo; | ||
950 | y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); | ||
951 | hi = (int) y; | ||
952 | y -= hi; | ||
953 | if (!(y >= 0.0 && y < 1.0)) | ||
954 | abort (); | ||
955 | y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); | ||
956 | lo = (int) y; | ||
957 | y -= lo; | ||
958 | if (!(y >= 0.0 && y < 1.0)) | ||
959 | abort (); | ||
960 | m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; | ||
961 | } | ||
962 | if (!(y == 0.0)) | ||
963 | abort (); | ||
964 | /* Normalise. */ | ||
965 | while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) | ||
966 | m.nlimbs--; | ||
967 | *mp = m; | ||
968 | *ep = exp - DBL_MANT_BIT; | ||
969 | return m.limbs; | ||
970 | } | ||
971 | |||
972 | # endif | ||
973 | |||
974 | /* Assuming x = 2^e * m is finite and >= 0, and n is an integer: | ||
975 | Returns the decimal representation of round (x * 10^n). | ||
976 | Return the allocated memory - containing the decimal digits in low-to-high | ||
977 | order, terminated with a NUL character - in case of success, NULL in case | ||
978 | of memory allocation failure. */ | ||
979 | static char * | ||
980 | scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) | ||
981 | { | ||
982 | int s; | ||
983 | size_t extra_zeroes; | ||
984 | unsigned int abs_n; | ||
985 | unsigned int abs_s; | ||
986 | mp_limb_t *pow5_ptr; | ||
987 | size_t pow5_len; | ||
988 | unsigned int s_limbs; | ||
989 | unsigned int s_bits; | ||
990 | mpn_t pow5; | ||
991 | mpn_t z; | ||
992 | void *z_memory; | ||
993 | char *digits; | ||
994 | |||
995 | if (memory == NULL) | ||
996 | return NULL; | ||
997 | /* x = 2^e * m, hence | ||
998 | y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) | ||
999 | = round (2^s * 5^n * m). */ | ||
1000 | s = e + n; | ||
1001 | extra_zeroes = 0; | ||
1002 | /* Factor out a common power of 10 if possible. */ | ||
1003 | if (s > 0 && n > 0) | ||
1004 | { | ||
1005 | extra_zeroes = (s < n ? s : n); | ||
1006 | s -= extra_zeroes; | ||
1007 | n -= extra_zeroes; | ||
1008 | } | ||
1009 | /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. | ||
1010 | Before converting to decimal, we need to compute | ||
1011 | z = round (2^s * 5^n * m). */ | ||
1012 | /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same | ||
1013 | sign. 2.322 is slightly larger than log(5)/log(2). */ | ||
1014 | abs_n = (n >= 0 ? n : -n); | ||
1015 | abs_s = (s >= 0 ? s : -s); | ||
1016 | pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 | ||
1017 | + abs_s / GMP_LIMB_BITS + 1) | ||
1018 | * sizeof (mp_limb_t)); | ||
1019 | if (pow5_ptr == NULL) | ||
1020 | { | ||
1021 | free (memory); | ||
115 | return NULL; | 1022 | return NULL; |
116 | } | 1023 | } |
1024 | /* Initialize with 1. */ | ||
1025 | pow5_ptr[0] = 1; | ||
1026 | pow5_len = 1; | ||
1027 | /* Multiply with 5^|n|. */ | ||
1028 | if (abs_n > 0) | ||
1029 | { | ||
1030 | static mp_limb_t const small_pow5[13 + 1] = | ||
1031 | { | ||
1032 | 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, | ||
1033 | 48828125, 244140625, 1220703125 | ||
1034 | }; | ||
1035 | unsigned int n13; | ||
1036 | for (n13 = 0; n13 <= abs_n; n13 += 13) | ||
1037 | { | ||
1038 | mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; | ||
1039 | size_t j; | ||
1040 | mp_twolimb_t carry = 0; | ||
1041 | for (j = 0; j < pow5_len; j++) | ||
1042 | { | ||
1043 | mp_limb_t digit2 = pow5_ptr[j]; | ||
1044 | carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; | ||
1045 | pow5_ptr[j] = (mp_limb_t) carry; | ||
1046 | carry = carry >> GMP_LIMB_BITS; | ||
1047 | } | ||
1048 | if (carry > 0) | ||
1049 | pow5_ptr[pow5_len++] = (mp_limb_t) carry; | ||
1050 | } | ||
1051 | } | ||
1052 | s_limbs = abs_s / GMP_LIMB_BITS; | ||
1053 | s_bits = abs_s % GMP_LIMB_BITS; | ||
1054 | if (n >= 0 ? s >= 0 : s <= 0) | ||
1055 | { | ||
1056 | /* Multiply with 2^|s|. */ | ||
1057 | if (s_bits > 0) | ||
1058 | { | ||
1059 | mp_limb_t *ptr = pow5_ptr; | ||
1060 | mp_twolimb_t accu = 0; | ||
1061 | size_t count; | ||
1062 | for (count = pow5_len; count > 0; count--) | ||
1063 | { | ||
1064 | accu += (mp_twolimb_t) *ptr << s_bits; | ||
1065 | *ptr++ = (mp_limb_t) accu; | ||
1066 | accu = accu >> GMP_LIMB_BITS; | ||
1067 | } | ||
1068 | if (accu > 0) | ||
1069 | { | ||
1070 | *ptr = (mp_limb_t) accu; | ||
1071 | pow5_len++; | ||
1072 | } | ||
1073 | } | ||
1074 | if (s_limbs > 0) | ||
1075 | { | ||
1076 | size_t count; | ||
1077 | for (count = pow5_len; count > 0;) | ||
1078 | { | ||
1079 | count--; | ||
1080 | pow5_ptr[s_limbs + count] = pow5_ptr[count]; | ||
1081 | } | ||
1082 | for (count = s_limbs; count > 0;) | ||
1083 | { | ||
1084 | count--; | ||
1085 | pow5_ptr[count] = 0; | ||
1086 | } | ||
1087 | pow5_len += s_limbs; | ||
1088 | } | ||
1089 | pow5.limbs = pow5_ptr; | ||
1090 | pow5.nlimbs = pow5_len; | ||
1091 | if (n >= 0) | ||
1092 | { | ||
1093 | /* Multiply m with pow5. No division needed. */ | ||
1094 | z_memory = multiply (m, pow5, &z); | ||
1095 | } | ||
1096 | else | ||
1097 | { | ||
1098 | /* Divide m by pow5 and round. */ | ||
1099 | z_memory = divide (m, pow5, &z); | ||
1100 | } | ||
1101 | } | ||
1102 | else | ||
1103 | { | ||
1104 | pow5.limbs = pow5_ptr; | ||
1105 | pow5.nlimbs = pow5_len; | ||
1106 | if (n >= 0) | ||
1107 | { | ||
1108 | /* n >= 0, s < 0. | ||
1109 | Multiply m with pow5, then divide by 2^|s|. */ | ||
1110 | mpn_t numerator; | ||
1111 | mpn_t denominator; | ||
1112 | void *tmp_memory; | ||
1113 | tmp_memory = multiply (m, pow5, &numerator); | ||
1114 | if (tmp_memory == NULL) | ||
1115 | { | ||
1116 | free (pow5_ptr); | ||
1117 | free (memory); | ||
1118 | return NULL; | ||
1119 | } | ||
1120 | /* Construct 2^|s|. */ | ||
1121 | { | ||
1122 | mp_limb_t *ptr = pow5_ptr + pow5_len; | ||
1123 | size_t i; | ||
1124 | for (i = 0; i < s_limbs; i++) | ||
1125 | ptr[i] = 0; | ||
1126 | ptr[s_limbs] = (mp_limb_t) 1 << s_bits; | ||
1127 | denominator.limbs = ptr; | ||
1128 | denominator.nlimbs = s_limbs + 1; | ||
1129 | } | ||
1130 | z_memory = divide (numerator, denominator, &z); | ||
1131 | free (tmp_memory); | ||
1132 | } | ||
1133 | else | ||
1134 | { | ||
1135 | /* n < 0, s > 0. | ||
1136 | Multiply m with 2^s, then divide by pow5. */ | ||
1137 | mpn_t numerator; | ||
1138 | mp_limb_t *num_ptr; | ||
1139 | num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) | ||
1140 | * sizeof (mp_limb_t)); | ||
1141 | if (num_ptr == NULL) | ||
1142 | { | ||
1143 | free (pow5_ptr); | ||
1144 | free (memory); | ||
1145 | return NULL; | ||
1146 | } | ||
1147 | { | ||
1148 | mp_limb_t *destptr = num_ptr; | ||
1149 | { | ||
1150 | size_t i; | ||
1151 | for (i = 0; i < s_limbs; i++) | ||
1152 | *destptr++ = 0; | ||
1153 | } | ||
1154 | if (s_bits > 0) | ||
1155 | { | ||
1156 | const mp_limb_t *sourceptr = m.limbs; | ||
1157 | mp_twolimb_t accu = 0; | ||
1158 | size_t count; | ||
1159 | for (count = m.nlimbs; count > 0; count--) | ||
1160 | { | ||
1161 | accu += (mp_twolimb_t) *sourceptr++ << s_bits; | ||
1162 | *destptr++ = (mp_limb_t) accu; | ||
1163 | accu = accu >> GMP_LIMB_BITS; | ||
1164 | } | ||
1165 | if (accu > 0) | ||
1166 | *destptr++ = (mp_limb_t) accu; | ||
1167 | } | ||
1168 | else | ||
1169 | { | ||
1170 | const mp_limb_t *sourceptr = m.limbs; | ||
1171 | size_t count; | ||
1172 | for (count = m.nlimbs; count > 0; count--) | ||
1173 | *destptr++ = *sourceptr++; | ||
1174 | } | ||
1175 | numerator.limbs = num_ptr; | ||
1176 | numerator.nlimbs = destptr - num_ptr; | ||
1177 | } | ||
1178 | z_memory = divide (numerator, pow5, &z); | ||
1179 | free (num_ptr); | ||
1180 | } | ||
1181 | } | ||
1182 | free (pow5_ptr); | ||
1183 | free (memory); | ||
1184 | |||
1185 | /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ | ||
1186 | |||
1187 | if (z_memory == NULL) | ||
1188 | return NULL; | ||
1189 | digits = convert_to_decimal (z, extra_zeroes); | ||
1190 | free (z_memory); | ||
1191 | return digits; | ||
1192 | } | ||
1193 | |||
1194 | # if NEED_PRINTF_LONG_DOUBLE | ||
1195 | |||
1196 | /* Assuming x is finite and >= 0, and n is an integer: | ||
1197 | Returns the decimal representation of round (x * 10^n). | ||
1198 | Return the allocated memory - containing the decimal digits in low-to-high | ||
1199 | order, terminated with a NUL character - in case of success, NULL in case | ||
1200 | of memory allocation failure. */ | ||
1201 | static char * | ||
1202 | scale10_round_decimal_long_double (long double x, int n) | ||
1203 | { | ||
1204 | int e; | ||
1205 | mpn_t m; | ||
1206 | void *memory = decode_long_double (x, &e, &m); | ||
1207 | return scale10_round_decimal_decoded (e, m, memory, n); | ||
1208 | } | ||
1209 | |||
1210 | # endif | ||
1211 | |||
1212 | # if NEED_PRINTF_DOUBLE | ||
1213 | |||
1214 | /* Assuming x is finite and >= 0, and n is an integer: | ||
1215 | Returns the decimal representation of round (x * 10^n). | ||
1216 | Return the allocated memory - containing the decimal digits in low-to-high | ||
1217 | order, terminated with a NUL character - in case of success, NULL in case | ||
1218 | of memory allocation failure. */ | ||
1219 | static char * | ||
1220 | scale10_round_decimal_double (double x, int n) | ||
1221 | { | ||
1222 | int e; | ||
1223 | mpn_t m; | ||
1224 | void *memory = decode_double (x, &e, &m); | ||
1225 | return scale10_round_decimal_decoded (e, m, memory, n); | ||
1226 | } | ||
1227 | |||
1228 | # endif | ||
1229 | |||
1230 | # if NEED_PRINTF_LONG_DOUBLE | ||
1231 | |||
1232 | /* Assuming x is finite and > 0: | ||
1233 | Return an approximation for n with 10^n <= x < 10^(n+1). | ||
1234 | The approximation is usually the right n, but may be off by 1 sometimes. */ | ||
1235 | static int | ||
1236 | floorlog10l (long double x) | ||
1237 | { | ||
1238 | int exp; | ||
1239 | long double y; | ||
1240 | double z; | ||
1241 | double l; | ||
1242 | |||
1243 | /* Split into exponential part and mantissa. */ | ||
1244 | y = frexpl (x, &exp); | ||
1245 | if (!(y >= 0.0L && y < 1.0L)) | ||
1246 | abort (); | ||
1247 | if (y == 0.0L) | ||
1248 | return INT_MIN; | ||
1249 | if (y < 0.5L) | ||
1250 | { | ||
1251 | while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) | ||
1252 | { | ||
1253 | y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); | ||
1254 | exp -= GMP_LIMB_BITS; | ||
1255 | } | ||
1256 | if (y < (1.0L / (1 << 16))) | ||
1257 | { | ||
1258 | y *= 1.0L * (1 << 16); | ||
1259 | exp -= 16; | ||
1260 | } | ||
1261 | if (y < (1.0L / (1 << 8))) | ||
1262 | { | ||
1263 | y *= 1.0L * (1 << 8); | ||
1264 | exp -= 8; | ||
1265 | } | ||
1266 | if (y < (1.0L / (1 << 4))) | ||
1267 | { | ||
1268 | y *= 1.0L * (1 << 4); | ||
1269 | exp -= 4; | ||
1270 | } | ||
1271 | if (y < (1.0L / (1 << 2))) | ||
1272 | { | ||
1273 | y *= 1.0L * (1 << 2); | ||
1274 | exp -= 2; | ||
1275 | } | ||
1276 | if (y < (1.0L / (1 << 1))) | ||
1277 | { | ||
1278 | y *= 1.0L * (1 << 1); | ||
1279 | exp -= 1; | ||
1280 | } | ||
1281 | } | ||
1282 | if (!(y >= 0.5L && y < 1.0L)) | ||
1283 | abort (); | ||
1284 | /* Compute an approximation for l = log2(x) = exp + log2(y). */ | ||
1285 | l = exp; | ||
1286 | z = y; | ||
1287 | if (z < 0.70710678118654752444) | ||
1288 | { | ||
1289 | z *= 1.4142135623730950488; | ||
1290 | l -= 0.5; | ||
1291 | } | ||
1292 | if (z < 0.8408964152537145431) | ||
1293 | { | ||
1294 | z *= 1.1892071150027210667; | ||
1295 | l -= 0.25; | ||
1296 | } | ||
1297 | if (z < 0.91700404320467123175) | ||
1298 | { | ||
1299 | z *= 1.0905077326652576592; | ||
1300 | l -= 0.125; | ||
1301 | } | ||
1302 | if (z < 0.9576032806985736469) | ||
1303 | { | ||
1304 | z *= 1.0442737824274138403; | ||
1305 | l -= 0.0625; | ||
1306 | } | ||
1307 | /* Now 0.95 <= z <= 1.01. */ | ||
1308 | z = 1 - z; | ||
1309 | /* log(1-z) = - z - z^2/2 - z^3/3 - z^4/4 - ... | ||
1310 | Four terms are enough to get an approximation with error < 10^-7. */ | ||
1311 | l -= z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); | ||
1312 | /* Finally multiply with log(2)/log(10), yields an approximation for | ||
1313 | log10(x). */ | ||
1314 | l *= 0.30102999566398119523; | ||
1315 | /* Round down to the next integer. */ | ||
1316 | return (int) l + (l < 0 ? -1 : 0); | ||
1317 | } | ||
1318 | |||
1319 | # endif | ||
1320 | |||
1321 | # if NEED_PRINTF_DOUBLE | ||
1322 | |||
1323 | /* Assuming x is finite and > 0: | ||
1324 | Return an approximation for n with 10^n <= x < 10^(n+1). | ||
1325 | The approximation is usually the right n, but may be off by 1 sometimes. */ | ||
1326 | static int | ||
1327 | floorlog10 (double x) | ||
1328 | { | ||
1329 | int exp; | ||
1330 | double y; | ||
1331 | double z; | ||
1332 | double l; | ||
1333 | |||
1334 | /* Split into exponential part and mantissa. */ | ||
1335 | y = frexp (x, &exp); | ||
1336 | if (!(y >= 0.0 && y < 1.0)) | ||
1337 | abort (); | ||
1338 | if (y == 0.0) | ||
1339 | return INT_MIN; | ||
1340 | if (y < 0.5) | ||
1341 | { | ||
1342 | while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) | ||
1343 | { | ||
1344 | y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); | ||
1345 | exp -= GMP_LIMB_BITS; | ||
1346 | } | ||
1347 | if (y < (1.0 / (1 << 16))) | ||
1348 | { | ||
1349 | y *= 1.0 * (1 << 16); | ||
1350 | exp -= 16; | ||
1351 | } | ||
1352 | if (y < (1.0 / (1 << 8))) | ||
1353 | { | ||
1354 | y *= 1.0 * (1 << 8); | ||
1355 | exp -= 8; | ||
1356 | } | ||
1357 | if (y < (1.0 / (1 << 4))) | ||
1358 | { | ||
1359 | y *= 1.0 * (1 << 4); | ||
1360 | exp -= 4; | ||
1361 | } | ||
1362 | if (y < (1.0 / (1 << 2))) | ||
1363 | { | ||
1364 | y *= 1.0 * (1 << 2); | ||
1365 | exp -= 2; | ||
1366 | } | ||
1367 | if (y < (1.0 / (1 << 1))) | ||
1368 | { | ||
1369 | y *= 1.0 * (1 << 1); | ||
1370 | exp -= 1; | ||
1371 | } | ||
1372 | } | ||
1373 | if (!(y >= 0.5 && y < 1.0)) | ||
1374 | abort (); | ||
1375 | /* Compute an approximation for l = log2(x) = exp + log2(y). */ | ||
1376 | l = exp; | ||
1377 | z = y; | ||
1378 | if (z < 0.70710678118654752444) | ||
1379 | { | ||
1380 | z *= 1.4142135623730950488; | ||
1381 | l -= 0.5; | ||
1382 | } | ||
1383 | if (z < 0.8408964152537145431) | ||
1384 | { | ||
1385 | z *= 1.1892071150027210667; | ||
1386 | l -= 0.25; | ||
1387 | } | ||
1388 | if (z < 0.91700404320467123175) | ||
1389 | { | ||
1390 | z *= 1.0905077326652576592; | ||
1391 | l -= 0.125; | ||
1392 | } | ||
1393 | if (z < 0.9576032806985736469) | ||
1394 | { | ||
1395 | z *= 1.0442737824274138403; | ||
1396 | l -= 0.0625; | ||
1397 | } | ||
1398 | /* Now 0.95 <= z <= 1.01. */ | ||
1399 | z = 1 - z; | ||
1400 | /* log(1-z) = - z - z^2/2 - z^3/3 - z^4/4 - ... | ||
1401 | Four terms are enough to get an approximation with error < 10^-7. */ | ||
1402 | l -= z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); | ||
1403 | /* Finally multiply with log(2)/log(10), yields an approximation for | ||
1404 | log10(x). */ | ||
1405 | l *= 0.30102999566398119523; | ||
1406 | /* Round down to the next integer. */ | ||
1407 | return (int) l + (l < 0 ? -1 : 0); | ||
1408 | } | ||
1409 | |||
1410 | # endif | ||
1411 | |||
1412 | #endif | ||
1413 | |||
1414 | DCHAR_T * | ||
1415 | VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, | ||
1416 | const FCHAR_T *format, va_list args) | ||
1417 | { | ||
1418 | DIRECTIVES d; | ||
1419 | arguments a; | ||
1420 | |||
1421 | if (PRINTF_PARSE (format, &d, &a) < 0) | ||
1422 | /* errno is already set. */ | ||
1423 | return NULL; | ||
117 | 1424 | ||
118 | #define CLEANUP() \ | 1425 | #define CLEANUP() \ |
119 | free (d.dir); \ | 1426 | free (d.dir); \ |
120 | if (a.arg) \ | 1427 | if (a.arg) \ |
121 | free (a.arg); | 1428 | free (a.arg); |
122 | 1429 | ||
123 | if (printf_fetchargs (args, &a) < 0) | 1430 | if (PRINTF_FETCHARGS (args, &a) < 0) |
124 | { | 1431 | { |
125 | CLEANUP (); | 1432 | CLEANUP (); |
126 | errno = EINVAL; | 1433 | errno = EINVAL; |
@@ -129,13 +1436,13 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
129 | 1436 | ||
130 | { | 1437 | { |
131 | size_t buf_neededlength; | 1438 | size_t buf_neededlength; |
132 | CHAR_T *buf; | 1439 | TCHAR_T *buf; |
133 | CHAR_T *buf_malloced; | 1440 | TCHAR_T *buf_malloced; |
134 | const CHAR_T *cp; | 1441 | const FCHAR_T *cp; |
135 | size_t i; | 1442 | size_t i; |
136 | DIRECTIVE *dp; | 1443 | DIRECTIVE *dp; |
137 | /* Output string accumulator. */ | 1444 | /* Output string accumulator. */ |
138 | CHAR_T *result; | 1445 | DCHAR_T *result; |
139 | size_t allocated; | 1446 | size_t allocated; |
140 | size_t length; | 1447 | size_t length; |
141 | 1448 | ||
@@ -144,18 +1451,18 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
144 | buf_neededlength = | 1451 | buf_neededlength = |
145 | xsum4 (7, d.max_width_length, d.max_precision_length, 6); | 1452 | xsum4 (7, d.max_width_length, d.max_precision_length, 6); |
146 | #if HAVE_ALLOCA | 1453 | #if HAVE_ALLOCA |
147 | if (buf_neededlength < 4000 / sizeof (CHAR_T)) | 1454 | if (buf_neededlength < 4000 / sizeof (TCHAR_T)) |
148 | { | 1455 | { |
149 | buf = (CHAR_T *) alloca (buf_neededlength * sizeof (CHAR_T)); | 1456 | buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); |
150 | buf_malloced = NULL; | 1457 | buf_malloced = NULL; |
151 | } | 1458 | } |
152 | else | 1459 | else |
153 | #endif | 1460 | #endif |
154 | { | 1461 | { |
155 | size_t buf_memsize = xtimes (buf_neededlength, sizeof (CHAR_T)); | 1462 | size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); |
156 | if (size_overflow_p (buf_memsize)) | 1463 | if (size_overflow_p (buf_memsize)) |
157 | goto out_of_memory_1; | 1464 | goto out_of_memory_1; |
158 | buf = (CHAR_T *) malloc (buf_memsize); | 1465 | buf = (TCHAR_T *) malloc (buf_memsize); |
159 | if (buf == NULL) | 1466 | if (buf == NULL) |
160 | goto out_of_memory_1; | 1467 | goto out_of_memory_1; |
161 | buf_malloced = buf; | 1468 | buf_malloced = buf; |
@@ -182,22 +1489,22 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
182 | if ((needed) > allocated) \ | 1489 | if ((needed) > allocated) \ |
183 | { \ | 1490 | { \ |
184 | size_t memory_size; \ | 1491 | size_t memory_size; \ |
185 | CHAR_T *memory; \ | 1492 | DCHAR_T *memory; \ |
186 | \ | 1493 | \ |
187 | allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ | 1494 | allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ |
188 | if ((needed) > allocated) \ | 1495 | if ((needed) > allocated) \ |
189 | allocated = (needed); \ | 1496 | allocated = (needed); \ |
190 | memory_size = xtimes (allocated, sizeof (CHAR_T)); \ | 1497 | memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ |
191 | if (size_overflow_p (memory_size)) \ | 1498 | if (size_overflow_p (memory_size)) \ |
192 | goto out_of_memory; \ | 1499 | goto out_of_memory; \ |
193 | if (result == resultbuf || result == NULL) \ | 1500 | if (result == resultbuf || result == NULL) \ |
194 | memory = (CHAR_T *) malloc (memory_size); \ | 1501 | memory = (DCHAR_T *) malloc (memory_size); \ |
195 | else \ | 1502 | else \ |
196 | memory = (CHAR_T *) realloc (result, memory_size); \ | 1503 | memory = (DCHAR_T *) realloc (result, memory_size); \ |
197 | if (memory == NULL) \ | 1504 | if (memory == NULL) \ |
198 | goto out_of_memory; \ | 1505 | goto out_of_memory; \ |
199 | if (result == resultbuf && length > 0) \ | 1506 | if (result == resultbuf && length > 0) \ |
200 | memcpy (memory, result, length * sizeof (CHAR_T)); \ | 1507 | DCHAR_CPY (memory, result, length); \ |
201 | result = memory; \ | 1508 | result = memory; \ |
202 | } | 1509 | } |
203 | 1510 | ||
@@ -209,8 +1516,20 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
209 | size_t augmented_length = xsum (length, n); | 1516 | size_t augmented_length = xsum (length, n); |
210 | 1517 | ||
211 | ENSURE_ALLOCATION (augmented_length); | 1518 | ENSURE_ALLOCATION (augmented_length); |
212 | memcpy (result + length, cp, n * sizeof (CHAR_T)); | 1519 | /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we |
213 | length = augmented_length; | 1520 | need that the format string contains only ASCII characters |
1521 | if FCHAR_T and DCHAR_T are not the same type. */ | ||
1522 | if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) | ||
1523 | { | ||
1524 | DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); | ||
1525 | length = augmented_length; | ||
1526 | } | ||
1527 | else | ||
1528 | { | ||
1529 | do | ||
1530 | result[length++] = (unsigned char) *cp++; | ||
1531 | while (--n > 0); | ||
1532 | } | ||
214 | } | 1533 | } |
215 | if (i == d.count) | 1534 | if (i == d.count) |
216 | break; | 1535 | break; |
@@ -248,7 +1567,7 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
248 | case TYPE_COUNT_LONGINT_POINTER: | 1567 | case TYPE_COUNT_LONGINT_POINTER: |
249 | *a.arg[dp->arg_index].a.a_count_longint_pointer = length; | 1568 | *a.arg[dp->arg_index].a.a_count_longint_pointer = length; |
250 | break; | 1569 | break; |
251 | #ifdef HAVE_LONG_LONG_INT | 1570 | #if HAVE_LONG_LONG_INT |
252 | case TYPE_COUNT_LONGLONGINT_POINTER: | 1571 | case TYPE_COUNT_LONGLONGINT_POINTER: |
253 | *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; | 1572 | *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; |
254 | break; | 1573 | break; |
@@ -257,72 +1576,2100 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
257 | abort (); | 1576 | abort (); |
258 | } | 1577 | } |
259 | } | 1578 | } |
260 | else | 1579 | #if ENABLE_UNISTDIO |
1580 | /* The unistdio extensions. */ | ||
1581 | else if (dp->conversion == 'U') | ||
261 | { | 1582 | { |
262 | arg_type type = a.arg[dp->arg_index].type; | 1583 | arg_type type = a.arg[dp->arg_index].type; |
263 | CHAR_T *p; | 1584 | int flags = dp->flags; |
264 | unsigned int prefix_count; | 1585 | int has_width; |
265 | int prefixes[2]; | 1586 | size_t width; |
266 | #if !USE_SNPRINTF | 1587 | int has_precision; |
267 | size_t tmp_length; | 1588 | size_t precision; |
268 | CHAR_T tmpbuf[700]; | ||
269 | CHAR_T *tmp; | ||
270 | 1589 | ||
271 | /* Allocate a temporary buffer of sufficient size for calling | 1590 | has_width = 0; |
272 | sprintf. */ | 1591 | width = 0; |
273 | { | 1592 | if (dp->width_start != dp->width_end) |
274 | size_t width; | 1593 | { |
275 | size_t precision; | 1594 | if (dp->width_arg_index != ARG_NONE) |
1595 | { | ||
1596 | int arg; | ||
276 | 1597 | ||
277 | width = 0; | 1598 | if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) |
278 | if (dp->width_start != dp->width_end) | 1599 | abort (); |
1600 | arg = a.arg[dp->width_arg_index].a.a_int; | ||
1601 | if (arg < 0) | ||
1602 | { | ||
1603 | /* "A negative field width is taken as a '-' flag | ||
1604 | followed by a positive field width." */ | ||
1605 | flags |= FLAG_LEFT; | ||
1606 | width = (unsigned int) (-arg); | ||
1607 | } | ||
1608 | else | ||
1609 | width = arg; | ||
1610 | } | ||
1611 | else | ||
1612 | { | ||
1613 | const FCHAR_T *digitp = dp->width_start; | ||
1614 | |||
1615 | do | ||
1616 | width = xsum (xtimes (width, 10), *digitp++ - '0'); | ||
1617 | while (digitp != dp->width_end); | ||
1618 | } | ||
1619 | has_width = 1; | ||
1620 | } | ||
1621 | |||
1622 | has_precision = 0; | ||
1623 | precision = 0; | ||
1624 | if (dp->precision_start != dp->precision_end) | ||
1625 | { | ||
1626 | if (dp->precision_arg_index != ARG_NONE) | ||
1627 | { | ||
1628 | int arg; | ||
1629 | |||
1630 | if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) | ||
1631 | abort (); | ||
1632 | arg = a.arg[dp->precision_arg_index].a.a_int; | ||
1633 | /* "A negative precision is taken as if the precision | ||
1634 | were omitted." */ | ||
1635 | if (arg >= 0) | ||
1636 | { | ||
1637 | precision = arg; | ||
1638 | has_precision = 1; | ||
1639 | } | ||
1640 | } | ||
1641 | else | ||
1642 | { | ||
1643 | const FCHAR_T *digitp = dp->precision_start + 1; | ||
1644 | |||
1645 | precision = 0; | ||
1646 | while (digitp != dp->precision_end) | ||
1647 | precision = xsum (xtimes (precision, 10), *digitp++ - '0'); | ||
1648 | has_precision = 1; | ||
1649 | } | ||
1650 | } | ||
1651 | |||
1652 | switch (type) | ||
1653 | { | ||
1654 | case TYPE_U8_STRING: | ||
279 | { | 1655 | { |
280 | if (dp->width_arg_index != ARG_NONE) | 1656 | const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; |
281 | { | 1657 | const uint8_t *arg_end; |
282 | int arg; | 1658 | size_t characters; |
283 | 1659 | ||
284 | if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) | 1660 | if (has_precision) |
285 | abort (); | 1661 | { |
286 | arg = a.arg[dp->width_arg_index].a.a_int; | 1662 | /* Use only PRECISION characters, from the left. */ |
287 | width = (arg < 0 ? (unsigned int) (-arg) : arg); | 1663 | arg_end = arg; |
1664 | characters = 0; | ||
1665 | for (; precision > 0; precision--) | ||
1666 | { | ||
1667 | int count = u8_strmblen (arg_end); | ||
1668 | if (count == 0) | ||
1669 | break; | ||
1670 | if (count < 0) | ||
1671 | { | ||
1672 | if (!(result == resultbuf || result == NULL)) | ||
1673 | free (result); | ||
1674 | if (buf_malloced != NULL) | ||
1675 | free (buf_malloced); | ||
1676 | CLEANUP (); | ||
1677 | errno = EILSEQ; | ||
1678 | return NULL; | ||
1679 | } | ||
1680 | arg_end += count; | ||
1681 | characters++; | ||
1682 | } | ||
1683 | } | ||
1684 | else if (has_width) | ||
1685 | { | ||
1686 | /* Use the entire string, and count the number of | ||
1687 | characters. */ | ||
1688 | arg_end = arg; | ||
1689 | characters = 0; | ||
1690 | for (;;) | ||
1691 | { | ||
1692 | int count = u8_strmblen (arg_end); | ||
1693 | if (count == 0) | ||
1694 | break; | ||
1695 | if (count < 0) | ||
1696 | { | ||
1697 | if (!(result == resultbuf || result == NULL)) | ||
1698 | free (result); | ||
1699 | if (buf_malloced != NULL) | ||
1700 | free (buf_malloced); | ||
1701 | CLEANUP (); | ||
1702 | errno = EILSEQ; | ||
1703 | return NULL; | ||
1704 | } | ||
1705 | arg_end += count; | ||
1706 | characters++; | ||
1707 | } | ||
288 | } | 1708 | } |
289 | else | 1709 | else |
290 | { | 1710 | { |
291 | const CHAR_T *digitp = dp->width_start; | 1711 | /* Use the entire string. */ |
1712 | arg_end = arg + u8_strlen (arg); | ||
1713 | /* The number of characters doesn't matter. */ | ||
1714 | characters = 0; | ||
1715 | } | ||
292 | 1716 | ||
293 | do | 1717 | if (has_width && width > characters |
294 | width = xsum (xtimes (width, 10), *digitp++ - '0'); | 1718 | && !(dp->flags & FLAG_LEFT)) |
295 | while (digitp != dp->width_end); | 1719 | { |
1720 | size_t n = width - characters; | ||
1721 | ENSURE_ALLOCATION (xsum (length, n)); | ||
1722 | DCHAR_SET (result + length, ' ', n); | ||
1723 | length += n; | ||
1724 | } | ||
1725 | |||
1726 | # if DCHAR_IS_UINT8_T | ||
1727 | { | ||
1728 | size_t n = arg_end - arg; | ||
1729 | ENSURE_ALLOCATION (xsum (length, n)); | ||
1730 | DCHAR_CPY (result + length, arg, n); | ||
1731 | length += n; | ||
1732 | } | ||
1733 | # else | ||
1734 | { /* Convert. */ | ||
1735 | DCHAR_T *converted = result + length; | ||
1736 | size_t converted_len = allocated - length; | ||
1737 | # if DCHAR_IS_TCHAR | ||
1738 | /* Convert from UTF-8 to locale encoding. */ | ||
1739 | if (u8_conv_to_encoding (locale_charset (), | ||
1740 | iconveh_question_mark, | ||
1741 | arg, arg_end - arg, NULL, | ||
1742 | &converted, &converted_len) | ||
1743 | < 0) | ||
1744 | # else | ||
1745 | /* Convert from UTF-8 to UTF-16/UTF-32. */ | ||
1746 | converted = | ||
1747 | U8_TO_DCHAR (arg, arg_end - arg, | ||
1748 | converted, &converted_len); | ||
1749 | if (converted == NULL) | ||
1750 | # endif | ||
1751 | { | ||
1752 | int saved_errno = errno; | ||
1753 | if (!(result == resultbuf || result == NULL)) | ||
1754 | free (result); | ||
1755 | if (buf_malloced != NULL) | ||
1756 | free (buf_malloced); | ||
1757 | CLEANUP (); | ||
1758 | errno = saved_errno; | ||
1759 | return NULL; | ||
1760 | } | ||
1761 | if (converted != result + length) | ||
1762 | { | ||
1763 | ENSURE_ALLOCATION (xsum (length, converted_len)); | ||
1764 | DCHAR_CPY (result + length, converted, converted_len); | ||
1765 | free (converted); | ||
1766 | } | ||
1767 | length += converted_len; | ||
1768 | } | ||
1769 | # endif | ||
1770 | |||
1771 | if (has_width && width > characters | ||
1772 | && (dp->flags & FLAG_LEFT)) | ||
1773 | { | ||
1774 | size_t n = width - characters; | ||
1775 | ENSURE_ALLOCATION (xsum (length, n)); | ||
1776 | DCHAR_SET (result + length, ' ', n); | ||
1777 | length += n; | ||
296 | } | 1778 | } |
297 | } | 1779 | } |
1780 | break; | ||
298 | 1781 | ||
299 | precision = 6; | 1782 | case TYPE_U16_STRING: |
300 | if (dp->precision_start != dp->precision_end) | ||
301 | { | 1783 | { |
302 | if (dp->precision_arg_index != ARG_NONE) | 1784 | const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; |
1785 | const uint16_t *arg_end; | ||
1786 | size_t characters; | ||
1787 | |||
1788 | if (has_precision) | ||
1789 | { | ||
1790 | /* Use only PRECISION characters, from the left. */ | ||
1791 | arg_end = arg; | ||
1792 | characters = 0; | ||
1793 | for (; precision > 0; precision--) | ||
1794 | { | ||
1795 | int count = u16_strmblen (arg_end); | ||
1796 | if (count == 0) | ||
1797 | break; | ||
1798 | if (count < 0) | ||
1799 | { | ||
1800 | if (!(result == resultbuf || result == NULL)) | ||
1801 | free (result); | ||
1802 | if (buf_malloced != NULL) | ||
1803 | free (buf_malloced); | ||
1804 | CLEANUP (); | ||
1805 | errno = EILSEQ; | ||
1806 | return NULL; | ||
1807 | } | ||
1808 | arg_end += count; | ||
1809 | characters++; | ||
1810 | } | ||
1811 | } | ||
1812 | else if (has_width) | ||
303 | { | 1813 | { |
304 | int arg; | 1814 | /* Use the entire string, and count the number of |
1815 | characters. */ | ||
1816 | arg_end = arg; | ||
1817 | characters = 0; | ||
1818 | for (;;) | ||
1819 | { | ||
1820 | int count = u16_strmblen (arg_end); | ||
1821 | if (count == 0) | ||
1822 | break; | ||
1823 | if (count < 0) | ||
1824 | { | ||
1825 | if (!(result == resultbuf || result == NULL)) | ||
1826 | free (result); | ||
1827 | if (buf_malloced != NULL) | ||
1828 | free (buf_malloced); | ||
1829 | CLEANUP (); | ||
1830 | errno = EILSEQ; | ||
1831 | return NULL; | ||
1832 | } | ||
1833 | arg_end += count; | ||
1834 | characters++; | ||
1835 | } | ||
1836 | } | ||
1837 | else | ||
1838 | { | ||
1839 | /* Use the entire string. */ | ||
1840 | arg_end = arg + u16_strlen (arg); | ||
1841 | /* The number of characters doesn't matter. */ | ||
1842 | characters = 0; | ||
1843 | } | ||
305 | 1844 | ||
306 | if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) | 1845 | if (has_width && width > characters |
307 | abort (); | 1846 | && !(dp->flags & FLAG_LEFT)) |
308 | arg = a.arg[dp->precision_arg_index].a.a_int; | 1847 | { |
309 | precision = (arg < 0 ? 0 : arg); | 1848 | size_t n = width - characters; |
1849 | ENSURE_ALLOCATION (xsum (length, n)); | ||
1850 | DCHAR_SET (result + length, ' ', n); | ||
1851 | length += n; | ||
1852 | } | ||
1853 | |||
1854 | # if DCHAR_IS_UINT16_T | ||
1855 | { | ||
1856 | size_t n = arg_end - arg; | ||
1857 | ENSURE_ALLOCATION (xsum (length, n)); | ||
1858 | DCHAR_CPY (result + length, arg, n); | ||
1859 | length += n; | ||
1860 | } | ||
1861 | # else | ||
1862 | { /* Convert. */ | ||
1863 | DCHAR_T *converted = result + length; | ||
1864 | size_t converted_len = allocated - length; | ||
1865 | # if DCHAR_IS_TCHAR | ||
1866 | /* Convert from UTF-16 to locale encoding. */ | ||
1867 | if (u16_conv_to_encoding (locale_charset (), | ||
1868 | iconveh_question_mark, | ||
1869 | arg, arg_end - arg, NULL, | ||
1870 | &converted, &converted_len) | ||
1871 | < 0) | ||
1872 | # else | ||
1873 | /* Convert from UTF-16 to UTF-8/UTF-32. */ | ||
1874 | converted = | ||
1875 | U16_TO_DCHAR (arg, arg_end - arg, | ||
1876 | converted, &converted_len); | ||
1877 | if (converted == NULL) | ||
1878 | # endif | ||
1879 | { | ||
1880 | int saved_errno = errno; | ||
1881 | if (!(result == resultbuf || result == NULL)) | ||
1882 | free (result); | ||
1883 | if (buf_malloced != NULL) | ||
1884 | free (buf_malloced); | ||
1885 | CLEANUP (); | ||
1886 | errno = saved_errno; | ||
1887 | return NULL; | ||
1888 | } | ||
1889 | if (converted != result + length) | ||
1890 | { | ||
1891 | ENSURE_ALLOCATION (xsum (length, converted_len)); | ||
1892 | DCHAR_CPY (result + length, converted, converted_len); | ||
1893 | free (converted); | ||
1894 | } | ||
1895 | length += converted_len; | ||
1896 | } | ||
1897 | # endif | ||
1898 | |||
1899 | if (has_width && width > characters | ||
1900 | && (dp->flags & FLAG_LEFT)) | ||
1901 | { | ||
1902 | size_t n = width - characters; | ||
1903 | ENSURE_ALLOCATION (xsum (length, n)); | ||
1904 | DCHAR_SET (result + length, ' ', n); | ||
1905 | length += n; | ||
1906 | } | ||
1907 | } | ||
1908 | break; | ||
1909 | |||
1910 | case TYPE_U32_STRING: | ||
1911 | { | ||
1912 | const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; | ||
1913 | const uint32_t *arg_end; | ||
1914 | size_t characters; | ||
1915 | |||
1916 | if (has_precision) | ||
1917 | { | ||
1918 | /* Use only PRECISION characters, from the left. */ | ||
1919 | arg_end = arg; | ||
1920 | characters = 0; | ||
1921 | for (; precision > 0; precision--) | ||
1922 | { | ||
1923 | int count = u32_strmblen (arg_end); | ||
1924 | if (count == 0) | ||
1925 | break; | ||
1926 | if (count < 0) | ||
1927 | { | ||
1928 | if (!(result == resultbuf || result == NULL)) | ||
1929 | free (result); | ||
1930 | if (buf_malloced != NULL) | ||
1931 | free (buf_malloced); | ||
1932 | CLEANUP (); | ||
1933 | errno = EILSEQ; | ||
1934 | return NULL; | ||
1935 | } | ||
1936 | arg_end += count; | ||
1937 | characters++; | ||
1938 | } | ||
1939 | } | ||
1940 | else if (has_width) | ||
1941 | { | ||
1942 | /* Use the entire string, and count the number of | ||
1943 | characters. */ | ||
1944 | arg_end = arg; | ||
1945 | characters = 0; | ||
1946 | for (;;) | ||
1947 | { | ||
1948 | int count = u32_strmblen (arg_end); | ||
1949 | if (count == 0) | ||
1950 | break; | ||
1951 | if (count < 0) | ||
1952 | { | ||
1953 | if (!(result == resultbuf || result == NULL)) | ||
1954 | free (result); | ||
1955 | if (buf_malloced != NULL) | ||
1956 | free (buf_malloced); | ||
1957 | CLEANUP (); | ||
1958 | errno = EILSEQ; | ||
1959 | return NULL; | ||
1960 | } | ||
1961 | arg_end += count; | ||
1962 | characters++; | ||
1963 | } | ||
310 | } | 1964 | } |
311 | else | 1965 | else |
312 | { | 1966 | { |
313 | const CHAR_T *digitp = dp->precision_start + 1; | 1967 | /* Use the entire string. */ |
1968 | arg_end = arg + u32_strlen (arg); | ||
1969 | /* The number of characters doesn't matter. */ | ||
1970 | characters = 0; | ||
1971 | } | ||
314 | 1972 | ||
315 | precision = 0; | 1973 | if (has_width && width > characters |
316 | while (digitp != dp->precision_end) | 1974 | && !(dp->flags & FLAG_LEFT)) |
317 | precision = xsum (xtimes (precision, 10), *digitp++ - '0'); | 1975 | { |
1976 | size_t n = width - characters; | ||
1977 | ENSURE_ALLOCATION (xsum (length, n)); | ||
1978 | DCHAR_SET (result + length, ' ', n); | ||
1979 | length += n; | ||
1980 | } | ||
1981 | |||
1982 | # if DCHAR_IS_UINT32_T | ||
1983 | { | ||
1984 | size_t n = arg_end - arg; | ||
1985 | ENSURE_ALLOCATION (xsum (length, n)); | ||
1986 | DCHAR_CPY (result + length, arg, n); | ||
1987 | length += n; | ||
1988 | } | ||
1989 | # else | ||
1990 | { /* Convert. */ | ||
1991 | DCHAR_T *converted = result + length; | ||
1992 | size_t converted_len = allocated - length; | ||
1993 | # if DCHAR_IS_TCHAR | ||
1994 | /* Convert from UTF-32 to locale encoding. */ | ||
1995 | if (u32_conv_to_encoding (locale_charset (), | ||
1996 | iconveh_question_mark, | ||
1997 | arg, arg_end - arg, NULL, | ||
1998 | &converted, &converted_len) | ||
1999 | < 0) | ||
2000 | # else | ||
2001 | /* Convert from UTF-32 to UTF-8/UTF-16. */ | ||
2002 | converted = | ||
2003 | U32_TO_DCHAR (arg, arg_end - arg, | ||
2004 | converted, &converted_len); | ||
2005 | if (converted == NULL) | ||
2006 | # endif | ||
2007 | { | ||
2008 | int saved_errno = errno; | ||
2009 | if (!(result == resultbuf || result == NULL)) | ||
2010 | free (result); | ||
2011 | if (buf_malloced != NULL) | ||
2012 | free (buf_malloced); | ||
2013 | CLEANUP (); | ||
2014 | errno = saved_errno; | ||
2015 | return NULL; | ||
2016 | } | ||
2017 | if (converted != result + length) | ||
2018 | { | ||
2019 | ENSURE_ALLOCATION (xsum (length, converted_len)); | ||
2020 | DCHAR_CPY (result + length, converted, converted_len); | ||
2021 | free (converted); | ||
2022 | } | ||
2023 | length += converted_len; | ||
2024 | } | ||
2025 | # endif | ||
2026 | |||
2027 | if (has_width && width > characters | ||
2028 | && (dp->flags & FLAG_LEFT)) | ||
2029 | { | ||
2030 | size_t n = width - characters; | ||
2031 | ENSURE_ALLOCATION (xsum (length, n)); | ||
2032 | DCHAR_SET (result + length, ' ', n); | ||
2033 | length += n; | ||
318 | } | 2034 | } |
319 | } | 2035 | } |
2036 | break; | ||
320 | 2037 | ||
2038 | default: | ||
2039 | abort (); | ||
2040 | } | ||
2041 | } | ||
2042 | #endif | ||
2043 | #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL | ||
2044 | else if ((dp->conversion == 'a' || dp->conversion == 'A') | ||
2045 | # if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) | ||
2046 | && (0 | ||
2047 | # if NEED_PRINTF_DOUBLE | ||
2048 | || a.arg[dp->arg_index].type == TYPE_DOUBLE | ||
2049 | # endif | ||
2050 | # if NEED_PRINTF_LONG_DOUBLE | ||
2051 | || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE | ||
2052 | # endif | ||
2053 | ) | ||
2054 | # endif | ||
2055 | ) | ||
2056 | { | ||
2057 | arg_type type = a.arg[dp->arg_index].type; | ||
2058 | int flags = dp->flags; | ||
2059 | int has_width; | ||
2060 | size_t width; | ||
2061 | int has_precision; | ||
2062 | size_t precision; | ||
2063 | size_t tmp_length; | ||
2064 | DCHAR_T tmpbuf[700]; | ||
2065 | DCHAR_T *tmp; | ||
2066 | DCHAR_T *pad_ptr; | ||
2067 | DCHAR_T *p; | ||
2068 | |||
2069 | has_width = 0; | ||
2070 | width = 0; | ||
2071 | if (dp->width_start != dp->width_end) | ||
2072 | { | ||
2073 | if (dp->width_arg_index != ARG_NONE) | ||
2074 | { | ||
2075 | int arg; | ||
2076 | |||
2077 | if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) | ||
2078 | abort (); | ||
2079 | arg = a.arg[dp->width_arg_index].a.a_int; | ||
2080 | if (arg < 0) | ||
2081 | { | ||
2082 | /* "A negative field width is taken as a '-' flag | ||
2083 | followed by a positive field width." */ | ||
2084 | flags |= FLAG_LEFT; | ||
2085 | width = (unsigned int) (-arg); | ||
2086 | } | ||
2087 | else | ||
2088 | width = arg; | ||
2089 | } | ||
2090 | else | ||
2091 | { | ||
2092 | const FCHAR_T *digitp = dp->width_start; | ||
2093 | |||
2094 | do | ||
2095 | width = xsum (xtimes (width, 10), *digitp++ - '0'); | ||
2096 | while (digitp != dp->width_end); | ||
2097 | } | ||
2098 | has_width = 1; | ||
2099 | } | ||
2100 | |||
2101 | has_precision = 0; | ||
2102 | precision = 0; | ||
2103 | if (dp->precision_start != dp->precision_end) | ||
2104 | { | ||
2105 | if (dp->precision_arg_index != ARG_NONE) | ||
2106 | { | ||
2107 | int arg; | ||
2108 | |||
2109 | if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) | ||
2110 | abort (); | ||
2111 | arg = a.arg[dp->precision_arg_index].a.a_int; | ||
2112 | /* "A negative precision is taken as if the precision | ||
2113 | were omitted." */ | ||
2114 | if (arg >= 0) | ||
2115 | { | ||
2116 | precision = arg; | ||
2117 | has_precision = 1; | ||
2118 | } | ||
2119 | } | ||
2120 | else | ||
2121 | { | ||
2122 | const FCHAR_T *digitp = dp->precision_start + 1; | ||
2123 | |||
2124 | precision = 0; | ||
2125 | while (digitp != dp->precision_end) | ||
2126 | precision = xsum (xtimes (precision, 10), *digitp++ - '0'); | ||
2127 | has_precision = 1; | ||
2128 | } | ||
2129 | } | ||
2130 | |||
2131 | /* Allocate a temporary buffer of sufficient size. */ | ||
2132 | if (type == TYPE_LONGDOUBLE) | ||
2133 | tmp_length = | ||
2134 | (unsigned int) ((LDBL_DIG + 1) | ||
2135 | * 0.831 /* decimal -> hexadecimal */ | ||
2136 | ) | ||
2137 | + 1; /* turn floor into ceil */ | ||
2138 | else | ||
2139 | tmp_length = | ||
2140 | (unsigned int) ((DBL_DIG + 1) | ||
2141 | * 0.831 /* decimal -> hexadecimal */ | ||
2142 | ) | ||
2143 | + 1; /* turn floor into ceil */ | ||
2144 | if (tmp_length < precision) | ||
2145 | tmp_length = precision; | ||
2146 | /* Account for sign, decimal point etc. */ | ||
2147 | tmp_length = xsum (tmp_length, 12); | ||
2148 | |||
2149 | if (tmp_length < width) | ||
2150 | tmp_length = width; | ||
2151 | |||
2152 | tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ | ||
2153 | |||
2154 | if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) | ||
2155 | tmp = tmpbuf; | ||
2156 | else | ||
2157 | { | ||
2158 | size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); | ||
2159 | |||
2160 | if (size_overflow_p (tmp_memsize)) | ||
2161 | /* Overflow, would lead to out of memory. */ | ||
2162 | goto out_of_memory; | ||
2163 | tmp = (DCHAR_T *) malloc (tmp_memsize); | ||
2164 | if (tmp == NULL) | ||
2165 | /* Out of memory. */ | ||
2166 | goto out_of_memory; | ||
2167 | } | ||
2168 | |||
2169 | pad_ptr = NULL; | ||
2170 | p = tmp; | ||
2171 | if (type == TYPE_LONGDOUBLE) | ||
2172 | { | ||
2173 | # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE | ||
2174 | long double arg = a.arg[dp->arg_index].a.a_longdouble; | ||
2175 | |||
2176 | if (isnanl (arg)) | ||
2177 | { | ||
2178 | if (dp->conversion == 'A') | ||
2179 | { | ||
2180 | *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; | ||
2181 | } | ||
2182 | else | ||
2183 | { | ||
2184 | *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; | ||
2185 | } | ||
2186 | } | ||
2187 | else | ||
2188 | { | ||
2189 | int sign = 0; | ||
2190 | DECL_LONG_DOUBLE_ROUNDING | ||
2191 | |||
2192 | BEGIN_LONG_DOUBLE_ROUNDING (); | ||
2193 | |||
2194 | if (signbit (arg)) /* arg < 0.0L or negative zero */ | ||
2195 | { | ||
2196 | sign = -1; | ||
2197 | arg = -arg; | ||
2198 | } | ||
2199 | |||
2200 | if (sign < 0) | ||
2201 | *p++ = '-'; | ||
2202 | else if (flags & FLAG_SHOWSIGN) | ||
2203 | *p++ = '+'; | ||
2204 | else if (flags & FLAG_SPACE) | ||
2205 | *p++ = ' '; | ||
2206 | |||
2207 | if (arg > 0.0L && arg + arg == arg) | ||
2208 | { | ||
2209 | if (dp->conversion == 'A') | ||
2210 | { | ||
2211 | *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; | ||
2212 | } | ||
2213 | else | ||
2214 | { | ||
2215 | *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; | ||
2216 | } | ||
2217 | } | ||
2218 | else | ||
2219 | { | ||
2220 | int exponent; | ||
2221 | long double mantissa; | ||
2222 | |||
2223 | if (arg > 0.0L) | ||
2224 | mantissa = printf_frexpl (arg, &exponent); | ||
2225 | else | ||
2226 | { | ||
2227 | exponent = 0; | ||
2228 | mantissa = 0.0L; | ||
2229 | } | ||
2230 | |||
2231 | if (has_precision | ||
2232 | && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) | ||
2233 | { | ||
2234 | /* Round the mantissa. */ | ||
2235 | long double tail = mantissa; | ||
2236 | size_t q; | ||
2237 | |||
2238 | for (q = precision; ; q--) | ||
2239 | { | ||
2240 | int digit = (int) tail; | ||
2241 | tail -= digit; | ||
2242 | if (q == 0) | ||
2243 | { | ||
2244 | if (digit & 1 ? tail >= 0.5L : tail > 0.5L) | ||
2245 | tail = 1 - tail; | ||
2246 | else | ||
2247 | tail = - tail; | ||
2248 | break; | ||
2249 | } | ||
2250 | tail *= 16.0L; | ||
2251 | } | ||
2252 | if (tail != 0.0L) | ||
2253 | for (q = precision; q > 0; q--) | ||
2254 | tail *= 0.0625L; | ||
2255 | mantissa += tail; | ||
2256 | } | ||
2257 | |||
2258 | *p++ = '0'; | ||
2259 | *p++ = dp->conversion - 'A' + 'X'; | ||
2260 | pad_ptr = p; | ||
2261 | { | ||
2262 | int digit; | ||
2263 | |||
2264 | digit = (int) mantissa; | ||
2265 | mantissa -= digit; | ||
2266 | *p++ = '0' + digit; | ||
2267 | if ((flags & FLAG_ALT) | ||
2268 | || mantissa > 0.0L || precision > 0) | ||
2269 | { | ||
2270 | *p++ = decimal_point_char (); | ||
2271 | /* This loop terminates because we assume | ||
2272 | that FLT_RADIX is a power of 2. */ | ||
2273 | while (mantissa > 0.0L) | ||
2274 | { | ||
2275 | mantissa *= 16.0L; | ||
2276 | digit = (int) mantissa; | ||
2277 | mantissa -= digit; | ||
2278 | *p++ = digit | ||
2279 | + (digit < 10 | ||
2280 | ? '0' | ||
2281 | : dp->conversion - 10); | ||
2282 | if (precision > 0) | ||
2283 | precision--; | ||
2284 | } | ||
2285 | while (precision > 0) | ||
2286 | { | ||
2287 | *p++ = '0'; | ||
2288 | precision--; | ||
2289 | } | ||
2290 | } | ||
2291 | } | ||
2292 | *p++ = dp->conversion - 'A' + 'P'; | ||
2293 | # if WIDE_CHAR_VERSION | ||
2294 | { | ||
2295 | static const wchar_t decimal_format[] = | ||
2296 | { '%', '+', 'd', '\0' }; | ||
2297 | SNPRINTF (p, 6 + 1, decimal_format, exponent); | ||
2298 | } | ||
2299 | while (*p != '\0') | ||
2300 | p++; | ||
2301 | # else | ||
2302 | if (sizeof (DCHAR_T) == 1) | ||
2303 | { | ||
2304 | sprintf ((char *) p, "%+d", exponent); | ||
2305 | while (*p != '\0') | ||
2306 | p++; | ||
2307 | } | ||
2308 | else | ||
2309 | { | ||
2310 | char expbuf[6 + 1]; | ||
2311 | const char *ep; | ||
2312 | sprintf (expbuf, "%+d", exponent); | ||
2313 | for (ep = expbuf; (*p = *ep) != '\0'; ep++) | ||
2314 | p++; | ||
2315 | } | ||
2316 | # endif | ||
2317 | } | ||
2318 | |||
2319 | END_LONG_DOUBLE_ROUNDING (); | ||
2320 | } | ||
2321 | # else | ||
2322 | abort (); | ||
2323 | # endif | ||
2324 | } | ||
2325 | else | ||
2326 | { | ||
2327 | # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE | ||
2328 | double arg = a.arg[dp->arg_index].a.a_double; | ||
2329 | |||
2330 | if (isnand (arg)) | ||
2331 | { | ||
2332 | if (dp->conversion == 'A') | ||
2333 | { | ||
2334 | *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; | ||
2335 | } | ||
2336 | else | ||
2337 | { | ||
2338 | *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; | ||
2339 | } | ||
2340 | } | ||
2341 | else | ||
2342 | { | ||
2343 | int sign = 0; | ||
2344 | |||
2345 | if (signbit (arg)) /* arg < 0.0 or negative zero */ | ||
2346 | { | ||
2347 | sign = -1; | ||
2348 | arg = -arg; | ||
2349 | } | ||
2350 | |||
2351 | if (sign < 0) | ||
2352 | *p++ = '-'; | ||
2353 | else if (flags & FLAG_SHOWSIGN) | ||
2354 | *p++ = '+'; | ||
2355 | else if (flags & FLAG_SPACE) | ||
2356 | *p++ = ' '; | ||
2357 | |||
2358 | if (arg > 0.0 && arg + arg == arg) | ||
2359 | { | ||
2360 | if (dp->conversion == 'A') | ||
2361 | { | ||
2362 | *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; | ||
2363 | } | ||
2364 | else | ||
2365 | { | ||
2366 | *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; | ||
2367 | } | ||
2368 | } | ||
2369 | else | ||
2370 | { | ||
2371 | int exponent; | ||
2372 | double mantissa; | ||
2373 | |||
2374 | if (arg > 0.0) | ||
2375 | mantissa = printf_frexp (arg, &exponent); | ||
2376 | else | ||
2377 | { | ||
2378 | exponent = 0; | ||
2379 | mantissa = 0.0; | ||
2380 | } | ||
2381 | |||
2382 | if (has_precision | ||
2383 | && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) | ||
2384 | { | ||
2385 | /* Round the mantissa. */ | ||
2386 | double tail = mantissa; | ||
2387 | size_t q; | ||
2388 | |||
2389 | for (q = precision; ; q--) | ||
2390 | { | ||
2391 | int digit = (int) tail; | ||
2392 | tail -= digit; | ||
2393 | if (q == 0) | ||
2394 | { | ||
2395 | if (digit & 1 ? tail >= 0.5 : tail > 0.5) | ||
2396 | tail = 1 - tail; | ||
2397 | else | ||
2398 | tail = - tail; | ||
2399 | break; | ||
2400 | } | ||
2401 | tail *= 16.0; | ||
2402 | } | ||
2403 | if (tail != 0.0) | ||
2404 | for (q = precision; q > 0; q--) | ||
2405 | tail *= 0.0625; | ||
2406 | mantissa += tail; | ||
2407 | } | ||
2408 | |||
2409 | *p++ = '0'; | ||
2410 | *p++ = dp->conversion - 'A' + 'X'; | ||
2411 | pad_ptr = p; | ||
2412 | { | ||
2413 | int digit; | ||
2414 | |||
2415 | digit = (int) mantissa; | ||
2416 | mantissa -= digit; | ||
2417 | *p++ = '0' + digit; | ||
2418 | if ((flags & FLAG_ALT) | ||
2419 | || mantissa > 0.0 || precision > 0) | ||
2420 | { | ||
2421 | *p++ = decimal_point_char (); | ||
2422 | /* This loop terminates because we assume | ||
2423 | that FLT_RADIX is a power of 2. */ | ||
2424 | while (mantissa > 0.0) | ||
2425 | { | ||
2426 | mantissa *= 16.0; | ||
2427 | digit = (int) mantissa; | ||
2428 | mantissa -= digit; | ||
2429 | *p++ = digit | ||
2430 | + (digit < 10 | ||
2431 | ? '0' | ||
2432 | : dp->conversion - 10); | ||
2433 | if (precision > 0) | ||
2434 | precision--; | ||
2435 | } | ||
2436 | while (precision > 0) | ||
2437 | { | ||
2438 | *p++ = '0'; | ||
2439 | precision--; | ||
2440 | } | ||
2441 | } | ||
2442 | } | ||
2443 | *p++ = dp->conversion - 'A' + 'P'; | ||
2444 | # if WIDE_CHAR_VERSION | ||
2445 | { | ||
2446 | static const wchar_t decimal_format[] = | ||
2447 | { '%', '+', 'd', '\0' }; | ||
2448 | SNPRINTF (p, 6 + 1, decimal_format, exponent); | ||
2449 | } | ||
2450 | while (*p != '\0') | ||
2451 | p++; | ||
2452 | # else | ||
2453 | if (sizeof (DCHAR_T) == 1) | ||
2454 | { | ||
2455 | sprintf ((char *) p, "%+d", exponent); | ||
2456 | while (*p != '\0') | ||
2457 | p++; | ||
2458 | } | ||
2459 | else | ||
2460 | { | ||
2461 | char expbuf[6 + 1]; | ||
2462 | const char *ep; | ||
2463 | sprintf (expbuf, "%+d", exponent); | ||
2464 | for (ep = expbuf; (*p = *ep) != '\0'; ep++) | ||
2465 | p++; | ||
2466 | } | ||
2467 | # endif | ||
2468 | } | ||
2469 | } | ||
2470 | # else | ||
2471 | abort (); | ||
2472 | # endif | ||
2473 | } | ||
2474 | /* The generated string now extends from tmp to p, with the | ||
2475 | zero padding insertion point being at pad_ptr. */ | ||
2476 | if (has_width && p - tmp < width) | ||
2477 | { | ||
2478 | size_t pad = width - (p - tmp); | ||
2479 | DCHAR_T *end = p + pad; | ||
2480 | |||
2481 | if (flags & FLAG_LEFT) | ||
2482 | { | ||
2483 | /* Pad with spaces on the right. */ | ||
2484 | for (; pad > 0; pad--) | ||
2485 | *p++ = ' '; | ||
2486 | } | ||
2487 | else if ((flags & FLAG_ZERO) && pad_ptr != NULL) | ||
2488 | { | ||
2489 | /* Pad with zeroes. */ | ||
2490 | DCHAR_T *q = end; | ||
2491 | |||
2492 | while (p > pad_ptr) | ||
2493 | *--q = *--p; | ||
2494 | for (; pad > 0; pad--) | ||
2495 | *p++ = '0'; | ||
2496 | } | ||
2497 | else | ||
2498 | { | ||
2499 | /* Pad with spaces on the left. */ | ||
2500 | DCHAR_T *q = end; | ||
2501 | |||
2502 | while (p > tmp) | ||
2503 | *--q = *--p; | ||
2504 | for (; pad > 0; pad--) | ||
2505 | *p++ = ' '; | ||
2506 | } | ||
2507 | |||
2508 | p = end; | ||
2509 | } | ||
2510 | |||
2511 | { | ||
2512 | size_t count = p - tmp; | ||
2513 | |||
2514 | if (count >= tmp_length) | ||
2515 | /* tmp_length was incorrectly calculated - fix the | ||
2516 | code above! */ | ||
2517 | abort (); | ||
2518 | |||
2519 | /* Make room for the result. */ | ||
2520 | if (count >= allocated - length) | ||
2521 | { | ||
2522 | size_t n = xsum (length, count); | ||
2523 | |||
2524 | ENSURE_ALLOCATION (n); | ||
2525 | } | ||
2526 | |||
2527 | /* Append the result. */ | ||
2528 | memcpy (result + length, tmp, count * sizeof (DCHAR_T)); | ||
2529 | if (tmp != tmpbuf) | ||
2530 | free (tmp); | ||
2531 | length += count; | ||
2532 | } | ||
2533 | } | ||
2534 | #endif | ||
2535 | #if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL | ||
2536 | else if ((dp->conversion == 'f' || dp->conversion == 'F' | ||
2537 | || dp->conversion == 'e' || dp->conversion == 'E' | ||
2538 | || dp->conversion == 'g' || dp->conversion == 'G' | ||
2539 | || dp->conversion == 'a' || dp->conversion == 'A') | ||
2540 | && (0 | ||
2541 | # if NEED_PRINTF_DOUBLE | ||
2542 | || a.arg[dp->arg_index].type == TYPE_DOUBLE | ||
2543 | # elif NEED_PRINTF_INFINITE_DOUBLE | ||
2544 | || (a.arg[dp->arg_index].type == TYPE_DOUBLE | ||
2545 | /* The systems (mingw) which produce wrong output | ||
2546 | for Inf, -Inf, and NaN also do so for -0.0. | ||
2547 | Therefore we treat this case here as well. */ | ||
2548 | && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) | ||
2549 | # endif | ||
2550 | # if NEED_PRINTF_LONG_DOUBLE | ||
2551 | || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE | ||
2552 | # elif NEED_PRINTF_INFINITE_LONG_DOUBLE | ||
2553 | || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE | ||
2554 | /* Some systems produce wrong output for Inf, | ||
2555 | -Inf, and NaN. */ | ||
2556 | && is_infinitel (a.arg[dp->arg_index].a.a_longdouble)) | ||
2557 | # endif | ||
2558 | )) | ||
2559 | { | ||
2560 | # if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) | ||
2561 | arg_type type = a.arg[dp->arg_index].type; | ||
2562 | # endif | ||
2563 | int flags = dp->flags; | ||
2564 | int has_width; | ||
2565 | size_t width; | ||
2566 | int has_precision; | ||
2567 | size_t precision; | ||
2568 | size_t tmp_length; | ||
2569 | DCHAR_T tmpbuf[700]; | ||
2570 | DCHAR_T *tmp; | ||
2571 | DCHAR_T *pad_ptr; | ||
2572 | DCHAR_T *p; | ||
2573 | |||
2574 | has_width = 0; | ||
2575 | width = 0; | ||
2576 | if (dp->width_start != dp->width_end) | ||
2577 | { | ||
2578 | if (dp->width_arg_index != ARG_NONE) | ||
2579 | { | ||
2580 | int arg; | ||
2581 | |||
2582 | if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) | ||
2583 | abort (); | ||
2584 | arg = a.arg[dp->width_arg_index].a.a_int; | ||
2585 | if (arg < 0) | ||
2586 | { | ||
2587 | /* "A negative field width is taken as a '-' flag | ||
2588 | followed by a positive field width." */ | ||
2589 | flags |= FLAG_LEFT; | ||
2590 | width = (unsigned int) (-arg); | ||
2591 | } | ||
2592 | else | ||
2593 | width = arg; | ||
2594 | } | ||
2595 | else | ||
2596 | { | ||
2597 | const FCHAR_T *digitp = dp->width_start; | ||
2598 | |||
2599 | do | ||
2600 | width = xsum (xtimes (width, 10), *digitp++ - '0'); | ||
2601 | while (digitp != dp->width_end); | ||
2602 | } | ||
2603 | has_width = 1; | ||
2604 | } | ||
2605 | |||
2606 | has_precision = 0; | ||
2607 | precision = 0; | ||
2608 | if (dp->precision_start != dp->precision_end) | ||
2609 | { | ||
2610 | if (dp->precision_arg_index != ARG_NONE) | ||
2611 | { | ||
2612 | int arg; | ||
2613 | |||
2614 | if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) | ||
2615 | abort (); | ||
2616 | arg = a.arg[dp->precision_arg_index].a.a_int; | ||
2617 | /* "A negative precision is taken as if the precision | ||
2618 | were omitted." */ | ||
2619 | if (arg >= 0) | ||
2620 | { | ||
2621 | precision = arg; | ||
2622 | has_precision = 1; | ||
2623 | } | ||
2624 | } | ||
2625 | else | ||
2626 | { | ||
2627 | const FCHAR_T *digitp = dp->precision_start + 1; | ||
2628 | |||
2629 | precision = 0; | ||
2630 | while (digitp != dp->precision_end) | ||
2631 | precision = xsum (xtimes (precision, 10), *digitp++ - '0'); | ||
2632 | has_precision = 1; | ||
2633 | } | ||
2634 | } | ||
2635 | |||
2636 | /* POSIX specifies the default precision to be 6 for %f, %F, | ||
2637 | %e, %E, but not for %g, %G. Implementations appear to use | ||
2638 | the same default precision also for %g, %G. */ | ||
2639 | if (!has_precision) | ||
2640 | precision = 6; | ||
2641 | |||
2642 | /* Allocate a temporary buffer of sufficient size. */ | ||
2643 | # if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE | ||
2644 | tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); | ||
2645 | # elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE | ||
2646 | tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); | ||
2647 | # elif NEED_PRINTF_LONG_DOUBLE | ||
2648 | tmp_length = LDBL_DIG + 1; | ||
2649 | # elif NEED_PRINTF_DOUBLE | ||
2650 | tmp_length = DBL_DIG + 1; | ||
2651 | # else | ||
2652 | tmp_length = 0; | ||
2653 | # endif | ||
2654 | if (tmp_length < precision) | ||
2655 | tmp_length = precision; | ||
2656 | # if NEED_PRINTF_LONG_DOUBLE | ||
2657 | # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE | ||
2658 | if (type == TYPE_LONGDOUBLE) | ||
2659 | # endif | ||
2660 | if (dp->conversion == 'f' || dp->conversion == 'F') | ||
2661 | { | ||
2662 | long double arg = a.arg[dp->arg_index].a.a_longdouble; | ||
2663 | if (!(isnanl (arg) || arg + arg == arg)) | ||
2664 | { | ||
2665 | /* arg is finite and nonzero. */ | ||
2666 | int exponent = floorlog10l (arg < 0 ? -arg : arg); | ||
2667 | if (exponent >= 0 && tmp_length < exponent + precision) | ||
2668 | tmp_length = exponent + precision; | ||
2669 | } | ||
2670 | } | ||
2671 | # endif | ||
2672 | # if NEED_PRINTF_DOUBLE | ||
2673 | # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE | ||
2674 | if (type == TYPE_DOUBLE) | ||
2675 | # endif | ||
2676 | if (dp->conversion == 'f' || dp->conversion == 'F') | ||
2677 | { | ||
2678 | double arg = a.arg[dp->arg_index].a.a_double; | ||
2679 | if (!(isnand (arg) || arg + arg == arg)) | ||
2680 | { | ||
2681 | /* arg is finite and nonzero. */ | ||
2682 | int exponent = floorlog10 (arg < 0 ? -arg : arg); | ||
2683 | if (exponent >= 0 && tmp_length < exponent + precision) | ||
2684 | tmp_length = exponent + precision; | ||
2685 | } | ||
2686 | } | ||
2687 | # endif | ||
2688 | /* Account for sign, decimal point etc. */ | ||
2689 | tmp_length = xsum (tmp_length, 12); | ||
2690 | |||
2691 | if (tmp_length < width) | ||
2692 | tmp_length = width; | ||
2693 | |||
2694 | tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ | ||
2695 | |||
2696 | if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) | ||
2697 | tmp = tmpbuf; | ||
2698 | else | ||
2699 | { | ||
2700 | size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); | ||
2701 | |||
2702 | if (size_overflow_p (tmp_memsize)) | ||
2703 | /* Overflow, would lead to out of memory. */ | ||
2704 | goto out_of_memory; | ||
2705 | tmp = (DCHAR_T *) malloc (tmp_memsize); | ||
2706 | if (tmp == NULL) | ||
2707 | /* Out of memory. */ | ||
2708 | goto out_of_memory; | ||
2709 | } | ||
2710 | |||
2711 | pad_ptr = NULL; | ||
2712 | p = tmp; | ||
2713 | |||
2714 | # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE | ||
2715 | # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE | ||
2716 | if (type == TYPE_LONGDOUBLE) | ||
2717 | # endif | ||
2718 | { | ||
2719 | long double arg = a.arg[dp->arg_index].a.a_longdouble; | ||
2720 | |||
2721 | if (isnanl (arg)) | ||
2722 | { | ||
2723 | if (dp->conversion >= 'A' && dp->conversion <= 'Z') | ||
2724 | { | ||
2725 | *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; | ||
2726 | } | ||
2727 | else | ||
2728 | { | ||
2729 | *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; | ||
2730 | } | ||
2731 | } | ||
2732 | else | ||
2733 | { | ||
2734 | int sign = 0; | ||
2735 | DECL_LONG_DOUBLE_ROUNDING | ||
2736 | |||
2737 | BEGIN_LONG_DOUBLE_ROUNDING (); | ||
2738 | |||
2739 | if (signbit (arg)) /* arg < 0.0L or negative zero */ | ||
2740 | { | ||
2741 | sign = -1; | ||
2742 | arg = -arg; | ||
2743 | } | ||
2744 | |||
2745 | if (sign < 0) | ||
2746 | *p++ = '-'; | ||
2747 | else if (flags & FLAG_SHOWSIGN) | ||
2748 | *p++ = '+'; | ||
2749 | else if (flags & FLAG_SPACE) | ||
2750 | *p++ = ' '; | ||
2751 | |||
2752 | if (arg > 0.0L && arg + arg == arg) | ||
2753 | { | ||
2754 | if (dp->conversion >= 'A' && dp->conversion <= 'Z') | ||
2755 | { | ||
2756 | *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; | ||
2757 | } | ||
2758 | else | ||
2759 | { | ||
2760 | *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; | ||
2761 | } | ||
2762 | } | ||
2763 | else | ||
2764 | { | ||
2765 | # if NEED_PRINTF_LONG_DOUBLE | ||
2766 | pad_ptr = p; | ||
2767 | |||
2768 | if (dp->conversion == 'f' || dp->conversion == 'F') | ||
2769 | { | ||
2770 | char *digits; | ||
2771 | size_t ndigits; | ||
2772 | |||
2773 | digits = | ||
2774 | scale10_round_decimal_long_double (arg, precision); | ||
2775 | if (digits == NULL) | ||
2776 | { | ||
2777 | END_LONG_DOUBLE_ROUNDING (); | ||
2778 | goto out_of_memory; | ||
2779 | } | ||
2780 | ndigits = strlen (digits); | ||
2781 | |||
2782 | if (ndigits > precision) | ||
2783 | do | ||
2784 | { | ||
2785 | --ndigits; | ||
2786 | *p++ = digits[ndigits]; | ||
2787 | } | ||
2788 | while (ndigits > precision); | ||
2789 | else | ||
2790 | *p++ = '0'; | ||
2791 | /* Here ndigits <= precision. */ | ||
2792 | if ((flags & FLAG_ALT) || precision > 0) | ||
2793 | { | ||
2794 | *p++ = decimal_point_char (); | ||
2795 | for (; precision > ndigits; precision--) | ||
2796 | *p++ = '0'; | ||
2797 | while (ndigits > 0) | ||
2798 | { | ||
2799 | --ndigits; | ||
2800 | *p++ = digits[ndigits]; | ||
2801 | } | ||
2802 | } | ||
2803 | |||
2804 | free (digits); | ||
2805 | } | ||
2806 | else if (dp->conversion == 'e' || dp->conversion == 'E') | ||
2807 | { | ||
2808 | int exponent; | ||
2809 | |||
2810 | if (arg == 0.0L) | ||
2811 | { | ||
2812 | exponent = 0; | ||
2813 | *p++ = '0'; | ||
2814 | if ((flags & FLAG_ALT) || precision > 0) | ||
2815 | { | ||
2816 | *p++ = decimal_point_char (); | ||
2817 | for (; precision > 0; precision--) | ||
2818 | *p++ = '0'; | ||
2819 | } | ||
2820 | } | ||
2821 | else | ||
2822 | { | ||
2823 | /* arg > 0.0L. */ | ||
2824 | int adjusted; | ||
2825 | char *digits; | ||
2826 | size_t ndigits; | ||
2827 | |||
2828 | exponent = floorlog10l (arg); | ||
2829 | adjusted = 0; | ||
2830 | for (;;) | ||
2831 | { | ||
2832 | digits = | ||
2833 | scale10_round_decimal_long_double (arg, | ||
2834 | (int)precision - exponent); | ||
2835 | if (digits == NULL) | ||
2836 | { | ||
2837 | END_LONG_DOUBLE_ROUNDING (); | ||
2838 | goto out_of_memory; | ||
2839 | } | ||
2840 | ndigits = strlen (digits); | ||
2841 | |||
2842 | if (ndigits == precision + 1) | ||
2843 | break; | ||
2844 | if (ndigits < precision | ||
2845 | || ndigits > precision + 2) | ||
2846 | /* The exponent was not guessed | ||
2847 | precisely enough. */ | ||
2848 | abort (); | ||
2849 | if (adjusted) | ||
2850 | /* None of two values of exponent is | ||
2851 | the right one. Prevent an endless | ||
2852 | loop. */ | ||
2853 | abort (); | ||
2854 | free (digits); | ||
2855 | if (ndigits == precision) | ||
2856 | exponent -= 1; | ||
2857 | else | ||
2858 | exponent += 1; | ||
2859 | adjusted = 1; | ||
2860 | } | ||
2861 | |||
2862 | /* Here ndigits = precision+1. */ | ||
2863 | *p++ = digits[--ndigits]; | ||
2864 | if ((flags & FLAG_ALT) || precision > 0) | ||
2865 | { | ||
2866 | *p++ = decimal_point_char (); | ||
2867 | while (ndigits > 0) | ||
2868 | { | ||
2869 | --ndigits; | ||
2870 | *p++ = digits[ndigits]; | ||
2871 | } | ||
2872 | } | ||
2873 | |||
2874 | free (digits); | ||
2875 | } | ||
2876 | |||
2877 | *p++ = dp->conversion; /* 'e' or 'E' */ | ||
2878 | # if WIDE_CHAR_VERSION | ||
2879 | { | ||
2880 | static const wchar_t decimal_format[] = | ||
2881 | { '%', '+', '.', '2', 'd', '\0' }; | ||
2882 | SNPRINTF (p, 6 + 1, decimal_format, exponent); | ||
2883 | } | ||
2884 | while (*p != '\0') | ||
2885 | p++; | ||
2886 | # else | ||
2887 | if (sizeof (DCHAR_T) == 1) | ||
2888 | { | ||
2889 | sprintf ((char *) p, "%+.2d", exponent); | ||
2890 | while (*p != '\0') | ||
2891 | p++; | ||
2892 | } | ||
2893 | else | ||
2894 | { | ||
2895 | char expbuf[6 + 1]; | ||
2896 | const char *ep; | ||
2897 | sprintf (expbuf, "%+.2d", exponent); | ||
2898 | for (ep = expbuf; (*p = *ep) != '\0'; ep++) | ||
2899 | p++; | ||
2900 | } | ||
2901 | # endif | ||
2902 | } | ||
2903 | else if (dp->conversion == 'g' || dp->conversion == 'G') | ||
2904 | { | ||
2905 | if (precision == 0) | ||
2906 | precision = 1; | ||
2907 | /* precision >= 1. */ | ||
2908 | |||
2909 | if (arg == 0.0L) | ||
2910 | /* The exponent is 0, >= -4, < precision. | ||
2911 | Use fixed-point notation. */ | ||
2912 | { | ||
2913 | size_t ndigits = precision; | ||
2914 | /* Number of trailing zeroes that have to be | ||
2915 | dropped. */ | ||
2916 | size_t nzeroes = | ||
2917 | (flags & FLAG_ALT ? 0 : precision - 1); | ||
2918 | |||
2919 | --ndigits; | ||
2920 | *p++ = '0'; | ||
2921 | if ((flags & FLAG_ALT) || ndigits > nzeroes) | ||
2922 | { | ||
2923 | *p++ = decimal_point_char (); | ||
2924 | while (ndigits > nzeroes) | ||
2925 | { | ||
2926 | --ndigits; | ||
2927 | *p++ = '0'; | ||
2928 | } | ||
2929 | } | ||
2930 | } | ||
2931 | else | ||
2932 | { | ||
2933 | /* arg > 0.0L. */ | ||
2934 | int exponent; | ||
2935 | int adjusted; | ||
2936 | char *digits; | ||
2937 | size_t ndigits; | ||
2938 | size_t nzeroes; | ||
2939 | |||
2940 | exponent = floorlog10l (arg); | ||
2941 | adjusted = 0; | ||
2942 | for (;;) | ||
2943 | { | ||
2944 | digits = | ||
2945 | scale10_round_decimal_long_double (arg, | ||
2946 | (int)(precision - 1) - exponent); | ||
2947 | if (digits == NULL) | ||
2948 | { | ||
2949 | END_LONG_DOUBLE_ROUNDING (); | ||
2950 | goto out_of_memory; | ||
2951 | } | ||
2952 | ndigits = strlen (digits); | ||
2953 | |||
2954 | if (ndigits == precision) | ||
2955 | break; | ||
2956 | if (ndigits < precision - 1 | ||
2957 | || ndigits > precision + 1) | ||
2958 | /* The exponent was not guessed | ||
2959 | precisely enough. */ | ||
2960 | abort (); | ||
2961 | if (adjusted) | ||
2962 | /* None of two values of exponent is | ||
2963 | the right one. Prevent an endless | ||
2964 | loop. */ | ||
2965 | abort (); | ||
2966 | free (digits); | ||
2967 | if (ndigits < precision) | ||
2968 | exponent -= 1; | ||
2969 | else | ||
2970 | exponent += 1; | ||
2971 | adjusted = 1; | ||
2972 | } | ||
2973 | /* Here ndigits = precision. */ | ||
2974 | |||
2975 | /* Determine the number of trailing zeroes | ||
2976 | that have to be dropped. */ | ||
2977 | nzeroes = 0; | ||
2978 | if ((flags & FLAG_ALT) == 0) | ||
2979 | while (nzeroes < ndigits | ||
2980 | && digits[nzeroes] == '0') | ||
2981 | nzeroes++; | ||
2982 | |||
2983 | /* The exponent is now determined. */ | ||
2984 | if (exponent >= -4 | ||
2985 | && exponent < (long)precision) | ||
2986 | { | ||
2987 | /* Fixed-point notation: | ||
2988 | max(exponent,0)+1 digits, then the | ||
2989 | decimal point, then the remaining | ||
2990 | digits without trailing zeroes. */ | ||
2991 | if (exponent >= 0) | ||
2992 | { | ||
2993 | size_t count = exponent + 1; | ||
2994 | /* Note: count <= precision = ndigits. */ | ||
2995 | for (; count > 0; count--) | ||
2996 | *p++ = digits[--ndigits]; | ||
2997 | if ((flags & FLAG_ALT) || ndigits > nzeroes) | ||
2998 | { | ||
2999 | *p++ = decimal_point_char (); | ||
3000 | while (ndigits > nzeroes) | ||
3001 | { | ||
3002 | --ndigits; | ||
3003 | *p++ = digits[ndigits]; | ||
3004 | } | ||
3005 | } | ||
3006 | } | ||
3007 | else | ||
3008 | { | ||
3009 | size_t count = -exponent - 1; | ||
3010 | *p++ = '0'; | ||
3011 | *p++ = decimal_point_char (); | ||
3012 | for (; count > 0; count--) | ||
3013 | *p++ = '0'; | ||
3014 | while (ndigits > nzeroes) | ||
3015 | { | ||
3016 | --ndigits; | ||
3017 | *p++ = digits[ndigits]; | ||
3018 | } | ||
3019 | } | ||
3020 | } | ||
3021 | else | ||
3022 | { | ||
3023 | /* Exponential notation. */ | ||
3024 | *p++ = digits[--ndigits]; | ||
3025 | if ((flags & FLAG_ALT) || ndigits > nzeroes) | ||
3026 | { | ||
3027 | *p++ = decimal_point_char (); | ||
3028 | while (ndigits > nzeroes) | ||
3029 | { | ||
3030 | --ndigits; | ||
3031 | *p++ = digits[ndigits]; | ||
3032 | } | ||
3033 | } | ||
3034 | *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ | ||
3035 | # if WIDE_CHAR_VERSION | ||
3036 | { | ||
3037 | static const wchar_t decimal_format[] = | ||
3038 | { '%', '+', '.', '2', 'd', '\0' }; | ||
3039 | SNPRINTF (p, 6 + 1, decimal_format, exponent); | ||
3040 | } | ||
3041 | while (*p != '\0') | ||
3042 | p++; | ||
3043 | # else | ||
3044 | if (sizeof (DCHAR_T) == 1) | ||
3045 | { | ||
3046 | sprintf ((char *) p, "%+.2d", exponent); | ||
3047 | while (*p != '\0') | ||
3048 | p++; | ||
3049 | } | ||
3050 | else | ||
3051 | { | ||
3052 | char expbuf[6 + 1]; | ||
3053 | const char *ep; | ||
3054 | sprintf (expbuf, "%+.2d", exponent); | ||
3055 | for (ep = expbuf; (*p = *ep) != '\0'; ep++) | ||
3056 | p++; | ||
3057 | } | ||
3058 | # endif | ||
3059 | } | ||
3060 | |||
3061 | free (digits); | ||
3062 | } | ||
3063 | } | ||
3064 | else | ||
3065 | abort (); | ||
3066 | # else | ||
3067 | /* arg is finite. */ | ||
3068 | abort (); | ||
3069 | # endif | ||
3070 | } | ||
3071 | |||
3072 | END_LONG_DOUBLE_ROUNDING (); | ||
3073 | } | ||
3074 | } | ||
3075 | # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE | ||
3076 | else | ||
3077 | # endif | ||
3078 | # endif | ||
3079 | # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE | ||
3080 | { | ||
3081 | double arg = a.arg[dp->arg_index].a.a_double; | ||
3082 | |||
3083 | if (isnand (arg)) | ||
3084 | { | ||
3085 | if (dp->conversion >= 'A' && dp->conversion <= 'Z') | ||
3086 | { | ||
3087 | *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; | ||
3088 | } | ||
3089 | else | ||
3090 | { | ||
3091 | *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; | ||
3092 | } | ||
3093 | } | ||
3094 | else | ||
3095 | { | ||
3096 | int sign = 0; | ||
3097 | |||
3098 | if (signbit (arg)) /* arg < 0.0 or negative zero */ | ||
3099 | { | ||
3100 | sign = -1; | ||
3101 | arg = -arg; | ||
3102 | } | ||
3103 | |||
3104 | if (sign < 0) | ||
3105 | *p++ = '-'; | ||
3106 | else if (flags & FLAG_SHOWSIGN) | ||
3107 | *p++ = '+'; | ||
3108 | else if (flags & FLAG_SPACE) | ||
3109 | *p++ = ' '; | ||
3110 | |||
3111 | if (arg > 0.0 && arg + arg == arg) | ||
3112 | { | ||
3113 | if (dp->conversion >= 'A' && dp->conversion <= 'Z') | ||
3114 | { | ||
3115 | *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; | ||
3116 | } | ||
3117 | else | ||
3118 | { | ||
3119 | *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; | ||
3120 | } | ||
3121 | } | ||
3122 | else | ||
3123 | { | ||
3124 | # if NEED_PRINTF_DOUBLE | ||
3125 | pad_ptr = p; | ||
3126 | |||
3127 | if (dp->conversion == 'f' || dp->conversion == 'F') | ||
3128 | { | ||
3129 | char *digits; | ||
3130 | size_t ndigits; | ||
3131 | |||
3132 | digits = | ||
3133 | scale10_round_decimal_double (arg, precision); | ||
3134 | if (digits == NULL) | ||
3135 | goto out_of_memory; | ||
3136 | ndigits = strlen (digits); | ||
3137 | |||
3138 | if (ndigits > precision) | ||
3139 | do | ||
3140 | { | ||
3141 | --ndigits; | ||
3142 | *p++ = digits[ndigits]; | ||
3143 | } | ||
3144 | while (ndigits > precision); | ||
3145 | else | ||
3146 | *p++ = '0'; | ||
3147 | /* Here ndigits <= precision. */ | ||
3148 | if ((flags & FLAG_ALT) || precision > 0) | ||
3149 | { | ||
3150 | *p++ = decimal_point_char (); | ||
3151 | for (; precision > ndigits; precision--) | ||
3152 | *p++ = '0'; | ||
3153 | while (ndigits > 0) | ||
3154 | { | ||
3155 | --ndigits; | ||
3156 | *p++ = digits[ndigits]; | ||
3157 | } | ||
3158 | } | ||
3159 | |||
3160 | free (digits); | ||
3161 | } | ||
3162 | else if (dp->conversion == 'e' || dp->conversion == 'E') | ||
3163 | { | ||
3164 | int exponent; | ||
3165 | |||
3166 | if (arg == 0.0) | ||
3167 | { | ||
3168 | exponent = 0; | ||
3169 | *p++ = '0'; | ||
3170 | if ((flags & FLAG_ALT) || precision > 0) | ||
3171 | { | ||
3172 | *p++ = decimal_point_char (); | ||
3173 | for (; precision > 0; precision--) | ||
3174 | *p++ = '0'; | ||
3175 | } | ||
3176 | } | ||
3177 | else | ||
3178 | { | ||
3179 | /* arg > 0.0. */ | ||
3180 | int adjusted; | ||
3181 | char *digits; | ||
3182 | size_t ndigits; | ||
3183 | |||
3184 | exponent = floorlog10 (arg); | ||
3185 | adjusted = 0; | ||
3186 | for (;;) | ||
3187 | { | ||
3188 | digits = | ||
3189 | scale10_round_decimal_double (arg, | ||
3190 | (int)precision - exponent); | ||
3191 | if (digits == NULL) | ||
3192 | goto out_of_memory; | ||
3193 | ndigits = strlen (digits); | ||
3194 | |||
3195 | if (ndigits == precision + 1) | ||
3196 | break; | ||
3197 | if (ndigits < precision | ||
3198 | || ndigits > precision + 2) | ||
3199 | /* The exponent was not guessed | ||
3200 | precisely enough. */ | ||
3201 | abort (); | ||
3202 | if (adjusted) | ||
3203 | /* None of two values of exponent is | ||
3204 | the right one. Prevent an endless | ||
3205 | loop. */ | ||
3206 | abort (); | ||
3207 | free (digits); | ||
3208 | if (ndigits == precision) | ||
3209 | exponent -= 1; | ||
3210 | else | ||
3211 | exponent += 1; | ||
3212 | adjusted = 1; | ||
3213 | } | ||
3214 | |||
3215 | /* Here ndigits = precision+1. */ | ||
3216 | *p++ = digits[--ndigits]; | ||
3217 | if ((flags & FLAG_ALT) || precision > 0) | ||
3218 | { | ||
3219 | *p++ = decimal_point_char (); | ||
3220 | while (ndigits > 0) | ||
3221 | { | ||
3222 | --ndigits; | ||
3223 | *p++ = digits[ndigits]; | ||
3224 | } | ||
3225 | } | ||
3226 | |||
3227 | free (digits); | ||
3228 | } | ||
3229 | |||
3230 | *p++ = dp->conversion; /* 'e' or 'E' */ | ||
3231 | # if WIDE_CHAR_VERSION | ||
3232 | { | ||
3233 | static const wchar_t decimal_format[] = | ||
3234 | /* Produce the same number of exponent digits | ||
3235 | as the native printf implementation. */ | ||
3236 | # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ | ||
3237 | { '%', '+', '.', '3', 'd', '\0' }; | ||
3238 | # else | ||
3239 | { '%', '+', '.', '2', 'd', '\0' }; | ||
3240 | # endif | ||
3241 | SNPRINTF (p, 6 + 1, decimal_format, exponent); | ||
3242 | } | ||
3243 | while (*p != '\0') | ||
3244 | p++; | ||
3245 | # else | ||
3246 | { | ||
3247 | static const char decimal_format[] = | ||
3248 | /* Produce the same number of exponent digits | ||
3249 | as the native printf implementation. */ | ||
3250 | # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ | ||
3251 | "%+.3d"; | ||
3252 | # else | ||
3253 | "%+.2d"; | ||
3254 | # endif | ||
3255 | if (sizeof (DCHAR_T) == 1) | ||
3256 | { | ||
3257 | sprintf ((char *) p, decimal_format, exponent); | ||
3258 | while (*p != '\0') | ||
3259 | p++; | ||
3260 | } | ||
3261 | else | ||
3262 | { | ||
3263 | char expbuf[6 + 1]; | ||
3264 | const char *ep; | ||
3265 | sprintf (expbuf, decimal_format, exponent); | ||
3266 | for (ep = expbuf; (*p = *ep) != '\0'; ep++) | ||
3267 | p++; | ||
3268 | } | ||
3269 | } | ||
3270 | # endif | ||
3271 | } | ||
3272 | else if (dp->conversion == 'g' || dp->conversion == 'G') | ||
3273 | { | ||
3274 | if (precision == 0) | ||
3275 | precision = 1; | ||
3276 | /* precision >= 1. */ | ||
3277 | |||
3278 | if (arg == 0.0) | ||
3279 | /* The exponent is 0, >= -4, < precision. | ||
3280 | Use fixed-point notation. */ | ||
3281 | { | ||
3282 | size_t ndigits = precision; | ||
3283 | /* Number of trailing zeroes that have to be | ||
3284 | dropped. */ | ||
3285 | size_t nzeroes = | ||
3286 | (flags & FLAG_ALT ? 0 : precision - 1); | ||
3287 | |||
3288 | --ndigits; | ||
3289 | *p++ = '0'; | ||
3290 | if ((flags & FLAG_ALT) || ndigits > nzeroes) | ||
3291 | { | ||
3292 | *p++ = decimal_point_char (); | ||
3293 | while (ndigits > nzeroes) | ||
3294 | { | ||
3295 | --ndigits; | ||
3296 | *p++ = '0'; | ||
3297 | } | ||
3298 | } | ||
3299 | } | ||
3300 | else | ||
3301 | { | ||
3302 | /* arg > 0.0. */ | ||
3303 | int exponent; | ||
3304 | int adjusted; | ||
3305 | char *digits; | ||
3306 | size_t ndigits; | ||
3307 | size_t nzeroes; | ||
3308 | |||
3309 | exponent = floorlog10 (arg); | ||
3310 | adjusted = 0; | ||
3311 | for (;;) | ||
3312 | { | ||
3313 | digits = | ||
3314 | scale10_round_decimal_double (arg, | ||
3315 | (int)(precision - 1) - exponent); | ||
3316 | if (digits == NULL) | ||
3317 | goto out_of_memory; | ||
3318 | ndigits = strlen (digits); | ||
3319 | |||
3320 | if (ndigits == precision) | ||
3321 | break; | ||
3322 | if (ndigits < precision - 1 | ||
3323 | || ndigits > precision + 1) | ||
3324 | /* The exponent was not guessed | ||
3325 | precisely enough. */ | ||
3326 | abort (); | ||
3327 | if (adjusted) | ||
3328 | /* None of two values of exponent is | ||
3329 | the right one. Prevent an endless | ||
3330 | loop. */ | ||
3331 | abort (); | ||
3332 | free (digits); | ||
3333 | if (ndigits < precision) | ||
3334 | exponent -= 1; | ||
3335 | else | ||
3336 | exponent += 1; | ||
3337 | adjusted = 1; | ||
3338 | } | ||
3339 | /* Here ndigits = precision. */ | ||
3340 | |||
3341 | /* Determine the number of trailing zeroes | ||
3342 | that have to be dropped. */ | ||
3343 | nzeroes = 0; | ||
3344 | if ((flags & FLAG_ALT) == 0) | ||
3345 | while (nzeroes < ndigits | ||
3346 | && digits[nzeroes] == '0') | ||
3347 | nzeroes++; | ||
3348 | |||
3349 | /* The exponent is now determined. */ | ||
3350 | if (exponent >= -4 | ||
3351 | && exponent < (long)precision) | ||
3352 | { | ||
3353 | /* Fixed-point notation: | ||
3354 | max(exponent,0)+1 digits, then the | ||
3355 | decimal point, then the remaining | ||
3356 | digits without trailing zeroes. */ | ||
3357 | if (exponent >= 0) | ||
3358 | { | ||
3359 | size_t count = exponent + 1; | ||
3360 | /* Note: count <= precision = ndigits. */ | ||
3361 | for (; count > 0; count--) | ||
3362 | *p++ = digits[--ndigits]; | ||
3363 | if ((flags & FLAG_ALT) || ndigits > nzeroes) | ||
3364 | { | ||
3365 | *p++ = decimal_point_char (); | ||
3366 | while (ndigits > nzeroes) | ||
3367 | { | ||
3368 | --ndigits; | ||
3369 | *p++ = digits[ndigits]; | ||
3370 | } | ||
3371 | } | ||
3372 | } | ||
3373 | else | ||
3374 | { | ||
3375 | size_t count = -exponent - 1; | ||
3376 | *p++ = '0'; | ||
3377 | *p++ = decimal_point_char (); | ||
3378 | for (; count > 0; count--) | ||
3379 | *p++ = '0'; | ||
3380 | while (ndigits > nzeroes) | ||
3381 | { | ||
3382 | --ndigits; | ||
3383 | *p++ = digits[ndigits]; | ||
3384 | } | ||
3385 | } | ||
3386 | } | ||
3387 | else | ||
3388 | { | ||
3389 | /* Exponential notation. */ | ||
3390 | *p++ = digits[--ndigits]; | ||
3391 | if ((flags & FLAG_ALT) || ndigits > nzeroes) | ||
3392 | { | ||
3393 | *p++ = decimal_point_char (); | ||
3394 | while (ndigits > nzeroes) | ||
3395 | { | ||
3396 | --ndigits; | ||
3397 | *p++ = digits[ndigits]; | ||
3398 | } | ||
3399 | } | ||
3400 | *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ | ||
3401 | # if WIDE_CHAR_VERSION | ||
3402 | { | ||
3403 | static const wchar_t decimal_format[] = | ||
3404 | /* Produce the same number of exponent digits | ||
3405 | as the native printf implementation. */ | ||
3406 | # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ | ||
3407 | { '%', '+', '.', '3', 'd', '\0' }; | ||
3408 | # else | ||
3409 | { '%', '+', '.', '2', 'd', '\0' }; | ||
3410 | # endif | ||
3411 | SNPRINTF (p, 6 + 1, decimal_format, exponent); | ||
3412 | } | ||
3413 | while (*p != '\0') | ||
3414 | p++; | ||
3415 | # else | ||
3416 | { | ||
3417 | static const char decimal_format[] = | ||
3418 | /* Produce the same number of exponent digits | ||
3419 | as the native printf implementation. */ | ||
3420 | # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ | ||
3421 | "%+.3d"; | ||
3422 | # else | ||
3423 | "%+.2d"; | ||
3424 | # endif | ||
3425 | if (sizeof (DCHAR_T) == 1) | ||
3426 | { | ||
3427 | sprintf ((char *) p, decimal_format, exponent); | ||
3428 | while (*p != '\0') | ||
3429 | p++; | ||
3430 | } | ||
3431 | else | ||
3432 | { | ||
3433 | char expbuf[6 + 1]; | ||
3434 | const char *ep; | ||
3435 | sprintf (expbuf, decimal_format, exponent); | ||
3436 | for (ep = expbuf; (*p = *ep) != '\0'; ep++) | ||
3437 | p++; | ||
3438 | } | ||
3439 | } | ||
3440 | # endif | ||
3441 | } | ||
3442 | |||
3443 | free (digits); | ||
3444 | } | ||
3445 | } | ||
3446 | else | ||
3447 | abort (); | ||
3448 | # else | ||
3449 | /* arg is finite. */ | ||
3450 | if (!(arg == 0.0)) | ||
3451 | abort (); | ||
3452 | |||
3453 | pad_ptr = p; | ||
3454 | |||
3455 | if (dp->conversion == 'f' || dp->conversion == 'F') | ||
3456 | { | ||
3457 | *p++ = '0'; | ||
3458 | if ((flags & FLAG_ALT) || precision > 0) | ||
3459 | { | ||
3460 | *p++ = decimal_point_char (); | ||
3461 | for (; precision > 0; precision--) | ||
3462 | *p++ = '0'; | ||
3463 | } | ||
3464 | } | ||
3465 | else if (dp->conversion == 'e' || dp->conversion == 'E') | ||
3466 | { | ||
3467 | *p++ = '0'; | ||
3468 | if ((flags & FLAG_ALT) || precision > 0) | ||
3469 | { | ||
3470 | *p++ = decimal_point_char (); | ||
3471 | for (; precision > 0; precision--) | ||
3472 | *p++ = '0'; | ||
3473 | } | ||
3474 | *p++ = dp->conversion; /* 'e' or 'E' */ | ||
3475 | *p++ = '+'; | ||
3476 | /* Produce the same number of exponent digits as | ||
3477 | the native printf implementation. */ | ||
3478 | # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ | ||
3479 | *p++ = '0'; | ||
3480 | # endif | ||
3481 | *p++ = '0'; | ||
3482 | *p++ = '0'; | ||
3483 | } | ||
3484 | else if (dp->conversion == 'g' || dp->conversion == 'G') | ||
3485 | { | ||
3486 | *p++ = '0'; | ||
3487 | if (flags & FLAG_ALT) | ||
3488 | { | ||
3489 | size_t ndigits = | ||
3490 | (precision > 0 ? precision - 1 : 0); | ||
3491 | *p++ = decimal_point_char (); | ||
3492 | for (; ndigits > 0; --ndigits) | ||
3493 | *p++ = '0'; | ||
3494 | } | ||
3495 | } | ||
3496 | else | ||
3497 | abort (); | ||
3498 | # endif | ||
3499 | } | ||
3500 | } | ||
3501 | } | ||
3502 | # endif | ||
3503 | |||
3504 | /* The generated string now extends from tmp to p, with the | ||
3505 | zero padding insertion point being at pad_ptr. */ | ||
3506 | if (has_width && p - tmp < width) | ||
3507 | { | ||
3508 | size_t pad = width - (p - tmp); | ||
3509 | DCHAR_T *end = p + pad; | ||
3510 | |||
3511 | if (flags & FLAG_LEFT) | ||
3512 | { | ||
3513 | /* Pad with spaces on the right. */ | ||
3514 | for (; pad > 0; pad--) | ||
3515 | *p++ = ' '; | ||
3516 | } | ||
3517 | else if ((flags & FLAG_ZERO) && pad_ptr != NULL) | ||
3518 | { | ||
3519 | /* Pad with zeroes. */ | ||
3520 | DCHAR_T *q = end; | ||
3521 | |||
3522 | while (p > pad_ptr) | ||
3523 | *--q = *--p; | ||
3524 | for (; pad > 0; pad--) | ||
3525 | *p++ = '0'; | ||
3526 | } | ||
3527 | else | ||
3528 | { | ||
3529 | /* Pad with spaces on the left. */ | ||
3530 | DCHAR_T *q = end; | ||
3531 | |||
3532 | while (p > tmp) | ||
3533 | *--q = *--p; | ||
3534 | for (; pad > 0; pad--) | ||
3535 | *p++ = ' '; | ||
3536 | } | ||
3537 | |||
3538 | p = end; | ||
3539 | } | ||
3540 | |||
3541 | { | ||
3542 | size_t count = p - tmp; | ||
3543 | |||
3544 | if (count >= tmp_length) | ||
3545 | /* tmp_length was incorrectly calculated - fix the | ||
3546 | code above! */ | ||
3547 | abort (); | ||
3548 | |||
3549 | /* Make room for the result. */ | ||
3550 | if (count >= allocated - length) | ||
3551 | { | ||
3552 | size_t n = xsum (length, count); | ||
3553 | |||
3554 | ENSURE_ALLOCATION (n); | ||
3555 | } | ||
3556 | |||
3557 | /* Append the result. */ | ||
3558 | memcpy (result + length, tmp, count * sizeof (DCHAR_T)); | ||
3559 | if (tmp != tmpbuf) | ||
3560 | free (tmp); | ||
3561 | length += count; | ||
3562 | } | ||
3563 | } | ||
3564 | #endif | ||
3565 | else | ||
3566 | { | ||
3567 | arg_type type = a.arg[dp->arg_index].type; | ||
3568 | int flags = dp->flags; | ||
3569 | #if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION | ||
3570 | int has_width; | ||
3571 | size_t width; | ||
3572 | #endif | ||
3573 | #if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION | ||
3574 | int has_precision; | ||
3575 | size_t precision; | ||
3576 | #endif | ||
3577 | #if NEED_PRINTF_UNBOUNDED_PRECISION | ||
3578 | int prec_ourselves; | ||
3579 | #else | ||
3580 | # define prec_ourselves 0 | ||
3581 | #endif | ||
3582 | #if NEED_PRINTF_FLAG_LEFTADJUST | ||
3583 | # define pad_ourselves 1 | ||
3584 | #elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION | ||
3585 | int pad_ourselves; | ||
3586 | #else | ||
3587 | # define pad_ourselves 0 | ||
3588 | #endif | ||
3589 | TCHAR_T *fbp; | ||
3590 | unsigned int prefix_count; | ||
3591 | int prefixes[2]; | ||
3592 | #if !USE_SNPRINTF | ||
3593 | size_t tmp_length; | ||
3594 | TCHAR_T tmpbuf[700]; | ||
3595 | TCHAR_T *tmp; | ||
3596 | #endif | ||
3597 | |||
3598 | #if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION | ||
3599 | has_width = 0; | ||
3600 | width = 0; | ||
3601 | if (dp->width_start != dp->width_end) | ||
3602 | { | ||
3603 | if (dp->width_arg_index != ARG_NONE) | ||
3604 | { | ||
3605 | int arg; | ||
3606 | |||
3607 | if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) | ||
3608 | abort (); | ||
3609 | arg = a.arg[dp->width_arg_index].a.a_int; | ||
3610 | if (arg < 0) | ||
3611 | { | ||
3612 | /* "A negative field width is taken as a '-' flag | ||
3613 | followed by a positive field width." */ | ||
3614 | flags |= FLAG_LEFT; | ||
3615 | width = (unsigned int) (-arg); | ||
3616 | } | ||
3617 | else | ||
3618 | width = arg; | ||
3619 | } | ||
3620 | else | ||
3621 | { | ||
3622 | const FCHAR_T *digitp = dp->width_start; | ||
3623 | |||
3624 | do | ||
3625 | width = xsum (xtimes (width, 10), *digitp++ - '0'); | ||
3626 | while (digitp != dp->width_end); | ||
3627 | } | ||
3628 | has_width = 1; | ||
3629 | } | ||
3630 | #endif | ||
3631 | |||
3632 | #if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION | ||
3633 | has_precision = 0; | ||
3634 | precision = 6; | ||
3635 | if (dp->precision_start != dp->precision_end) | ||
3636 | { | ||
3637 | if (dp->precision_arg_index != ARG_NONE) | ||
3638 | { | ||
3639 | int arg; | ||
3640 | |||
3641 | if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) | ||
3642 | abort (); | ||
3643 | arg = a.arg[dp->precision_arg_index].a.a_int; | ||
3644 | /* "A negative precision is taken as if the precision | ||
3645 | were omitted." */ | ||
3646 | if (arg >= 0) | ||
3647 | { | ||
3648 | precision = arg; | ||
3649 | has_precision = 1; | ||
3650 | } | ||
3651 | } | ||
3652 | else | ||
3653 | { | ||
3654 | const FCHAR_T *digitp = dp->precision_start + 1; | ||
3655 | |||
3656 | precision = 0; | ||
3657 | while (digitp != dp->precision_end) | ||
3658 | precision = xsum (xtimes (precision, 10), *digitp++ - '0'); | ||
3659 | has_precision = 1; | ||
3660 | } | ||
3661 | } | ||
3662 | #endif | ||
3663 | |||
3664 | #if !USE_SNPRINTF | ||
3665 | /* Allocate a temporary buffer of sufficient size for calling | ||
3666 | sprintf. */ | ||
3667 | { | ||
321 | switch (dp->conversion) | 3668 | switch (dp->conversion) |
322 | { | 3669 | { |
323 | 3670 | ||
324 | case 'd': case 'i': case 'u': | 3671 | case 'd': case 'i': case 'u': |
325 | # ifdef HAVE_LONG_LONG_INT | 3672 | # if HAVE_LONG_LONG_INT |
326 | if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) | 3673 | if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) |
327 | tmp_length = | 3674 | tmp_length = |
328 | (unsigned int) (sizeof (unsigned long long) * CHAR_BIT | 3675 | (unsigned int) (sizeof (unsigned long long) * CHAR_BIT |
@@ -352,7 +3699,7 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
352 | break; | 3699 | break; |
353 | 3700 | ||
354 | case 'o': | 3701 | case 'o': |
355 | # ifdef HAVE_LONG_LONG_INT | 3702 | # if HAVE_LONG_LONG_INT |
356 | if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) | 3703 | if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) |
357 | tmp_length = | 3704 | tmp_length = |
358 | (unsigned int) (sizeof (unsigned long long) * CHAR_BIT | 3705 | (unsigned int) (sizeof (unsigned long long) * CHAR_BIT |
@@ -380,7 +3727,7 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
380 | break; | 3727 | break; |
381 | 3728 | ||
382 | case 'x': case 'X': | 3729 | case 'x': case 'X': |
383 | # ifdef HAVE_LONG_LONG_INT | 3730 | # if HAVE_LONG_LONG_INT |
384 | if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) | 3731 | if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) |
385 | tmp_length = | 3732 | tmp_length = |
386 | (unsigned int) (sizeof (unsigned long long) * CHAR_BIT | 3733 | (unsigned int) (sizeof (unsigned long long) * CHAR_BIT |
@@ -408,7 +3755,6 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
408 | break; | 3755 | break; |
409 | 3756 | ||
410 | case 'f': case 'F': | 3757 | case 'f': case 'F': |
411 | # ifdef HAVE_LONG_DOUBLE | ||
412 | if (type == TYPE_LONGDOUBLE) | 3758 | if (type == TYPE_LONGDOUBLE) |
413 | tmp_length = | 3759 | tmp_length = |
414 | (unsigned int) (LDBL_MAX_EXP | 3760 | (unsigned int) (LDBL_MAX_EXP |
@@ -418,7 +3764,6 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
418 | + 1 /* turn floor into ceil */ | 3764 | + 1 /* turn floor into ceil */ |
419 | + 10; /* sign, decimal point etc. */ | 3765 | + 10; /* sign, decimal point etc. */ |
420 | else | 3766 | else |
421 | # endif | ||
422 | tmp_length = | 3767 | tmp_length = |
423 | (unsigned int) (DBL_MAX_EXP | 3768 | (unsigned int) (DBL_MAX_EXP |
424 | * 0.30103 /* binary -> decimal */ | 3769 | * 0.30103 /* binary -> decimal */ |
@@ -430,14 +3775,32 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
430 | break; | 3775 | break; |
431 | 3776 | ||
432 | case 'e': case 'E': case 'g': case 'G': | 3777 | case 'e': case 'E': case 'g': case 'G': |
433 | case 'a': case 'A': | ||
434 | tmp_length = | 3778 | tmp_length = |
435 | 12; /* sign, decimal point, exponent etc. */ | 3779 | 12; /* sign, decimal point, exponent etc. */ |
436 | tmp_length = xsum (tmp_length, precision); | 3780 | tmp_length = xsum (tmp_length, precision); |
437 | break; | 3781 | break; |
438 | 3782 | ||
3783 | case 'a': case 'A': | ||
3784 | if (type == TYPE_LONGDOUBLE) | ||
3785 | tmp_length = | ||
3786 | (unsigned int) (LDBL_DIG | ||
3787 | * 0.831 /* decimal -> hexadecimal */ | ||
3788 | ) | ||
3789 | + 1; /* turn floor into ceil */ | ||
3790 | else | ||
3791 | tmp_length = | ||
3792 | (unsigned int) (DBL_DIG | ||
3793 | * 0.831 /* decimal -> hexadecimal */ | ||
3794 | ) | ||
3795 | + 1; /* turn floor into ceil */ | ||
3796 | if (tmp_length < precision) | ||
3797 | tmp_length = precision; | ||
3798 | /* Account for sign, decimal point etc. */ | ||
3799 | tmp_length = xsum (tmp_length, 12); | ||
3800 | break; | ||
3801 | |||
439 | case 'c': | 3802 | case 'c': |
440 | # if defined HAVE_WINT_T && !WIDE_CHAR_VERSION | 3803 | # if HAVE_WINT_T && !WIDE_CHAR_VERSION |
441 | if (type == TYPE_WIDE_CHAR) | 3804 | if (type == TYPE_WIDE_CHAR) |
442 | tmp_length = MB_CUR_MAX; | 3805 | tmp_length = MB_CUR_MAX; |
443 | else | 3806 | else |
@@ -446,7 +3809,7 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
446 | break; | 3809 | break; |
447 | 3810 | ||
448 | case 's': | 3811 | case 's': |
449 | # ifdef HAVE_WCHAR_T | 3812 | # if HAVE_WCHAR_T |
450 | if (type == TYPE_WIDE_STRING) | 3813 | if (type == TYPE_WIDE_STRING) |
451 | { | 3814 | { |
452 | tmp_length = | 3815 | tmp_length = |
@@ -474,95 +3837,216 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
474 | abort (); | 3837 | abort (); |
475 | } | 3838 | } |
476 | 3839 | ||
3840 | # if ENABLE_UNISTDIO | ||
3841 | /* Padding considers the number of characters, therefore the | ||
3842 | number of elements after padding may be | ||
3843 | > max (tmp_length, width) | ||
3844 | but is certainly | ||
3845 | <= tmp_length + width. */ | ||
3846 | tmp_length = xsum (tmp_length, width); | ||
3847 | # else | ||
3848 | /* Padding considers the number of elements, says POSIX. */ | ||
477 | if (tmp_length < width) | 3849 | if (tmp_length < width) |
478 | tmp_length = width; | 3850 | tmp_length = width; |
3851 | # endif | ||
479 | 3852 | ||
480 | tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ | 3853 | tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ |
481 | } | 3854 | } |
482 | 3855 | ||
483 | if (tmp_length <= sizeof (tmpbuf) / sizeof (CHAR_T)) | 3856 | if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) |
484 | tmp = tmpbuf; | 3857 | tmp = tmpbuf; |
485 | else | 3858 | else |
486 | { | 3859 | { |
487 | size_t tmp_memsize = xtimes (tmp_length, sizeof (CHAR_T)); | 3860 | size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); |
488 | 3861 | ||
489 | if (size_overflow_p (tmp_memsize)) | 3862 | if (size_overflow_p (tmp_memsize)) |
490 | /* Overflow, would lead to out of memory. */ | 3863 | /* Overflow, would lead to out of memory. */ |
491 | goto out_of_memory; | 3864 | goto out_of_memory; |
492 | tmp = (CHAR_T *) malloc (tmp_memsize); | 3865 | tmp = (TCHAR_T *) malloc (tmp_memsize); |
493 | if (tmp == NULL) | 3866 | if (tmp == NULL) |
494 | /* Out of memory. */ | 3867 | /* Out of memory. */ |
495 | goto out_of_memory; | 3868 | goto out_of_memory; |
496 | } | 3869 | } |
497 | #endif | 3870 | #endif |
498 | 3871 | ||
3872 | /* Decide whether to handle the precision ourselves. */ | ||
3873 | #if NEED_PRINTF_UNBOUNDED_PRECISION | ||
3874 | switch (dp->conversion) | ||
3875 | { | ||
3876 | case 'd': case 'i': case 'u': | ||
3877 | case 'o': | ||
3878 | case 'x': case 'X': case 'p': | ||
3879 | prec_ourselves = has_precision && (precision > 0); | ||
3880 | break; | ||
3881 | default: | ||
3882 | prec_ourselves = 0; | ||
3883 | break; | ||
3884 | } | ||
3885 | #endif | ||
3886 | |||
3887 | /* Decide whether to perform the padding ourselves. */ | ||
3888 | #if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) | ||
3889 | switch (dp->conversion) | ||
3890 | { | ||
3891 | # if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO | ||
3892 | /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need | ||
3893 | to perform the padding after this conversion. Functions | ||
3894 | with unistdio extensions perform the padding based on | ||
3895 | character count rather than element count. */ | ||
3896 | case 'c': case 's': | ||
3897 | # endif | ||
3898 | # if NEED_PRINTF_FLAG_ZERO | ||
3899 | case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': | ||
3900 | case 'a': case 'A': | ||
3901 | # endif | ||
3902 | pad_ourselves = 1; | ||
3903 | break; | ||
3904 | default: | ||
3905 | pad_ourselves = prec_ourselves; | ||
3906 | break; | ||
3907 | } | ||
3908 | #endif | ||
3909 | |||
499 | /* Construct the format string for calling snprintf or | 3910 | /* Construct the format string for calling snprintf or |
500 | sprintf. */ | 3911 | sprintf. */ |
501 | p = buf; | 3912 | fbp = buf; |
502 | *p++ = '%'; | 3913 | *fbp++ = '%'; |
503 | if (dp->flags & FLAG_GROUP) | 3914 | #if NEED_PRINTF_FLAG_GROUPING |
504 | *p++ = '\''; | 3915 | /* The underlying implementation doesn't support the ' flag. |
505 | if (dp->flags & FLAG_LEFT) | 3916 | Produce no grouping characters in this case; this is |
506 | *p++ = '-'; | 3917 | acceptable because the grouping is locale dependent. */ |
507 | if (dp->flags & FLAG_SHOWSIGN) | 3918 | #else |
508 | *p++ = '+'; | 3919 | if (flags & FLAG_GROUP) |
509 | if (dp->flags & FLAG_SPACE) | 3920 | *fbp++ = '\''; |
510 | *p++ = ' '; | 3921 | #endif |
511 | if (dp->flags & FLAG_ALT) | 3922 | if (flags & FLAG_LEFT) |
512 | *p++ = '#'; | 3923 | *fbp++ = '-'; |
513 | if (dp->flags & FLAG_ZERO) | 3924 | if (flags & FLAG_SHOWSIGN) |
514 | *p++ = '0'; | 3925 | *fbp++ = '+'; |
515 | if (dp->width_start != dp->width_end) | 3926 | if (flags & FLAG_SPACE) |
3927 | *fbp++ = ' '; | ||
3928 | if (flags & FLAG_ALT) | ||
3929 | *fbp++ = '#'; | ||
3930 | if (!pad_ourselves) | ||
516 | { | 3931 | { |
517 | size_t n = dp->width_end - dp->width_start; | 3932 | if (flags & FLAG_ZERO) |
518 | memcpy (p, dp->width_start, n * sizeof (CHAR_T)); | 3933 | *fbp++ = '0'; |
519 | p += n; | 3934 | if (dp->width_start != dp->width_end) |
3935 | { | ||
3936 | size_t n = dp->width_end - dp->width_start; | ||
3937 | /* The width specification is known to consist only | ||
3938 | of standard ASCII characters. */ | ||
3939 | if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) | ||
3940 | { | ||
3941 | memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); | ||
3942 | fbp += n; | ||
3943 | } | ||
3944 | else | ||
3945 | { | ||
3946 | const FCHAR_T *mp = dp->width_start; | ||
3947 | do | ||
3948 | *fbp++ = (unsigned char) *mp++; | ||
3949 | while (--n > 0); | ||
3950 | } | ||
3951 | } | ||
520 | } | 3952 | } |
521 | if (dp->precision_start != dp->precision_end) | 3953 | if (!prec_ourselves) |
522 | { | 3954 | { |
523 | size_t n = dp->precision_end - dp->precision_start; | 3955 | if (dp->precision_start != dp->precision_end) |
524 | memcpy (p, dp->precision_start, n * sizeof (CHAR_T)); | 3956 | { |
525 | p += n; | 3957 | size_t n = dp->precision_end - dp->precision_start; |
3958 | /* The precision specification is known to consist only | ||
3959 | of standard ASCII characters. */ | ||
3960 | if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) | ||
3961 | { | ||
3962 | memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); | ||
3963 | fbp += n; | ||
3964 | } | ||
3965 | else | ||
3966 | { | ||
3967 | const FCHAR_T *mp = dp->precision_start; | ||
3968 | do | ||
3969 | *fbp++ = (unsigned char) *mp++; | ||
3970 | while (--n > 0); | ||
3971 | } | ||
3972 | } | ||
526 | } | 3973 | } |
527 | 3974 | ||
528 | switch (type) | 3975 | switch (type) |
529 | { | 3976 | { |
530 | #ifdef HAVE_LONG_LONG_INT | 3977 | #if HAVE_LONG_LONG_INT |
531 | case TYPE_LONGLONGINT: | 3978 | case TYPE_LONGLONGINT: |
532 | case TYPE_ULONGLONGINT: | 3979 | case TYPE_ULONGLONGINT: |
533 | *p++ = 'l'; | 3980 | # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ |
3981 | *fbp++ = 'I'; | ||
3982 | *fbp++ = '6'; | ||
3983 | *fbp++ = '4'; | ||
3984 | break; | ||
3985 | # else | ||
3986 | *fbp++ = 'l'; | ||
534 | /*FALLTHROUGH*/ | 3987 | /*FALLTHROUGH*/ |
3988 | # endif | ||
535 | #endif | 3989 | #endif |
536 | case TYPE_LONGINT: | 3990 | case TYPE_LONGINT: |
537 | case TYPE_ULONGINT: | 3991 | case TYPE_ULONGINT: |
538 | #ifdef HAVE_WINT_T | 3992 | #if HAVE_WINT_T |
539 | case TYPE_WIDE_CHAR: | 3993 | case TYPE_WIDE_CHAR: |
540 | #endif | 3994 | #endif |
541 | #ifdef HAVE_WCHAR_T | 3995 | #if HAVE_WCHAR_T |
542 | case TYPE_WIDE_STRING: | 3996 | case TYPE_WIDE_STRING: |
543 | #endif | 3997 | #endif |
544 | *p++ = 'l'; | 3998 | *fbp++ = 'l'; |
545 | break; | 3999 | break; |
546 | #ifdef HAVE_LONG_DOUBLE | ||
547 | case TYPE_LONGDOUBLE: | 4000 | case TYPE_LONGDOUBLE: |
548 | *p++ = 'L'; | 4001 | *fbp++ = 'L'; |
549 | break; | 4002 | break; |
550 | #endif | ||
551 | default: | 4003 | default: |
552 | break; | 4004 | break; |
553 | } | 4005 | } |
554 | *p = dp->conversion; | 4006 | #if NEED_PRINTF_DIRECTIVE_F |
4007 | if (dp->conversion == 'F') | ||
4008 | *fbp = 'f'; | ||
4009 | else | ||
4010 | #endif | ||
4011 | *fbp = dp->conversion; | ||
555 | #if USE_SNPRINTF | 4012 | #if USE_SNPRINTF |
556 | p[1] = '%'; | 4013 | # if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) |
557 | p[2] = 'n'; | 4014 | fbp[1] = '%'; |
558 | p[3] = '\0'; | 4015 | fbp[2] = 'n'; |
4016 | fbp[3] = '\0'; | ||
4017 | # else | ||
4018 | /* On glibc2 systems from glibc >= 2.3 - probably also older | ||
4019 | ones - we know that snprintf's returns value conforms to | ||
4020 | ISO C 99: the gl_SNPRINTF_DIRECTIVE_N test passes. | ||
4021 | Therefore we can avoid using %n in this situation. | ||
4022 | On glibc2 systems from 2004-10-18 or newer, the use of %n | ||
4023 | in format strings in writable memory may crash the program | ||
4024 | (if compiled with _FORTIFY_SOURCE=2), so we should avoid it | ||
4025 | in this situation. */ | ||
4026 | /* On native Win32 systems (such as mingw), we can avoid using | ||
4027 | %n because: | ||
4028 | - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, | ||
4029 | snprintf does not write more than the specified number | ||
4030 | of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes | ||
4031 | '4', '5', '6' into buf, not '4', '5', '\0'.) | ||
4032 | - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf | ||
4033 | allows us to recognize the case of an insufficient | ||
4034 | buffer size: it returns -1 in this case. | ||
4035 | On native Win32 systems (such as mingw) where the OS is | ||
4036 | Windows Vista, the use of %n in format strings by default | ||
4037 | crashes the program. See | ||
4038 | <http://gcc.gnu.org/ml/gcc/2007-06/msg00122.html> and | ||
4039 | <http://msdn2.microsoft.com/en-us/library/ms175782(VS.80).aspx> | ||
4040 | So we should avoid %n in this situation. */ | ||
4041 | fbp[1] = '\0'; | ||
4042 | # endif | ||
559 | #else | 4043 | #else |
560 | p[1] = '\0'; | 4044 | fbp[1] = '\0'; |
561 | #endif | 4045 | #endif |
562 | 4046 | ||
563 | /* Construct the arguments for calling snprintf or sprintf. */ | 4047 | /* Construct the arguments for calling snprintf or sprintf. */ |
564 | prefix_count = 0; | 4048 | prefix_count = 0; |
565 | if (dp->width_arg_index != ARG_NONE) | 4049 | if (!pad_ourselves && dp->width_arg_index != ARG_NONE) |
566 | { | 4050 | { |
567 | if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) | 4051 | if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) |
568 | abort (); | 4052 | abort (); |
@@ -576,36 +4060,50 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
576 | } | 4060 | } |
577 | 4061 | ||
578 | #if USE_SNPRINTF | 4062 | #if USE_SNPRINTF |
4063 | /* The SNPRINTF result is appended after result[0..length]. | ||
4064 | The latter is an array of DCHAR_T; SNPRINTF appends an | ||
4065 | array of TCHAR_T to it. This is possible because | ||
4066 | sizeof (TCHAR_T) divides sizeof (DCHAR_T) and | ||
4067 | alignof (TCHAR_T) <= alignof (DCHAR_T). */ | ||
4068 | # define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) | ||
4069 | /* Ensure that maxlen below will be >= 2. Needed on BeOS, | ||
4070 | where an snprintf() with maxlen==1 acts like sprintf(). */ | ||
4071 | ENSURE_ALLOCATION (xsum (length, | ||
4072 | (2 + TCHARS_PER_DCHAR - 1) | ||
4073 | / TCHARS_PER_DCHAR)); | ||
579 | /* Prepare checking whether snprintf returns the count | 4074 | /* Prepare checking whether snprintf returns the count |
580 | via %n. */ | 4075 | via %n. */ |
581 | ENSURE_ALLOCATION (xsum (length, 1)); | 4076 | *(TCHAR_T *) (result + length) = '\0'; |
582 | result[length] = '\0'; | ||
583 | #endif | 4077 | #endif |
584 | 4078 | ||
585 | for (;;) | 4079 | for (;;) |
586 | { | 4080 | { |
587 | size_t maxlen; | 4081 | int count = -1; |
588 | int count; | ||
589 | int retcount; | ||
590 | |||
591 | maxlen = allocated - length; | ||
592 | count = -1; | ||
593 | retcount = 0; | ||
594 | 4082 | ||
595 | #if USE_SNPRINTF | 4083 | #if USE_SNPRINTF |
4084 | int retcount = 0; | ||
4085 | size_t maxlen = allocated - length; | ||
4086 | /* SNPRINTF can fail if its second argument is | ||
4087 | > INT_MAX. */ | ||
4088 | if (maxlen > INT_MAX / TCHARS_PER_DCHAR) | ||
4089 | maxlen = INT_MAX / TCHARS_PER_DCHAR; | ||
4090 | maxlen = maxlen * TCHARS_PER_DCHAR; | ||
596 | # define SNPRINTF_BUF(arg) \ | 4091 | # define SNPRINTF_BUF(arg) \ |
597 | switch (prefix_count) \ | 4092 | switch (prefix_count) \ |
598 | { \ | 4093 | { \ |
599 | case 0: \ | 4094 | case 0: \ |
600 | retcount = SNPRINTF (result + length, maxlen, buf, \ | 4095 | retcount = SNPRINTF ((TCHAR_T *) (result + length), \ |
4096 | maxlen, buf, \ | ||
601 | arg, &count); \ | 4097 | arg, &count); \ |
602 | break; \ | 4098 | break; \ |
603 | case 1: \ | 4099 | case 1: \ |
604 | retcount = SNPRINTF (result + length, maxlen, buf, \ | 4100 | retcount = SNPRINTF ((TCHAR_T *) (result + length), \ |
4101 | maxlen, buf, \ | ||
605 | prefixes[0], arg, &count); \ | 4102 | prefixes[0], arg, &count); \ |
606 | break; \ | 4103 | break; \ |
607 | case 2: \ | 4104 | case 2: \ |
608 | retcount = SNPRINTF (result + length, maxlen, buf, \ | 4105 | retcount = SNPRINTF ((TCHAR_T *) (result + length), \ |
4106 | maxlen, buf, \ | ||
609 | prefixes[0], prefixes[1], arg, \ | 4107 | prefixes[0], prefixes[1], arg, \ |
610 | &count); \ | 4108 | &count); \ |
611 | break; \ | 4109 | break; \ |
@@ -681,7 +4179,7 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
681 | SNPRINTF_BUF (arg); | 4179 | SNPRINTF_BUF (arg); |
682 | } | 4180 | } |
683 | break; | 4181 | break; |
684 | #ifdef HAVE_LONG_LONG_INT | 4182 | #if HAVE_LONG_LONG_INT |
685 | case TYPE_LONGLONGINT: | 4183 | case TYPE_LONGLONGINT: |
686 | { | 4184 | { |
687 | long long int arg = a.arg[dp->arg_index].a.a_longlongint; | 4185 | long long int arg = a.arg[dp->arg_index].a.a_longlongint; |
@@ -701,21 +4199,19 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
701 | SNPRINTF_BUF (arg); | 4199 | SNPRINTF_BUF (arg); |
702 | } | 4200 | } |
703 | break; | 4201 | break; |
704 | #ifdef HAVE_LONG_DOUBLE | ||
705 | case TYPE_LONGDOUBLE: | 4202 | case TYPE_LONGDOUBLE: |
706 | { | 4203 | { |
707 | long double arg = a.arg[dp->arg_index].a.a_longdouble; | 4204 | long double arg = a.arg[dp->arg_index].a.a_longdouble; |
708 | SNPRINTF_BUF (arg); | 4205 | SNPRINTF_BUF (arg); |
709 | } | 4206 | } |
710 | break; | 4207 | break; |
711 | #endif | ||
712 | case TYPE_CHAR: | 4208 | case TYPE_CHAR: |
713 | { | 4209 | { |
714 | int arg = a.arg[dp->arg_index].a.a_char; | 4210 | int arg = a.arg[dp->arg_index].a.a_char; |
715 | SNPRINTF_BUF (arg); | 4211 | SNPRINTF_BUF (arg); |
716 | } | 4212 | } |
717 | break; | 4213 | break; |
718 | #ifdef HAVE_WINT_T | 4214 | #if HAVE_WINT_T |
719 | case TYPE_WIDE_CHAR: | 4215 | case TYPE_WIDE_CHAR: |
720 | { | 4216 | { |
721 | wint_t arg = a.arg[dp->arg_index].a.a_wide_char; | 4217 | wint_t arg = a.arg[dp->arg_index].a.a_wide_char; |
@@ -729,7 +4225,7 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
729 | SNPRINTF_BUF (arg); | 4225 | SNPRINTF_BUF (arg); |
730 | } | 4226 | } |
731 | break; | 4227 | break; |
732 | #ifdef HAVE_WCHAR_T | 4228 | #if HAVE_WCHAR_T |
733 | case TYPE_WIDE_STRING: | 4229 | case TYPE_WIDE_STRING: |
734 | { | 4230 | { |
735 | const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; | 4231 | const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; |
@@ -756,7 +4252,8 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
756 | { | 4252 | { |
757 | /* Verify that snprintf() has NUL-terminated its | 4253 | /* Verify that snprintf() has NUL-terminated its |
758 | result. */ | 4254 | result. */ |
759 | if (count < maxlen && result[length + count] != '\0') | 4255 | if (count < maxlen |
4256 | && ((TCHAR_T *) (result + length)) [count] != '\0') | ||
760 | abort (); | 4257 | abort (); |
761 | /* Portability hack. */ | 4258 | /* Portability hack. */ |
762 | if (retcount > count) | 4259 | if (retcount > count) |
@@ -766,11 +4263,11 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
766 | { | 4263 | { |
767 | /* snprintf() doesn't understand the '%n' | 4264 | /* snprintf() doesn't understand the '%n' |
768 | directive. */ | 4265 | directive. */ |
769 | if (p[1] != '\0') | 4266 | if (fbp[1] != '\0') |
770 | { | 4267 | { |
771 | /* Don't use the '%n' directive; instead, look | 4268 | /* Don't use the '%n' directive; instead, look |
772 | at the snprintf() return value. */ | 4269 | at the snprintf() return value. */ |
773 | p[1] = '\0'; | 4270 | fbp[1] = '\0'; |
774 | continue; | 4271 | continue; |
775 | } | 4272 | } |
776 | else | 4273 | else |
@@ -806,37 +4303,339 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
806 | return NULL; | 4303 | return NULL; |
807 | } | 4304 | } |
808 | 4305 | ||
809 | #if !USE_SNPRINTF | 4306 | #if USE_SNPRINTF |
4307 | /* Handle overflow of the allocated buffer. | ||
4308 | If such an overflow occurs, a C99 compliant snprintf() | ||
4309 | returns a count >= maxlen. However, a non-compliant | ||
4310 | snprintf() function returns only count = maxlen - 1. To | ||
4311 | cover both cases, test whether count >= maxlen - 1. */ | ||
4312 | if ((unsigned int) count + 1 >= maxlen) | ||
4313 | { | ||
4314 | /* If maxlen already has attained its allowed maximum, | ||
4315 | allocating more memory will not increase maxlen. | ||
4316 | Instead of looping, bail out. */ | ||
4317 | if (maxlen == INT_MAX / TCHARS_PER_DCHAR) | ||
4318 | goto overflow; | ||
4319 | else | ||
4320 | { | ||
4321 | /* Need at least (count + 1) * sizeof (TCHAR_T) | ||
4322 | bytes. (The +1 is for the trailing NUL.) | ||
4323 | But ask for (count + 2) * sizeof (TCHAR_T) | ||
4324 | bytes, so that in the next round, we likely get | ||
4325 | maxlen > (unsigned int) count + 1 | ||
4326 | and so we don't get here again. | ||
4327 | And allocate proportionally, to avoid looping | ||
4328 | eternally if snprintf() reports a too small | ||
4329 | count. */ | ||
4330 | size_t n = | ||
4331 | xmax (xsum (length, | ||
4332 | ((unsigned int) count + 2 | ||
4333 | + TCHARS_PER_DCHAR - 1) | ||
4334 | / TCHARS_PER_DCHAR), | ||
4335 | xtimes (allocated, 2)); | ||
4336 | |||
4337 | ENSURE_ALLOCATION (n); | ||
4338 | continue; | ||
4339 | } | ||
4340 | } | ||
4341 | #endif | ||
4342 | |||
4343 | #if NEED_PRINTF_UNBOUNDED_PRECISION | ||
4344 | if (prec_ourselves) | ||
4345 | { | ||
4346 | /* Handle the precision. */ | ||
4347 | TCHAR_T *prec_ptr = | ||
4348 | # if USE_SNPRINTF | ||
4349 | (TCHAR_T *) (result + length); | ||
4350 | # else | ||
4351 | tmp; | ||
4352 | # endif | ||
4353 | size_t prefix_count; | ||
4354 | size_t move; | ||
4355 | |||
4356 | prefix_count = 0; | ||
4357 | /* Put the additional zeroes after the sign. */ | ||
4358 | if (count >= 1 | ||
4359 | && (*prec_ptr == '-' || *prec_ptr == '+' | ||
4360 | || *prec_ptr == ' ')) | ||
4361 | prefix_count = 1; | ||
4362 | /* Put the additional zeroes after the 0x prefix if | ||
4363 | (flags & FLAG_ALT) || (dp->conversion == 'p'). */ | ||
4364 | else if (count >= 2 | ||
4365 | && prec_ptr[0] == '0' | ||
4366 | && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) | ||
4367 | prefix_count = 2; | ||
4368 | |||
4369 | move = count - prefix_count; | ||
4370 | if (precision > move) | ||
4371 | { | ||
4372 | /* Insert zeroes. */ | ||
4373 | size_t insert = precision - move; | ||
4374 | TCHAR_T *prec_end; | ||
4375 | |||
4376 | # if USE_SNPRINTF | ||
4377 | size_t n = | ||
4378 | xsum (length, | ||
4379 | (count + insert + TCHARS_PER_DCHAR - 1) | ||
4380 | / TCHARS_PER_DCHAR); | ||
4381 | length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; | ||
4382 | ENSURE_ALLOCATION (n); | ||
4383 | length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; | ||
4384 | prec_ptr = (TCHAR_T *) (result + length); | ||
4385 | # endif | ||
4386 | |||
4387 | prec_end = prec_ptr + count; | ||
4388 | prec_ptr += prefix_count; | ||
4389 | |||
4390 | while (prec_end > prec_ptr) | ||
4391 | { | ||
4392 | prec_end--; | ||
4393 | prec_end[insert] = prec_end[0]; | ||
4394 | } | ||
4395 | |||
4396 | prec_end += insert; | ||
4397 | do | ||
4398 | *--prec_end = '0'; | ||
4399 | while (prec_end > prec_ptr); | ||
4400 | |||
4401 | count += insert; | ||
4402 | } | ||
4403 | } | ||
4404 | #endif | ||
4405 | |||
4406 | #if !DCHAR_IS_TCHAR | ||
4407 | # if !USE_SNPRINTF | ||
810 | if (count >= tmp_length) | 4408 | if (count >= tmp_length) |
811 | /* tmp_length was incorrectly calculated - fix the | 4409 | /* tmp_length was incorrectly calculated - fix the |
812 | code above! */ | 4410 | code above! */ |
813 | abort (); | 4411 | abort (); |
4412 | # endif | ||
4413 | |||
4414 | /* Convert from TCHAR_T[] to DCHAR_T[]. */ | ||
4415 | if (dp->conversion == 'c' || dp->conversion == 's') | ||
4416 | { | ||
4417 | /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING | ||
4418 | TYPE_WIDE_STRING. | ||
4419 | The result string is not certainly ASCII. */ | ||
4420 | const TCHAR_T *tmpsrc; | ||
4421 | DCHAR_T *tmpdst; | ||
4422 | size_t tmpdst_len; | ||
4423 | /* This code assumes that TCHAR_T is 'char'. */ | ||
4424 | typedef int TCHAR_T_verify | ||
4425 | [2 * (sizeof (TCHAR_T) == 1) - 1]; | ||
4426 | # if USE_SNPRINTF | ||
4427 | tmpsrc = (TCHAR_T *) (result + length); | ||
4428 | # else | ||
4429 | tmpsrc = tmp; | ||
4430 | # endif | ||
4431 | tmpdst = NULL; | ||
4432 | tmpdst_len = 0; | ||
4433 | if (DCHAR_CONV_FROM_ENCODING (locale_charset (), | ||
4434 | iconveh_question_mark, | ||
4435 | tmpsrc, count, | ||
4436 | NULL, | ||
4437 | &tmpdst, &tmpdst_len) | ||
4438 | < 0) | ||
4439 | { | ||
4440 | int saved_errno = errno; | ||
4441 | if (!(result == resultbuf || result == NULL)) | ||
4442 | free (result); | ||
4443 | if (buf_malloced != NULL) | ||
4444 | free (buf_malloced); | ||
4445 | CLEANUP (); | ||
4446 | errno = saved_errno; | ||
4447 | return NULL; | ||
4448 | } | ||
4449 | ENSURE_ALLOCATION (xsum (length, tmpdst_len)); | ||
4450 | DCHAR_CPY (result + length, tmpdst, tmpdst_len); | ||
4451 | free (tmpdst); | ||
4452 | count = tmpdst_len; | ||
4453 | } | ||
4454 | else | ||
4455 | { | ||
4456 | /* The result string is ASCII. | ||
4457 | Simple 1:1 conversion. */ | ||
4458 | # if USE_SNPRINTF | ||
4459 | /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a | ||
4460 | no-op conversion, in-place on the array starting | ||
4461 | at (result + length). */ | ||
4462 | if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) | ||
4463 | # endif | ||
4464 | { | ||
4465 | const TCHAR_T *tmpsrc; | ||
4466 | DCHAR_T *tmpdst; | ||
4467 | size_t n; | ||
4468 | |||
4469 | # if USE_SNPRINTF | ||
4470 | if (result == resultbuf) | ||
4471 | { | ||
4472 | tmpsrc = (TCHAR_T *) (result + length); | ||
4473 | /* ENSURE_ALLOCATION will not move tmpsrc | ||
4474 | (because it's part of resultbuf). */ | ||
4475 | ENSURE_ALLOCATION (xsum (length, count)); | ||
4476 | } | ||
4477 | else | ||
4478 | { | ||
4479 | /* ENSURE_ALLOCATION will move the array | ||
4480 | (because it uses realloc(). */ | ||
4481 | ENSURE_ALLOCATION (xsum (length, count)); | ||
4482 | tmpsrc = (TCHAR_T *) (result + length); | ||
4483 | } | ||
4484 | # else | ||
4485 | tmpsrc = tmp; | ||
4486 | ENSURE_ALLOCATION (xsum (length, count)); | ||
4487 | # endif | ||
4488 | tmpdst = result + length; | ||
4489 | /* Copy backwards, because of overlapping. */ | ||
4490 | tmpsrc += count; | ||
4491 | tmpdst += count; | ||
4492 | for (n = count; n > 0; n--) | ||
4493 | *--tmpdst = (unsigned char) *--tmpsrc; | ||
4494 | } | ||
4495 | } | ||
814 | #endif | 4496 | #endif |
815 | 4497 | ||
4498 | #if DCHAR_IS_TCHAR && !USE_SNPRINTF | ||
816 | /* Make room for the result. */ | 4499 | /* Make room for the result. */ |
817 | if (count >= maxlen) | 4500 | if (count > allocated - length) |
818 | { | 4501 | { |
819 | /* Need at least count bytes. But allocate | 4502 | /* Need at least count elements. But allocate |
820 | proportionally, to avoid looping eternally if | 4503 | proportionally. */ |
821 | snprintf() reports a too small count. */ | ||
822 | size_t n = | 4504 | size_t n = |
823 | xmax (xsum (length, count), xtimes (allocated, 2)); | 4505 | xmax (xsum (length, count), xtimes (allocated, 2)); |
824 | 4506 | ||
825 | ENSURE_ALLOCATION (n); | 4507 | ENSURE_ALLOCATION (n); |
826 | #if USE_SNPRINTF | 4508 | } |
827 | continue; | ||
828 | #endif | 4509 | #endif |
4510 | |||
4511 | /* Here count <= allocated - length. */ | ||
4512 | |||
4513 | /* Perform padding. */ | ||
4514 | #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION | ||
4515 | if (pad_ourselves && has_width) | ||
4516 | { | ||
4517 | size_t w; | ||
4518 | # if ENABLE_UNISTDIO | ||
4519 | /* Outside POSIX, it's preferrable to compare the width | ||
4520 | against the number of _characters_ of the converted | ||
4521 | value. */ | ||
4522 | w = DCHAR_MBSNLEN (result + length, count); | ||
4523 | # else | ||
4524 | /* The width is compared against the number of _bytes_ | ||
4525 | of the converted value, says POSIX. */ | ||
4526 | w = count; | ||
4527 | # endif | ||
4528 | if (w < width) | ||
4529 | { | ||
4530 | size_t pad = width - w; | ||
4531 | # if USE_SNPRINTF | ||
4532 | /* Make room for the result. */ | ||
4533 | if (xsum (count, pad) > allocated - length) | ||
4534 | { | ||
4535 | /* Need at least count + pad elements. But | ||
4536 | allocate proportionally. */ | ||
4537 | size_t n = | ||
4538 | xmax (xsum3 (length, count, pad), | ||
4539 | xtimes (allocated, 2)); | ||
4540 | |||
4541 | length += count; | ||
4542 | ENSURE_ALLOCATION (n); | ||
4543 | length -= count; | ||
4544 | } | ||
4545 | /* Here count + pad <= allocated - length. */ | ||
4546 | # endif | ||
4547 | { | ||
4548 | # if !DCHAR_IS_TCHAR || USE_SNPRINTF | ||
4549 | DCHAR_T * const rp = result + length; | ||
4550 | # else | ||
4551 | DCHAR_T * const rp = tmp; | ||
4552 | # endif | ||
4553 | DCHAR_T *p = rp + count; | ||
4554 | DCHAR_T *end = p + pad; | ||
4555 | DCHAR_T *pad_ptr; | ||
4556 | # if !DCHAR_IS_TCHAR | ||
4557 | if (dp->conversion == 'c' | ||
4558 | || dp->conversion == 's') | ||
4559 | /* No zero-padding for string directives. */ | ||
4560 | pad_ptr = NULL; | ||
4561 | else | ||
4562 | # endif | ||
4563 | { | ||
4564 | pad_ptr = (*rp == '-' ? rp + 1 : rp); | ||
4565 | /* No zero-padding of "inf" and "nan". */ | ||
4566 | if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') | ||
4567 | || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) | ||
4568 | pad_ptr = NULL; | ||
4569 | } | ||
4570 | /* The generated string now extends from rp to p, | ||
4571 | with the zero padding insertion point being at | ||
4572 | pad_ptr. */ | ||
4573 | |||
4574 | count = count + pad; /* = end - rp */ | ||
4575 | |||
4576 | if (flags & FLAG_LEFT) | ||
4577 | { | ||
4578 | /* Pad with spaces on the right. */ | ||
4579 | for (; pad > 0; pad--) | ||
4580 | *p++ = ' '; | ||
4581 | } | ||
4582 | else if ((flags & FLAG_ZERO) && pad_ptr != NULL) | ||
4583 | { | ||
4584 | /* Pad with zeroes. */ | ||
4585 | DCHAR_T *q = end; | ||
4586 | |||
4587 | while (p > pad_ptr) | ||
4588 | *--q = *--p; | ||
4589 | for (; pad > 0; pad--) | ||
4590 | *p++ = '0'; | ||
4591 | } | ||
4592 | else | ||
4593 | { | ||
4594 | /* Pad with spaces on the left. */ | ||
4595 | DCHAR_T *q = end; | ||
4596 | |||
4597 | while (p > rp) | ||
4598 | *--q = *--p; | ||
4599 | for (; pad > 0; pad--) | ||
4600 | *p++ = ' '; | ||
4601 | } | ||
4602 | } | ||
4603 | } | ||
829 | } | 4604 | } |
4605 | #endif | ||
830 | 4606 | ||
831 | #if USE_SNPRINTF | 4607 | #if DCHAR_IS_TCHAR && !USE_SNPRINTF |
4608 | if (count >= tmp_length) | ||
4609 | /* tmp_length was incorrectly calculated - fix the | ||
4610 | code above! */ | ||
4611 | abort (); | ||
4612 | #endif | ||
4613 | |||
4614 | /* Here still count <= allocated - length. */ | ||
4615 | |||
4616 | #if !DCHAR_IS_TCHAR || USE_SNPRINTF | ||
832 | /* The snprintf() result did fit. */ | 4617 | /* The snprintf() result did fit. */ |
833 | #else | 4618 | #else |
834 | /* Append the sprintf() result. */ | 4619 | /* Append the sprintf() result. */ |
835 | memcpy (result + length, tmp, count * sizeof (CHAR_T)); | 4620 | memcpy (result + length, tmp, count * sizeof (DCHAR_T)); |
4621 | #endif | ||
4622 | #if !USE_SNPRINTF | ||
836 | if (tmp != tmpbuf) | 4623 | if (tmp != tmpbuf) |
837 | free (tmp); | 4624 | free (tmp); |
838 | #endif | 4625 | #endif |
839 | 4626 | ||
4627 | #if NEED_PRINTF_DIRECTIVE_F | ||
4628 | if (dp->conversion == 'F') | ||
4629 | { | ||
4630 | /* Convert the %f result to upper case for %F. */ | ||
4631 | DCHAR_T *rp = result + length; | ||
4632 | size_t rc; | ||
4633 | for (rc = count; rc > 0; rc--, rp++) | ||
4634 | if (*rp >= 'a' && *rp <= 'z') | ||
4635 | *rp = *rp - 'a' + 'A'; | ||
4636 | } | ||
4637 | #endif | ||
4638 | |||
840 | length += count; | 4639 | length += count; |
841 | break; | 4640 | break; |
842 | } | 4641 | } |
@@ -851,9 +4650,9 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
851 | if (result != resultbuf && length + 1 < allocated) | 4650 | if (result != resultbuf && length + 1 < allocated) |
852 | { | 4651 | { |
853 | /* Shrink the allocated memory if possible. */ | 4652 | /* Shrink the allocated memory if possible. */ |
854 | CHAR_T *memory; | 4653 | DCHAR_T *memory; |
855 | 4654 | ||
856 | memory = (CHAR_T *) realloc (result, (length + 1) * sizeof (CHAR_T)); | 4655 | memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); |
857 | if (memory != NULL) | 4656 | if (memory != NULL) |
858 | result = memory; | 4657 | result = memory; |
859 | } | 4658 | } |
@@ -868,6 +4667,17 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
868 | not have this limitation. */ | 4667 | not have this limitation. */ |
869 | return result; | 4668 | return result; |
870 | 4669 | ||
4670 | #if USE_SNPRINTF | ||
4671 | overflow: | ||
4672 | if (!(result == resultbuf || result == NULL)) | ||
4673 | free (result); | ||
4674 | if (buf_malloced != NULL) | ||
4675 | free (buf_malloced); | ||
4676 | CLEANUP (); | ||
4677 | errno = EOVERFLOW; | ||
4678 | return NULL; | ||
4679 | #endif | ||
4680 | |||
871 | out_of_memory: | 4681 | out_of_memory: |
872 | if (!(result == resultbuf || result == NULL)) | 4682 | if (!(result == resultbuf || result == NULL)) |
873 | free (result); | 4683 | free (result); |
@@ -880,10 +4690,15 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar | |||
880 | } | 4690 | } |
881 | } | 4691 | } |
882 | 4692 | ||
4693 | #undef TCHARS_PER_DCHAR | ||
883 | #undef SNPRINTF | 4694 | #undef SNPRINTF |
884 | #undef USE_SNPRINTF | 4695 | #undef USE_SNPRINTF |
4696 | #undef DCHAR_CPY | ||
885 | #undef PRINTF_PARSE | 4697 | #undef PRINTF_PARSE |
886 | #undef DIRECTIVES | 4698 | #undef DIRECTIVES |
887 | #undef DIRECTIVE | 4699 | #undef DIRECTIVE |
888 | #undef CHAR_T | 4700 | #undef DCHAR_IS_TCHAR |
4701 | #undef TCHAR_T | ||
4702 | #undef DCHAR_T | ||
4703 | #undef FCHAR_T | ||
889 | #undef VASNPRINTF | 4704 | #undef VASNPRINTF |
diff --git a/gl/vasnprintf.h b/gl/vasnprintf.h index 894008ca..b9a3d6ed 100644 --- a/gl/vasnprintf.h +++ b/gl/vasnprintf.h | |||
@@ -1,9 +1,9 @@ | |||
1 | /* vsprintf with automatic memory allocation. | 1 | /* vsprintf with automatic memory allocation. |
2 | Copyright (C) 2002-2004 Free Software Foundation, Inc. | 2 | Copyright (C) 2002-2004, 2007-2008 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3, or (at your option) |
7 | any later version. | 7 | any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
@@ -26,7 +26,7 @@ | |||
26 | 26 | ||
27 | #ifndef __attribute__ | 27 | #ifndef __attribute__ |
28 | /* This feature is available in gcc versions 2.5 and later. */ | 28 | /* This feature is available in gcc versions 2.5 and later. */ |
29 | # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__ | 29 | # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) |
30 | # define __attribute__(Spec) /* empty */ | 30 | # define __attribute__(Spec) /* empty */ |
31 | # endif | 31 | # endif |
32 | /* The __-protected variants of `format' and `printf' attributes | 32 | /* The __-protected variants of `format' and `printf' attributes |
@@ -37,7 +37,7 @@ | |||
37 | # endif | 37 | # endif |
38 | #endif | 38 | #endif |
39 | 39 | ||
40 | #ifdef __cplusplus | 40 | #ifdef __cplusplus |
41 | extern "C" { | 41 | extern "C" { |
42 | #endif | 42 | #endif |
43 | 43 | ||
@@ -65,12 +65,16 @@ extern "C" { | |||
65 | free (output); | 65 | free (output); |
66 | } | 66 | } |
67 | */ | 67 | */ |
68 | #if REPLACE_VASNPRINTF | ||
69 | # define asnprintf rpl_asnprintf | ||
70 | # define vasnprintf rpl_vasnprintf | ||
71 | #endif | ||
68 | extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) | 72 | extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) |
69 | __attribute__ ((__format__ (__printf__, 3, 4))); | 73 | __attribute__ ((__format__ (__printf__, 3, 4))); |
70 | extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) | 74 | extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) |
71 | __attribute__ ((__format__ (__printf__, 3, 0))); | 75 | __attribute__ ((__format__ (__printf__, 3, 0))); |
72 | 76 | ||
73 | #ifdef __cplusplus | 77 | #ifdef __cplusplus |
74 | } | 78 | } |
75 | #endif | 79 | #endif |
76 | 80 | ||
diff --git a/gl/vasprintf.c b/gl/vasprintf.c index 82470734..90f64e91 100644 --- a/gl/vasprintf.c +++ b/gl/vasprintf.c | |||
@@ -1,9 +1,9 @@ | |||
1 | /* Formatted output to strings. | 1 | /* Formatted output to strings. |
2 | Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. | 2 | Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; either version 2, or (at your option) | 6 | the Free Software Foundation; either version 3, or (at your option) |
7 | any later version. | 7 | any later version. |
8 | 8 | ||
9 | This program is distributed in the hope that it will be useful, | 9 | This program is distributed in the hope that it will be useful, |
@@ -18,7 +18,11 @@ | |||
18 | #include <config.h> | 18 | #include <config.h> |
19 | 19 | ||
20 | /* Specification. */ | 20 | /* Specification. */ |
21 | #include "vasprintf.h" | 21 | #ifdef IN_LIBASPRINTF |
22 | # include "vasprintf.h" | ||
23 | #else | ||
24 | # include <stdio.h> | ||
25 | #endif | ||
22 | 26 | ||
23 | #include <errno.h> | 27 | #include <errno.h> |
24 | #include <limits.h> | 28 | #include <limits.h> |
diff --git a/gl/vasprintf.h b/gl/vasprintf.h deleted file mode 100644 index ab5515ce..00000000 --- a/gl/vasprintf.h +++ /dev/null | |||
@@ -1,63 +0,0 @@ | |||
1 | /* vsprintf with automatic memory allocation. | ||
2 | Copyright (C) 2002-2003 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program 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 | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | |||
18 | #ifndef _VASPRINTF_H | ||
19 | #define _VASPRINTF_H | ||
20 | |||
21 | #if HAVE_VASPRINTF | ||
22 | |||
23 | /* Get asprintf(), vasprintf() declarations. */ | ||
24 | #include <stdio.h> | ||
25 | |||
26 | #else | ||
27 | |||
28 | /* Get va_list. */ | ||
29 | #include <stdarg.h> | ||
30 | |||
31 | #ifndef __attribute__ | ||
32 | /* This feature is available in gcc versions 2.5 and later. */ | ||
33 | # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__ | ||
34 | # define __attribute__(Spec) /* empty */ | ||
35 | # endif | ||
36 | /* The __-protected variants of `format' and `printf' attributes | ||
37 | are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ | ||
38 | # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) | ||
39 | # define __format__ format | ||
40 | # define __printf__ printf | ||
41 | # endif | ||
42 | #endif | ||
43 | |||
44 | #ifdef __cplusplus | ||
45 | extern "C" { | ||
46 | #endif | ||
47 | |||
48 | /* Write formatted output to a string dynamically allocated with malloc(). | ||
49 | If the memory allocation succeeds, store the address of the string in | ||
50 | *RESULT and return the number of resulting bytes, excluding the trailing | ||
51 | NUL. Upon memory allocation error, or some other error, return -1. */ | ||
52 | extern int asprintf (char **result, const char *format, ...) | ||
53 | __attribute__ ((__format__ (__printf__, 2, 3))); | ||
54 | extern int vasprintf (char **result, const char *format, va_list args) | ||
55 | __attribute__ ((__format__ (__printf__, 2, 0))); | ||
56 | |||
57 | #ifdef __cplusplus | ||
58 | } | ||
59 | #endif | ||
60 | |||
61 | #endif | ||
62 | |||
63 | #endif /* _VASPRINTF_H */ | ||
diff --git a/gl/vsnprintf.c b/gl/vsnprintf.c index af567d2c..cc8f61f1 100644 --- a/gl/vsnprintf.c +++ b/gl/vsnprintf.c | |||
@@ -1,10 +1,10 @@ | |||
1 | /* Formatted output to strings. | 1 | /* Formatted output to strings. |
2 | Copyright (C) 2004, 2006 Free Software Foundation, Inc. | 2 | Copyright (C) 2004, 2006-2007 Free Software Foundation, Inc. |
3 | Written by Simon Josefsson and Yoann Vandoorselaere <yoann@prelude-ids.org>. | 3 | Written by Simon Josefsson and Yoann Vandoorselaere <yoann@prelude-ids.org>. |
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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3, or (at your option) |
8 | any later version. | 8 | any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
@@ -21,12 +21,11 @@ | |||
21 | #endif | 21 | #endif |
22 | 22 | ||
23 | /* Specification. */ | 23 | /* Specification. */ |
24 | #include "vsnprintf.h" | 24 | #include <stdio.h> |
25 | 25 | ||
26 | #include <errno.h> | 26 | #include <errno.h> |
27 | #include <limits.h> | 27 | #include <limits.h> |
28 | #include <stdarg.h> | 28 | #include <stdarg.h> |
29 | #include <stdio.h> | ||
30 | #include <stdlib.h> | 29 | #include <stdlib.h> |
31 | #include <string.h> | 30 | #include <string.h> |
32 | 31 | ||
@@ -41,7 +40,7 @@ | |||
41 | additional length SIZE limit how much is written into STR. Returns | 40 | additional length SIZE limit how much is written into STR. Returns |
42 | string length of formatted string (which may be larger than SIZE). | 41 | string length of formatted string (which may be larger than SIZE). |
43 | STR may be NULL, in which case nothing will be written. On error, | 42 | STR may be NULL, in which case nothing will be written. On error, |
44 | return a negative value. */ | 43 | return a negative value. */ |
45 | int | 44 | int |
46 | vsnprintf (char *str, size_t size, const char *format, va_list args) | 45 | vsnprintf (char *str, size_t size, const char *format, va_list args) |
47 | { | 46 | { |
diff --git a/gl/vsnprintf.h b/gl/vsnprintf.h deleted file mode 100644 index f80c77a9..00000000 --- a/gl/vsnprintf.h +++ /dev/null | |||
@@ -1,31 +0,0 @@ | |||
1 | /* Formatted output to strings. | ||
2 | Copyright (C) 2004 Free Software Foundation, Inc. | ||
3 | Written by Simon Josefsson and Yoann Vandoorselaere <yoann@prelude-ids.org>. | ||
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 along | ||
16 | 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 | #ifndef VSNPRINTF_H | ||
20 | #define VSNPRINTF_H | ||
21 | |||
22 | #include <stdarg.h> | ||
23 | |||
24 | /* Get vsnprintf declaration, if available. */ | ||
25 | #include <stdio.h> | ||
26 | |||
27 | #if defined HAVE_DECL_VSNPRINTF && !HAVE_DECL_VSNPRINTF | ||
28 | int vsnprintf (char *str, size_t size, const char *format, va_list args); | ||
29 | #endif | ||
30 | |||
31 | #endif /* VSNPRINTF_H */ | ||
diff --git a/gl/wchar_.h b/gl/wchar.in.h index 6813a211..b721572e 100644 --- a/gl/wchar_.h +++ b/gl/wchar.in.h | |||
@@ -4,7 +4,7 @@ | |||
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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3, or (at your option) |
8 | any later version. | 8 | any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
@@ -22,11 +22,11 @@ | |||
22 | * ISO C 99 <wchar.h> for platforms that have issues. | 22 | * ISO C 99 <wchar.h> for platforms that have issues. |
23 | * <http://www.opengroup.org/susv3xbd/wchar.h.html> | 23 | * <http://www.opengroup.org/susv3xbd/wchar.h.html> |
24 | * | 24 | * |
25 | * For now, this just ensures proper prerequisite inclusion order. | 25 | * For now, this just ensures proper prerequisite inclusion order and |
26 | * the declaration of wcwidth(). | ||
26 | */ | 27 | */ |
27 | 28 | ||
28 | #ifndef _GL_WCHAR_H | 29 | #ifndef _GL_WCHAR_H |
29 | #define _GL_WCHAR_H | ||
30 | 30 | ||
31 | /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before | 31 | /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before |
32 | <wchar.h>. | 32 | <wchar.h>. |
@@ -36,7 +36,47 @@ | |||
36 | #include <stdio.h> | 36 | #include <stdio.h> |
37 | #include <time.h> | 37 | #include <time.h> |
38 | 38 | ||
39 | /* Include the original <wchar.h>. */ | 39 | /* Include the original <wchar.h> if it exists. |
40 | #include @ABSOLUTE_WCHAR_H@ | 40 | Some builds of uClibc lack it. */ |
41 | /* The include_next requires a split double-inclusion guard. */ | ||
42 | #if @HAVE_WCHAR_H@ | ||
43 | # @INCLUDE_NEXT@ @NEXT_WCHAR_H@ | ||
44 | #endif | ||
45 | |||
46 | #ifndef _GL_WCHAR_H | ||
47 | #define _GL_WCHAR_H | ||
48 | |||
49 | /* The definition of GL_LINK_WARNING is copied here. */ | ||
50 | |||
51 | #ifdef __cplusplus | ||
52 | extern "C" { | ||
53 | #endif | ||
41 | 54 | ||
55 | |||
56 | /* Return the number of screen columns needed for WC. */ | ||
57 | #if @GNULIB_WCWIDTH@ | ||
58 | # if @REPLACE_WCWIDTH@ | ||
59 | # undef wcwidth | ||
60 | # define wcwidth rpl_wcwidth | ||
61 | extern int wcwidth (wchar_t); | ||
62 | # else | ||
63 | # if !defined wcwidth && !@HAVE_DECL_WCWIDTH@ | ||
64 | /* wcwidth exists but is not declared. */ | ||
65 | extern int wcwidth (int /* actually wchar_t */); | ||
66 | # endif | ||
67 | # endif | ||
68 | #elif defined GNULIB_POSIXCHECK | ||
69 | # undef wcwidth | ||
70 | # define wcwidth(w) \ | ||
71 | (GL_LINK_WARNING ("wcwidth is unportable - " \ | ||
72 | "use gnulib module wcwidth for portability"), \ | ||
73 | wcwidth (w)) | ||
74 | #endif | ||
75 | |||
76 | |||
77 | #ifdef __cplusplus | ||
78 | } | ||
79 | #endif | ||
80 | |||
81 | #endif /* _GL_WCHAR_H */ | ||
42 | #endif /* _GL_WCHAR_H */ | 82 | #endif /* _GL_WCHAR_H */ |
diff --git a/gl/wctype_.h b/gl/wctype.in.h index 1297c61e..a86b5ad4 100644 --- a/gl/wctype_.h +++ b/gl/wctype.in.h | |||
@@ -4,7 +4,7 @@ | |||
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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3, or (at your option) |
8 | any later version. | 8 | any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
@@ -27,7 +27,6 @@ | |||
27 | */ | 27 | */ |
28 | 28 | ||
29 | #ifndef _GL_WCTYPE_H | 29 | #ifndef _GL_WCTYPE_H |
30 | #define _GL_WCTYPE_H | ||
31 | 30 | ||
32 | #if @HAVE_WINT_T@ | 31 | #if @HAVE_WINT_T@ |
33 | /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. | 32 | /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. |
@@ -39,20 +38,27 @@ | |||
39 | # include <stdio.h> | 38 | # include <stdio.h> |
40 | # include <time.h> | 39 | # include <time.h> |
41 | # include <wchar.h> | 40 | # include <wchar.h> |
42 | typedef wint_t __wctype_wint_t; | ||
43 | #else | ||
44 | typedef int __wctype_wint_t; | ||
45 | #endif | 41 | #endif |
46 | 42 | ||
47 | /* Include the original <wctype.h> if it exists. | 43 | /* Include the original <wctype.h> if it exists. |
48 | BeOS 5 has the functions but no <wctype.h>. */ | 44 | BeOS 5 has the functions but no <wctype.h>. */ |
45 | /* The include_next requires a split double-inclusion guard. */ | ||
49 | #if @HAVE_WCTYPE_H@ | 46 | #if @HAVE_WCTYPE_H@ |
50 | # include @ABSOLUTE_WCTYPE_H@ | 47 | # @INCLUDE_NEXT@ @NEXT_WCTYPE_H@ |
48 | #endif | ||
49 | |||
50 | #ifndef _GL_WCTYPE_H | ||
51 | #define _GL_WCTYPE_H | ||
52 | |||
53 | #if @HAVE_WINT_T@ | ||
54 | typedef wint_t __wctype_wint_t; | ||
55 | #else | ||
56 | typedef int __wctype_wint_t; | ||
51 | #endif | 57 | #endif |
52 | 58 | ||
53 | /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions. | 59 | /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions. |
54 | Assume all 12 functions are implemented the same way, or not at all. */ | 60 | Assume all 12 functions are implemented the same way, or not at all. */ |
55 | #if ! HAVE_ISWCNTRL | 61 | #if ! @HAVE_ISWCNTRL@ |
56 | 62 | ||
57 | /* IRIX 5.3 has macros but no functions, its isw* macros refer to an | 63 | /* IRIX 5.3 has macros but no functions, its isw* macros refer to an |
58 | undefined variable _ctmp_ and to <ctype.h> macros like _P, and they | 64 | undefined variable _ctmp_ and to <ctype.h> macros like _P, and they |
@@ -152,3 +158,4 @@ iswxdigit (__wctype_wint_t wc) | |||
152 | # endif /* ! HAVE_ISWCNTRL */ | 158 | # endif /* ! HAVE_ISWCNTRL */ |
153 | 159 | ||
154 | #endif /* _GL_WCTYPE_H */ | 160 | #endif /* _GL_WCTYPE_H */ |
161 | #endif /* _GL_WCTYPE_H */ | ||
diff --git a/gl/wcwidth.h b/gl/wcwidth.h deleted file mode 100644 index 8ed5ff8c..00000000 --- a/gl/wcwidth.h +++ /dev/null | |||
@@ -1,57 +0,0 @@ | |||
1 | /* Determine the number of screen columns needed for a character. | ||
2 | Copyright (C) 2006, 2007 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program 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 | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
17 | |||
18 | #ifndef _gl_WCWIDTH_H | ||
19 | #define _gl_WCWIDTH_H | ||
20 | |||
21 | #if HAVE_WCHAR_T | ||
22 | |||
23 | /* Get wcwidth if available, along with wchar_t. */ | ||
24 | # include <wchar.h> | ||
25 | |||
26 | /* Get iswprint. */ | ||
27 | # include <wctype.h> | ||
28 | |||
29 | # ifndef HAVE_DECL_WCWIDTH | ||
30 | "this configure-time declaration test was not run" | ||
31 | # endif | ||
32 | # ifndef wcwidth | ||
33 | # if !HAVE_WCWIDTH | ||
34 | |||
35 | /* wcwidth doesn't exist, so assume all printable characters have | ||
36 | width 1. */ | ||
37 | static inline int | ||
38 | wcwidth (wchar_t wc) | ||
39 | { | ||
40 | return wc == 0 ? 0 : iswprint (wc) ? 1 : -1; | ||
41 | } | ||
42 | |||
43 | # elif !HAVE_DECL_WCWIDTH | ||
44 | |||
45 | /* wcwidth exists but is not declared. */ | ||
46 | extern | ||
47 | # ifdef __cplusplus | ||
48 | "C" | ||
49 | # endif | ||
50 | int wcwidth (int /* actually wchar_t */); | ||
51 | |||
52 | # endif | ||
53 | # endif | ||
54 | |||
55 | #endif /* HAVE_WCHAR_T */ | ||
56 | |||
57 | #endif /* _gl_WCWIDTH_H */ | ||
diff --git a/gl/xalloc-die.c b/gl/xalloc-die.c index 090f060d..0a0694fc 100644 --- a/gl/xalloc-die.c +++ b/gl/xalloc-die.c | |||
@@ -3,10 +3,10 @@ | |||
3 | Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2006 Free | 3 | Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2006 Free |
4 | Software Foundation, Inc. | 4 | Software Foundation, Inc. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3 of the License, or |
9 | any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -14,8 +14,7 @@ | |||
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License | 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, | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 18 | ||
20 | #include <config.h> | 19 | #include <config.h> |
21 | 20 | ||
diff --git a/gl/xalloc.h b/gl/xalloc.h index 17ab5142..40dcf4bd 100644 --- a/gl/xalloc.h +++ b/gl/xalloc.h | |||
@@ -1,12 +1,12 @@ | |||
1 | /* xalloc.h -- malloc with out-of-memory checking | 1 | /* xalloc.h -- malloc with out-of-memory checking |
2 | 2 | ||
3 | Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, | 3 | Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, |
4 | 1999, 2000, 2003, 2004, 2006 Free Software Foundation, Inc. | 4 | 1999, 2000, 2003, 2004, 2006, 2007, 2008 Free Software Foundation, Inc. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 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 | 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) | 8 | the Free Software Foundation; either version 3 of the License, or |
9 | any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -14,8 +14,7 @@ | |||
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License | 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, | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
18 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
19 | 18 | ||
20 | #ifndef XALLOC_H_ | 19 | #ifndef XALLOC_H_ |
21 | # define XALLOC_H_ | 20 | # define XALLOC_H_ |
@@ -29,7 +28,7 @@ extern "C" { | |||
29 | 28 | ||
30 | 29 | ||
31 | # ifndef __attribute__ | 30 | # ifndef __attribute__ |
32 | # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__ | 31 | # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) |
33 | # define __attribute__(x) | 32 | # define __attribute__(x) |
34 | # endif | 33 | # endif |
35 | # endif | 34 | # endif |
@@ -139,10 +138,10 @@ xnrealloc (void *p, size_t n, size_t s) | |||
139 | allocating an initial block with a nonzero size, or by allocating a | 138 | allocating an initial block with a nonzero size, or by allocating a |
140 | larger block. | 139 | larger block. |
141 | 140 | ||
142 | In the following implementation, nonzero sizes are doubled so that | 141 | In the following implementation, nonzero sizes are increased by a |
143 | repeated reallocations have O(N log N) overall cost rather than | 142 | factor of approximately 1.5 so that repeated reallocations have |
144 | O(N**2) cost, but the specification for this function does not | 143 | O(N) overall cost rather than O(N**2) cost, but the |
145 | guarantee that sizes are doubled. | 144 | specification for this function does not guarantee that rate. |
146 | 145 | ||
147 | Here is an example of use: | 146 | Here is an example of use: |
148 | 147 | ||
@@ -204,9 +203,13 @@ x2nrealloc (void *p, size_t *pn, size_t s) | |||
204 | } | 203 | } |
205 | else | 204 | else |
206 | { | 205 | { |
207 | if (((size_t) -1) / 2 / s < n) | 206 | /* Set N = ceil (1.5 * N) so that progress is made if N == 1. |
207 | Check for overflow, so that N * S stays in size_t range. | ||
208 | The check is slightly conservative, but an exact check isn't | ||
209 | worth the trouble. */ | ||
210 | if ((size_t) -1 / 3 * 2 / s <= n) | ||
208 | xalloc_die (); | 211 | xalloc_die (); |
209 | n *= 2; | 212 | n += (n + 1) / 2; |
210 | } | 213 | } |
211 | 214 | ||
212 | *pn = n; | 215 | *pn = n; |
diff --git a/gl/xmalloc.c b/gl/xmalloc.c index 318e0ddb..3a123457 100644 --- a/gl/xmalloc.c +++ b/gl/xmalloc.c | |||
@@ -4,10 +4,10 @@ | |||
4 | 1999, 2000, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, | 4 | 1999, 2000, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, |
5 | Inc. | 5 | Inc. |
6 | 6 | ||
7 | This program is free software; you can redistribute it and/or modify | 7 | This program is free software: you can redistribute it and/or modify |
8 | it under the terms of the GNU General Public License as published by | 8 | it under the terms of the GNU General Public License as published by |
9 | the Free Software Foundation; either version 2, or (at your option) | 9 | the Free Software Foundation; either version 3 of the License, or |
10 | any later version. | 10 | (at your option) any later version. |
11 | 11 | ||
12 | This program is distributed in the hope that it will be useful, | 12 | This program is distributed in the hope that it will be useful, |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -15,8 +15,7 @@ | |||
15 | GNU General Public License for more details. | 15 | GNU General Public License for more details. |
16 | 16 | ||
17 | You should have received a copy of the GNU General Public License | 17 | You should have received a copy of the GNU General Public License |
18 | along with this program; if not, write to the Free Software Foundation, | 18 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
19 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
20 | 19 | ||
21 | #include <config.h> | 20 | #include <config.h> |
22 | 21 | ||
@@ -4,7 +4,7 @@ | |||
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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3, or (at your option) |
8 | any later version. | 8 | any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
diff --git a/gl/xstrndup.c b/gl/xstrndup.c index afcbc1ab..37488cd9 100644 --- a/gl/xstrndup.c +++ b/gl/xstrndup.c | |||
@@ -1,11 +1,11 @@ | |||
1 | /* Duplicate a bounded initial segment of a string, with out-of-memory | 1 | /* Duplicate a bounded initial segment of a string, with out-of-memory |
2 | checking. | 2 | checking. |
3 | Copyright (C) 2003, 2006 Free Software Foundation, Inc. | 3 | Copyright (C) 2003, 2006, 2007 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,15 +13,14 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | #include <config.h> | 18 | #include <config.h> |
20 | 19 | ||
21 | /* Specification. */ | 20 | /* Specification. */ |
22 | #include "xstrndup.h" | 21 | #include "xstrndup.h" |
23 | 22 | ||
24 | #include "strndup.h" | 23 | #include <string.h> |
25 | #include "xalloc.h" | 24 | #include "xalloc.h" |
26 | 25 | ||
27 | /* Return a newly allocated copy of at most N bytes of STRING. | 26 | /* Return a newly allocated copy of at most N bytes of STRING. |
diff --git a/gl/xstrndup.h b/gl/xstrndup.h index 88354cfd..4882e394 100644 --- a/gl/xstrndup.h +++ b/gl/xstrndup.h | |||
@@ -2,10 +2,10 @@ | |||
2 | checking. | 2 | checking. |
3 | Copyright (C) 2003 Free Software Foundation, Inc. | 3 | Copyright (C) 2003 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 |
7 | the Free Software Foundation; either version 2, or (at your option) | 7 | the Free Software Foundation; either version 3 of the License, or |
8 | any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
@@ -13,8 +13,7 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 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, | 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | #include <stddef.h> | 18 | #include <stddef.h> |
20 | 19 | ||
diff --git a/plugins/common.h b/plugins/common.h index 554eb108..6cb7cd46 100644 --- a/plugins/common.h +++ b/plugins/common.h | |||
@@ -117,9 +117,6 @@ | |||
117 | /* GNU Libraries */ | 117 | /* GNU Libraries */ |
118 | #include <getopt.h> | 118 | #include <getopt.h> |
119 | #include "dirname.h" | 119 | #include "dirname.h" |
120 | #include "vasprintf.h" | ||
121 | #include "snprintf.h" | ||
122 | #include "vsnprintf.h" | ||
123 | 120 | ||
124 | #ifdef HAVE_LOCALE_H | 121 | #ifdef HAVE_LOCALE_H |
125 | #include <locale.h> | 122 | #include <locale.h> |
diff --git a/po/Makevars b/po/Makevars index afd9a6e0..152edec2 100644 --- a/po/Makevars +++ b/po/Makevars | |||
@@ -8,7 +8,7 @@ subdir = po | |||
8 | top_builddir = .. | 8 | top_builddir = .. |
9 | 9 | ||
10 | # These options get passed to xgettext. | 10 | # These options get passed to xgettext. |
11 | XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ | 11 | XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format |
12 | 12 | ||
13 | # This is the copyright holder that gets inserted into the header of the | 13 | # This is the copyright holder that gets inserted into the header of the |
14 | # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding | 14 | # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding |