1998-09-14 11:26  Ulrich Drepper  <drepper@cygnus.com>

	* wcsmbs/wcsmbs-tst1.c: Include stdlib.h.

1998-09-14  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>

	* 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  <zack@rabi.phys.columbia.edu>

	* 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 <stdlib.h>.
	* iconvdata/iso646.c: Include <stdlib.h>.

1998-09-14 07:51 -0400  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* 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  <zack@rabi.phys.columbia.edu>

	* 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  <schwab@issan.informatik.uni-dortmund.de>

	* 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  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile (install-symbolic-link): Remove the link list file at last.
	* Makerules (install-clean-symbolic-link-list): Removed.

1998-09-12  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* timezone/tst-timezone.c: Print time in UTC to get consistent
	output.

1998-09-12  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* 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  <kukuk@vt.uni-paderborn.de>

	* 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  <drepper@cygnus.com>

	* locale/programs/locale.c: Update dates.
This commit is contained in:
Ulrich Drepper 1998-09-14 11:43:26 +00:00
parent 5d47ceca3f
commit 7ef90c1595
36 changed files with 498 additions and 528 deletions

View File

@ -1,3 +1,98 @@
1998-09-14 11:26 Ulrich Drepper <drepper@cygnus.com>
* wcsmbs/wcsmbs-tst1.c: Include stdlib.h.
1998-09-14 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
* 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 <zack@rabi.phys.columbia.edu>
* 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 <stdlib.h>.
* iconvdata/iso646.c: Include <stdlib.h>.
1998-09-14 07:51 -0400 Zack Weinberg <zack@rabi.phys.columbia.edu>
* 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 <zack@rabi.phys.columbia.edu>
* 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 <schwab@issan.informatik.uni-dortmund.de>
* 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 <schwab@issan.informatik.uni-dortmund.de>
* Makefile (install-symbolic-link): Remove the link list file at last.
* Makerules (install-clean-symbolic-link-list): Removed.
1998-09-12 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* timezone/tst-timezone.c: Print time in UTC to get consistent
output.
1998-09-12 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* 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 <kukuk@vt.uni-paderborn.de>
* 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 <drepper@cygnus.com>
* locale/programs/locale.c: Update dates.
1998-09-13 Mark Kettenis <kettenis@phys.uva.nl>
* sysdeps/generic/bits/types.h: Include <features.h>. Make sure

View File

@ -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 || \

View File

@ -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 $(<F) $@ >> $(symbolic-link-list)
endef

44
Rules
View File

@ -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

View File

@ -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);
}

View File

@ -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)"'

View File

@ -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)
{

View File

@ -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;

View File

@ -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;

View File

@ -20,6 +20,7 @@
#include <gconv.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include "jis0201.h"
#include "jis0208.h"

View File

@ -33,6 +33,7 @@
#include <gconv.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
/* Definitions used in the body of the `gconv' function. */

View File

@ -1,7 +1,13 @@
#ifndef _STDLIB_H
#ifdef __need_malloc_and_calloc
#define __Need_M_And_C
#endif
#include <stdlib/stdlib.h>
/* 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 */

View File

@ -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 <drepper@gnu.ai.mit.edu>, 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");
}

View File

@ -185,6 +185,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)
{
@ -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;

View File

@ -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)
{

View File

@ -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;

View File

@ -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)
{

View File

@ -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)

View File

@ -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);
}

View File

@ -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_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_CANCELED;
}
}
}
/* Mark requests as canceled and send signal. */

View File

@ -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;
}

View File

@ -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

View File

@ -1,5 +1,4 @@
/* Stdio limits for non-POSIX systems.
Copyright (C) 1994, 1997 Free Software Foundation, Inc.
/* 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
@ -21,20 +20,18 @@
# error "Never include <bits/stdio_lim.h> directly; use <stdio.h> instead."
#endif
#ifndef __need_FOPEN_MAX
# define L_tmpnam 1
# define TMP_MAX 0
#ifdef _STDIO_H
# define L_tmpnam @L_tmpnam@
# define TMP_MAX @TMP_MAX@
# define FILENAME_MAX @FILENAME_MAX@
# ifdef __USE_POSIX
# define L_ctermid 1
# define L_cuserid 1
# define L_ctermid @L_ctermid@
# define L_cuserid @L_cuserid@
# endif
# define FILENAME_MAX 14
#endif
#if defined __need_FOPEN_MAX && !defined __defined_FOPEN_MAX
# define __defined_FOPEN_MAX
# define FOPEN_MAX 16
#if defined __need_FOPEN_MAX || defined _STDIO_H
# undef FOPEN_MAX
# define FOPEN_MAX @FOPEN_MAX@
#endif
#undef __need_FOPEN_MAX

View File

@ -21,18 +21,22 @@
*/
#ifndef _STDLIB_H
#define _STDLIB_H 1
#include <features.h>
/* Get size_t, wchar_t and NULL from <stddef.h>. */
#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 <stddef.h>
__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 */

View File

@ -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 <stdlib.h>
#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 <stdlib.h>
#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

View File

@ -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;
}
{
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");
}
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);

View File

@ -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)) {

View File

@ -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)) {

View File

@ -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)) {

View File

@ -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

View File

@ -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 <bits/posix1_lim.h>
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 <bits/stdio_lim.h> directly; use <stdio.h> 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
<bits/local_lim.h> 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);
}

View File

@ -1,5 +1,4 @@
bits/pthreadtypes.h
stdio_lim.h.in
cmsg_nxthdr.c
errlist.h
init-first.h

View File

@ -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 <linux/limits.h>' | \
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

View File

@ -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 <bits/stdio_lim.h> directly; use <stdio.h> 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

View File

@ -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)
{

View File

@ -2,6 +2,7 @@
#include <wchar.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wctype.h>
#include <locale.h>