summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog51
-rw-r--r--Makefile26
-rw-r--r--Makerules11
-rw-r--r--db2/Versions51
-rw-r--r--libio/Versions27
-rw-r--r--libio/iofread_u.c1
-rw-r--r--libio/iofwrite_u.c1
-rw-r--r--nis/nss_nis/nis-pwd.c207
-rw-r--r--posix/Makefile5
-rw-r--r--posix/annexc.c23
-rw-r--r--stdio-common/Versions19
-rw-r--r--stdio-common/test_rdwr.c2
-rw-r--r--stdio/Versions45
-rw-r--r--versions.awk29
14 files changed, 392 insertions, 106 deletions
diff --git a/ChangeLog b/ChangeLog
index eaabfc5e57..bac498661b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,54 @@
+1998-07-06 14:36 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * posix/Makefile (generated): Remove $(objpfx) from the names.
+
+1998-07-05 Andreas Jaeger <aj@arthur.rhein-neckar.de>
+
+ * stdio-common/test_rdwr.c: Use %Zu for size_t in printf
+ format string.
+
+ * libio/iofread_u.c: Include <stdio.h> for prototype.
+ * libio/iofwrite_u.c: Likewise.
+
+1998-07-06 Andreas Jaeger <aj@arthur.rhein-neckar.de>
+
+ * db2/Versions: New file.
+
+1998-07-04 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * Makefile (lib-noranlib): Don't depend on sysd-versions.
+ ($(common-objpfx)sysd-versions): Remove rule.
+ * Makerules ($(common-objpfx)sysd-versions): Define here instead.
+ Pass name of Versions.def file to script and redirect output to
+ target. Include it and make all generated version maps depend on
+ it.
+ * versions.awk: Print out variable definition containing all
+ generated version maps. Print error messages to stderr. Remove
+ temp file.
+
+1998-07-04 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * posix/annexc.c (check_header): Terminate macro name before
+ comparing.
+ (get_null_defines): Allow builtin macros with parameters.
+ (fmt, testfmt): Add -D_LIBC.
+ * posix/Makefile: Remove bogus duplicate include directories from
+ annexc test command.
+
+1998-07-06 12:04 Ulrich Drepper <drepper@cygnus.com>
+
+ * nis/nss_nis/nis-pwd.c (internal_nis_getpwent_r): Handle adjunct
+ password scheme.
+ (_nss_nis_getpwnam_r): Likewise.
+ (_nss_nis_getpwuid_r): Likewise.
+
+1998-07-05 Mark Kettenis <kettenis@phys.uva.nl>
+
+ * libio/Versions: Move symbols whose source lives in
+ stdio-common to ...
+ * stdio-common/Versions: ... here.
+ * stdio/Versions: Add missing symbols.
+
1998-07-05 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/__sendmsg.S: Define function as
diff --git a/Makefile b/Makefile
index ea36637def..6e2a603bce 100644
--- a/Makefile
+++ b/Makefile
@@ -77,10 +77,6 @@ ifeq (yes,$(build-shared))
install-others += $(inst_includedir)/gnu/lib-names.h
endif
-ifeq ($(versioning),yes)
-lib-noranlib: lib-mapfiles
-endif
-
include Makerules
ifeq ($(build-programs),yes)
@@ -315,25 +311,3 @@ headers2_0 := __math.h bytesex.h confname.h direntry.h elfclass.h \
.PHONY: remove-old-headers
remove-old-headers:
rm -f $(addprefix $(inst_includedir)/, $(headers2_0))
-
-# Generate version maps.
-ifeq ($(versioning),yes)
-ifndef avoid-generated
-$(common-objpfx)sysd-versions: Versions.def
- (echo define vers-libs; \
- sed -n 's/\(lib[a-zA-Z0-9_][a-zA-Z0-9_]*\) {/$$(common-objpfx)\1%map/p' $<; \
- echo endef) > $@T
- mv -f $@T $@
--include $(common-objpfx)sysd-versions
-vers-libs := $(subst $(\n), ,$(vers-libs))
-
-$(vers-libs): versions.awk \
- $(wildcard $(subdirs:%=%/Versions)) \
- $(wildcard $(+sysdep_dirs:%=%/Versions))
- $(AWK) -v 'buildroot=$(common-objpfx)' -f $^
-
-lib-mapfiles: $(common-objpfx)sysd-versions $(subst %,.,$(vers-libs))
-else
-lib-mapfiles:
-endif
-endif
diff --git a/Makerules b/Makerules
index 998f866114..01be04b57d 100644
--- a/Makerules
+++ b/Makerules
@@ -276,6 +276,17 @@ ifndef sysd-rules-done
no_deps=t
endif
+# Generate version maps.
+ifeq ($(versioning),yes)
+-include $(common-objpfx)sysd-versions
+$(common-objpfx)sysd-versions: $(..)Versions.def $(..)versions.awk \
+ $(wildcard $(all-subdirs:%=$(..)%/Versions)) \
+ $(wildcard $(+sysdep_dirs:%=%/Versions))
+ $(AWK) -v buildroot=$(common-objpfx) -v defsfile=$< \
+ -f $(filter-out $<,$^) > $@T
+ mv -f $@T $@
+$(all-version-maps): $(common-objpfx)sysd-versions
+endif
ifndef compile-command.S
compile-command.S = $(compile.S) $(OUTPUT_OPTION)
diff --git a/db2/Versions b/db2/Versions
new file mode 100644
index 0000000000..c7821c0337
--- /dev/null
+++ b/db2/Versions
@@ -0,0 +1,51 @@
+libdb {
+ GLIBC_2.0 {
+ # db 1.85 interface
+ dbopen; __dbopen;
+
+ # The compatibility functions.
+ dbm_clearerr; dbm_close; dbm_delete; dbm_dirfno; dbm_error;
+ dbm_fetch; dbm_firstkey; dbminit; dbm_nextkey; dbm_open;
+ dbm_pagfno; dbm_store;
+ }
+ GLIBC_2.1 {
+ # db.2.x interface
+ # Internal functions used by db maintenance programs
+ __bam_init_print; __bam_pgin; __bam_pgout;
+ __db_dispatch;__db_dump; __db_err; __db_init_print;__db_jump;
+ __db_omode;__db_prdbt;
+ __ham_init_print; __ham_pgin; __ham_pgout;
+ __lock_dump_region;
+ __log_init_print;
+ __memp_dump_region;
+ __txn_init_print;
+
+ # Constants
+ db_rw_conflicts; db_riw_conflicts;
+
+ # Functions
+ db_appexit; db_appinit; db_jump_set; db_open; db_value_set;
+ db_version;
+ lock_close; lock_detect; lock_get; lock_id; lock_open; lock_put;
+ lock_stat; lock_unlink; lock_vec; log_archive; log_close;
+ log_compare; log_file; log_flush; log_get; log_open; log_put;
+ log_register; log_stat; log_unlink; log_unregister;
+
+ memp_close; memp_fclose; memp_fget; memp_fopen; memp_fput;
+ memp_fset; memp_fsync; memp_open; memp_register; memp_stat;
+ memp_sync; memp_trickle; memp_unlink;
+
+ txn_abort; txn_begin; txn_checkpoint; txn_close; txn_commit;
+ txn_id; txn_open; txn_prepare; txn_stat; txn_unlink;
+
+ # compatibility interface for ndbm
+ __db_ndbm_clearerr; __db_ndbm_close; __db_ndbm_delete;
+ __db_ndbm_dirfno; __db_ndbm_error; __db_ndbm_fetch;
+ __db_ndbm_firstkey; __db_ndbm_nextkey; __db_ndbm_open;
+ __db_ndbm_pagfno; __db_ndbm_rdonly; __db_ndbm_store;
+
+ # compatibility interface for dbm
+ __db_dbm_delete; __db_dbm_fetch; __db_dbm_firstkey; __db_dbm_init;
+ __db_dbm_nextkey; __db_dbm_store;
+ }
+}
diff --git a/libio/Versions b/libio/Versions
index e837abb5d7..83fc6ed540 100644
--- a/libio/Versions
+++ b/libio/Versions
@@ -43,48 +43,39 @@ libc {
# variables in normal name space
stderr; stdin; stdout;
- # a*
- asprintf;
-
# c*
clearerr; clearerr_unlocked;
- # d*
- dprintf;
-
# f*
fclose; fcloseall; fdopen; feof; feof_locked; feof_unlocked; ferror;
ferror_locked; ferror_unlocked; fflush; fflush_locked; fflush_unlocked;
fgetc; fgetpos; fgets; fileno; fileno_locked; fileno_unlocked; flockfile;
- fopen; fopencookie; fprintf; fputc; fputc_locked; fputc_unlocked; fputs;
- fread; freopen; fscanf; fseek; fsetpos; ftell; ftrylockfile; funlockfile;
+ fopen; fopencookie; fputc; fputc_locked; fputc_unlocked; fputs;
+ fread; freopen; fseek; fsetpos; ftell; ftrylockfile; funlockfile;
fwrite;
# g*
getc; getc_locked; getc_unlocked; getchar; getchar_unlocked; getdelim;
- getline; gets; getw;
+ gets;
# o*
- obstack_printf; obstack_vprintf; open_memstream;
+ open_memstream; open_obstack_stream; obstack_printf; obstack_vprintf;
# p*
- pclose; popen; printf; putc; putc_locked; putc_unlocked; putchar;
+ pclose; popen; putc; putc_locked; putc_unlocked; putchar;
putchar_unlocked; puts;
- # p*
- putw; rewind;
-
- # s*
- scanf; setbuf; setbuffer; setlinebuf;
+ # r*
+ rewind;
# s*
- setvbuf; snprintf; sprintf; sscanf;
+ setbuf; setbuffer; setlinebuf; setvbuf;
# u*
ungetc;
# v*
- vasprintf; vdprintf; vprintf; vscanf; vsnprintf; vsprintf; vsscanf;
+ vasprintf; vdprintf; vscanf; vsnprintf; vsprintf; vsscanf;
}
GLIBC_2.1 {
# global variables
diff --git a/libio/iofread_u.c b/libio/iofread_u.c
index bd7ceaf379..69627165eb 100644
--- a/libio/iofread_u.c
+++ b/libio/iofread_u.c
@@ -24,6 +24,7 @@
General Public License. */
#include "libioP.h"
+#include <stdio.h>
_IO_size_t
fread_unlocked (buf, size, count, fp)
diff --git a/libio/iofwrite_u.c b/libio/iofwrite_u.c
index 7d1d24b758..3ffc9bff2b 100644
--- a/libio/iofwrite_u.c
+++ b/libio/iofwrite_u.c
@@ -24,6 +24,7 @@
General Public License. */
#include "libioP.h"
+#include <stdio.h>
_IO_size_t
fwrite_unlocked (buf, size, count, fp)
diff --git a/nis/nss_nis/nis-pwd.c b/nis/nss_nis/nis-pwd.c
index 296526d7e6..b70091508c 100644
--- a/nis/nss_nis/nis-pwd.c
+++ b/nis/nss_nis/nis-pwd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
@@ -82,8 +82,8 @@ internal_nis_getpwent_r (struct passwd *pwd, char *buffer, size_t buflen,
int *errnop)
{
struct parser_data *data = (void *) buffer;
- char *domain, *result, *outkey;
- int len, keylen, parse_res;
+ char *domain;
+ int parse_res;
if (yp_get_default_domain (&domain))
return NSS_STATUS_UNAVAIL;
@@ -92,7 +92,9 @@ internal_nis_getpwent_r (struct passwd *pwd, char *buffer, size_t buflen,
do
{
enum nss_status retval;
- char *p;
+ char *result, *outkey, *result2, *p;
+ int len, keylen, len2;
+ size_t namelen;
if (new_start)
retval = yperr2nss (yp_first (domain, "passwd.byname",
@@ -109,15 +111,63 @@ internal_nis_getpwent_r (struct passwd *pwd, char *buffer, size_t buflen,
return retval;
}
- if ((size_t) (len + 1) > buflen)
- {
- free (result);
- *errnop = ERANGE;
- return NSS_STATUS_TRYAGAIN;
- }
+ /* Check for adjunct style secret passwords. They can be
+ recognized by a password starting with "##". */
+ p = strchr (result, ':');
+ if (p != NULL /* This better should be true in all cases. */
+ && p[1] == '#' && p[2] == '#'
+ && (namelen = p - result,
+ yp_match (domain, "passwd.adjunct.byname", result, namelen,
+ &result2, &len2)) == YPERR_SUCCESS)
+ {
+ /* We found a passwd.adjunct entry. Merge encrypted
+ password therein into original result. */
+ char *encrypted = strchr (result2, ':');
+ char *endp;
+ size_t restlen;
+
+ if (encrypted != NULL
+ || (endp = strchr (++encrypted, ':')) == NULL
+ || (p = strchr (p + 1, ':')) == NULL)
+ {
+ /* Invalid format of the entry. This never should happen
+ unless the data from which the NIS table is generated is
+ wrong. We simply ignore it. */
+ free (result2);
+ goto non_adjunct;
+ }
+
+ restlen = len - (p - result);
+ if ((size_t) (namelen + (endp - encrypted) + restlen + 2) > buflen)
+ {
+ free (result2);
+ free (result);
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
+
+ __mempcpy (__mempcpy (__mempcpy (__mempcpy (buffer, result, namelen),
+ ":", 1),
+ encrypted, endp - encrypted),
+ p, restlen + 1);
+ p = buffer;
+
+ free (result2);
+ }
+ else
+ {
+ non_adjunct:
+ if ((size_t) (len + 1) > buflen)
+ {
+ free (result);
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
+
+ p = strncpy (buffer, result, len);
+ buffer[len] = '\0';
+ }
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
while (isspace (*p))
++p;
free (result);
@@ -161,8 +211,9 @@ _nss_nis_getpwnam_r (const char *name, struct passwd *pwd,
{
struct parser_data *data = (void *) buffer;
enum nss_status retval;
- char *domain, *result, *p;
- int len, parse_res;
+ char *domain, *result, *result2, *p;
+ int len, len2, parse_res;
+ size_t namelen;
if (name == NULL)
{
@@ -173,8 +224,10 @@ _nss_nis_getpwnam_r (const char *name, struct passwd *pwd,
if (yp_get_default_domain (&domain))
return NSS_STATUS_UNAVAIL;
+ namelen = strlen (name);
+
retval = yperr2nss (yp_match (domain, "passwd.byname", name,
- strlen (name), &result, &len));
+ namelen, &result, &len));
if (retval != NSS_STATUS_SUCCESS)
{
@@ -183,15 +236,62 @@ _nss_nis_getpwnam_r (const char *name, struct passwd *pwd,
return retval;
}
- if ((size_t) (len + 1) > buflen)
+ /* Check for adjunct style secret passwords. They can be recognized
+ by a password starting with "##". */
+ p = strchr (result, ':');
+ if (p != NULL /* This better should be true in all cases. */
+ && p[1] == '#' && p[2] == '#'
+ && yp_match (domain, "passwd.adjunct.byname", name, namelen,
+ &result2, &len2) == YPERR_SUCCESS)
{
- free (result);
- *errnop = ERANGE;
- return NSS_STATUS_TRYAGAIN;
+ /* We found a passwd.adjunct entry. Merge encrypted password
+ therein into original result. */
+ char *encrypted = strchr (result2, ':');
+ char *endp;
+ size_t restlen;
+
+ if (encrypted != NULL
+ || (endp = strchr (++encrypted, ':')) == NULL
+ || (p = strchr (p + 1, ':')) == NULL)
+ {
+ /* Invalid format of the entry. This never should happen
+ unless the data from which the NIS table is generated is
+ wrong. We simply ignore it. */
+ free (result2);
+ goto non_adjunct;
+ }
+
+ restlen = len - (p - result);
+ if ((size_t) (namelen + (endp - encrypted) + restlen + 2) > buflen)
+ {
+ free (result2);
+ free (result);
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
+
+ __mempcpy (__mempcpy (__mempcpy (__mempcpy (buffer, name, namelen),
+ ":", 1),
+ encrypted, endp - encrypted),
+ p, restlen + 1);
+ p = buffer;
+
+ free (result2);
+ }
+ else
+ {
+ non_adjunct:
+ if ((size_t) (len + 1) > buflen)
+ {
+ free (result);
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
+
+ p = strncpy (buffer, result, len);
+ buffer[len] = '\0';
}
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
while (isspace (*p))
++p;
free (result);
@@ -214,9 +314,10 @@ _nss_nis_getpwuid_r (uid_t uid, struct passwd *pwd,
{
struct parser_data *data = (void *) buffer;
enum nss_status retval;
- char *domain, *result, *p;
- int len, nlen, parse_res;
+ char *domain, *result, *p, *result2;
+ int len, nlen, parse_res, len2;
char buf[32];
+ size_t namelen;
if (yp_get_default_domain (&domain))
return NSS_STATUS_UNAVAIL;
@@ -233,15 +334,63 @@ _nss_nis_getpwuid_r (uid_t uid, struct passwd *pwd,
return retval;
}
- if ((size_t) (len + 1) > buflen)
+ /* Check for adjunct style secret passwords. They can be recognized
+ by a password starting with "##". */
+ p = strchr (result, ':');
+ if (p != NULL /* This better should be true in all cases. */
+ && p[1] == '#' && p[2] == '#'
+ && (namelen = p - result,
+ yp_match (domain, "passwd.adjunct.byname", result, namelen,
+ &result2, &len2)) == YPERR_SUCCESS)
{
- free (result);
- *errnop = ERANGE;
- return NSS_STATUS_TRYAGAIN;
+ /* We found a passwd.adjunct entry. Merge encrypted password
+ therein into original result. */
+ char *encrypted = strchr (result2, ':');
+ char *endp;
+ size_t restlen;
+
+ if (encrypted != NULL
+ || (endp = strchr (++encrypted, ':')) == NULL
+ || (p = strchr (p + 1, ':')) == NULL)
+ {
+ /* Invalid format of the entry. This never should happen
+ unless the data from which the NIS table is generated is
+ wrong. We simply ignore it. */
+ free (result2);
+ goto non_adjunct;
+ }
+
+ restlen = len - (p - result);
+ if ((size_t) (namelen + (endp - encrypted) + restlen + 2) > buflen)
+ {
+ free (result2);
+ free (result);
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
+
+ __mempcpy (__mempcpy (__mempcpy (__mempcpy (buffer, result, namelen),
+ ":", 1),
+ encrypted, endp - encrypted),
+ p, restlen + 1);
+ p = buffer;
+
+ free (result2);
+ }
+ else
+ {
+ non_adjunct:
+ if ((size_t) (len + 1) > buflen)
+ {
+ free (result);
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
+
+ p = strncpy (buffer, result, len);
+ buffer[len] = '\0';
}
- p = strncpy (buffer, result, len);
- buffer[len] = '\0';
while (isspace (*p))
++p;
free (result);
diff --git a/posix/Makefile b/posix/Makefile
index ad70fddd63..5eadf35eb7 100644
--- a/posix/Makefile
+++ b/posix/Makefile
@@ -64,7 +64,7 @@ before-compile := testcases.h ptestcases.h
# So they get cleaned up.
generated := $(addprefix wordexp-test-result, 1 2 3 4 5 6 7 8 9 10) \
- $(objpfx)annexc $(objpfx)annexc.out
+ annexc annexc.out
include ../Rules
@@ -137,7 +137,8 @@ endif
# Run a test on the header files we use.
# XXX Please note that for now we ignore the result of this test.
tests: $(objpfx)annexc
- -$(dir $<)$(notdir $<) '$(CC)' '-I../include -I../include -I.. $(+sysdep-includes) -I../include -I../include -I..' > $<.out
+ -$(dir $<)$(notdir $<) '$(CC)' \
+ '-I../include -I.. $(+sysdep-includes)' > $<.out
$(objpfx)annexc: annexc.c
$(native-compile)
diff --git a/posix/annexc.c b/posix/annexc.c
index dbc5e28520..8b95311314 100644
--- a/posix/annexc.c
+++ b/posix/annexc.c
@@ -609,12 +609,12 @@ static struct header
/* Format string to build command to invoke compiler. */
static const char fmt[] = "\
echo \"#include <%s>\" |\
-%s -E -dM -D_POSIX_SOURCE %s \
+%s -E -dM -D_POSIX_SOURCE -D_LIBC %s \
-isystem `%s --print-prog-name=include` - > %s";
static const char testfmt[] = "\
echo \"#include <unistd.h>\n#ifndef %s\n#error not defined\n#endif\n\" |\
-%s -E -dM -D_POSIX_SOURCE %s \
+%s -E -dM -D_POSIX_SOURCE -D_LIBC %s \
-isystem `%s --print-prog-name=include` - 2> /dev/null > %s";
@@ -709,7 +709,7 @@ get_null_defines (void)
while (fgets (line, sizeof line, input) != NULL)
{
- char *start, *end;
+ char *start;
if (strlen (line) < 9 || line[7] != ' ')
{ /* "#define A" */
printf ("Malformed input, expected '#define MACRO'\ngot '%s'\n",
@@ -730,9 +730,7 @@ get_null_defines (void)
}
}
start = &line[8];
- for (end = start + 1; !isspace (*end) && *end != '\0'; ++end)
- ;
- result[result_len++] = xstrndup (start, end - start);
+ result[result_len++] = xstrndup (start, strcspn (start, " ("));
if (first)
{
@@ -809,7 +807,6 @@ check_header (const struct header *header, const char **except)
while (fgets (line, sizeof line, input) != NULL)
{
- char *endmac;
const char **ignore;
if (strlen (line) < 9 || line[7] != ' ')
{ /* "#define A" */
@@ -819,9 +816,13 @@ check_header (const struct header *header, const char **except)
continue;
}
+ /* Find next char after the macro identifier; this can be either
+ a space or an open parenthesis. */
+ line[8 + strcspn (&line[8], " (")] = '\0';
+
/* Now check whether it's one of the required macros. */
for (i = 0; i < header->nsyms; ++i)
- if (!strncmp (&line[8], header->syms[i], strlen (header->syms[i])))
+ if (!strcmp (&line[8], header->syms[i]))
break;
if (i < header->nsyms)
{
@@ -833,12 +834,6 @@ check_header (const struct header *header, const char **except)
if (line[8] == '_')
continue;
- /* Find next char after the macro identifier; this can be either
- a space or an open parenthesis. */
- endmac = strpbrk (&line[8], " (");
- if (endmac != NULL)
- *endmac = '\0';
-
/* Maybe one of the symbols which are always defined. */
for (ignore = except; *ignore != NULL; ++ignore)
if (! strcmp (&line[8], *ignore))
diff --git a/stdio-common/Versions b/stdio-common/Versions
index 5db571db92..d38ef7e123 100644
--- a/stdio-common/Versions
+++ b/stdio-common/Versions
@@ -10,20 +10,35 @@ libc {
# variables in normal name space
sys_errlist; sys_nerr; sys_sigabbrev; sys_siglist;
+ # a*
+ asprintf;
+
# c*
ctermid; cuserid;
+ # d*
+ dprintf;
+
+ # f*
+ fprintf; fscanf;
+
+ # g*
+ getline; getw;
+
# p*
- parse_printf_format; perror;
+ parse_printf_format; perror; printf; putw;
# r*
register_printf_function; remove; rename;
+ # s*
+ scanf; snprintf; sprintf; sscanf;
+
# t*
tempnam; tmpfile; tmpnam; tmpnam_r;
# v*
- vfprintf; vfscanf;
+ vfprintf; vfscanf; vprintf;
}
GLIBC_2.1 {
# p*
diff --git a/stdio-common/test_rdwr.c b/stdio-common/test_rdwr.c
index e274dcc665..a3b01b7c7c 100644
--- a/stdio-common/test_rdwr.c
+++ b/stdio-common/test_rdwr.c
@@ -91,7 +91,7 @@ main (int argc, char **argv)
}
else if (where == -1L)
{
- printf ("ftell got %s (should be at %u).\n",
+ printf ("ftell got %s (should be at %Zu).\n",
strerror (errno), replace_from);
lose = 1;
}
diff --git a/stdio/Versions b/stdio/Versions
index 5c6bbe35c5..2dfd4a8de0 100644
--- a/stdio/Versions
+++ b/stdio/Versions
@@ -2,5 +2,50 @@ libc {
GLIBC_2.0 {
# more or less standard functions
__fillbf; __flshfp;
+
+ # functions used in inline functions or macros
+ __getdelim; __line_wrap_output; __line_wrap_update;
+ __vfscanf; __vsscanf;
+
+ # variables in normal name space
+ stderr; stdin; stdout;
+
+ # c*
+ clearerr;
+
+ # f*
+ fclose; fcloseall; fdopen; feof; ferror; fflush; fgetc; fgetpos; fgets;
+ fileno; fmemopen; fopen; fopencookie; fputc; fputs; fread; freopen;
+ fseek; fsetpos; ftell; fwrite;
+
+ # g*
+ getc; getchar; getdelim; gets;
+
+ # l*
+ line_wrap_stream; line_unwrap_stream; line_wrapped; line_wrap_lmargin;
+ line_wrap_set_lmargin; line_wrap_rmargin; line_wrap_set_rmargin;
+ line_wrap_wmargin; line_wrap_set_wmargin; line_wrap_point;
+
+ # o*
+ open_memstream; open_obstack_stream; obstack_printf; obstack_vprintf;
+
+ # p*
+ pclose; popen; putc; putchar; puts;
+
+ # r*
+ rewind;
+
+ # s*
+ setbuf; setbuffer; setlinebuf; setvbuf;
+
+ # u*
+ ungetc;
+
+ # v*
+ vasprintf; vdprintf; vscanf; vsnprintf; vsprintf; vsscanf;
+ }
+ GLIBC_2.1 {
+ # functions used in other libraries
+ __asprintf;
}
}
diff --git a/versions.awk b/versions.awk
index 57660d235a..7565ee10ca 100644
--- a/versions.awk
+++ b/versions.awk
@@ -6,26 +6,24 @@
# Read definitions for the versions.
BEGIN {
nlibs=0;
- while (getline < "Versions.def") {
+ while (getline < defsfile) {
if (/^[a-zA-Z_]+ {/) {
libs[$1] = 1;
curlib = $1;
- while (getline < "Versions.def" && ! /^}/) {
+ while (getline < defsfile && ! /^}/) {
+ versions[$1] = 1;
if (NF > 1) {
- versions[$1] = 1;
- derived[curlib, $1] = (" " $2);
+ derived[curlib, $1] = " " $2;
for (n = 3; n <= NF; ++n) {
- derived[curlib, $1] = sprintf("%s, %s", derived[curlib, $1], $n);
+ derived[curlib, $1] = derived[curlib, $1] ", " $n;
}
- } else {
- versions[$1] = 1;
}
}
}
}
- close("Versions.def");
+ close(defsfile);
- tmpfile = (buildroot "/Versions.tmp");
+ tmpfile = (buildroot "Versions.tmp");
sort = ("sort -n >" tmpfile);
}
@@ -37,8 +35,8 @@ BEGIN {
# This matches the beginning of the version information for a new library.
/^[a-zA-Z_]+/ {
actlib = $1;
- if (libs[$1] != 1) {
- printf("no versions defined for %s\n", $1);
+ if (!libs[$1]) {
+ printf("no versions defined for %s\n", $1) > "/dev/stderr";
exit 1;
}
next;
@@ -47,8 +45,8 @@ BEGIN {
# This matches the beginning of a new version for the current library.
/^ [A-Za-z_]/ {
actver = $1;
- if (versions[$1] != 1) {
- printf("version %s not defined\n", $1);
+ if (!versions[$1]) {
+ printf("version %s not defined\n", $1) > "/dev/stderr";
exit 1;
}
next;
@@ -75,6 +73,7 @@ END {
close(sort);
oldlib="";
oldver="";
+ printf("all-version-maps =");
while(getline < tmpfile) {
if ($1 != oldlib) {
if (oldlib != "") {
@@ -85,6 +84,7 @@ END {
oldlib = $1;
outfile = (buildroot oldlib ".map");
firstinfile = 1;
+ printf(" $(common-objpfx)%s.map", oldlib);
}
if ($2 != oldver) {
if (oldver != "") {
@@ -99,7 +99,8 @@ END {
}
printf("\n") > outfile;
}
+ printf("\n");
closeversion(oldver);
close(outfile);
- rm tmpfile;
+ system("rm " tmpfile);
}