From 7ef90c1595a5687b5a48b789718ecd20742465bf Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 14 Sep 1998 11:43:26 +0000 Subject: Update. 1998-09-14 11:26 Ulrich Drepper * wcsmbs/wcsmbs-tst1.c: Include stdlib.h. 1998-09-14 Thorsten Kukuk * libc-work/nis/nss_nisplus/nisplus-service.c (_nss_nisplus_parse_servent): Convert port in network byte order. 1998-09-14 07:53 -0400 Zack Weinberg * stdlib/stdlib.h: Add a switch, __need_malloc_and_calloc, to provide only malloc and calloc. * include/stdlib.h: Support the above. * string/bits/string2.h: Use __need_malloc_and_calloc when including stdlib.h. (__string2_1bptr_p): Avoid -Wbad-function-cast warnings. * iconvdata/iso-2022-jp.c: Include . * iconvdata/iso646.c: Include . 1998-09-14 07:51 -0400 Zack Weinberg * sunrpc/rpc_cout.c: Add braces around ambiguous else. * sysdeps/libm-ieee754/w_pow.c: Likewise. * sysdeps/libm-ieee754/w_powf.c: Likewise. * sysdeps/libm-ieee754/w_powl.c: Likewise. 1998-09-14 07:57 -0400 Zack Weinberg * stdio-common/stdio_lim.h.in: New file. All parameters are adjustable at build time. * Rules: Add a rule to build bits/stdio_lim.h from stdio-common/stdio_lim.h.in. (It has to be in Rules so that all subdirectories know how to make the file. It can't be in Makerules because then it gets built at top level and the dependencies are wrong.) * stdio-common/Makefile (distribute): Add stdio_lim.h.in. * sysdeps/unix/sysv/linux/Makefile: Delete rules to make stdio_lim.h. * sysdeps/unix/sysv/linux/stdio_lim.h.in: Removed. * sysdeps/unix/sysv/linux/Dist: Take out stdio_lim.h.in. * sysdeps/posix/Makefile: Removed. * sysdeps/posix/mk-stdiolim.c: Removed. * sysdeps/generic/bits/stdio_lim.h: Removed. 1998-09-12 Andreas Schwab * argp/argp-help.c: Fixup indentation. * nss/nss_files/files-alias.c: Quiet -Wparentheses warning. * resolv/nss_dns/dns-network.c: Likewise. * resolv/res_send.c: Likewise. * rt/aio_cancel.c: Likewise. * rt/aio_misc.c: Likewise. 1998-09-12 Andreas Schwab * Makefile (install-symbolic-link): Remove the link list file at last. * Makerules (install-clean-symbolic-link-list): Removed. 1998-09-12 Andreas Schwab * timezone/tst-timezone.c: Print time in UTC to get consistent output. 1998-09-12 Andreas Schwab * elf/rtld.c (_dl_rpath): Removed. * elf/dl-support.c (_dl_path): Removed. * elf/Makefile ($(objpfx)ld.so): Don't pass -rpath. (CFLAGS-dl-support.c): Removed. * elf/dl-load.c (env_path_list): Renamed from fake_path_list. All uses changed. (_dl_init_paths): Always set env_path_list from LD_LIBRARY_PATH, instead of appending it to the main map's rpath info. (_dl_map_object): Consistently use LD_LIBRARY_PATH after all DT_RPATHs. This makes it effective again. (decompose_rpath): Remove second parameter, callers changed. (fillin_rpath): Allocate enough space in curwd. (expand_dynamic_string_token): Cope with get_origin returning -1. 1998-09-14 Thorsten Kukuk * libc-work/nis/nss_compat/compat-pwd.c: Add support for passwd.adjunct. * nis/nss_nis/nis-pwd.c (_nss_nis_getpwent_r): Correct test for invalid password. 1998-09-13 18:06 Ulrich Drepper * locale/programs/locale.c: Update dates. --- ChangeLog | 95 ++++++++++++++++++ Makefile | 1 + Makerules | 6 -- Rules | 44 +++++++++ argp/argp-help.c | 7 +- elf/Makefile | 10 +- elf/dl-load.c | 159 +++++++++--------------------- elf/dl-support.c | 4 - elf/rtld.c | 10 -- iconvdata/iso-2022-jp.c | 1 + iconvdata/iso646.c | 1 + include/stdlib.h | 9 ++ locale/programs/locale.c | 4 +- nis/nss_compat/compat-pwd.c | 93 +++++++++++++++++- nis/nss_nis/nis-pwd.c | 2 +- nis/nss_nisplus/nisplus-service.c | 2 +- nss/nss_files/files-alias.c | 10 +- resolv/nss_dns/dns-network.c | 28 +++--- resolv/res_send.c | 4 +- rt/aio_cancel.c | 36 +++---- rt/aio_misc.c | 12 ++- stdio-common/Makefile | 3 +- stdio-common/stdio_lim.h.in | 37 +++++++ stdlib/stdlib.h | 25 +++-- string/bits/string2.h | 32 +++--- sunrpc/rpc_cout.c | 175 +++++++++++++++++---------------- sysdeps/generic/bits/stdio_lim.h | 40 -------- sysdeps/libm-ieee754/w_pow.c | 5 +- sysdeps/libm-ieee754/w_powf.c | 5 +- sysdeps/libm-ieee754/w_powl.c | 5 +- sysdeps/posix/Makefile | 37 ------- sysdeps/posix/mk-stdiolim.c | 106 -------------------- sysdeps/unix/sysv/linux/Dist | 1 - sysdeps/unix/sysv/linux/Makefile | 27 ----- sysdeps/unix/sysv/linux/stdio_lim.h.in | 43 -------- timezone/tst-timezone.c | 4 +- wcsmbs/wcsmbs-tst1.c | 1 + 37 files changed, 527 insertions(+), 557 deletions(-) create mode 100644 stdio-common/stdio_lim.h.in delete mode 100644 sysdeps/generic/bits/stdio_lim.h delete mode 100644 sysdeps/posix/Makefile delete mode 100644 sysdeps/posix/mk-stdiolim.c delete mode 100644 sysdeps/unix/sysv/linux/stdio_lim.h.in diff --git a/ChangeLog b/ChangeLog index 2e34716..00d0704 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,98 @@ +1998-09-14 11:26 Ulrich Drepper + + * wcsmbs/wcsmbs-tst1.c: Include stdlib.h. + +1998-09-14 Thorsten Kukuk + + * libc-work/nis/nss_nisplus/nisplus-service.c + (_nss_nisplus_parse_servent): Convert port in network byte order. + +1998-09-14 07:53 -0400 Zack Weinberg + + * stdlib/stdlib.h: Add a switch, __need_malloc_and_calloc, + to provide only malloc and calloc. + * include/stdlib.h: Support the above. + * string/bits/string2.h: Use __need_malloc_and_calloc when + including stdlib.h. + (__string2_1bptr_p): Avoid -Wbad-function-cast warnings. + + * iconvdata/iso-2022-jp.c: Include . + * iconvdata/iso646.c: Include . + +1998-09-14 07:51 -0400 Zack Weinberg + + * sunrpc/rpc_cout.c: Add braces around ambiguous else. + * sysdeps/libm-ieee754/w_pow.c: Likewise. + * sysdeps/libm-ieee754/w_powf.c: Likewise. + * sysdeps/libm-ieee754/w_powl.c: Likewise. + +1998-09-14 07:57 -0400 Zack Weinberg + + * stdio-common/stdio_lim.h.in: New file. All parameters + are adjustable at build time. + * Rules: Add a rule to build bits/stdio_lim.h from + stdio-common/stdio_lim.h.in. (It has to be in Rules so that + all subdirectories know how to make the file. It can't be + in Makerules because then it gets built at top level and the + dependencies are wrong.) + + * stdio-common/Makefile (distribute): Add stdio_lim.h.in. + * sysdeps/unix/sysv/linux/Makefile: Delete rules to make + stdio_lim.h. + * sysdeps/unix/sysv/linux/stdio_lim.h.in: Removed. + * sysdeps/unix/sysv/linux/Dist: Take out stdio_lim.h.in. + * sysdeps/posix/Makefile: Removed. + * sysdeps/posix/mk-stdiolim.c: Removed. + * sysdeps/generic/bits/stdio_lim.h: Removed. + +1998-09-12 Andreas Schwab + + * argp/argp-help.c: Fixup indentation. + * nss/nss_files/files-alias.c: Quiet -Wparentheses warning. + * resolv/nss_dns/dns-network.c: Likewise. + * resolv/res_send.c: Likewise. + * rt/aio_cancel.c: Likewise. + * rt/aio_misc.c: Likewise. + +1998-09-12 Andreas Schwab + + * Makefile (install-symbolic-link): Remove the link list file at last. + * Makerules (install-clean-symbolic-link-list): Removed. + +1998-09-12 Andreas Schwab + + * timezone/tst-timezone.c: Print time in UTC to get consistent + output. + +1998-09-12 Andreas Schwab + + * elf/rtld.c (_dl_rpath): Removed. + * elf/dl-support.c (_dl_path): Removed. + * elf/Makefile ($(objpfx)ld.so): Don't pass -rpath. + (CFLAGS-dl-support.c): Removed. + + * elf/dl-load.c (env_path_list): Renamed from fake_path_list. All + uses changed. + (_dl_init_paths): Always set env_path_list from LD_LIBRARY_PATH, + instead of appending it to the main map's rpath info. + (_dl_map_object): Consistently use LD_LIBRARY_PATH after all + DT_RPATHs. This makes it effective again. + (decompose_rpath): Remove second parameter, callers changed. + (fillin_rpath): Allocate enough space in curwd. + (expand_dynamic_string_token): Cope with get_origin returning -1. + +1998-09-14 Thorsten Kukuk + + * libc-work/nis/nss_compat/compat-pwd.c: Add support for + passwd.adjunct. + + * nis/nss_nis/nis-pwd.c (_nss_nis_getpwent_r): Correct test for + invalid password. + +1998-09-13 18:06 Ulrich Drepper + + * locale/programs/locale.c: Update dates. + 1998-09-13 Mark Kettenis * sysdeps/generic/bits/types.h: Include . Make sure diff --git a/Makefile b/Makefile index 45c9058..21ae9d5 100644 --- a/Makefile +++ b/Makefile @@ -101,6 +101,7 @@ install: install-symbolic-link .PHONY: install-symbolic-link install-symbolic-link: subdir_install $(symbolic-link-prog) $(symbolic-link-list) + rm -f $(symbolic-link-list) install: -test ! -x $(common-objpfx)elf/ldconfig || \ diff --git a/Makerules b/Makerules index c17ea78..2e724fa 100644 --- a/Makerules +++ b/Makerules @@ -651,14 +651,8 @@ endif ifeq (no,$(cross-compiling)) ifeq (yes,$(build-shared)) -# We need to clean the symbolic link list first. symbolic-link-prog := $(common-objpfx)elf/sln symbolic-link-list := $(common-objpfx)elf/symlink.list -install: install-clean-symbolic-link-list -.PHONY: install-clean-symbolic-link-list -install-clean-symbolic-link-list: - rm -f $(symbolic-link-list) - define make-shlib-link echo $(> $(symbolic-link-list) endef diff --git a/Rules b/Rules index b401c31..9c61b84 100644 --- a/Rules +++ b/Rules @@ -200,3 +200,47 @@ $(common-objpfx)dummy$o: $(common-objpfx)dummy.c $(before-compile); endef object-suffixes-left := $(object-suffixes) include $(o-iterator) + +# There's no good place to put this - here will do. +# The dependencies are wrong if it's run from the top level. +ifeq ($(filter %posix, $(sysdirs)),) +L_tmpnam = 1 +TMP_MAX = 0 +L_ctermid = 1 +L_cuserid = 1 +else +L_tmpnam = 19 +TMP_MAX = 238328 +L_ctermid = 9 +L_cuserid = 9 +endif + +$(common-objpfx)bits/stdio_%.h $(common-objpfx)bits/stdio_%.d: \ + $(..)stdio-common/stdio_%.h.in + $(make-target-directory) + echo '#include "$(..)posix/bits/posix1_lim.h"' | \ + SUNPRO_DEPENDENCIES='$(@:.h=.d)T MARKER' \ + $(CC) $(+includes) -E -dM -xc - -o $(@:.d=.h)T + sed -e 's!MARKER!$(@:.h=.d) $(@:.d=.h)!' \ + -e 's!$(common-objpfx)!$$(common-objpfx)!g' \ + $(@:.h=.d)T > $(@:.h=.d)t && \ + mv -f $(@:.h=.d)t $(@:.h=.d) + fopen_max=`sed -n 's/^#define OPEN_MAX //p' $(@:.d=.h)T`; \ + filename_max=`sed -n 's/^#define PATH_MAX //p' $(@:.d=.h)T`; \ + fopen_max=$${fopen_max:-16}; \ + filename_max=$${filename_max:-1024}; \ + sed -e "s/@FOPEN_MAX@/$$fopen_max/" \ + -e "s/@FILENAME_MAX@/$$filename_max/" \ + -e "s/@L_tmpnam@/$(L_tmpnam)/" \ + -e "s/@TMP_MAX@/$(TMP_MAX)/" \ + -e "s/@L_ctermid@/$(L_ctermid)/" \ + -e "s/@L_cuserid@/$(L_cuserid)/" \ + $< > $(@:.d=.h).new && \ + mv -f $(@:.d=.h).new $(@:.d=.h); \ +# Remove these last so that they can be examined if something went wrong. + rm -f $(@:.d=.h)T $(@:.h=.d)T +# Get dependencies. +ifndef no_deps +-include $(common-objpfx)bits/stdio_lim.d +endif +common-generated += bits/stdio_lim.h bits/stdio_lim.d diff --git a/argp/argp-help.c b/argp/argp-help.c index 9a1c053..a3a1a12 100644 --- a/argp/argp-help.c +++ b/argp/argp-help.c @@ -833,11 +833,12 @@ hol_append (struct hol *hol, struct hol *more) __mempcpy (short_options, hol->short_options, hol_so_len); - /* Fix up the short options pointers from HOL. */ + /* Fix up the short options pointers from HOL. */ for (e = entries, left = hol->num_entries; left > 0; e++, left--) e->short_options += (short_options - hol->short_options); - /* Now add the short options from MORE, fixing up its entries too. */ + /* Now add the short options from MORE, fixing up its entries + too. */ so = short_options + hol_so_len; more_so = more->short_options; for (left = more->num_entries; left > 0; e++, left--) @@ -872,7 +873,7 @@ hol_append (struct hol *hol, struct hol *more) hol->num_entries = num_entries; hol->short_options = short_options; } - } + } hol_free (more); } diff --git a/elf/Makefile b/elf/Makefile index 7f2201d..ddd9d22 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -116,13 +116,9 @@ endif $(objpfx)ld.so: $(objpfx)librtld.os $(addprefix $(objpfx),$(rtld-ldscript)) \ $(ld-map) - $(LINK.o) -nostdlib -nostartfiles -shared -o $@ \ - -Wl,-rpath=$(default-rpath) $(LDFLAGS-rtld) \ - $(filter-out $(rtld-ldscript) $(map-file),$^) \ - $(load-map-file) -Wl,-soname=$(rtld-installed-name) - -# The dl code in the static libc needs a default library path. -CFLAGS-dl-support.c = -D'DEFAULT_RPATH="$(default-rpath)"' + $(LINK.o) -nostdlib -nostartfiles -shared -o $@ $(LDFLAGS-rtld) \ + $(filter-out $(rtld-ldscript) $(map-file),$^) \ + $(load-map-file) -Wl,-soname=$(rtld-installed-name) # interp.c exists just to get this string into the libraries. CFLAGS-interp.c = -D'RUNTIME_LINKER="$(slibdir)/$(rtld-installed-name)"' diff --git a/elf/dl-load.c b/elf/dl-load.c index b93258e..cb0a4ff 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -99,9 +99,8 @@ size_t _dl_pagesize; extern const char *_dl_platform; extern size_t _dl_platformlen; -/* This is a fake list to store the RPATH information for static - binaries. */ -static struct r_search_path_elem **fake_path_list; +/* This is the decomposed LD_LIBRARY_PATH search path. */ +static struct r_search_path_elem **env_path_list; /* List of the hardware capabilities we might end up using. */ static const struct r_strlenpair *capstr; @@ -175,7 +174,8 @@ expand_dynamic_string_token (struct link_map *l, const char *s) { assert (l->l_name[0] == '\0'); l->l_origin = get_origin (); - origin_len = l->l_origin ? strlen (l->l_origin) : 0; + origin_len = (l->l_origin && l->l_origin != (char *) -1 + ? strlen (l->l_origin) : 0); } else origin_len = l->l_origin == (char *) -1 ? 0 : strlen (l->l_origin); @@ -293,8 +293,8 @@ fillin_rpath (char *rpath, struct r_search_path_elem **result, const char *sep, interpreted as `use the current directory'. */ if (len == 0) { - static char curwd[2]; - cp = strcpy (curwd, "."); + static char curwd[] = "./"; + cp = curwd; } /* Remove trailing slashes (except for "/"). */ @@ -388,7 +388,7 @@ fillin_rpath (char *rpath, struct r_search_path_elem **result, const char *sep, static struct r_search_path_elem ** internal_function -decompose_rpath (const char *rpath, size_t additional_room, struct link_map *l) +decompose_rpath (const char *rpath, struct link_map *l) { /* Make a copy we can work with. */ const char *where = l->l_name; @@ -410,7 +410,7 @@ decompose_rpath (const char *rpath, size_t additional_room, struct link_map *l) /* This object is on the list of objects for which the RPATH must not be used. */ result = (struct r_search_path_elem **) - malloc ((additional_room + 1) * sizeof (*result)); + malloc (sizeof (*result)); if (result == NULL) _dl_signal_error (ENOMEM, NULL, "cannot create cache for search path"); @@ -433,10 +433,9 @@ decompose_rpath (const char *rpath, size_t additional_room, struct link_map *l) if (*cp == ':') ++nelems; - /* Allocate room for the result. NELEMS + 1 + ADDITIONAL_ROOM is an upper - limit for the number of necessary entries. */ - result = (struct r_search_path_elem **) malloc ((nelems + 1 - + additional_room + 1) + /* Allocate room for the result. NELEMS + 1 is an upper limit for the + number of necessary entries. */ + result = (struct r_search_path_elem **) malloc ((nelems + 1 + 1) * sizeof (*result)); if (result == NULL) _dl_signal_error (ENOMEM, NULL, "cannot create cache for search path"); @@ -458,32 +457,9 @@ _dl_init_paths (const char *llp) struct r_search_path_elem *pelem, **aelem; size_t round_size; -#ifdef PIC - /* We have in `search_path' the information about the RPATH of the - dynamic loader. Now fill in the information about the applications - RPATH and the directories addressed by the LD_LIBRARY_PATH environment - variable. */ + /* Fill in the information about the application's RPATH and the + directories addressed by the LD_LIBRARY_PATH environment variable. */ struct link_map *l; -#endif - - /* Number of elements in the library path. */ - size_t nllp; - - /* First determine how many elements the LD_LIBRARY_PATH contents has. */ - if (llp != NULL && *llp != '\0') - { - /* Simply count the number of colons. */ - const char *cp = llp; - nllp = 1; - while (*cp) - { - if (*cp == ':' || *cp == ';') - ++nllp; - ++cp; - } - } - else - nllp = 0; /* Get the capabilities. */ capstr = _dl_important_hwcaps (_dl_platform, _dl_platformlen, @@ -533,81 +509,44 @@ _dl_init_paths (const char *llp) l = _dl_loaded; if (l != NULL) { - /* We should never get here when initializing in a static application. - If this is a dynamically linked application _dl_loaded always - points to the main map which is not dlopen()ed. */ assert (l->l_type != lt_loaded); if (l->l_info[DT_RPATH]) - { - /* Allocate room for the search path and fill in information - from RPATH. */ - l->l_rpath_dirs = - decompose_rpath ((const char *) - (l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr - + l->l_info[DT_RPATH]->d_un.d_val), - nllp, l); - } + /* Allocate room for the search path and fill in information + from RPATH. */ + l->l_rpath_dirs = + decompose_rpath ((const char *) + (l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr + + l->l_info[DT_RPATH]->d_un.d_val), l); else - { - /* If we have no LD_LIBRARY_PATH and no RPATH we must tell - this somehow to prevent we look this up again and again. */ - if (nllp == 0) - l->l_rpath_dirs = (struct r_search_path_elem **) -1l; - else - { - l->l_rpath_dirs = (struct r_search_path_elem **) - malloc ((nllp + 1) * sizeof (*l->l_rpath_dirs)); - if (l->l_rpath_dirs == NULL) - _dl_signal_error (ENOMEM, NULL, - "cannot create cache for search path"); - l->l_rpath_dirs[0] = NULL; - } - } - - /* We don't need to search the list of fake entries which is searched - when no dynamic objects were loaded at this time. */ - fake_path_list = NULL; - - if (nllp > 0) - { - char *copy = local_strdup (llp); - - /* Decompose the LD_LIBRARY_PATH and fill in the result. - First search for the next place to enter elements. */ - struct r_search_path_elem **result = l->l_rpath_dirs; - while (*result != NULL) - ++result; - - /* We need to take care that the LD_LIBRARY_PATH environment - variable can contain a semicolon. */ - (void) fillin_rpath (copy, result, ":;", - __libc_enable_secure ? system_dirs : NULL, - "LD_LIBRARY_PATH", NULL); - } + l->l_rpath_dirs = NULL; } - else #endif /* PIC */ + + if (llp != NULL && *llp != '\0') { - /* This is a statically linked program but we still have to take - care for the LD_LIBRARY_PATH environment variable. We use a fake - link_map entry. This will only contain the l_rpath_dirs - information. */ + size_t nllp; + const char *cp = llp; - if (nllp == 0) - fake_path_list = NULL; - else + /* Decompose the LD_LIBRARY_PATH contents. First determine how many + elements it has. */ + nllp = 1; + while (*cp) { - fake_path_list = (struct r_search_path_elem **) - malloc ((nllp + 1) * sizeof (struct r_search_path_elem *)); - if (fake_path_list == NULL) - _dl_signal_error (ENOMEM, NULL, - "cannot create cache for search path"); - - (void) fillin_rpath (local_strdup (llp), fake_path_list, ":;", - __libc_enable_secure ? system_dirs : NULL, - "LD_LIBRARY_PATH", NULL); + if (*cp == ':' || *cp == ';') + ++nllp; + ++cp; } + + env_path_list = (struct r_search_path_elem **) + malloc ((nllp + 1) * sizeof (struct r_search_path_elem *)); + if (env_path_list == NULL) + _dl_signal_error (ENOMEM, NULL, + "cannot create cache for search path"); + + (void) fillin_rpath (local_strdup (llp), env_path_list, ":;", + __libc_enable_secure ? system_dirs : NULL, + "LD_LIBRARY_PATH", NULL); } } @@ -1243,25 +1182,23 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded, + l->l_info[DT_STRTAB]->d_un.d_ptr + l->l_info[DT_RPATH]->d_un.d_val); l->l_rpath_dirs = - decompose_rpath ((const char *) ptrval, 0, l); + decompose_rpath ((const char *) ptrval, l); } - if (l->l_rpath_dirs != (struct r_search_path_elem **) -1l) + if (l->l_rpath_dirs != NULL) fd = open_path (name, namelen, preloaded, l->l_rpath_dirs, &realname); } - /* If dynamically linked, try the DT_RPATH of the executable itself - and the LD_LIBRARY_PATH environment variable. */ + /* If dynamically linked, try the DT_RPATH of the executable itself. */ l = _dl_loaded; if (fd == -1 && l && l->l_type != lt_loaded && l != loader - && l->l_rpath_dirs != (struct r_search_path_elem **) -1l) + && l->l_rpath_dirs != NULL) fd = open_path (name, namelen, preloaded, l->l_rpath_dirs, &realname); - /* This is used if a static binary uses dynamic loading and there - is a LD_LIBRARY_PATH given. */ - if (fd == -1 && fake_path_list != NULL) - fd = open_path (name, namelen, preloaded, fake_path_list, &realname); + /* Try the LD_LIBRARY_PATH environment variable. */ + if (fd == -1 && env_path_list != NULL) + fd = open_path (name, namelen, preloaded, env_path_list, &realname); if (fd == -1) { diff --git a/elf/dl-support.c b/elf/dl-support.c index 76af188..1126d46 100644 --- a/elf/dl-support.c +++ b/elf/dl-support.c @@ -29,10 +29,6 @@ extern char *__progname; char **_dl_argv = &__progname; /* This is checked for some error messages. */ -/* This defines the default search path for libraries. - For the dynamic linker it is set by -rpath when linking. */ -const char *_dl_rpath = DEFAULT_RPATH; - /* Name of the architecture. */ const char *_dl_platform; size_t _dl_platformlen; diff --git a/elf/rtld.c b/elf/rtld.c index 7216c19..7c2e054 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -69,7 +69,6 @@ static void process_envvars (enum mode *modep, int *lazyp); int _dl_argc; char **_dl_argv; unsigned int _dl_skip_args; /* Nonzero if we were run directly. */ -const char *_dl_rpath; int _dl_verbose; const char *_dl_platform; size_t _dl_platformlen; @@ -164,15 +163,6 @@ _dl_start (void *arg) sizeof _dl_rtld_map.l_info); _dl_setup_hash (&_dl_rtld_map); - /* Cache the DT_RPATH stored in ld.so itself; this will be - the default search path. */ - if (_dl_rtld_map.l_info[DT_STRTAB] && _dl_rtld_map.l_info[DT_RPATH]) - { - _dl_rpath = (void *) (_dl_rtld_map.l_addr + - _dl_rtld_map.l_info[DT_STRTAB]->d_un.d_ptr + - _dl_rtld_map.l_info[DT_RPATH]->d_un.d_val); - } - /* Don't bother trying to work out how ld.so is mapped in memory. */ _dl_rtld_map.l_map_start = ~0; _dl_rtld_map.l_map_end = ~0; diff --git a/iconvdata/iso-2022-jp.c b/iconvdata/iso-2022-jp.c index 3872988..9aeaad6 100644 --- a/iconvdata/iso-2022-jp.c +++ b/iconvdata/iso-2022-jp.c @@ -20,6 +20,7 @@ #include #include +#include #include #include "jis0201.h" #include "jis0208.h" diff --git a/iconvdata/iso646.c b/iconvdata/iso646.c index af1479a..9888208 100644 --- a/iconvdata/iso646.c +++ b/iconvdata/iso646.c @@ -33,6 +33,7 @@ #include #include +#include #include /* Definitions used in the body of the `gconv' function. */ diff --git a/include/stdlib.h b/include/stdlib.h index 7424243..c15d364 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -1,7 +1,13 @@ #ifndef _STDLIB_H + +#ifdef __need_malloc_and_calloc +#define __Need_M_And_C +#endif + #include /* Now define the internal interfaces. */ +#ifndef __Need_M_And_C extern int32_t __random __P ((void)); extern void __srandom __P ((unsigned int __seed)); extern __ptr_t __initstate __P ((unsigned int __seed, __ptr_t __statebuf, @@ -41,3 +47,6 @@ extern char *__realpath __P ((__const char *__name, char *__resolved)); extern int __ptsname_r __P ((int __fd, char *__buf, size_t __buflen)); extern int __getpt __P ((void)); #endif +#undef __Need_M_And_C + +#endif /* include/stdlib.h */ diff --git a/locale/programs/locale.c b/locale/programs/locale.c index 93818e0..c51c0a1 100644 --- a/locale/programs/locale.c +++ b/locale/programs/locale.c @@ -1,5 +1,5 @@ /* Implementation of the locale program according to POSIX 9945-2. - Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -268,7 +268,7 @@ print_version (FILE *stream, struct argp_state *state) Copyright (C) %s Free Software Foundation, Inc.\n\ This is free software; see the source for copying conditions. There is NO\n\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ -"), "1995, 1996, 1997"); +"), "1995, 1996, 1997, 1998"); fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); } diff --git a/nis/nss_compat/compat-pwd.c b/nis/nss_compat/compat-pwd.c index 4cbf739..f4e0720 100644 --- a/nis/nss_compat/compat-pwd.c +++ b/nis/nss_compat/compat-pwd.c @@ -186,6 +186,62 @@ copy_pwd_changes (struct passwd *dest, struct passwd *src, } static enum nss_status +insert_passwd_adjunct (char **result, int *len, char *domain, int *errnop) +{ + char *p1, *p2, *result2, *res; + int len2; + size_t namelen; + + /* Check for adjunct style secret passwords. They can be + recognized by a password starting with "##". */ + p1 = strchr (*result, ':'); + if (p1 == NULL || p1[1] != '#' || p1[2] != '#') + return NSS_STATUS_SUCCESS; + p2 = strchr (p1 + 3, ':'); + + namelen = p2 - p1 - 3; + + if (yp_match (domain, "passwd.adjunct.byname", &p1[3], 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) + { + /* 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); + return NSS_STATUS_SUCCESS; + } + + restlen = *len - (p2 - *result); + if ((res = malloc (namelen + restlen + (endp - encrypted) + 2)) == NULL) + { + free (result2); + *errnop = ENOMEM; + return NSS_STATUS_TRYAGAIN; + } + + __mempcpy (__mempcpy (__mempcpy (__mempcpy + (res, *result, (p1 - *result)), + ":", 1), + encrypted, endp - encrypted), + p2, restlen + 1); + + free (result2); + free (*result); + *result = res; + *len = strlen (res); + } + return NSS_STATUS_SUCCESS; +} + +static enum nss_status internal_setpwent (ent_t *ent) { enum nss_status status = NSS_STATUS_SUCCESS; @@ -403,6 +459,13 @@ getpwent_next_nis_netgr (const char *name, struct passwd *result, ent_t *ent, != YPERR_SUCCESS) continue; + if (insert_passwd_adjunct (&outval, &outvallen, ypdomain, errnop) + != NSS_STATUS_SUCCESS) + { + free (outval); + return NSS_STATUS_TRYAGAIN; + } + p2len = pwd_need_buflen (&ent->pwd); if (p2len > buflen) { @@ -659,6 +722,13 @@ getpwent_next_nis (struct passwd *result, ent_t *ent, char *buffer, return NSS_STATUS_UNAVAIL; } + if (insert_passwd_adjunct (&outval, &outvallen, domain, errnop) != + NSS_STATUS_SUCCESS) + { + free (outval); + return NSS_STATUS_TRYAGAIN; + } + if (buflen < ((size_t) outvallen + 1)) { free (outval); @@ -685,6 +755,13 @@ getpwent_next_nis (struct passwd *result, ent_t *ent, char *buffer, return NSS_STATUS_NOTFOUND; } + if (insert_passwd_adjunct (&outval, &outvallen, domain, errnop) + != NSS_STATUS_SUCCESS) + { + free (outval); + return NSS_STATUS_TRYAGAIN; + } + if (buflen < ((size_t) outvallen + 1)) { free (outval); @@ -796,6 +873,13 @@ getpwnam_plususer (const char *name, struct passwd *result, char *buffer, return NSS_STATUS_NOTFOUND; } + if (insert_passwd_adjunct (&outval, &outvallen, domain, errnop) + != NSS_STATUS_SUCCESS) + { + free (outval); + return NSS_STATUS_TRYAGAIN; + } + if (buflen < ((size_t) outvallen + 1)) { free (outval); @@ -1307,7 +1391,14 @@ getpwuid_plususer (uid_t uid, struct passwd *result, char *buffer, return NSS_STATUS_TRYAGAIN; } - if ( buflen < ((size_t) outvallen + 1)) + if (insert_passwd_adjunct (&outval, &outvallen, domain, errnop) + != NSS_STATUS_SUCCESS) + { + free (outval); + return NSS_STATUS_TRYAGAIN; + } + + if (buflen < ((size_t) outvallen + 1)) { free (outval); *errnop = ERANGE; diff --git a/nis/nss_nis/nis-pwd.c b/nis/nss_nis/nis-pwd.c index c0acaa1..0a337bb 100644 --- a/nis/nss_nis/nis-pwd.c +++ b/nis/nss_nis/nis-pwd.c @@ -128,7 +128,7 @@ internal_nis_getpwent_r (struct passwd *pwd, char *buffer, size_t buflen, char *endp; size_t restlen; - if (encrypted != NULL + if (encrypted == NULL || (endp = strchr (++encrypted, ':')) == NULL || (p = strchr (p + 1, ':')) == NULL) { diff --git a/nis/nss_nisplus/nisplus-service.c b/nis/nss_nisplus/nisplus-service.c index 04fed59..6dfae5e 100644 --- a/nis/nss_nisplus/nisplus-service.c +++ b/nis/nss_nisplus/nisplus-service.c @@ -80,7 +80,7 @@ _nss_nisplus_parse_servent (nis_result *result, struct servent *serv, room_left -= strlen (first_unused) + 1; first_unused += strlen (first_unused) + 1; - serv->s_port = atoi (NISENTRYVAL (0, 3, result)); + serv->s_port = htons (atoi (NISENTRYVAL (0, 3, result))); p = first_unused; line = p; diff --git a/nss/nss_files/files-alias.c b/nss/nss_files/files-alias.c index 2d6e15c..b18361f 100644 --- a/nss/nss_files/files-alias.c +++ b/nss/nss_files/files-alias.c @@ -382,10 +382,12 @@ _nss_files_getaliasent_r (struct aliasent *result, char *buffer, size_t buflen, /* If the last use was not by the getent function we need the position the stream. */ if (last_use != getent) - if (fsetpos (stream, &position) < 0) - status = NSS_STATUS_UNAVAIL; - else - last_use = getent; + { + if (fsetpos (stream, &position) < 0) + status = NSS_STATUS_UNAVAIL; + else + last_use = getent; + } if (status == NSS_STATUS_SUCCESS) { diff --git a/resolv/nss_dns/dns-network.c b/resolv/nss_dns/dns-network.c index 61f6f90..e9a4b91 100644 --- a/resolv/nss_dns/dns-network.c +++ b/resolv/nss_dns/dns-network.c @@ -231,19 +231,21 @@ getanswer_r (const querybuf *answer, int anslen, struct netent *result, char *ans; if (question_count == 0) - /* FIXME: the Sun version uses for host name lookup an additional - parameter for pointing to h_errno. this is missing here. - OSF/1 has a per-thread h_errno variable. */ - if (header_pointer->aa != 0) - { - __set_h_errno (HOST_NOT_FOUND); - return NSS_STATUS_NOTFOUND; - } - else - { - __set_h_errno (TRY_AGAIN); - return NSS_STATUS_TRYAGAIN; - } + { + /* FIXME: the Sun version uses for host name lookup an additional + parameter for pointing to h_errno. this is missing here. + OSF/1 has a per-thread h_errno variable. */ + if (header_pointer->aa != 0) + { + __set_h_errno (HOST_NOT_FOUND); + return NSS_STATUS_NOTFOUND; + } + else + { + __set_h_errno (TRY_AGAIN); + return NSS_STATUS_TRYAGAIN; + } + } /* Skip the question part. */ while (question_count-- > 0) diff --git a/resolv/res_send.c b/resolv/res_send.c index 0c78468..608659b 100644 --- a/resolv/res_send.c +++ b/resolv/res_send.c @@ -782,12 +782,12 @@ read_len: } /*foreach ns*/ } /*foreach retry*/ res_close(); - if (!v_circuit) + if (!v_circuit) { if (!gotsomewhere) __set_errno (ECONNREFUSED); /* no nameservers found */ else __set_errno (ETIMEDOUT); /* no answer obtained */ - else + } else __set_errno (terrno); return (-1); } diff --git a/rt/aio_cancel.c b/rt/aio_cancel.c index 645ae16..8a23353 100644 --- a/rt/aio_cancel.c +++ b/rt/aio_cancel.c @@ -106,24 +106,26 @@ aio_cancel (fildes, aiocbp) /* If any request is worked on by a thread it must be the first. So either we can delete all requests or all but the first. */ if (req != NULL) - if (req->running == allocated) - { - struct requestlist *old = req; - req = req->next_prio; - old->next_prio = NULL; + { + if (req->running == allocated) + { + struct requestlist *old = req; + req = req->next_prio; + old->next_prio = NULL; - result = AIO_NOTCANCELED; - } - else - { - /* Remove entry from the file descriptor list. */ - if (req->last_fd != NULL) - req->last_fd->next_fd = req->next_fd; - if (req->next_fd != NULL) - req->next_fd->last_fd = req->last_fd; - - result = AIO_CANCELED; - } + result = AIO_NOTCANCELED; + } + else + { + /* Remove entry from the file descriptor list. */ + if (req->last_fd != NULL) + req->last_fd->next_fd = req->next_fd; + if (req->next_fd != NULL) + req->next_fd->last_fd = req->last_fd; + + result = AIO_CANCELED; + } + } } /* Mark requests as canceled and send signal. */ diff --git a/rt/aio_misc.c b/rt/aio_misc.c index 0148705..1688a15 100644 --- a/rt/aio_misc.c +++ b/rt/aio_misc.c @@ -162,11 +162,13 @@ __aio_find_req (aiocb_union *elem) runp = runp->next_fd; if (runp != NULL) - if (runp->aiocbp->aiocb.aio_fildes != fildes) - runp = NULL; - else - while (runp != NULL && runp->aiocbp != elem) - runp = runp->next_prio; + { + if (runp->aiocbp->aiocb.aio_fildes != fildes) + runp = NULL; + else + while (runp != NULL && runp->aiocbp != elem) + runp = runp->next_prio; + } return runp; } diff --git a/stdio-common/Makefile b/stdio-common/Makefile index dba0335..183f140 100644 --- a/stdio-common/Makefile +++ b/stdio-common/Makefile @@ -37,7 +37,7 @@ routines := \ lockfile aux := errlist siglist -distribute := _itoa.h printf-parse.h +distribute := _itoa.h printf-parse.h stdio_lim.h.in tests := tst-printf tstscanf test_rdwr test-popen tstgetln test-fseek \ temptest tst-fileno test-fwrite tst-ungetc tst-ferror \ @@ -46,7 +46,6 @@ tests := tst-printf tstscanf test_rdwr test-popen tstgetln test-fseek \ tfformat tiformat tstdiomisc tst-printfsz tst-wc-printf \ scanf1 scanf2 scanf3 scanf4 scanf5 scanf7 scanf8 scanf9 scanf10 - include ../Rules CFLAGS-vfprintf.c = -Wno-uninitialized diff --git a/stdio-common/stdio_lim.h.in b/stdio-common/stdio_lim.h.in new file mode 100644 index 0000000..957fac6 --- /dev/null +++ b/stdio-common/stdio_lim.h.in @@ -0,0 +1,37 @@ +/* Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#if !defined _STDIO_H && !defined __need_FOPEN_MAX +# error "Never include directly; use instead." +#endif + +#ifdef _STDIO_H +# define L_tmpnam @L_tmpnam@ +# define TMP_MAX @TMP_MAX@ +# define FILENAME_MAX @FILENAME_MAX@ + +# ifdef __USE_POSIX +# define L_ctermid @L_ctermid@ +# define L_cuserid @L_cuserid@ +# endif +#endif + +#if defined __need_FOPEN_MAX || defined _STDIO_H +# undef FOPEN_MAX +# define FOPEN_MAX @FOPEN_MAX@ +#endif diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h index 49374bd..e577fb7 100644 --- a/stdlib/stdlib.h +++ b/stdlib/stdlib.h @@ -21,18 +21,22 @@ */ #ifndef _STDLIB_H -#define _STDLIB_H 1 #include /* Get size_t, wchar_t and NULL from . */ -#define __need_size_t -#define __need_wchar_t -#define __need_NULL +#define __need_size_t +#ifndef __need_malloc_and_calloc +# define __need_wchar_t +# define __need_NULL +#endif #include __BEGIN_DECLS +#ifndef __need_malloc_and_calloc +#define _STDLIB_H 1 + /* Returned by `div'. */ typedef struct { @@ -440,14 +444,20 @@ extern int lcong48_r __P ((unsigned short int __param[7], # endif /* Use misc. */ #endif /* Use SVID or X/Open. */ +#endif /* don't just need malloc and calloc */ +#ifndef __malloc_and_calloc_defined +#define __malloc_and_calloc_defined /* Allocate SIZE bytes of memory. */ extern __ptr_t malloc __P ((size_t __size)); +/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */ +extern __ptr_t calloc __P ((size_t __nmemb, size_t __size)); +#endif + +#ifndef __need_malloc_and_calloc /* Re-allocate the previously allocated block in __ptr_t, making the new block SIZE bytes long. */ extern __ptr_t realloc __P ((__ptr_t __ptr, size_t __size)); -/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */ -extern __ptr_t calloc __P ((size_t __nmemb, size_t __size)); /* Free a block allocated by `malloc', `realloc' or `calloc'. */ extern void free __P ((__ptr_t __ptr)); @@ -720,6 +730,9 @@ extern int ptsname_r __P ((int __fd, char *__buf, size_t __buflen)); extern int getpt __P ((void)); #endif +#endif /* don't just need malloc and calloc */ +#undef __need_malloc_and_calloc + __END_DECLS #endif /* stdlib.h */ diff --git a/string/bits/string2.h b/string/bits/string2.h index 0d37803..8051c48 100644 --- a/string/bits/string2.h +++ b/string/bits/string2.h @@ -85,11 +85,12 @@ __STRING2_COPY_TYPE (8); # undef __STRING2_COPY_TYPE #endif -/* Dereferencing a pointer arg to run sizeof on it fails for the - void pointer case, so we use this instead. Note that the argument - must not contain any side effects. */ -#define __string2_1bptr_p(x) (((size_t) ((x) + 1) - (size_t) (x)) == 1) - +/* Dereferencing a pointer arg to run sizeof on it fails for the void + pointer case, so we use this instead. + Note that __x is evaluated twice. */ +#define __string2_1bptr_p(__x) \ + (({ const void *__a, *__b; __a = (__x) + 1; __b = (__x); \ + (size_t)__a - (size_t)__b; }) == 1) /* Set N bytes of S to C. */ #ifndef _HAVE_STRING_ARCH_memset @@ -862,12 +863,17 @@ __strsep_g (char **__s, __const char *__reject) # endif #endif +/* We need the memory allocation functions for inline strdup(). + Referring to stdlib.h (even minimally) is not allowed if + __STRICT_ANSI__. */ +#ifndef __STRICT_ANSI__ -#if !defined _HAVE_STRING_ARCH_strdup && !defined __STRICT_ANSI__ - -/* We need the memory allocation functions. Including this header is - not allowed. */ +#if !defined _HAVE_STRING_ARCH_strdup || !defined _HAVE_STRING_ARCH_strndup +# define __need_malloc_and_calloc # include +#endif + +#ifndef _HAVE_STRING_ARCH_strdup # define __strdup(s) \ (__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s) \ @@ -885,12 +891,7 @@ __strsep_g (char **__s, __const char *__reject) # endif #endif - -#if !defined _HAVE_STRING_ARCH_strndup && !defined __STRICT_ANSI__ - -/* We need the memory allocation functions. Including this header is - not allowed. */ -# include +#ifndef _HAVE_STRING_ARCH_strndup # define __strndup(s, n) \ (__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s) \ @@ -916,6 +917,7 @@ __strsep_g (char **__s, __const char *__reject) # endif #endif +#endif /* Strict ANSI */ #undef __STRING_INLINE diff --git a/sunrpc/rpc_cout.c b/sunrpc/rpc_cout.c index a9da54e..541be6e 100644 --- a/sunrpc/rpc_cout.c +++ b/sunrpc/rpc_cout.c @@ -453,8 +453,8 @@ inline_struct (definition *def, int flag) if (flag == PUT) f_print (fout, "\n\tif (xdrs->x_op == XDR_ENCODE) {\n"); else - f_print(fout, - "\t\treturn TRUE;\n\t} else if (xdrs->x_op == XDR_DECODE) {\n"); + f_print (fout, + "\t\treturn TRUE;\n\t} else if (xdrs->x_op == XDR_DECODE) {\n"); i = 0; size = 0; @@ -506,49 +506,51 @@ inline_struct (definition *def, int flag) else { if (i > 0) - if (sizestr == NULL && size < inlineflag) - { - /* don't expand into inline code if size < inlineflag */ - while (cur != dl) - { - print_stat (indent + 1, &cur->decl); - cur = cur->next; - } - } - else - { - /* were already looking at a xdr_inlineable structure */ - tabify (fout, indent + 1); - if (sizestr == NULL) - f_print (fout, "buf = XDR_INLINE (xdrs, %d * BYTES_PER_XDR_UNIT);", size); - else if (size == 0) - f_print (fout, - "buf = XDR_INLINE (xdrs, %s * BYTES_PER_XDR_UNIT);", - sizestr); - else - f_print (fout, - "buf = XDR_INLINE(xdrs, (%d + (%s)) * BYTES_PER_XDR_UNIT);", - size, sizestr); - f_print (fout, "\n"); - tabify (fout, indent + 1); - fprintf (fout, "if (buf == NULL) {\n"); - psav = cur; - while (cur != dl) - { - print_stat (indent + 2, &cur->decl); - cur = cur->next; - } - - f_print (fout, "\n\t\t} else {\n"); - cur = psav; - while (cur != dl) - { - emit_inline (indent + 1, &cur->decl, flag); - cur = cur->next; - } - tabify (fout, indent + 1); - f_print (fout, "}\n"); - } + { + if (sizestr == NULL && size < inlineflag) + { + /* don't expand into inline code if size < inlineflag */ + while (cur != dl) + { + print_stat (indent + 1, &cur->decl); + cur = cur->next; + } + } + else + { + /* were already looking at a xdr_inlineable structure */ + tabify (fout, indent + 1); + if (sizestr == NULL) + f_print (fout, "buf = XDR_INLINE (xdrs, %d * BYTES_PER_XDR_UNIT);", size); + else if (size == 0) + f_print (fout, + "buf = XDR_INLINE (xdrs, %s * BYTES_PER_XDR_UNIT);", + sizestr); + else + f_print (fout, + "buf = XDR_INLINE(xdrs, (%d + (%s)) * BYTES_PER_XDR_UNIT);", + size, sizestr); + f_print (fout, "\n"); + tabify (fout, indent + 1); + fprintf (fout, "if (buf == NULL) {\n"); + psav = cur; + while (cur != dl) + { + print_stat (indent + 2, &cur->decl); + cur = cur->next; + } + + f_print (fout, "\n\t\t} else {\n"); + cur = psav; + while (cur != dl) + { + emit_inline (indent + 1, &cur->decl, flag); + cur = cur->next; + } + tabify (fout, indent + 1); + f_print (fout, "}\n"); + } + } size = 0; i = 0; sizestr = NULL; @@ -556,46 +558,49 @@ inline_struct (definition *def, int flag) } } if (i > 0) - if (sizestr == NULL && size < inlineflag) - { - /* don't expand into inline code if size < inlineflag */ - while (cur != dl) - { - print_stat (indent + 1, &cur->decl); - cur = cur->next; - } - } - else - { - /* were already looking at a xdr_inlineable structure */ - if (sizestr == NULL) - f_print (fout, "\t\tbuf = XDR_INLINE(xdrs,%d * BYTES_PER_XDR_UNIT);", - size); - else if (size == 0) - f_print (fout, - "\t\tbuf = XDR_INLINE(xdrs,%s * BYTES_PER_XDR_UNIT);", - sizestr); - else - f_print (fout, - "\t\tbuf = XDR_INLINE(xdrs,(%d + %s)* BYTES_PER_XDR_UNIT);", - size, sizestr); - f_print (fout, "\n\t\tif (buf == NULL) {\n"); - psav = cur; - while (cur != NULL) - { - print_stat (indent + 2, &cur->decl); - cur = cur->next; - } - f_print (fout, "\t\t} else {\n"); + { + if (sizestr == NULL && size < inlineflag) + { + /* don't expand into inline code if size < inlineflag */ + while (cur != dl) + { + print_stat (indent + 1, &cur->decl); + cur = cur->next; + } + } + else + { + /* were already looking at a xdr_inlineable structure */ + if (sizestr == NULL) + f_print (fout, + "\t\tbuf = XDR_INLINE(xdrs,%d * BYTES_PER_XDR_UNIT);", + size); + else if (size == 0) + f_print (fout, + "\t\tbuf = XDR_INLINE(xdrs,%s * BYTES_PER_XDR_UNIT);", + sizestr); + else + f_print (fout, + "\t\tbuf = XDR_INLINE(xdrs,(%d + %s)* BYTES_PER_XDR_UNIT);", + size, sizestr); + f_print (fout, "\n\t\tif (buf == NULL) {\n"); + psav = cur; + while (cur != NULL) + { + print_stat (indent + 2, &cur->decl); + cur = cur->next; + } + f_print (fout, "\t\t} else {\n"); - cur = psav; - while (cur != dl) - { - emit_inline (indent + 2, &cur->decl, flag); - cur = cur->next; - } - f_print (fout, "\t\t}\n"); - } + cur = psav; + while (cur != dl) + { + emit_inline (indent + 2, &cur->decl, flag); + cur = cur->next; + } + f_print (fout, "\t\t}\n"); + } + } } /* this may be const. i haven't traced this one through yet. */ @@ -724,7 +729,7 @@ emit_inline (int indent, declaration * decl, int flag) f_print (fout, "register %s *genp;\n\n", decl->type); tabify (fout, indent + 1); f_print (fout, - "for (i = 0, genp = objp->%s;\n", decl->name); + "for (i = 0, genp = objp->%s;\n", decl->name); tabify (fout, indent + 2); f_print (fout, "i < %s; ++i) {\n", decl->array_max); emit_single_in_line (indent + 2, decl, flag, REL_VECTOR); diff --git a/sysdeps/generic/bits/stdio_lim.h b/sysdeps/generic/bits/stdio_lim.h deleted file mode 100644 index 86e83cf..0000000 --- a/sysdeps/generic/bits/stdio_lim.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Stdio limits for non-POSIX systems. - Copyright (C) 1994, 1997 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#if !defined _STDIO_H && !defined __need_FOPEN_MAX -# error "Never include directly; use instead." -#endif - -#ifndef __need_FOPEN_MAX -# define L_tmpnam 1 -# define TMP_MAX 0 - -# ifdef __USE_POSIX -# define L_ctermid 1 -# define L_cuserid 1 -# endif - -# define FILENAME_MAX 14 -#endif - -#if defined __need_FOPEN_MAX && !defined __defined_FOPEN_MAX -# define __defined_FOPEN_MAX -# define FOPEN_MAX 16 -#endif -#undef __need_FOPEN_MAX diff --git a/sysdeps/libm-ieee754/w_pow.c b/sysdeps/libm-ieee754/w_pow.c index 1711d71..5850651 100644 --- a/sysdeps/libm-ieee754/w_pow.c +++ b/sysdeps/libm-ieee754/w_pow.c @@ -39,14 +39,15 @@ else return z; } - if(x==0.0){ + if(x==0.0) { if(y==0.0) return __kernel_standard(x,y,20); /* pow(0.0,0.0) */ - if(__finite(y)&&y<0.0) + if(__finite(y)&&y<0.0) { if (signbit (x) && signbit (z)) return __kernel_standard(x,y,23); /* pow(-0.0,negative) */ else return __kernel_standard(x,y,43); /* pow(+0.0,negative) */ + } return z; } if(!__finite(z)) { diff --git a/sysdeps/libm-ieee754/w_powf.c b/sysdeps/libm-ieee754/w_powf.c index 0b20822..32196fd 100644 --- a/sysdeps/libm-ieee754/w_powf.c +++ b/sysdeps/libm-ieee754/w_powf.c @@ -45,16 +45,17 @@ static char rcsid[] = "$NetBSD: w_powf.c,v 1.3 1995/05/10 20:49:41 jtc Exp $"; else return z; } - if(x==(float)0.0){ + if(x==(float)0.0) { if(y==(float)0.0) /* powf(0.0,0.0) */ return (float)__kernel_standard((double)x,(double)y,120); - if(__finitef(y)&&y<(float)0.0) + if(__finitef(y)&&y<(float)0.0) { if (signbit (x) && signbit (z)) /* powf(0.0,negative) */ return (float)__kernel_standard((double)x,(double)y,123); else return (float)__kernel_standard((double)x,(double)y,143); + } return z; } if(!__finitef(z)) { diff --git a/sysdeps/libm-ieee754/w_powl.c b/sysdeps/libm-ieee754/w_powl.c index 3529b50..17feb9f 100644 --- a/sysdeps/libm-ieee754/w_powl.c +++ b/sysdeps/libm-ieee754/w_powl.c @@ -41,14 +41,15 @@ else return z; } - if(x==0.0){ + if(x==0.0) { if(y==0.0) return __kernel_standard(x,y,220); /* pow(0.0,0.0) */ - if(__finitel(y)&&y<0.0) + if(__finitel(y)&&y<0.0) { if (signbit (x) && signbit (z)) return __kernel_standard(x,y,223); /* pow(-0.0,negative) */ else return __kernel_standard(x,y,243); /* pow(+0.0,negative) */ + } return z; } if(!__finitel(z)) { diff --git a/sysdeps/posix/Makefile b/sysdeps/posix/Makefile deleted file mode 100644 index 7806e4e..0000000 --- a/sysdeps/posix/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (C) 1991, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. - -# You should have received a copy of the GNU Library General Public -# License along with the GNU C Library; see the file COPYING.LIB. If not, -# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -ifneq (yes,$(inhibit-stdio_lim)) -# Disable these rules if we generate stdio_lim.h by other means. - -$(common-objpfx)bits/stdio_lim.h: $(common-objpfx)mk-stdiolim - $(dir $<)$(notdir $<) > $@-t - mv $@-t $@ - -# Turn into a version that works when cd'd into $(objdir). -mk-stdiolim-CFLAGS = $(patsubst -I$(shell pwd)//%,-I/%,\ - $(patsubst -I%,-I$(shell pwd)/%,$(+includes))) -# $(ALL_BUILD_CFLAGS) needs to come last because it contains unwanted -Is. -$(common-objpfx)mk-stdiolim: $(sysdep_dir)/posix/mk-stdiolim.c \ - $(..)posix/bits/posix1_lim.h bits/local_lim.h - $(common-objdir-compile) - -common-generated := $(common-generated) bits/stdio_lim.h mk-stdiolim -before-compile := $(before-compile) $(common-objpfx)bits/stdio_lim.h - -endif # inhibit-stdio_lim diff --git a/sysdeps/posix/mk-stdiolim.c b/sysdeps/posix/mk-stdiolim.c deleted file mode 100644 index ec482de..0000000 --- a/sysdeps/posix/mk-stdiolim.c +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright (C) 1991, 1992, 1993, 1996, 1997 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include - -int -main() -{ - /* Print copyright message. */ - printf ("\ -/* Stdio limits for POSIX systems.\n\ - Copyright (C) 1994, 1997 Free Software Foundation, Inc.\n\ - This file is part of the GNU C Library.\n\ -\n\ - The GNU C Library is free software; you can redistribute it and/or\n\ - modify it under the terms of the GNU Library General Public License as\n\ - published by the Free Software Foundation; either version 2 of the\n\ - License, or (at your option) any later version.\n\ -\n\ - The GNU C Library is distributed in the hope that it will be useful,\n\ - but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n\ - Library General Public License for more details.\n\ -\n\ - You should have received a copy of the GNU Library General Publicn\n\ - License along with the GNU C Library; see the file COPYING.LIB. If not,\n\ - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n\ - Boston, MA 02111-1307, USA. */\n\ -\n\ -#if !defined _STDIO_H && !defined __need_FOPEN_MAX\n\ -# error \"Never include directly; use instead.\"\n\ -#endif\n\ -\n"); - - /* These values correspond to the code in sysdeps/posix/tempname.c. - Change the values here if you change that code. */ - puts ("#ifdef _STDIO_H"); - printf ("# define L_tmpnam %u\n", sizeof ("/usr/tmp/") + 9); - printf ("# define TMP_MAX %u\n", 62 * 62 * 62); - - puts ("# ifdef __USE_POSIX"); - printf ("# define L_ctermid %u\n", sizeof ("/dev/tty")); - printf ("# define L_cuserid 9\n"); - puts ("# endif"); - - printf (" #define FILENAME_MAX %u\n", -#ifdef PATH_MAX - PATH_MAX -#else - /* This is supposed to be the size needed to hold the longest file - name string the implementation guarantees can be opened. - PATH_MAX not being defined means the actual limit on the length - of a file name is runtime-variant (or it is unlimited). ISO - says in such a case FILENAME_MAX should be a good size to - allocate for a file name string. POSIX.1 guarantees that a - file name up to _POSIX_PATH_MAX chars long can be opened, so - this value must be at least that. */ - 1024 /* _POSIX_PATH_MAX is 255. */ -#endif - ); - - puts ("# undef __need_FOPEN_MAX"); - puts ("# define __need_FOPEN_MAX 1"); - puts ("#endif\n"); - - /* POSIX does not require that OPEN_MAX and PATH_MAX be defined, so - will not define them if they are run-time - variant (which is the case in the Hurd). ISO still requires - that FOPEN_MAX and FILENAME_MAX be defined, however. */ - - puts ("#if defined __need_FOPEN_MAX && !defined __defined_FOPEN_MAX"); - puts ("# define __defined_FOPEN_MAX"); - printf ("# define FOPEN_MAX %u\n", -#ifdef OPEN_MAX - - OPEN_MAX -#else - /* This is the minimum number of files that the implementation - guarantees can be open simultaneously. OPEN_MAX not being - defined means the maximum is run-time variant; but POSIX.1 - requires that it never be less than _POSIX_OPEN_MAX, so that is - a good minimum to use. */ - _POSIX_OPEN_MAX -#endif - - ); - puts ("#endif"); - puts ("#undef __need_FOPEN_MAX"); - - exit (0); -} diff --git a/sysdeps/unix/sysv/linux/Dist b/sysdeps/unix/sysv/linux/Dist index e96ef14..66d9266 100644 --- a/sysdeps/unix/sysv/linux/Dist +++ b/sysdeps/unix/sysv/linux/Dist @@ -1,5 +1,4 @@ bits/pthreadtypes.h -stdio_lim.h.in cmsg_nxthdr.c errlist.h init-first.h diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 6d6276a..fa12c05 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -89,32 +89,6 @@ endif # Don't compile the ctype glue code, since there is no old non-GNU C library. inhibit-glue = yes -# Tell sysdeps/posix/Makefile that we create stdio_lim.h differently. -inhibit-stdio_lim = yes - -$(common-objpfx)bits/stdio_%.h $(common-objpfx)bits/stdio_%.d: \ - $(..)sysdeps/unix/sysv/linux/stdio_%.h.in - rm -f $(@:.h=.d) $(@:.d=.h)-t - echo '#include ' | \ - SUNPRO_DEPENDENCIES='$(@:.h=.d) \ - $(patsubst $(common-objpfx)%,$$(common-objpfx)%,\ - $(@:.d=.h) $(@:.h=.d))' \ - $(CC) -E -dM - > $(@:.d=.h)-t - fopen_max=`sed -n 's/^#define OPEN_MAX //p' $(@:.d=.h)-t`; \ - filename_max=`sed -n 's/^#define PATH_MAX //p' $(@:.d=.h)-t`; \ - if test -n "$$fopen_max" && test -n "$$filename_max"; then \ - sed -e "s/DEFAULT_FOPEN_MAX/$$fopen_max/" \ - -e "s/DEFAULT_FILENAME_MAX/$$filename_max/" $< \ - > $(@:.d=.h).new && \ - mv -f $(@:.d=.h).new $(@:.d=.h); \ - else exit 1; fi -# Remove this last so that it can be examined if something went wrong. - rm -f $(@:.d=.h)-t -ifndef no_deps -# Get the list of dependencies (probably /usr/include/linux/limits.h). --include $(common-objpfx)bits/stdio_lim.d -endif - ifeq ($(subdir),signal) sysdep_routines += rt_sigsuspend rt_sigprocmask rt_sigtimedwait \ rt_sigqueueinfo rt_sigaction rt_sigpending @@ -128,4 +102,3 @@ ifeq ($(subdir),nis) CFLAGS-ypclnt.c = -DUSE_BINDINGDIR=1 endif -common-generated += bits/stdio_lim.h bits/stdio_lim.d diff --git a/sysdeps/unix/sysv/linux/stdio_lim.h.in b/sysdeps/unix/sysv/linux/stdio_lim.h.in deleted file mode 100644 index bded904..0000000 --- a/sysdeps/unix/sysv/linux/stdio_lim.h.in +++ /dev/null @@ -1,43 +0,0 @@ -/* Stdio limits for Linux. - Copyright (C) 1994, 1997 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#if !defined _STDIO_H && !defined __need_FOPEN_MAX -# error "Never include directly; use instead." -#endif - -#ifdef _STDIO_H -# define L_tmpnam 19 -# define TMP_MAX 238328 - -# ifdef __USE_POSIX -# define L_ctermid 9 -# define L_cuserid 9 -# endif - -# define FILENAME_MAX DEFAULT_FILENAME_MAX - -# undef __need_FOPEN_MAX -# define __need_FOPEN_MAX -#endif - -#if defined __need_FOPEN_MAX && !defined __defined_FOPEN_MAX -# define __defined_FOPEN_MAX -# define FOPEN_MAX DEFAULT_FOPEN_MAX -#endif -#undef __need_FOPEN_MAX diff --git a/timezone/tst-timezone.c b/timezone/tst-timezone.c index 3585a9c..e866b94 100644 --- a/timezone/tst-timezone.c +++ b/timezone/tst-timezone.c @@ -89,9 +89,9 @@ main (int argc, char ** argv) const struct test_times *pt; char buf[BUFSIZ]; - /* This should be: Thu May 14 18:02:16 1998. */ + /* This should be: Fri May 15 01:02:16 1998 (UTC). */ t = 895194136; - printf ("We use this date: %s\n", ctime (&t)); + printf ("We use this date: %s\n", asctime (gmtime (&t))); for (pt = tests; pt->name != NULL; ++pt) { diff --git a/wcsmbs/wcsmbs-tst1.c b/wcsmbs/wcsmbs-tst1.c index 30a7faf..72fbda5 100644 --- a/wcsmbs/wcsmbs-tst1.c +++ b/wcsmbs/wcsmbs-tst1.c @@ -2,6 +2,7 @@ #include #include +#include #include #include #include -- cgit v1.1