update from main archive 970118

Sun Jan 19 04:38:20 1997  Ulrich Drepper  <drepper@cygnus.com>

	* config.make.in (have-ksh, KSH): New variables.  Will be filled
	in by configure.
	* configure.in: Add test for ksh like shell (prefer bash).
	* time/Makefile (tests): Depend on install-test-data.
	(distribute): Add simplebackw.
	(generated-dirs): New variable.
	[$(have-ksh)==yes] (install-others): Add iso3166.tab and zone.tab.
	(install-bin): Add tzselect.
	(install-test-data): Install the zoneinfo files which are needed
	for the test case in the build directory.
	(test-tz-ENV): New variable.  Call test-tz program using data in
	build directory.
	* time/simpleback: New file.
	* time/test-tz.c: Pretty print.
	* time/tzfile.c: Use value of environment variable TZDIR as directory
	to look for zone info files.
	don't let search for DST data destroy already found values.
	* time/tzselect.ksh: Use @KSH@ and @TZDIR@ to be substituted when
	installing.
	* time/tzset.c (__tzset_internal): Avoid freeing string twice.
	Set DST zone name to normal zone name if no information is provided.

	* time/mktime.c (mktime): Call __tzset_internal to use current
	value of TZ.

	* Makerules (common-clean): Remove $(generated-dirs) inclusing content.

	* glibcbug.in: Fix several bugs.  Reported by several people.

	* elf/Makefile: Correct dependecies for $(objpfx)ldd.

	* inet/netinet/ip.h: Define IPTOS_LOWCOST and IPTOS_MINCOST.

	* locale/C-time.c: Update copyright.
	* locale/localeinfo.h: Likewise.
	* sysdeps/unix/bsd/bsd4.4/direntry.h: Likewise.

	* locale/programs/ld-time.c (time_finish): Correct message string.
	* locale/programs/linereader.c (lr_token): Use correctly `number'
	not `digit' in message string.

	* stdlib/strtol.c [UNSIGNED]: Don't punt immediately when `-' is
	seen.  Instead return ULONG_MAX and set ERANGE.
	* stdlib/tst-strtol.c: Correct test to reflect above change.

Sun Jan 19 03:22:30 1997  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/sys/mtio.h: Don't use <linux/mtio.h>.
	We must not use <linux/posix_types.h>.

	* sysdeps/unix/sysv/linux/sys/ipc_buf.h: Don't use __kernel_* types
	since we must not use <linux/posix_types.h>.
	* sysdeps/unix/sysv/linux/sys/procfs.h: Likewise.
	* sysdeps/unix/sysv/linux/alpha/sys/ipc_buf.h: New file.  Similar
	to sysdeps/unix/sysv/linux/sys/ipc_buf.h, but use alpha relavent
	types.
	* sysdeps/unix/sysv/linux/alpha/sys/procfs.h: New file.  Similar
	to sysdeps/unix/sysv/linux/sys/procfs.h, but use alpha relavent
	types.

Sun Jan 19 01:48:20 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* sysdeps/libm-i387/e_exp.S: Correct computation of fractional
	part.
	* sysdeps/libm-i387/e_expf.S: Likewise.
	* sysdeps/libm-i387/e_expl.S: Likewise.
	* sysdeps/libm-i387/s_expm1.S: Correct computation of fractional
	part.  Take care of additional value left on stack by fscale.
	* sysdeps/libm-i387/s_expm1f.S: Likewise.
	* sysdeps/libm-i387/s_expm1l.S: Likewise.

Fri Jan 17 17:45:32 1997  Ulrich Drepper  <drepper@cygnus.com>

	* posix/getopt.c: Change all direct usages of `gettext' to `_'.

	* sysdeps/generic/sysd-stdio.c (__stdio_reopen): Add missing
	parameter.
	Reported by Harmanjit Singh <harman@netearth.iitd.ernet.in>.

Thu Jan 16 23:39:25 1997  Ulrich Drepper  <drepper@cygnus.com>

	* stdio-common/Makefile (tests): Add scanf11.
	* stdio-common/scanf11.c: New file.
	* stdio-common/vfscanf.c (__vfscanf): Increment `done' when %n
	was processed and value is not suppressed.
	* stdio-common/bug10.c: Correct test to expect %n increment the
	return value of scanf.
	* stdio-common/scanf1.c: Likewise.
	* stdio-common/scanf3.c: Likewise.
	* stdio-common/scanf10.c: Likewise.
	* stdio-common/tstdiomisc.c: Likewise.

	* time/strptime.c: Add lots of conditional compiling to enable use
	outside glibc.  When used in glibc, make sure C locale format
	strings will always be recognized.

Sat Jan 11 18:53:47 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/sys/sysmacros.h (major, minor, makedev):
	Fix definitions so that they work with __kernel_dev_t.

Sat Jan 11 14:24:10 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/kernel_sigaction.h,
	sysdeps/unix/sysv/linux/alpha/kernel_sigaction.h,
	sysdeps/unix/sysv/linux/sigaction.c: New files.
	* sysdeps/unix/sysv/linux/syscalls.list: Add s_sigaction.

Sun Jan 12 15:22:33 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* libc-symbols.h (link_warning): Make sure that the .gnu.warning
	section is not allocated.
	Update and reformat copyright.

Sun Jan 12 12:19:28 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf/Makefile ($(objpfx)ldd): Fix depedency list.

Sat Jan 11 15:11:26 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/Makefile ($(common-objpfx)sysd-syscalls): Fix
	command so that it works in subdirectories.

Wed Jan  8 22:07:58 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/i386/syscalls.list: Add s_getgroups and
	s_setgroups.
	* sysdeps/unix/sysv/linux/m68k/syscalls.list: Likewise.
	* sysdeps/unix/sysv/linux/i386/getgroups.c,
	sysdeps/unix/sysv/linux/i386/setgroups.c,
	sysdeps/unix/sysv/linux/m68k/getgroups.c,
	sysdeps/unix/sysv/linux/m68k/setgroups.c: New files.

Wed Jan  8 19:42:59 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile (config.status): Delete bogus rule.
	($(objpfx)glibcbug): Renamed from plain `glibcbug', depend on
	config.status in build directory, fix command to change to build
	directory.
	* Makeconfig ($(common-objpfx)config.status): Depend on version.h.

Thu Jan  9 08:47:54 1997  Andreas Jaeger  <aj@arthur.pfalz.de>

	* glibcbug.in (while): We test for four and not five conditions,
	set MAIL_AGENT instead of RMAIL, filter spaces and tabs.

Thu Jan 16 22:00:27 1997  Ulrich Drepper  <drepper@cygnus.com>

	* misc/syslog.c: Don't define cancel_handler if _LIBC_REENTRANT
	is not defined.  Reported by Andreas Jaeger.

Thu Jan  9 08:47:54 1997  Andreas Jaeger  <aj@arthur.pfalz.de>

	* new-malloc/malloc.c (__MALLOC_P): define call to pthread
	initializer only if NO_THREADS is not defined.

Wed Jan  8 21:28:58 1997  Andreas Jaeger  <aj@arthur.pfalz.de>

	* resolv/nss_dns/dns-host.c: Clean-up: delete unnecessary includes
	and variables.

Thu Jan 16 21:50:27 1997  Ulrich Drepper  <drepper@cygnus.com>

	* inet/arpa/inet.h: Include <netinet/in.h> to get struct in_addr
	defined.

Tue Jan  7 17:29:59 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules (LDLIBS-c.so): New variable.

Tue Jan  7 19:22:00 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile ($(includedir)/gnu/lib-names.h): Define the library
	names as strings, not as sequence of tokens that may fall apart.

Fri Jan 10 14:08:41 1997  Roland McGrath  <roland@fmh.frob.com>

	* time/tzfile.c (__tzfile_read): Check for bogus type and zone name
	indices in data file and punt, so a bogus file can't crash us.

Thu Jan 16 20:29:15 1997  Ulrich Drepper  <drepper@cygnus.com>

	* values.h [__USE_MISC]: Define BITSPERBYTE.

Fri Jan 17 14:16:28 1997  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* stdio/vdprintf.c: Moved file to ...
	* sysdeps/posix/vdprintf.c: Here.  De-ansideclificate.
	* sysdeps/stub/vdprintf.c: New file.
	* sysdeps/mach/hurd/vdprintf.c: New file.

Thu Jan  9 15:59:35 1997  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/posix_opt.h: New file.

	* sysdeps/mach/hurd/sigwait.c (sigwait): Don't affect signal mask.

	* sysdeps/unix/bsd/tcsendbrk.c (tcsendbreak): Finish
	deansideclification.

	* sysdeps/mach/libc-lock.h: Add kludges to pretend to implement
	recursive locks.

Tue Jan  7 09:48:15 1997  Andreas Jaeger  <aj@arthur.pfalz.de>

	* signal/sigempty.c (sigemptyset): Correct typo: Empty set should
	have all bits zero.
This commit is contained in:
Ulrich Drepper 1997-01-19 04:54:28 +00:00
parent b51c27c032
commit 5290baf06c
70 changed files with 1888 additions and 407 deletions

210
ChangeLog
View File

@ -22,6 +22,216 @@ Tue Jan 7 09:48:15 1997 Andreas Jaeger <aj@arthur.pfalz.de>
* signal/sigempty.c (sigemptyset): Correct typo: Empty set should
have all bits zero.
Sun Jan 19 04:38:20 1997 Ulrich Drepper <drepper@cygnus.com>
* config.make.in (have-ksh, KSH): New variables. Will be filled
in by configure.
* configure.in: Add test for ksh like shell (prefer bash).
* time/Makefile (tests): Depend on install-test-data.
(distribute): Add simplebackw.
(generated-dirs): New variable.
[$(have-ksh)==yes] (install-others): Add iso3166.tab and zone.tab.
(install-bin): Add tzselect.
(install-test-data): Install the zoneinfo files which are needed
for the test case in the build directory.
(test-tz-ENV): New variable. Call test-tz program using data in
build directory.
* time/simpleback: New file.
* time/test-tz.c: Pretty print.
* time/tzfile.c: Use value of environment variable TZDIR as directory
to look for zone info files.
don't let search for DST data destroy already found values.
* time/tzselect.ksh: Use @KSH@ and @TZDIR@ to be substituted when
installing.
* time/tzset.c (__tzset_internal): Avoid freeing string twice.
Set DST zone name to normal zone name if no information is provided.
* time/mktime.c (mktime): Call __tzset_internal to use current
value of TZ.
* Makerules (common-clean): Remove $(generated-dirs) inclusing content.
* glibcbug.in: Fix several bugs. Reported by several people.
* elf/Makefile: Correct dependecies for $(objpfx)ldd.
* inet/netinet/ip.h: Define IPTOS_LOWCOST and IPTOS_MINCOST.
* locale/C-time.c: Update copyright.
* locale/localeinfo.h: Likewise.
* sysdeps/unix/bsd/bsd4.4/direntry.h: Likewise.
* locale/programs/ld-time.c (time_finish): Correct message string.
* locale/programs/linereader.c (lr_token): Use correctly `number'
not `digit' in message string.
* stdlib/strtol.c [UNSIGNED]: Don't punt immediately when `-' is
seen. Instead return ULONG_MAX and set ERANGE.
* stdlib/tst-strtol.c: Correct test to reflect above change.
Sun Jan 19 03:22:30 1997 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/sys/mtio.h: Don't use <linux/mtio.h>.
We must not use <linux/posix_types.h>.
* sysdeps/unix/sysv/linux/sys/ipc_buf.h: Don't use __kernel_* types
since we must not use <linux/posix_types.h>.
* sysdeps/unix/sysv/linux/sys/procfs.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/sys/ipc_buf.h: New file. Similar
to sysdeps/unix/sysv/linux/sys/ipc_buf.h, but use alpha relavent
types.
* sysdeps/unix/sysv/linux/alpha/sys/procfs.h: New file. Similar
to sysdeps/unix/sysv/linux/sys/procfs.h, but use alpha relavent
types.
Sun Jan 19 01:48:20 1997 H.J. Lu <hjl@gnu.ai.mit.edu>
* sysdeps/libm-i387/e_exp.S: Correct computation of fractional
part.
* sysdeps/libm-i387/e_expf.S: Likewise.
* sysdeps/libm-i387/e_expl.S: Likewise.
* sysdeps/libm-i387/s_expm1.S: Correct computation of fractional
part. Take care of additional value left on stack by fscale.
* sysdeps/libm-i387/s_expm1f.S: Likewise.
* sysdeps/libm-i387/s_expm1l.S: Likewise.
Fri Jan 17 17:45:32 1997 Ulrich Drepper <drepper@cygnus.com>
* posix/getopt.c: Change all direct usages of `gettext' to `_'.
* sysdeps/generic/sysd-stdio.c (__stdio_reopen): Add missing
parameter.
Reported by Harmanjit Singh <harman@netearth.iitd.ernet.in>.
Thu Jan 16 23:39:25 1997 Ulrich Drepper <drepper@cygnus.com>
* stdio-common/Makefile (tests): Add scanf11.
* stdio-common/scanf11.c: New file.
* stdio-common/vfscanf.c (__vfscanf): Increment `done' when %n
was processed and value is not suppressed.
* stdio-common/bug10.c: Correct test to expect %n increment the
return value of scanf.
* stdio-common/scanf1.c: Likewise.
* stdio-common/scanf3.c: Likewise.
* stdio-common/scanf10.c: Likewise.
* stdio-common/tstdiomisc.c: Likewise.
* time/strptime.c: Add lots of conditional compiling to enable use
outside glibc. When used in glibc, make sure C locale format
strings will always be recognized.
Sat Jan 11 18:53:47 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/sys/sysmacros.h (major, minor, makedev):
Fix definitions so that they work with __kernel_dev_t.
Sat Jan 11 14:24:10 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/kernel_sigaction.h,
sysdeps/unix/sysv/linux/alpha/kernel_sigaction.h,
sysdeps/unix/sysv/linux/sigaction.c: New files.
* sysdeps/unix/sysv/linux/syscalls.list: Add s_sigaction.
Sun Jan 12 15:22:33 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* libc-symbols.h (link_warning): Make sure that the .gnu.warning
section is not allocated.
Update and reformat copyright.
Sun Jan 12 12:19:28 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* elf/Makefile ($(objpfx)ldd): Fix depedency list.
Sat Jan 11 15:11:26 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/Makefile ($(common-objpfx)sysd-syscalls): Fix
command so that it works in subdirectories.
Wed Jan 8 22:07:58 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/i386/syscalls.list: Add s_getgroups and
s_setgroups.
* sysdeps/unix/sysv/linux/m68k/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/i386/getgroups.c,
sysdeps/unix/sysv/linux/i386/setgroups.c,
sysdeps/unix/sysv/linux/m68k/getgroups.c,
sysdeps/unix/sysv/linux/m68k/setgroups.c: New files.
Wed Jan 8 19:42:59 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makefile (config.status): Delete bogus rule.
($(objpfx)glibcbug): Renamed from plain `glibcbug', depend on
config.status in build directory, fix command to change to build
directory.
* Makeconfig ($(common-objpfx)config.status): Depend on version.h.
Thu Jan 9 08:47:54 1997 Andreas Jaeger <aj@arthur.pfalz.de>
* glibcbug.in (while): We test for four and not five conditions,
set MAIL_AGENT instead of RMAIL, filter spaces and tabs.
Thu Jan 16 22:00:27 1997 Ulrich Drepper <drepper@cygnus.com>
* misc/syslog.c: Don't define cancel_handler if _LIBC_REENTRANT
is not defined. Reported by Andreas Jaeger.
Thu Jan 9 08:47:54 1997 Andreas Jaeger <aj@arthur.pfalz.de>
* new-malloc/malloc.c (__MALLOC_P): define call to pthread
initializer only if NO_THREADS is not defined.
Wed Jan 8 21:28:58 1997 Andreas Jaeger <aj@arthur.pfalz.de>
* resolv/nss_dns/dns-host.c: Clean-up: delete unnecessary includes
and variables.
Thu Jan 16 21:50:27 1997 Ulrich Drepper <drepper@cygnus.com>
* inet/arpa/inet.h: Include <netinet/in.h> to get struct in_addr
defined.
Tue Jan 7 17:29:59 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makerules (LDLIBS-c.so): New variable.
Tue Jan 7 19:22:00 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makefile ($(includedir)/gnu/lib-names.h): Define the library
names as strings, not as sequence of tokens that may fall apart.
Fri Jan 10 14:08:41 1997 Roland McGrath <roland@fmh.frob.com>
* time/tzfile.c (__tzfile_read): Check for bogus type and zone name
indices in data file and punt, so a bogus file can't crash us.
Thu Jan 16 20:29:15 1997 Ulrich Drepper <drepper@cygnus.com>
* values.h [__USE_MISC]: Define BITSPERBYTE.
Fri Jan 17 14:16:28 1997 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* stdio/vdprintf.c: Moved file to ...
* sysdeps/posix/vdprintf.c: Here. De-ansideclificate.
* sysdeps/stub/vdprintf.c: New file.
* sysdeps/mach/hurd/vdprintf.c: New file.
Thu Jan 9 15:59:35 1997 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* sysdeps/mach/hurd/posix_opt.h: New file.
* sysdeps/mach/hurd/sigwait.c (sigwait): Don't affect signal mask.
* sysdeps/unix/bsd/tcsendbrk.c (tcsendbreak): Finish
deansideclification.
* sysdeps/mach/libc-lock.h: Add kludges to pretend to implement
recursive locks.
Tue Jan 7 09:48:15 1997 Andreas Jaeger <aj@arthur.pfalz.de>
* signal/sigempty.c (sigemptyset): Correct typo: Empty set should
have all bits zero.
Tue Jan 7 23:44:39 1997 Ulrich Drepper <drepper@cygnus.com>
* inet/gethstbynm.c: Include additional headers for additional

32
FAQ
View File

@ -260,7 +260,7 @@ incompatibilities:
* swapon(): the interface of this function didn't changed, but the
prototype is in a separate header file <sys/swap.h>. For the additional
argument of of swapon() you should use the SWAP_* constants from
argument of swapon() you should use the SWAP_* constants from
<linux/swap.h>, which get defined when <sys/swap.h> is included.
* errno: If a program uses variable "errno", then it _must_ include header
@ -298,6 +298,13 @@ incompatibilities:
a separate library libresolv. If you find some symbols starting with
`res_*' undefined simply add -lresolv to your call of the linker.
* the `signal' function's behaviour corresponds to the BSD semantic and
not the SysV semantic as it was in libc-5. The interface on all GNU
systems shall be the same and BSD is the semantic of choice. To use
the SysV behaviour simply use `sysv_signal'. The major difference is
that the SysV implementation sets the SA_ONESHOT flag and so the handler
gets removed after the first call.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q10] ``Why does getlogin() always return NULL on my Linux box?''
@ -365,10 +372,10 @@ catalog files to the XPG4 form:
[Q13] ``How do I configure GNU libc so that the essential libraries
like libc.so go into /lib and the other into /usr/lib?''
[A13] {UD} Like all other GNU packages GNU libc is configured to use a
base directory and install all files relative to this. If you intend
to really use GNU libc on your system this base directory is /usr. I.e.,
you run
[A13] {UD,AJ} Like all other GNU packages GNU libc is configured to
use a base directory and install all files relative to this. If you
intend to really use GNU libc on your system this base directory is
/usr. I.e., you run
configure --prefix=/usr <other_options>
Some systems like Linux have a filesystem standard which makes a
@ -378,10 +385,10 @@ located on the same disk partition as /. The /usr subtree might be
found on another partition/disk.
To install the essential libraries which come with GNU libc in /lib
one must explicitly tell this. Autoconf has no option for this so you
have to use the file where all user supplied additional information
should go in: `configparms' (see the `INSTALL' file). For Linux the
`configparms' file should contain:
one must explicitly tell this (except on Linux, see below). Autoconf
has no option for this so you have to use the file where all user
supplied additional information should go in: `configparms' (see the
`INSTALL' file). Therefore the `configparms' file should contain:
slibdir=/lib
sysconfdir=/etc
@ -390,6 +397,10 @@ The first line specifies the directory for the essential libraries,
the second line the directory for file which are by tradition placed
in a directory named /etc.
No rule without an exception: If you configure for Linux with
--prefix=/usr, then slibdir and sysconfdir will automatically be
defined as stated above.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q14] ``When linking with the new libc I get unresolved symbols
@ -534,7 +545,7 @@ a different name: ld-linux.so.2. So you have to replace
by
%{!dynamic-linker:-dynamic-linker=/home/gnu/lib/ld.so.1}
in the above example specs file ti make it work for other systems.
in the above example specs file to make it work for other systems.
Future versions of GCC will automatically provide the correct specs.
@ -606,6 +617,7 @@ Answers were given by:
{DMT} David Mosberger-Tang, <davidm@AZStarNet.com>
{RM} Roland McGrath, <roland@gnu.ai.mit.edu>
{HJL} H.J. Lu, <hjl@gnu.ai.mit.edu>
{AJ} Andreas Jaeger, <aj@arthur.pfalz.de>
Local Variables:
mode:text

View File

@ -1,4 +1,4 @@
# Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
# 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
@ -96,7 +96,7 @@ $(common-objpfx)config.make: $(common-objpfx)config.status $(..)config.h.in
# Find all the sysdeps configure fragments, to make sure we re-run
# configure when any of them changes.
$(common-objpfx)config.status: $(..)configure \
$(common-objpfx)config.status: $(..)version.h $(..)configure \
$(foreach dir,$(full-config-sysdirs),\
$(wildcard \
$(dir)/Implies) \

View File

@ -38,7 +38,6 @@ endef
configure: configure.in aclocal.m4; $(autoconf-it)
%/configure: %/configure.in aclocal.m4; $(autoconf-it)
config.status: configure version.h; $(SHELL) ./config.status --recheck
include Makeconfig
@ -198,7 +197,7 @@ $(includedir)/gnu/lib-names.h: $(common-objpfx)soversions.mk
for l in $$libs; do \
upname=`echo $$l | sed 's/[.]so.*//' | \
tr '[:lower:]-' '[:upper:]_'`; \
echo "#define $${upname}_SO $$l"; \
echo "#define $${upname}_SO \"$$l\""; \
done;) | sort; \
echo; \
echo '#endif /* gnu/lib-names.h */';) > $(objpfx)lib-names.h
@ -210,8 +209,8 @@ endif
# The `glibcbug' script contains the version number and it shall be rebuild
# whenever this changes or the `glibcbug.in' file.
glibcbug: glibcbug.in config.status
CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
$(objpfx)glibcbug: $(common-objpfx)config.status glibcbug.in
cd $(<D); CONFIG_FILES=$(@F) CONFIG_HEADERS= $(SHELL) $(<F)
# This makes the Info or DVI file of the documentation from the Texinfo source.
.PHONY: info dvi

View File

@ -1,4 +1,4 @@
# Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
# 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
@ -344,6 +344,8 @@ endef
# Also omits crti.o and crtn.o, which we do not want
# since we define our own `.init' section specially.
LDFLAGS-c.so = -nostdlib -nostartfiles
# But we still want to link libc.so against -lgcc.
LDLIBS-c.so = -lgcc
# Give libc.so an entry point and make it directly runnable itself.
LDFLAGS-c.so += -e __libc_main
# Use our own special initializer and finalizer files for libc.so.
@ -823,6 +825,7 @@ endef
# Also remove the dependencies and generated source files.
common-clean: common-mostlyclean
-rm -f $(addprefix $(objpfx),$(generated)) $(+depfiles)
-rm -fr $(addprefix $(objpfx),$(generated-dirs))
-rm -f $(addprefix $(common-objpfx),$(common-generated))
-rm -f $(common-objpfx)distinfo-$(subdir)

View File

@ -23,6 +23,7 @@ have-initfini = @libc_cv_have_initfini@
have-no-whole-archive = @libc_cv_ld_no_whole_archive@
have-no-exceptions = @libc_cv_gcc_no_exceptions@
have-bash2 = @libc_cv_have_bash2@
have-ksh = @libc_cv_have_ksh@
# Configuration options.
gnu-as = @gnu_as@
@ -49,5 +50,6 @@ INSTALL_DATA = @INSTALL_DATA@
LN_S = @LN_S@
MSGFMT = @MSGFMT@
BASH = @BASH@
KSH = @KSH@
# More variables may be inserted below by configure.

93
configure vendored
View File

@ -1409,8 +1409,53 @@ else
fi
if test "$BASH" = no; then
# Extract the first word of "ksh", so it can be a program name with args.
set dummy ksh; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1417: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_KSH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
case "$KSH" in
/*)
ac_cv_path_KSH="$KSH" # Let the user override the test with a path.
;;
*)
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_path_KSH="$ac_dir/$ac_word"
break
fi
done
IFS="$ac_save_ifs"
test -z "$ac_cv_path_KSH" && ac_cv_path_KSH="no"
;;
esac
fi
KSH="$ac_cv_path_KSH"
if test -n "$KSH"; then
echo "$ac_t""$KSH" 1>&6
else
echo "$ac_t""no" 1>&6
fi
if test "$KSH" = no; then
libc_cv_have_ksh=no
else
libc_cv_have_ksh=yes
fi
else
KSH="$BASH"
libc_cv_have_ksh=yes
fi
echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
echo "configure:1414: checking for signed size_t type" >&5
echo "configure:1459: checking for signed size_t type" >&5
if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1434,12 +1479,12 @@ EOF
fi
echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
echo "configure:1438: checking for libc-friendly stddef.h" >&5
echo "configure:1483: checking for libc-friendly stddef.h" >&5
if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1443 "configure"
#line 1488 "configure"
#include "confdefs.h"
#define __need_size_t
#define __need_wchar_t
@ -1454,7 +1499,7 @@ size_t size; wchar_t wchar;
if (&size == NULL || &wchar == NULL) abort ();
; return 0; }
EOF
if { (eval echo configure:1458: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:1503: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_friendly_stddef=yes
else
@ -1473,7 +1518,7 @@ override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
fi
echo $ac_n "checking whether we need to use -P to assemble .S files""... $ac_c" 1>&6
echo "configure:1477: checking whether we need to use -P to assemble .S files" >&5
echo "configure:1522: checking whether we need to use -P to assemble .S files" >&5
if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1496,7 +1541,7 @@ asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
fi
echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6
echo "configure:1500: checking for assembler global-symbol directive" >&5
echo "configure:1545: checking for assembler global-symbol directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1526,7 +1571,7 @@ EOF
fi
echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
echo "configure:1530: checking for .set assembler directive" >&5
echo "configure:1575: checking for .set assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1561,12 +1606,12 @@ fi
if test $elf != yes; then
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
echo "configure:1565: checking for .init and .fini sections" >&5
echo "configure:1610: checking for .init and .fini sections" >&5
if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1570 "configure"
#line 1615 "configure"
#include "confdefs.h"
int main() {
@ -1575,7 +1620,7 @@ asm (".section .init");
asm (".text");
; return 0; }
EOF
if { (eval echo configure:1579: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:1624: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_have_initfini=yes
else
@ -1600,19 +1645,19 @@ if test $elf = yes; then
libc_cv_asm_underscores=no
else
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
echo "configure:1604: checking for _ prefix on C symbol names" >&5
echo "configure:1649: checking for _ prefix on C symbol names" >&5
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1609 "configure"
#line 1654 "configure"
#include "confdefs.h"
asm ("_glibc_foobar:");
int main() {
glibc_foobar ();
; return 0; }
EOF
if { (eval echo configure:1616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
if { (eval echo configure:1661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
libc_cv_asm_underscores=yes
else
@ -1639,7 +1684,7 @@ if test $elf = yes; then
libc_cv_asm_weakext_directive=no
else
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
echo "configure:1643: checking for assembler .weak directive" >&5
echo "configure:1688: checking for assembler .weak directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1662,7 +1707,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
if test $libc_cv_asm_weak_directive = no; then
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
echo "configure:1666: checking for assembler .weakext directive" >&5
echo "configure:1711: checking for assembler .weakext directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1699,7 +1744,7 @@ EOF
fi
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
echo "configure:1703: checking for ld --no-whole-archive" >&5
echo "configure:1748: checking for ld --no-whole-archive" >&5
if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1710,7 +1755,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -Wl,--no-whole-archive
-o conftest conftest.c'; { (eval echo configure:1714: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c'; { (eval echo configure:1759: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_ld_no_whole_archive=yes
else
libc_cv_ld_no_whole_archive=no
@ -1721,7 +1766,7 @@ fi
echo "$ac_t""$libc_cv_ld_no_whole_archive" 1>&6
echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 1>&6
echo "configure:1725: checking for gcc -fno-exceptions" >&5
echo "configure:1770: checking for gcc -fno-exceptions" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1732,7 +1777,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -fno-exceptions
-o conftest conftest.c'; { (eval echo configure:1736: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c'; { (eval echo configure:1781: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_no_exceptions=yes
else
libc_cv_gcc_no_exceptions=no
@ -1784,7 +1829,7 @@ if test "$uname" = generic; then
fi
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
echo "configure:1788: checking OS release for uname" >&5
echo "configure:1833: checking OS release for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1806,7 +1851,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
uname_release="$libc_cv_uname_release"
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
echo "configure:1810: checking OS version for uname" >&5
echo "configure:1855: checking OS version for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1828,7 +1873,7 @@ else
fi
echo $ac_n "checking stdio selection""... $ac_c" 1>&6
echo "configure:1832: checking stdio selection" >&5
echo "configure:1877: checking stdio selection" >&5
case $stdio in
libio) cat >> confdefs.h <<\EOF
@ -1840,7 +1885,7 @@ esac
echo "$ac_t""$stdio" 1>&6
echo $ac_n "checking malloc selection""... $ac_c" 1>&6
echo "configure:1844: checking malloc selection" >&5
echo "configure:1889: checking malloc selection" >&5
case $malloc in
new-malloc) USE_NEW_MALLOC=-DUSE_NEW_MALLOC ;;
@ -2052,6 +2097,8 @@ s%@AR@%$AR%g
s%@RANLIB@%$RANLIB%g
s%@BASH@%$BASH%g
s%@libc_cv_have_bash2@%$libc_cv_have_bash2%g
s%@KSH@%$KSH%g
s%@libc_cv_have_ksh@%$libc_cv_have_ksh%g
s%@libc_cv_have_initfini@%$libc_cv_have_initfini%g
s%@libc_cv_ld_no_whole_archive@%$libc_cv_ld_no_whole_archive%g
s%@libc_cv_gcc_no_exceptions@%$libc_cv_gcc_no_exceptions%g

View File

@ -383,6 +383,21 @@ else
fi
AC_SUBST(libc_cv_have_bash2)
dnl We need a ksh compatible shell for tzselect.
if test "$BASH" = no; then
AC_PATH_PROG(KSH, ksh, no)
if test "$KSH" = no; then
libc_cv_have_ksh=no
else
libc_cv_have_ksh=yes
fi
else
KSH="$BASH"
AC_SUBST(KSH)
libc_cv_have_ksh=yes
fi
AC_SUBST(libc_cv_have_ksh)
AC_CACHE_CHECK(for signed size_t type, libc_cv_signed_size_t, [dnl
echo '#include <stddef.h>
FOOBAR __SIZE_TYPE__ FOOBAR' > conftest.c

View File

@ -1,6 +1,6 @@
# Makefile for elf subdirectory of GNU C Library.
# Copyright (C) 1995, 1996 Free Software Foundation, Inc.
# Copyright (C) 1995, 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
@ -100,13 +100,15 @@ $(objpfx)libdl.so: $(objpfx)libdl_pic.a $(common-objpfx)libc.so $(objpfx)ld.so
$(slibdir)/$(rtld-installed-name): $(objpfx)ld.so; $(do-install-program)
ifneq ($(have-bash2),yes)
$(objpfx)ldd: ldd.sh.in Makefile
$(objpfx)ldd: ldd.sh.in $(common-objpfx)version.mk \
$(common-objpfx)soversions.mk $(common-objpfx)config.make
sed -e 's%@RTLD@%$(slibdir)/$(rtld-installed-name)%g' \
-e 's%@VERSION@%$(version)%g' < $< > $@.new
chmod 555 $@.new
mv -f $@.new $@
else
$(objpfx)ldd: ldd.bash.in Makefile
$(objpfx)ldd: ldd.bash.in $(common-objpfx)version.mk \
$(common-objpfx)soversions.mk $(common-objpfx)config.make
sed -e 's%@BASH@%$(BASH)%g' \
-e 's%@RTLD@%$(slibdir)/$(rtld-installed-name)%g' \
-e 's%@VERSION@%$(version)%g' \

View File

@ -29,11 +29,11 @@ trap 'rm -f $TEMP $TEMP.x' 0
PASSWD="cat /etc/passwd"
if [ -f /usr/lib/sendmail ] ; then
RMAIL="/usr/lib/sendmail -oi -t"
MAIL_AGENT="/usr/lib/sendmail -oi -t"
elif [ -f /usr/sbin/sendmail ] ; then
RMAIL="/usr/sbin/sendmail -oi -t"
MAIL_AGENT="/usr/sbin/sendmail -oi -t"
else
RMAIL=rmail
MAIL_AGENT=rmail
fi
# Figure out how to echo a string without a trailing newline
@ -153,8 +153,8 @@ SED_CMD='
/$PATTERN/{
s|||
s|<.*>||
s|^[ ]*||
s|[ ]*$||
s|^[ ]*||
s|[ ]*$||
p
q
}'
@ -199,7 +199,7 @@ while :; do
*) echo "$COMMAND: \`$CLASS' is not a valid value for \`Class'."
esac
[ $CNT -lt 5 ] &&
[ $CNT -lt 4 ] &&
echo "Errors were found with the problem report."
while :; do
@ -239,9 +239,9 @@ sed -e "
/^>Description:/,/^>[A-Za-z-]*:/s;$DESCRIPTION_C;;
/^>How-To-Repeat:/,/^>[A-Za-z-]*:/s;$HOW_TO_REPEAT_C;;
/^>Fix:/,/^>[A-Za-z-]*:/s;$FIX_C;;
" $TEMP > $REF
" $TEMP > $TEMP.x
if $MAIL_AGENT < $REF; then
if $MAIL_AGENT $BUGGLIBC < $TEMP.x; then
echo "$COMMAND: problem report sent"
xs=0; exit
else

View File

@ -40,6 +40,7 @@
#include <sys/cdefs.h>
#include <sys/types.h>
#include <netinet/in.h> /* To define `struct in_addr'. */
__BEGIN_DECLS
u_long inet_addr __P((const char *));

View File

@ -77,7 +77,8 @@ struct ip {
#define IPTOS_LOWDELAY 0x10
#define IPTOS_THROUGHPUT 0x08
#define IPTOS_RELIABILITY 0x04
/* IPTOS_LOWCOST 0x02 XXX */
#define IPTOS_LOWCOST 0x02
#define IPTOS_MINCOST IPTOS_LOWCOST
/*
* Definitions for IP precedence (also in ip_tos) (hopefully unused)

View File

@ -1,25 +1,25 @@
/* Support macros for making weak and strong aliases for symbols,
and for using symbol sets and linker warnings with GNU ld.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Copyright (C) 1995, 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 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.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
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. */
#ifndef _LIBC_SYMBOLS_H
#define _LIBC_SYMBOLS_H
#define _LIBC_SYMBOLS_H 1
/* This file's macros are included implicitly in the compilation of every
file in the C library by -imacros.
@ -225,6 +225,7 @@ extern const char _libc_intl_domainname[];
#ifdef HAVE_GNU_LD
#ifdef HAVE_ELF
#define link_warning(symbol, msg) \
asm(".section .gnu.warning." #symbol "; .previous"); \
static const char __evoke_link_warning_##symbol[] \
__attribute__ ((section (".gnu.warning." #symbol))) = msg;
#else

View File

@ -1,21 +1,21 @@
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
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 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.
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. */
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 "localeinfo.h"

View File

@ -1,21 +1,21 @@
/* localeinfo.h -- declarations for internal libc locale interfaces
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Copyright (C) 1995, 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 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.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
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. */
#ifndef _LOCALEINFO_H
#define _LOCALEINFO_H 1

View File

@ -1,6 +1,6 @@
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
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
@ -335,7 +335,7 @@ time_finish (struct localedef_t *locale)
if (str == NULL || *str == '\0')
{
error (0, 0, _("missing era name in string %d in `era' field"
"in category `%s'"), idx + 1, "LC_TIME");
" in category `%s'"), idx + 1, "LC_TIME");
time->era_entries[idx].name =
time->era_entries[idx].format = "";
}

View File

@ -1,21 +1,21 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
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 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.
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. */
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. */
#ifdef HAVE_CONFIG_H
# include <config.h>
@ -211,7 +211,7 @@ lr_token (struct linereader *lr, const struct charset_t *charset)
lr->token.val.num += ch - '0';
}
if (isalpha (ch))
lr_error (lr, _("garbage at end of digit"));
lr_error (lr, _("garbage at end of number"));
lr_ungetn (lr, 1);
return &lr->token;

View File

@ -1,5 +1,5 @@
/* Malloc implementation for multiple threads without lock contention.
Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Wolfram Gloger <wmglo@dent.med.uni-muenchen.de>
and Doug Lea <dl@cs.oswego.edu>, 1996.
@ -1521,7 +1521,7 @@ ptmalloc_init __MALLOC_P((void))
__malloc_hook = malloc_starter;
__free_hook = free_starter;
#endif
#if defined(_LIBC)
#if defined(_LIBC) && !defined (NO_THREADS)
/* Initialize the pthreads interface. */
if (__pthread_initialize != NULL)
__pthread_initialize();

View File

@ -73,7 +73,9 @@ __libc_lock_define_initialized (static, syslog_lock)
static void openlog_internal(const char *, int, int);
static void closelog_internal(void);
static void sigpipe_handler (int);
#ifdef _LIBC_REENTRANT
static void cancel_handler (void *);
#endif
/*
* syslog, vsyslog --
@ -310,6 +312,7 @@ closelog ()
__libc_cleanup_region_end (1);
}
#ifdef _LIBC_REENTRANT
static void
cancel_handler (void *ptr)
{
@ -322,6 +325,7 @@ cancel_handler (void *ptr)
/* Free the lock. */
__libc_lock_unlock (syslog_lock);
}
#endif
/* setlogmask -- set the log mask level */
int

View File

@ -763,8 +763,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (opterr)
{
/* 1003.2 specifies the format of this message. */
fprintf (stderr,
gettext ("%s: option requires an argument -- %c\n"),
fprintf (stderr, _("%s: option requires an argument -- %c\n"),
argv[0], c);
}
optopt = c;
@ -811,7 +810,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (ambig && !exact)
{
if (opterr)
fprintf (stderr, gettext ("%s: option `-W %s' is ambiguous\n"),
fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
argv[0], argv[optind]);
nextchar += strlen (nextchar);
optind++;
@ -829,9 +828,9 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
else
{
if (opterr)
fprintf (stderr,
gettext ("%s: option `-W %s' doesn't allow an argument\n"),
argv[0], pfound->name);
fprintf (stderr, _("\
%s: option `-W %s' doesn't allow an argument\n"),
argv[0], pfound->name);
nextchar += strlen (nextchar);
return '?';
@ -845,7 +844,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
{
if (opterr)
fprintf (stderr,
gettext ("%s: option `%s' requires an argument\n"),
_("%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]);
nextchar += strlen (nextchar);
return optstring[0] == ':' ? ':' : '?';

View File

@ -84,11 +84,6 @@
#include <string.h>
#include <sys/syslog.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <arpa/nameser.h>
#include <resolv.h>
#include "nsswitch.h"
/* Get implementation for some internal functions. */
@ -126,14 +121,6 @@ enum nss_status
_nss_dns_gethostbyname2_r (const char *name, int af, struct hostent *result,
char *buffer, size_t buflen, int *h_errnop)
{
struct host_data
{
char *aliases[MAX_NR_ALIASES];
unsigned char host_addr[16]; /* IPv4 or IPv6 */
char *h_addr_ptrs[MAX_NR_ADDRS + 1];
char linebuffer[0];
} *host_data = (struct host_data *) buffer;
int linebuflen = buflen - offsetof (struct host_data, linebuffer);
querybuf host_buffer;
int size, type, n;
const char *cp;

View File

@ -1,4 +1,4 @@
# Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
# 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
@ -43,7 +43,8 @@ tests := tst-printf tstscanf test_rdwr test-popen tstgetln test-fseek \
xbug errnobug \
bug1 bug2 bug3 bug4 bug5 bug6 bug7 bug8 bug9 bug10 bug11 \
tfformat tiformat tstdiomisc \
scanf1 scanf2 scanf3 scanf4 scanf5 scanf7 scanf8 scanf9 scanf10
scanf1 scanf2 scanf3 scanf4 scanf5 scanf7 scanf8 scanf9 scanf10 \
scanf11
include ../Rules

View File

@ -1,7 +1,7 @@
#include <stdio.h>
int
main(int arc, char *argv)
main (int arc, char *argv)
{
int n, res;
unsigned int val;
@ -14,7 +14,7 @@ main(int arc, char *argv)
printf("Result of sscanf = %d\n", res);
printf("Scanned format %%u = %u\n", val);
printf("Possibly scanned format %%n = %d\n", n);
result |= res != 1 || val != 111 || n != 3;
result |= res != 2 || val != 111 || n != 3;
result |= sscanf ("", " %n", &n) == EOF;

View File

@ -2,14 +2,14 @@
#include <stdlib.h>
int
main(int argc, char *argv[])
main (int argc, char *argv[])
{
int i,n,r;
n = i = r = -1;
r = sscanf("1234:567", "%d%n", &i, &n);
printf("%d %d %d\n", r, n, i);
if (r != 1 || i != 1234 || n != 4)
r = sscanf ("1234:567", "%d%n", &i, &n);
printf ("%d %d %d\n", r, n, i);
if (r != 2 || i != 1234 || n != 4)
abort ();
return 0;
}

View File

@ -11,5 +11,5 @@ main (int argc, char *argv[])
printf ("retc=%d a=%d b=%d\n", retc, a, b);
return retc == -1 && a == 6 && b == 12 ? 0 : 1;
return retc == 2 && a == 6 && b == 12 ? 0 : 1;
}

14
stdio-common/scanf11.c Normal file
View File

@ -0,0 +1,14 @@
/* This test comes from ISO C Corrigendum 1. */
#include <stdio.h>
int
main (int argc, char *argv[])
{
int d1, n1, n2, i;
#define NOISE 1234567
int d2 = NOISE;
i = sscanf ("123", "%d%n%n%d", &d1, &n1, &n2, &d2);
return i != 3 || d1 != 123 || n1 != 3 || n2 != 3 || d2 != NOISE;
}

View File

@ -13,7 +13,7 @@ main(int arc, char *argv[])
printf("Result of sscanf = %d\n", res);
printf("Scanned format %%u = %u\n", val);
printf("Possibly scanned format %%n = %d\n", n);
if (n != 3 || val != 111 || res != 1)
if (n != 3 || val != 111 || res != 2)
abort ();
val = n = -1;
@ -21,7 +21,7 @@ main(int arc, char *argv[])
printf("Result of sscanf = %d\n", res);
printf("Scanned format %%u = %u\n", val);
printf("Possibly scanned format %%n = %d\n", n);
if (n != 3 || val != 111 || res != 1)
if (n != 3 || val != 111 || res != 2)
abort ();
return 0;

View File

@ -27,7 +27,7 @@ t2 (void)
SCAN ("12345", "%ld", N, 1, 12345);
SCAN ("12345", "%llllld", N, 0, -1);
SCAN ("12345", "%LLLLLd", N, 0, -1);
SCAN ("test ", "%*s%n", n, 0, 4);
SCAN ("test ", "%*s%n", n, 1, 4);
SCAN ("test ", "%2*s%n", n, 0, -1);
SCAN ("12 ", "%l2d", n, 0, -1);
SCAN ("12 ", "%2ld", N, 1, 12);

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
/* 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
@ -452,15 +452,18 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
/* Corrigendum 1 to ISO C 1990 describes the allowed flags
with the 'n' conversion specifier. */
if (!(flags & SUPPRESS))
/* Don't count the read-ahead. */
if (flags & LONGDBL)
*ARG (long long int *) = read_in;
else if (flags & LONG)
*ARG (long int *) = read_in;
else if (flags & SHORT)
*ARG (short int *) = read_in;
else
*ARG (int *) = read_in;
{
/* Don't count the read-ahead. */
if (flags & LONGDBL)
*ARG (long long int *) = read_in;
else if (flags & LONG)
*ARG (long int *) = read_in;
else if (flags & SHORT)
*ARG (short int *) = read_in;
else
*ARG (int *) = read_in;
++done;
}
break;
case 'c': /* Match characters. */

View File

@ -1,5 +1,5 @@
/* strtol - Convert string representation of a number into an integer value.
Copyright (C) 1991, 92, 94, 95, 96 Free Software Foundation, Inc.
Copyright (C) 1991, 92, 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
@ -217,13 +217,8 @@ INTERNAL (strtol) (nptr, endptr, base, group)
/* Check for a sign. */
if (*s == L_('-'))
{
#if UNSIGNED
__set_errno (EINVAL);
return 0;
#else
negative = 1;
++s;
#endif
}
else if (*s == L_('+'))
{
@ -317,6 +312,8 @@ INTERNAL (strtol) (nptr, endptr, base, group)
? -((unsigned LONG int) (LONG_MIN + 1)) + 1
: (unsigned LONG int) LONG_MAX))
overflow = 1;
#else
overflow |= negative;
#endif
if (overflow)

View File

@ -37,8 +37,8 @@ static const struct ltest tests[] =
{ " 0", 0, 0, 0, 0 },
{ "0xffffffffg", 0xffffffff, 0, 'g', 0 },
{ "0xf1f2f3f4f5", 0xffffffff, 0, 0, ERANGE },
{ "-0x123456789", 0, 0, 0, EINVAL },
{ "-0xfedcba98", 0, 0, 0, EINVAL },
{ "-0x123456789", 0xffffffff, 0, 0, ERANGE },
{ "-0xfedcba98", 0xffffffff, 0, 0, ERANGE },
{ NULL, 0, 0, 0, 0 },
#else
/* assume 64 bit long... */
@ -65,8 +65,8 @@ static const struct ltest tests[] =
{ "0xffffffffg", 0xffffffff, 0, 'g', 0 },
{ "0xffffffffffffffffg", 0xffffffffffffffff, 0, 'g', 0 },
{ "0xf1f2f3f4f5f6f7f8f9", 0xffffffffffffffff, 0, 0, ERANGE },
{ "-0x123456789abcdef01", 0, 0, 0, EINVAL },
{ "-0xfedcba987654321", 0, 0, 0, EINVAL },
{ "-0x123456789abcdef01", 0xffffffffffffffff, 0, 0, ERANGE },
{ "-0xfedcba987654321", 0xffffffffffffffff, 0, 0, ERANGE },
{ NULL, 0, 0, 0, 0 },
#endif
};

View File

@ -1,20 +1,20 @@
/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
This file is part of the GNU C Library.
/* 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 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.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
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 <stddef.h>
#include <stdio.h>
@ -163,7 +163,7 @@ __stdio_open (filename, m, cookieptr)
/* Open FILENAME with the mode in M. Use the same magic cookie
already in *COOKIEPTR if possible, closing the old cookie with CLOSEFN. */
int
__stdio_reopen (filename, m, cookieptr)
__stdio_reopen (filename, m, cookieptr, closefn)
const char *filename;
__io_mode m;
void **cookieptr;

View File

@ -24,7 +24,7 @@ ENTRY(__ieee754_exp)
fmulp /* x * log2(e) */
fstl %st(1)
frndint /* int(x * log2(e)) */
fsub %st,%st(1) /* fract(x * log2(e)) */
fsubr %st,%st(1) /* fract(x * log2(e)) */
fxch
f2xm1 /* 2^(fract(x * log2(e))) - 1 */
fld1

View File

@ -25,7 +25,7 @@ ENTRY(__ieee754_expf)
fmulp /* x * log2(e) */
fstl %st(1)
frndint /* int(x * log2(e)) */
fsub %st,%st(1) /* fract(x * log2(e)) */
fsubr %st,%st(1) /* fract(x * log2(e)) */
fxch
f2xm1 /* 2^(fract(x * log2(e))) - 1 */
fld1

View File

@ -26,7 +26,7 @@ ENTRY(__ieee754_expl)
fmulp /* x * log2(e) */
fstl %st(1)
frndint /* int(x * log2(e)) */
fsub %st,%st(1) /* fract(x * log2(e)) */
fsubr %st,%st(1) /* fract(x * log2(e)) */
fxch
f2xm1 /* 2^(fract(x * log2(e))) - 1 */
fld1

View File

@ -1,8 +1,9 @@
/* ix87 specific implementation of exp(x)-1.
Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
Based on code by John C. Bowman <bowman@ipp-garching.mpg.de>.
Corrections by H.J. Lu (hjl@gnu.ai.mit.edu), 1997.
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
@ -64,15 +65,16 @@ ENTRY(__expm1)
fmulp // log2(e)*x
fld %st // log2(e)*x : log2(e)*x
frndint // int(log2(e)*x) : log2(e)*x
fsub %st, %st(1) // int(log2(e)*x) : fract(log2(e)*x)
fsubr %st, %st(1) // int(log2(e)*x) : fract(log2(e)*x)
fxch // fract(log2(e)*x) : int(log2(e)*x)
f2xm1 // 2^fract(log2(e)*x)-1 : int(log2(e)*x)
fscale // 2^(log2(e)*x)-2^int(log2(e)*x) : int(log2(e)*x)
fxch // int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fldl MO(one) // 1 : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fscale // 2^int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
faddp // 2^(log2(e)*x)
fsubl MO(one)
fscale // 2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fsubrl MO(one) // 1-2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fstp %st(1) // 1-2^int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fsubrp %st, %st(1) // 2^(log2(e)*x)
ret
2: testl $0x200, %eax // Test sign.

View File

@ -1,8 +1,9 @@
/* ix87 specific implementation of exp(x)-1.
Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
Based on code by John C. Bowman <bowman@ipp-garching.mpg.de>.
Corrections by H.J. Lu (hjl@gnu.ai.mit.edu), 1997.
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
@ -64,15 +65,16 @@ ENTRY(__expm1f)
fmulp // log2(e)*x
fld %st // log2(e)*x : log2(e)*x
frndint // int(log2(e)*x) : log2(e)*x
fsub %st, %st(1) // int(log2(e)*x) : fract(log2(e)*x)
fsubr %st, %st(1) // int(log2(e)*x) : fract(log2(e)*x)
fxch // fract(log2(e)*x) : int(log2(e)*x)
f2xm1 // 2^fract(log2(e)*x)-1 : int(log2(e)*x)
fscale // 2^(log2(e)*x)-2^int(log2(e)*x) : int(log2(e)*x)
fxch // int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fldl MO(one) // 1 : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fscale // 2^int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
faddp // 2^(log2(e)*x)
fsubl MO(one)
fscale // 2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fsubrl MO(one) // 1-2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fstp %st(1) // 1-2^int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fsubrp %st, %st(1) // 2^(log2(e)*x)
ret
2: testl $0x200, %eax // Test sign.

View File

@ -1,8 +1,9 @@
/* ix87 specific implementation of exp(x)-1.
Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
Based on code by John C. Bowman <bowman@ipp-garching.mpg.de>.
Corrections by H.J. Lu (hjl@gnu.ai.mit.edu), 1997.
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
@ -64,15 +65,16 @@ ENTRY(__expm1l)
fmulp // log2(e)*x
fld %st // log2(e)*x : log2(e)*x
frndint // int(log2(e)*x) : log2(e)*x
fsub %st, %st(1) // int(log2(e)*x) : fract(log2(e)*x)
fsubr %st, %st(1) // int(log2(e)*x) : fract(log2(e)*x)
fxch // fract(log2(e)*x) : int(log2(e)*x)
f2xm1 // 2^fract(log2(e)*x)-1 : int(log2(e)*x)
fscale // 2^(log2(e)*x)-2^int(log2(e)*x) : int(log2(e)*x)
fxch // int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fldl MO(one) // 1 : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fscale // 2^int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
faddp // 2^(log2(e)*x)
fsubl MO(one)
fscale // 2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fsubrl MO(one) // 1-2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fstp %st(1) // 1-2^int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fsubrp %st, %st(1) // 2^(log2(e)*x)
ret
2: testl $0x200, %eax // Test sign.

View File

@ -1,3 +1,12 @@
/* Posix options supported by the GNU Hurd port of GNU libc. */
#define _POSIX_JOB_CONTROL 1
#define _POSIX_SAVED_IDS 1
#define _POSIX_VDISABLE ((unsigned char) -1)
/* Different Hurd filesystems might do these differently. */
#undef _POSIX_CHOWN_RESTRICTED
#undef _POSIX_NO_TRUNC
/* Posix options supported by the GNU Hurd port of GNU libc. */
#define _POSIX_JOB_CONTROL 1

View File

@ -55,3 +55,60 @@ vdprintf (int d, const char *format, va_list arg)
return done;
}
/* Copyright (C) 1991, 1992, 1993, 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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <errno.h>
#include <limits.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include <hurd/fd.h>
/* Write formatted output to file descriptor D according to the format string
FORMAT, using the argument list in ARG. */
int
vdprintf (int d, const char *format, va_list arg)
{
int done;
FILE f;
struct hurd_fd *fd;
HURD_CRITICAL_BEGIN;
fd = _hurd_fd_get (fd);
HURD_CRITICAL_END;
if (!fd)
return 0;
/* Create an unbuffered stream talking to D on the stack. */
memset ((PTR) &f, 0, sizeof(f));
f.__magic = _IOMAGIC;
f.__mode.__write = 1;
f.__cookie = fd;
f.__room_funcs = __default_room_functions;
f.__io_funcs = __default_io_functions;
f.__seen = 1;
f.__userbuf = 1;
/* vfprintf will use a buffer on the stack for the life of the call,
and flush it when finished. */
done = vfprintf (&f, format, arg);
return done;
}

View File

@ -1,21 +1,21 @@
/* libc-internal interface for mutex locks. Mach cthreads version.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Copyright (C) 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 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.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
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. */
#ifndef _LIBC_LOCK_H
#define _LIBC_LOCK_H 1
@ -87,4 +87,12 @@ typedef struct __libc_lock_opaque__ __libc_lock_t;
#define __libc_lock_unlock_recursive __libc_lock_unlock
#define __libc_lock_lock_recursive __libc_lock_lock
/* XXX until cthreads supports recursive locks */
#define __libc_lock_define_initialized_recursive __libc_lock_define_initialized
#define __libc_lock_init_recursive __libc_lock_init
#define __libc_lock_fini_recursive __libc_lock_fini
#define __libc_lock_trylock_recursive __libc_lock_trylock
#define __libc_lock_unlock_recursive __libc_lock_unlock
#define __libc_lock_lock_recursive __libc_lock_lock
#endif /* libc-lock.h */

View File

@ -23,6 +23,55 @@ Cambridge, MA 02139, USA. */
#include <string.h>
/* Write formatted output to file descriptor D according to the format string
FORMAT, using the argument list in ARG. */
int
vdprintf (int d, const char *format, va_list arg)
{
int done;
FILE f;
/* Create an unbuffered stream talking to D on the stack. */
memset ((PTR) &f, 0, sizeof(f));
f.__magic = _IOMAGIC;
f.__mode.__write = 1;
f.__cookie = (PTR) (long int) d; /* Casting to long quiets GCC on Alpha. */
f.__room_funcs = __default_room_functions;
f.__io_funcs = __default_io_functions;
f.__seen = 1;
f.__userbuf = 1;
/* vfprintf will use a buffer on the stack for the life of the call,
and flush it when finished. */
done = vfprintf (&f, format, arg);
return done;
}
/* Copyright (C) 1991, 1992, 1993, 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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <errno.h>
#include <limits.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
/* Write formatted output to file descriptor D according to the format string
FORMAT, using the argument list in ARG. */
int

View File

@ -29,3 +29,34 @@ vdprintf (int d, const char *format, va_list arg)
}
stub_warning (vdprintf)
/* Copyright (C) 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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <errno.h>
#include <stdio.h>
/* Write formatted output to file descriptor D according to the format string
FORMAT, using the argument list in ARG. */
int
vdprintf (int d, const char *format, va_list arg)
{
__set_errno (ENOSYS);
return NULL;
}
stub_warning (vdprintf)

View File

@ -289,7 +289,7 @@ $(common-objpfx)sysd-syscalls: $(..)sysdeps/unix/make-syscalls.sh \
test -f $$dir/syscalls.list && \
{ $(SHELL) $(dir $<)$(notdir $<) \
$$dir $(object-suffixes) || exit 1; }; \
test $$dir = sysdeps/unix && break; \
test $$dir = $(..)sysdeps/unix && break; \
done > $@T
mv -f $@T $@

View File

@ -1,21 +1,21 @@
/* Directory entry structure `struct dirent'. 4.4BSD version.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Copyright (C) 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 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.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
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. */
struct dirent
{

View File

@ -0,0 +1,7 @@
/* This is the sigaction struction from the Linux 2.1.20 kernel. */
struct kernel_sigaction {
__sighandler_t sa_handler;
unsigned long sa_mask;
unsigned int sa_flags;
};

View File

@ -0,0 +1,85 @@
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
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. */
#ifndef _SYS_IPC_BUF_H
#define _SYS_IPC_BUF_H 1
#include <features.h>
#include <sys/types.h>
/* Mode bits for `msgget', `semget', and `shmget'. */
#define IPC_CREAT 01000 /* Create key if key does not exist. */
#define IPC_EXCL 02000 /* Fail if key exists. */
#define IPC_NOWAIT 04000 /* Return error on wait. */
/* Control commands for `msgctl', `semctl', and `shmctl'. */
#define IPC_RMID 0 /* Remove identifier. */
#define IPC_SET 1 /* Set `ipc_perm' options. */
#define IPC_STAT 2 /* Get `ipc_perm' options. */
#define IPC_INFO 3 /* See ipcs. */
__BEGIN_DECLS
/* Special key values. */
#define IPC_PRIVATE ((__key_t) 0) /* Private key. */
/* Data structure used to pass permission information to IPC operations. */
struct ipc_perm
{
__key_t __key; /* Key. */
unsigned int uid; /* Owner's user ID. */
unsigned int gid; /* Owner's group ID. */
unsigned int cuid; /* Creator's user ID. */
unsigned int cgid; /* Creator's group ID. */
unsigned int mode; /* Read/write permission. */
unsigned short int __seq; /* Sequence number. */
};
/* Kludge to work around Linux' restriction of only up to five
arguments to a system call. */
struct ipc_kludge
{
void *msgp;
long int msgtyp;
};
/* The actual system call: all functions are multiplexed by this. */
extern int __ipc __P ((int __call, int __first, int __second, int __third,
void *__ptr));
/* The codes for the functions to use the multiplexer `__ipc'. */
#define IPCOP_semop 1
#define IPCOP_semget 2
#define IPCOP_semctl 3
#define IPCOP_msgsnd 11
#define IPCOP_msgrcv 12
#define IPCOP_msgget 13
#define IPCOP_msgctl 14
#define IPCOP_shmat 21
#define IPCOP_shmdt 22
#define IPCOP_shmget 23
#define IPCOP_shmctl 24
__END_DECLS
#endif /* _SYS_IPC_BUF_H */

View File

@ -0,0 +1,109 @@
/* Copyright (C) 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. */
#ifndef _SYS_PROCFS_H
#define _SYS_PROCFS_H 1
#include <features.h>
/* This is somehow modelled after the file of the same name on SysVr4
systems. It provides a definition of the core file format for ELF
used on Linux. */
#include <signal.h>
#include <sys/time.h>
#include <sys/types.h>
#include <asm/user.h>
#include <asm/elf.h>
__BEGIN_DECLS
struct elf_siginfo
{
int si_signo; /* Signal number. */
int si_code; /* Extra code. */
int si_errno; /* Errno. */
};
typedef elf_greg_t greg_t;
typedef elf_gregset_t gregset_t;
typedef elf_fpregset_t fpregset_t;
#define NGREG ELF_NGREG
/* Definitions to generate Intel SVR4-like core files. These mostly
have the same names as the SVR4 types with "elf_" tacked on the
front to prevent clashes with linux definitions, and the typedef
forms have been avoided. This is mostly like the SVR4 structure,
but more Linuxy, with things that Linux does not support and which
gdb doesn't really use excluded. Fields present but not used are
marked with "XXX". */
struct elf_prstatus
{
#if 0
long int pr_flags; /* XXX Process flags. */
short int pr_why; /* XXX Reason for process halt. */
short int pr_what; /* XXX More detailed reason. */
#endif
struct elf_siginfo pr_info; /* Info associated with signal. */
short int pr_cursig; /* Current signal. */
unsigned long int pr_sigpend; /* Set of pending signals. */
unsigned long int pr_sighold; /* Set of held signals. */
#if 0
struct sigaltstack pr_altstack; /* Alternate stack info. */
struct sigaction pr_action; /* Signal action for current sig. */
#endif
__pid_t pr_pid;
__pid_t pr_ppid;
__pid_t pr_pgrp;
__pid_t pr_sid;
struct timeval pr_utime; /* User time. */
struct timeval pr_stime; /* System time. */
struct timeval pr_cutime; /* Cumulative user time. */
struct timeval pr_cstime; /* Cumulative system time. */
#if 0
long int pr_instr; /* Current instruction. */
#endif
elf_gregset_t pr_reg; /* GP registers. */
int pr_fpvalid; /* True if math copro being used. */
};
#define ELF_PRARGSZ (80) /* Number of chars for args */
struct elf_prpsinfo
{
char pr_state; /* Numeric process state. */
char pr_sname; /* Char for pr_state. */
char pr_zomb; /* Zombie. */
char pr_nice; /* Nice val. */
unsigned long int pr_flag; /* Flags. */
unsigned int pr_uid;
unsigned int pr_gid;
unsigned int pr_pid, pr_ppid, pr_pgrp, pr_sid;
/* Lots missing */
char pr_fname[16]; /* Filename of executable. */
char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */
};
typedef struct elf_prstatus prstatus_t;
typedef struct elf_prpsinfo prpsinfo_t;
__END_DECLS
#endif /* sys/procfs.h */

View File

@ -0,0 +1,43 @@
/* Copyright (C) 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 <sys/types.h>
#include <unistd.h>
#include <linux/posix_types.h>
extern int __syscall_getgroups __P ((int, __kernel_gid_t *));
/* For Linux we must convert the array of groups from the format that the
kernel returns. */
int
__getgroups (n, groups)
int n;
gid_t *groups;
{
int i, ngids;
__kernel_gid_t kernel_groups[n];
ngids = __syscall_getgroups (n, kernel_groups);
if (n != 0 && ngids > 0)
for (i = 0; i < ngids; i++)
groups[i] = kernel_groups[i];
return ngids;
}
weak_alias (__getgroups, getgroups)

View File

@ -0,0 +1,41 @@
/* Copyright (C) 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 <sys/types.h>
#include <unistd.h>
#include <grp.h>
#include <linux/posix_types.h>
extern int __syscall_setgroups __P ((int, const __kernel_gid_t *));
/* Set the group set for the current user to GROUPS (N of them). For
Linux we must convert the array of groups into the format that the
kernel expects. */
int
setgroups (n, groups)
size_t n;
const gid_t *groups;
{
size_t i;
__kernel_gid_t kernel_groups[n];
for (i = 0; i < n; i++)
kernel_groups[i] = groups[i];
return __syscall_setgroups (n, kernel_groups);
}

View File

@ -1,4 +1,6 @@
# File name Caller Syscall name # args Strong name Weak names
s_getgroups getgroups getgroups 2 __syscall_getgroups
s_llseek llseek _llseek 5 __sys_llseek
s_setgroups setgroups setgroups 2 __syscall_setgroups
vm86 - vm86 1 __vm86 vm86

View File

@ -0,0 +1,10 @@
/* This is the sigaction structure from the Linux 2.1.20 kernel. */
#define HAVE_SA_RESTORER
struct kernel_sigaction {
__sighandler_t sa_handler;
unsigned long sa_mask;
unsigned long sa_flags;
void (*sa_restorer) __P ((void));
};

View File

@ -0,0 +1,2 @@
/* We also have to rewrite the kernel gid_t to the user land type. */
#include <sysdeps/unix/sysv/linux/i386/getgroups.c>

View File

@ -0,0 +1,2 @@
/* We also have to rewrite the kernel gid_t to the user land type. */
#include <sysdeps/unix/sysv/linux/i386/setgroups.c>

View File

@ -1,3 +1,5 @@
# File name Caller Syscall name # args Strong name Weak names
s_getgroups getgroups getgroups 2 __syscall_getgroups
s_llseek llseek _llseek 5 __sys_llseek
s_setgroups setgroups setgroups 2 __syscall_setgroups

View File

@ -0,0 +1,63 @@
/* Copyright (C) 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 <signal.h>
/* The difference here is that the sigaction structure used in the
kernel is not the same as we use in the libc. Therefore we must
translate it here. */
#include <kernel_sigaction.h>
extern int __syscall_sigaction (int, const struct kernel_sigaction *,
struct kernel_sigaction *);
/* If ACT is not NULL, change the action for SIG to *ACT.
If OACT is not NULL, put the old action for SIG in *OACT. */
int
__sigaction (sig, act, oact)
int sig;
const struct sigaction *act;
struct sigaction *oact;
{
struct kernel_sigaction k_sigact, k_osigact;
int error;
if (act)
{
k_sigact.sa_handler = act->sa_handler;
k_sigact.sa_mask = act->sa_mask.__val[0];
k_sigact.sa_flags = act->sa_flags;
#ifdef HAVE_SA_RESTORER
k_sigact.sa_restorer = act->sa_restorer;
#endif
}
error = __syscall_sigaction (sig, act ? &k_sigact : 0,
oact ? &k_osigact : 0);
if (oact && error >= 0)
{
oact->sa_handler = k_osigact.sa_handler;
oact->sa_mask.__val[0] = k_osigact.sa_mask;
oact->sa_flags = k_osigact.sa_flags;
#ifdef HAVE_SA_RESTORER
oact->sa_restorer = k_osigact.sa_restorer;
#endif
}
return error;
}
weak_alias (__sigaction, sigaction)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
@ -25,43 +25,43 @@
#include <sys/types.h>
/* Mode bits for `msgget', `semget', and `shmget'. */
#define IPC_CREAT 01000 /* create key if key does not exist */
#define IPC_EXCL 02000 /* fail if key exists */
#define IPC_NOWAIT 04000 /* return error on wait */
#define IPC_CREAT 01000 /* Create key if key does not exist. */
#define IPC_EXCL 02000 /* Fail if key exists. */
#define IPC_NOWAIT 04000 /* Return error on wait. */
/* Control commands for `msgctl', `semctl', and `shmctl'. */
#define IPC_RMID 0 /* remove identifier */
#define IPC_SET 1 /* set `ipc_perm' options */
#define IPC_STAT 2 /* get `ipc_perm' options */
#define IPC_INFO 3 /* see ipcs */
#define IPC_RMID 0 /* Remove identifier. */
#define IPC_SET 1 /* Set `ipc_perm' options. */
#define IPC_STAT 2 /* Get `ipc_perm' options. */
#define IPC_INFO 3 /* See ipcs. */
__BEGIN_DECLS
/* Special key values. */
#define IPC_PRIVATE ((key_t) 0) /* private key */
#define IPC_PRIVATE ((__key_t) 0) /* Private key. */
/* Data structure used to pass permission information to IPC operations. */
struct ipc_perm
{
key_t __key; /* key */
__uid_t uid; /* owner's user ID */
__gid_t gid; /* owner's group ID */
__uid_t cuid; /* creator's user ID */
__gid_t cgid; /* creator's group ID */
__mode_t mode; /* read/write permission */
unsigned short int __seq; /* sequence number */
};
{
__key_t __key; /* Key. */
unsigned short int uid; /* Owner's user ID. */
unsigned short int gid; /* Owner's group ID. */
unsigned short int cuid; /* Creator's user ID. */
unsigned short int cgid; /* Creator's group ID. */
unsigned short int mode; /* Read/write permission. */
unsigned short int __seq; /* Sequence number. */
};
/* Kludge to work around Linux' restriction of only up to five
arguments to a system call. */
struct ipc_kludge
{
void *msgp;
long msgtyp;
};
{
void *msgp;
long int msgtyp;
};
/* The actual system call: all functions are multiplexed by this. */
extern int __ipc __P ((int __call, int __first, int __second, int __third,

View File

@ -1,4 +1,5 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
/* Structures and definitions for magnetic tape I/O control commands.
Copyright (C) 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
@ -16,13 +17,250 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Written by H. Bergman <hennus@cybercomm.nl>. */
#ifndef _SYS_MTIO_H
#define _SYS_MTIO_H 1
/* Get necessary definitions from system and kernel headers. */
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/mtio.h>
/* Structure for MTIOCTOP - magnetic tape operation command. */
struct mtop
{
short int mt_op; /* Operations defined below. */
int mt_count; /* How many of them. */
};
/* Magnetic Tape operations [Not all operations supported by all drivers]. */
#define MTRESET 0 /* +reset drive in case of problems. */
#define MTFSF 1 /* Forward space over FileMark,
* position at first record of next file. */
#define MTBSF 2 /* Backward space FileMark (position before FM). */
#define MTFSR 3 /* Forward space record. */
#define MTBSR 4 /* Backward space record. */
#define MTWEOF 5 /* Write an end-of-file record (mark). */
#define MTREW 6 /* Rewind. */
#define MTOFFL 7 /* Rewind and put the drive offline (eject?). */
#define MTNOP 8 /* No op, set status only (read with MTIOCGET). */
#define MTRETEN 9 /* Retension tape. */
#define MTBSFM 10 /* +backward space FileMark, position at FM. */
#define MTFSFM 11 /* +forward space FileMark, position at FM. */
#define MTEOM 12 /* Goto end of recorded media (for appending files).
MTEOM positions after the last FM, ready for
appending another file. */
#define MTERASE 13 /* Erase tape -- be careful! */
#define MTRAS1 14 /* Run self test 1 (nondestructive). */
#define MTRAS2 15 /* Run self test 2 (destructive). */
#define MTRAS3 16 /* Reserved for self test 3. */
#define MTSETBLK 20 /* Set block length (SCSI). */
#define MTSETDENSITY 21 /* Set tape density (SCSI). */
#define MTSEEK 22 /* Seek to block (Tandberg, etc.). */
#define MTTELL 23 /* Tell block (Tandberg, etc.). */
#define MTSETDRVBUFFER 24 /* Set the drive buffering according to SCSI-2.
Ordinary buffered operation with code 1. */
#define MTFSS 25 /* Space forward over setmarks. */
#define MTBSS 26 /* Space backward over setmarks. */
#define MTWSM 27 /* Write setmarks. */
#define MTLOCK 28 /* Lock the drive door. */
#define MTUNLOCK 29 /* Unlock the drive door. */
#define MTLOAD 30 /* Execute the SCSI load command. */
#define MTUNLOAD 31 /* Execute the SCSI unload command. */
#define MTCOMPRESSION 32/* Control compression with SCSI mode page 15. */
#define MTSETPART 33 /* Change the active tape partition. */
#define MTMKPART 34 /* Format the tape with one or two partitions. */
/* structure for MTIOCGET - mag tape get status command */
struct mtget
{
long int mt_type; /* Type of magtape device. */
long int mt_resid; /* Residual count: (not sure)
number of bytes ignored, or
number of files not skipped, or
number of records not skipped. */
/* The following registers are device dependent. */
long int mt_dsreg; /* Status register. */
long int mt_gstat; /* Generic (device independent) status. */
long int mt_erreg; /* Error register. */
/* The next two fields are not always used. */
__daddr_t mt_fileno; /* Number of current file on tape. */
__daddr_t mt_blkno; /* Current block number. */
};
/* Constants for mt_type. Not all of these are supported, and
these are not all of the ones that are supported. */
#define MT_ISUNKNOWN 0x01
#define MT_ISQIC02 0x02 /* Generic QIC-02 tape streamer. */
#define MT_ISWT5150 0x03 /* Wangtek 5150EQ, QIC-150, QIC-02. */
#define MT_ISARCHIVE_5945L2 0x04 /* Archive 5945L-2, QIC-24, QIC-02?. */
#define MT_ISCMSJ500 0x05 /* CMS Jumbo 500 (QIC-02?). */
#define MT_ISTDC3610 0x06 /* Tandberg 6310, QIC-24. */
#define MT_ISARCHIVE_VP60I 0x07 /* Archive VP60i, QIC-02. */
#define MT_ISARCHIVE_2150L 0x08 /* Archive Viper 2150L. */
#define MT_ISARCHIVE_2060L 0x09 /* Archive Viper 2060L. */
#define MT_ISARCHIVESC499 0x0A /* Archive SC-499 QIC-36 controller. */
#define MT_ISQIC02_ALL_FEATURES 0x0F /* Generic QIC-02 with all features. */
#define MT_ISWT5099EEN24 0x11 /* Wangtek 5099-een24, 60MB, QIC-24. */
#define MT_ISTEAC_MT2ST 0x12 /* Teac MT-2ST 155mb drive,
Teac DC-1 card (Wangtek type). */
#define MT_ISEVEREX_FT40A 0x32 /* Everex FT40A (QIC-40). */
#define MT_ISDDS1 0x51 /* DDS device without partitions. */
#define MT_ISDDS2 0x52 /* DDS device with partitions. */
#define MT_ISSCSI1 0x71 /* Generic ANSI SCSI-1 tape unit. */
#define MT_ISSCSI2 0x72 /* Generic ANSI SCSI-2 tape unit. */
/* QIC-40/80/3010/3020 ftape supported drives.
20bit vendor ID + 0x800000 (see vendors.h in ftape distribution). */
#define MT_ISFTAPE_UNKNOWN 0x800000 /* obsolete */
#define MT_ISFTAPE_FLAG 0x800000
struct mt_tape_info
{
long int t_type; /* Device type id (mt_type). */
char *t_name; /* Descriptive name. */
};
#define MT_TAPE_INFO \
{ \
{MT_ISUNKNOWN, "Unknown type of tape device"}, \
{MT_ISQIC02, "Generic QIC-02 tape streamer"}, \
{MT_ISWT5150, "Wangtek 5150, QIC-150"}, \
{MT_ISARCHIVE_5945L2, "Archive 5945L-2"}, \
{MT_ISCMSJ500, "CMS Jumbo 500"}, \
{MT_ISTDC3610, "Tandberg TDC 3610, QIC-24"}, \
{MT_ISARCHIVE_VP60I, "Archive VP60i, QIC-02"}, \
{MT_ISARCHIVE_2150L, "Archive Viper 2150L"}, \
{MT_ISARCHIVE_2060L, "Archive Viper 2060L"}, \
{MT_ISARCHIVESC499, "Archive SC-499 QIC-36 controller"}, \
{MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"}, \
{MT_ISWT5099EEN24, "Wangtek 5099-een24, 60MB"}, \
{MT_ISTEAC_MT2ST, "Teac MT-2ST 155mb data cassette drive"}, \
{MT_ISEVEREX_FT40A, "Everex FT40A, QIC-40"}, \
{MT_ISSCSI1, "Generic SCSI-1 tape"}, \
{MT_ISSCSI2, "Generic SCSI-2 tape"}, \
{0, NULL} \
}
/* Structure for MTIOCPOS - mag tape get position command. */
struct mtpos
{
long int mt_blkno; /* Current block number. */
};
/* Structure for MTIOCGETCONFIG/MTIOCSETCONFIG primarily intended
as an interim solution for QIC-02 until DDI is fully implemented. */
struct mtconfiginfo
{
long int mt_type; /* Drive type. */
long int ifc_type; /* Interface card type. */
unsigned short int irqnr; /* IRQ number to use. */
unsigned short int dmanr; /* DMA channel to use. */
unsigned short int port; /* IO port base address. */
unsigned long int debug; /* Debugging flags. */
unsigned have_dens:1;
unsigned have_bsf:1;
unsigned have_fsr:1;
unsigned have_bsr:1;
unsigned have_eod:1;
unsigned have_seek:1;
unsigned have_tell:1;
unsigned have_ras1:1;
unsigned have_ras2:1;
unsigned have_ras3:1;
unsigned have_qfa:1;
unsigned pad1:5;
char reserved[10];
};
/* Magnetic tape I/O control commands. */
#define MTIOCTOP _IOW('m', 1, struct mtop) /* Do a mag tape op. */
#define MTIOCGET _IOR('m', 2, struct mtget) /* Get tape status. */
#define MTIOCPOS _IOR('m', 3, struct mtpos) /* Get tape position.*/
/* The next two are used by the QIC-02 driver for runtime reconfiguration.
See tpqic02.h for struct mtconfiginfo. */
#define MTIOCGETCONFIG _IOR('m', 4, struct mtconfiginfo) /* Get tape config.*/
#define MTIOCSETCONFIG _IOW('m', 5, struct mtconfiginfo) /* Set tape config.*/
/* Generic Mag Tape (device independent) status macros for examining
mt_gstat -- HP-UX compatible.
There is room for more generic status bits here, but I don't
know which of them are reserved. At least three or so should
be added to make this really useful. */
#define GMT_EOF(x) ((x) & 0x80000000)
#define GMT_BOT(x) ((x) & 0x40000000)
#define GMT_EOT(x) ((x) & 0x20000000)
#define GMT_SM(x) ((x) & 0x10000000) /* DDS setmark */
#define GMT_EOD(x) ((x) & 0x08000000) /* DDS EOD */
#define GMT_WR_PROT(x) ((x) & 0x04000000)
/* #define GMT_ ? ((x) & 0x02000000) */
#define GMT_ONLINE(x) ((x) & 0x01000000)
#define GMT_D_6250(x) ((x) & 0x00800000)
#define GMT_D_1600(x) ((x) & 0x00400000)
#define GMT_D_800(x) ((x) & 0x00200000)
/* #define GMT_ ? ((x) & 0x00100000) */
/* #define GMT_ ? ((x) & 0x00080000) */
#define GMT_DR_OPEN(x) ((x) & 0x00040000) /* Door open (no tape). */
/* #define GMT_ ? ((x) & 0x00020000) */
#define GMT_IM_REP_EN(x) ((x) & 0x00010000) /* Immediate report mode.*/
/* 16 generic status bits unused. */
/* SCSI-tape specific definitions. Bitfield shifts in the status */
#define MT_ST_BLKSIZE_SHIFT 0
#define MT_ST_BLKSIZE_MASK 0xffffff
#define MT_ST_DENSITY_SHIFT 24
#define MT_ST_DENSITY_MASK 0xff000000
#define MT_ST_SOFTERR_SHIFT 0
#define MT_ST_SOFTERR_MASK 0xffff
/* Bitfields for the MTSETDRVBUFFER ioctl. */
#define MT_ST_OPTIONS 0xf0000000
#define MT_ST_BOOLEANS 0x10000000
#define MT_ST_SETBOOLEANS 0x30000000
#define MT_ST_CLEARBOOLEANS 0x40000000
#define MT_ST_WRITE_THRESHOLD 0x20000000
#define MT_ST_DEF_BLKSIZE 0x50000000
#define MT_ST_DEF_OPTIONS 0x60000000
#define MT_ST_BUFFER_WRITES 0x1
#define MT_ST_ASYNC_WRITES 0x2
#define MT_ST_READ_AHEAD 0x4
#define MT_ST_DEBUGGING 0x8
#define MT_ST_TWO_FM 0x10
#define MT_ST_FAST_MTEOM 0x20
#define MT_ST_AUTO_LOCK 0x40
#define MT_ST_DEF_WRITES 0x80
#define MT_ST_CAN_BSR 0x100
#define MT_ST_NO_BLKLIMS 0x200
#define MT_ST_CAN_PARTITIONS 0x400
#define MT_ST_SCSI2LOGICAL 0x800
/* The mode parameters to be controlled. Parameter chosen with bits 20-28. */
#define MT_ST_CLEAR_DEFAULT 0xfffff
#define MT_ST_DEF_DENSITY (MT_ST_DEF_OPTIONS | 0x100000)
#define MT_ST_DEF_COMPRESSION (MT_ST_DEF_OPTIONS | 0x200000)
#define MT_ST_DEF_DRVBUFFER (MT_ST_DEF_OPTIONS | 0x300000)
/* The offset for the arguments for the special HP changer load command. */
#define MT_ST_HPLOADER_OFFSET 10000
/* Specify default tape device. */
#ifndef DEFTAPE

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
/* Copyright (C) 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
@ -34,11 +34,11 @@
__BEGIN_DECLS
struct elf_siginfo
{
int si_signo; /* signal number */
int si_code; /* extra code */
int si_errno; /* errno */
};
{
int si_signo; /* Signal number. */
int si_code; /* Extra code. */
int si_errno; /* Errno. */
};
typedef elf_greg_t greg_t;
typedef elf_gregset_t gregset_t;
@ -53,52 +53,52 @@ typedef elf_fpregset_t fpregset_t;
gdb doesn't really use excluded. Fields present but not used are
marked with "XXX". */
struct elf_prstatus
{
{
#if 0
long pr_flags; /* XXX Process flags */
short pr_why; /* XXX Reason for process halt */
short pr_what; /* XXX More detailed reason */
long int pr_flags; /* XXX Process flags. */
short int pr_why; /* XXX Reason for process halt. */
short int pr_what; /* XXX More detailed reason. */
#endif
struct elf_siginfo pr_info; /* Info associated with signal */
short pr_cursig; /* Current signal */
sigset_t pr_sigpend; /* Set of pending signals */
sigset_t pr_sighold; /* Set of held signals */
struct elf_siginfo pr_info; /* Info associated with signal. */
short int pr_cursig; /* Current signal. */
unsigned long int pr_sigpend; /* Set of pending signals. */
unsigned long int pr_sighold; /* Set of held signals. */
#if 0
struct sigaltstack pr_altstack; /* Alternate stack info */
struct sigaction pr_action; /* Signal action for current sig */
struct sigaltstack pr_altstack; /* Alternate stack info. */
struct sigaction pr_action; /* Signal action for current sig. */
#endif
pid_t pr_pid;
pid_t pr_ppid;
pid_t pr_pgrp;
pid_t pr_sid;
struct timeval pr_utime; /* User time */
struct timeval pr_stime; /* System time */
struct timeval pr_cutime; /* Cumulative user time */
struct timeval pr_cstime; /* Cumulative system time */
__pid_t pr_pid;
__pid_t pr_ppid;
__pid_t pr_pgrp;
__pid_t pr_sid;
struct timeval pr_utime; /* User time. */
struct timeval pr_stime; /* System time. */
struct timeval pr_cutime; /* Cumulative user time. */
struct timeval pr_cstime; /* Cumulative system time. */
#if 0
long pr_instr; /* Current instruction */
long int pr_instr; /* Current instruction. */
#endif
elf_gregset_t pr_reg; /* GP registers */
int pr_fpvalid; /* True if math copro being used. */
};
elf_gregset_t pr_reg; /* GP registers. */
int pr_fpvalid; /* True if math copro being used. */
};
#define ELF_PRARGSZ (80) /* Number of chars for args */
struct elf_prpsinfo
{
char pr_state; /* numeric process state */
char pr_sname; /* char for pr_state */
char pr_zomb; /* zombie */
char pr_nice; /* nice val */
unsigned long pr_flag; /* flags */
uid_t pr_uid;
gid_t pr_gid;
pid_t pr_pid, pr_ppid, pr_pgrp, pr_sid;
/* Lots missing */
char pr_fname[16]; /* filename of executable */
char pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */
};
{
char pr_state; /* Numeric process state. */
char pr_sname; /* Char for pr_state. */
char pr_zomb; /* Zombie. */
char pr_nice; /* Nice val. */
unsigned long int pr_flag; /* Flags. */
unsigned short int pr_uid;
unsigned short int pr_gid;
unsigned short int pr_pid, pr_ppid, pr_pgrp, pr_sid;
/* Lots missing */
char pr_fname[16]; /* Filename of executable. */
char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */
};
typedef struct elf_prstatus prstatus_t;

View File

@ -22,8 +22,8 @@
#define _SYS_SYSMACROS_H 1
/* For compatibility we provide alternative names. */
#define major(dev) ((dev) >> 32)
#define minor(dev) ((dev) & 0xffffffff)
#define makedev(major, minor) (((major) << 32) | (monor))
#define major(dev) (((dev) >> 8) & 0xff)
#define minor(dev) ((dev) & 0xff)
#define makedev(major, minor) (((major) << 8) | (minor))
#endif /* _SYS_SYSMACROS_H */

View File

@ -35,6 +35,7 @@ s_getdents EXTRA getdents 3 __getdents
s_getpriority getpriority getpriority 2 __syscall_getpriority
s_ptrace ptrace ptrace 4 __syscall_ptrace
s_reboot EXTRA reboot 3 __syscall_reboot
s_sigaction sigaction sigaction 3 __syscall_sigaction
s_sigsuspend sigsuspend sigsuspend 3 __syscall_sigsuspend
s_sysctl sysctl _sysctl 1 __syscall__sysctl
s_ustat ustat ustat 2 __syscall_ustat

View File

@ -1,4 +1,4 @@
# Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
# 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
@ -12,9 +12,9 @@
# 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., 675 Mass Ave,
# Cambridge, MA 02139, USA.
# 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.
#
# Makefile for time routines
@ -36,15 +36,21 @@ routines := offtime asctime clock ctime ctime_r difftime \
others := ap zdump zic
tests := test_time clocktest test-tz
# Before the test-tz test can be run we need the data to be installed.
tests: install-test-data
tzfiles := africa antarctica asia australasia europe northamerica \
southamerica etcetera factory systemv backward \
solar87 solar88 solar89
# pacificnew doesn't compile; if it is to be used, it should be included in
# northamerica.
distribute := $(distribute) $(tzfiles) leapseconds pacificnew
distribute := $(distribute) $(tzfiles) leapseconds pacificnew simplebackw
install-sbin := zic zdump
generated-dirs = testdata
all: # Make this the default target; it will be defined in Rules.
include ../Makeconfig # Get objpfx defined so we can use it below.
@ -72,6 +78,11 @@ install-others = $(addprefix $(zonedir)/,$(zonenames) \
$(installed-localtime-file) $(installed-posixrules-file)
endif
ifeq ($(have-ksh),yes)
install-others += $(zonedir)/iso3166.tab $(zonedir)/zone.tab
install-bin += tzselect
endif
include ../Rules
@ -146,3 +157,25 @@ CFLAGS-zic.c = -Wno-strict-prototypes -DNOID $(tz-cflags)
CFLAGS-ialloc.c = -Wno-strict-prototypes -DNOID
CFLAGS-scheck.c = -Wno-strict-prototypes -DNOID
CFLAGS-tzfile.c = $(tz-cflags)
# We have to make sure the data for testing the tz functions is available.
.PHONY: install-test-data
install-test-data: northamerica $(objpfx)zic $(leapseconds) yearistype \
etcetera simplebackw
-mkdir $(objpfx)testdata
$(built-program-cmd) -d $(objpfx)testdata -L $(leapseconds) \
-y yearistype northamerica
$(built-program-cmd) -d $(objpfx)testdata -L $(leapseconds) \
-y yearistype etcetera
$(built-program-cmd) -d $(objpfx)testdata -L $(leapseconds) \
-y yearistype simplebackw
test-tz-ENV = TZDIR=$(objpfx)testdata
$(objpfx)tzselect: tzselect.ksh
sed -e 's%@KSH@%$(KSH)%g' \
-e 's%@TZDIR@%$(zonedir)%g' < $< > $@.new
chmod 555 $@.new
mv -f $@.new $@
$(addprefix $(zonedir)/,iso3166.tab zone.tab): $(zonedir)/%: %; $(do-install)

View File

@ -1,22 +1,21 @@
/* Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
/* Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Paul Eggert (eggert@twinsun.com).
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 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.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
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. */
/* Define this to have a standalone program to test this implementation of
mktime. */
@ -86,6 +85,9 @@ Cambridge, MA 02139, USA. */
((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
#endif
/* Prototype for the internal function to get information based on TZ. */
extern void __tzset_internal __P ((int always));
/* How many days come before each month (0-12). */
const unsigned short int __mon_yday[2][13] =
{
@ -161,6 +163,11 @@ time_t
mktime (tp)
struct tm *tp;
{
#ifdef _LIBC
/* Update internal database according to current TZ setting. */
__tzset_internal (1);
#endif
return __mktime_internal (tp, localtime_r, &localtime_offset);
}

2
time/simplebackw Normal file
View File

@ -0,0 +1,2 @@
Link Etc/UTC UTC
Link Etc/Universal Universal

View File

@ -1,5 +1,5 @@
/* strptime - Convert a string representation of time to a time value.
Copyright (C) 1996 Free Software Foundation, Inc.
/* Convert a string representation of time to a time value.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@ -18,24 +18,71 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* XXX This version of the implementation is not really complete.
Some of the fields cannot add information alone. But if seeing
some of them in the same format (such as year, week and weekday)
this is enough information for determining the date. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <ctype.h>
#include <langinfo.h>
#include <limits.h>
#include <string.h>
#include <time.h>
#include "../locale/localeinfo.h"
#ifdef _LIBC
# include "../locale/localeinfo.h"
#endif
#ifndef __P
# if defined (__GNUC__) || (defined (__STDC__) && __STDC__)
# define __P(args) args
# else
# define __P(args) ()
# endif /* GCC. */
#endif /* Not __P. */
#if ! HAVE_LOCALTIME_R && ! defined (localtime_r)
#ifdef _LIBC
#define localtime_r __localtime_r
#else
/* Approximate localtime_r as best we can in its absence. */
#define localtime_r my_localtime_r
static struct tm *localtime_r __P ((const time_t *, struct tm *));
static struct tm *
localtime_r (t, tp)
const time_t *t;
struct tm *tp;
{
struct tm *l = localtime (t);
if (! l)
return 0;
*tp = *l;
return tp;
}
#endif /* ! _LIBC */
#endif /* ! HAVE_LOCALTIME_R && ! defined (localtime_r) */
#define match_char(ch1, ch2) if (ch1 != ch2) return NULL
#define match_string(cs1, s2) \
#if defined __GNUC__ && __GNUC__ >= 2
# define match_string(cs1, s2) \
({ size_t len = strlen (cs1); \
int result = strncasecmp (cs1, s2, len) == 0; \
if (result) s2 += len; \
int result = strncasecmp ((cs1), (s2), len) == 0; \
if (result) (s2) += len; \
result; })
#else
/* Oh come on. Get a reasonable compiler. */
# define match_string(cs1, s2) \
(strncasecmp ((cs1), (s2), strlen (cs1)) ? 0 : ((s2) += strlen (cs1), 1))
#endif
/* We intentionally do not use isdigit() for testing because this will
lead to problems with the wide character version. */
#define get_number(from, to) \
#define get_number(from, to) \
do { \
val = 0; \
if (*rp < '0' || *rp > '9') \
@ -47,33 +94,98 @@
if (val < from || val > to) \
return NULL; \
} while (0)
#define get_alt_number(from, to) \
#ifdef _NL_CURRENT
# define get_alt_number(from, to) \
do { \
const char *alts = _NL_CURRENT (LC_TIME, ALT_DIGITS); \
val = 0; \
while (*alts != '\0') \
if (*decided != raw) \
{ \
size_t len = strlen (alts); \
if (strncasecmp (alts, rp, len) == 0) \
break; \
alts = strchr (alts, '\0') + 1; \
++val; \
const char *alts = _NL_CURRENT (LC_TIME, ALT_DIGITS); \
val = 0; \
while (*alts != '\0') \
{ \
size_t len = strlen (alts); \
if (strncasecmp (alts, rp, len) == 0) \
break; \
alts = strchr (alts, '\0') + 1; \
++val; \
} \
if (*alts == '\0') \
{ \
if (*decided == loc && val != 0) \
return NULL; \
} \
else \
{ \
*decided = loc; \
break; \
} \
} \
if (*alts == '\0') \
return NULL; \
} while (0)
#define recursive(new_fmt) \
do { \
if (*new_fmt == '\0') \
return NULL; \
rp = strptime (rp, new_fmt, tm); \
if (rp == NULL) \
return NULL; \
get_number (from, to); \
} while (0)
#else
# define get_alt_number(from, to) \
/* We don't have the alternate representation. */ \
get_number(from, to)
#endif
#define recursive(new_fmt) \
(*(new_fmt) != '\0' \
|| strptime_internal (rp, (new_fmt), tm, decided) != NULL)
char *
strptime (const char *buf, const char *format, struct tm *tm)
#ifdef _LIBC
/* This is defined in locale/C-time.c in the GNU libc. */
extern const struct locale_data _nl_C_LC_TIME;
# define weekday_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (DAY_1)].string)
# define ab_weekday_name \
(&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (ABDAY_1)].string)
# define month_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (MON_1)].string)
# define ab_month_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (ABMON_1)].string)
# define HERE_D_T_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (D_T_FMT)].string)
# define HERE_D_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (D_T_FMT)].string)
# define HERE_AM_STR (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (AM_STR)].string)
# define HERE_PM_STR (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (PM_STR)].string)
# define HERE_T_FMT_AMPM \
(_nl_C_LC_TIME.values[_NL_ITEM_INDEX (T_FMT_AMPM)].string)
# define HERE_T_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (T_FMT)].string)
#else
static char const weekday_name[][10] =
{
"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"
};
static char const ab_weekday_name[][4] =
{
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
};
static char const month_name[][10] =
{
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
};
static char const ab_month_name[][4] =
{
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
# define HERE_D_T_FMT "%a %b %e %H:%M:%S %Y"
# define HERE_D_FMT "%m/%d/%y"
# define HERE_AM_STR "AM"
# define HERE_PM_STR "PM"
# define HERE_T_FMT_AMPM "%I:%M:%S %p"
# define HERE_T_FMT "%H:%M:%S"
#endif
/* Status of lookup: do we use the locale data or the raw data? */
enum locale_status { not, loc, raw };
static char *
strptime_internal (buf, format, tm, decided)
const char *buf;
const char *format;
struct tm *tm;
enum locale_status *decided;
{
const char *rp;
const char *fmt;
@ -106,6 +218,10 @@ strptime (const char *buf, const char *format, struct tm *tm)
}
++fmt;
#ifndef _NL_CURRENT
/* We need this for handling the `E' modifier. */
start_over:
#endif
switch (*fmt++)
{
case '%':
@ -117,10 +233,34 @@ strptime (const char *buf, const char *format, struct tm *tm)
/* Match day of week. */
for (cnt = 0; cnt < 7; ++cnt)
{
if (match_string (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), rp))
break;
if (match_string (_NL_CURRENT (LC_TIME, DAY_1 + cnt), rp))
break;
#ifdef _NL_CURRENT
if (*decided !=raw)
{
if (match_string (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), rp))
{
if (*decided == not
&& strcmp (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt),
ab_weekday_name[cnt]))
*decided = loc;
break;
}
if (match_string (_NL_CURRENT (LC_TIME, DAY_1 + cnt), rp))
{
if (*decided == not
&& strcmp (_NL_CURRENT (LC_TIME, DAY_1 + cnt),
weekday_name[cnt]))
*decided = loc;
break;
}
}
#endif
if (*decided != loc
&& (match_string (ab_weekday_name[cnt], rp)
|| match_string (weekday_name[cnt], rp)))
{
*decided = raw;
break;
}
}
if (cnt == 7)
/* Does not match a weekday name. */
@ -133,10 +273,33 @@ strptime (const char *buf, const char *format, struct tm *tm)
/* Match month name. */
for (cnt = 0; cnt < 12; ++cnt)
{
if (match_string (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), rp))
break;
if (match_string (_NL_CURRENT (LC_TIME, MON_1 + cnt), rp))
break;
#ifdef _NL_CURRENT
if (*decided !=raw)
{
if (match_string (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), rp))
{
if (*decided == not
&& strcmp (_NL_CURRENT (LC_TIME, ABMON_1 + cnt),
ab_month_name[cnt]))
*decided = loc;
break;
}
if (match_string (_NL_CURRENT (LC_TIME, MON_1 + cnt), rp))
{
if (*decided == not
&& strcmp (_NL_CURRENT (LC_TIME, MON_1 + cnt),
month_name[cnt]))
*decided = loc;
break;
}
}
#endif
if (match_string (ab_month_name[cnt], rp)
|| match_string (month_name[cnt], rp))
{
*decided = raw;
break;
}
}
if (cnt == 12)
/* Does not match a month name. */
@ -145,7 +308,26 @@ strptime (const char *buf, const char *format, struct tm *tm)
break;
case 'c':
/* Match locale's date and time format. */
recursive (_NL_CURRENT (LC_TIME, D_T_FMT));
#ifdef _NL_CURRENT
if (*decided != raw)
{
if (!recursive (_NL_CURRENT (LC_TIME, D_T_FMT)))
{
if (*decided == loc)
return NULL;
}
else
{
if (*decided == not &&
strcmp (_NL_CURRENT (LC_TIME, D_T_FMT), HERE_D_T_FMT))
*decided = loc;
break;
}
*decided = raw;
}
#endif
if (!recursive (HERE_D_T_FMT))
return NULL;
break;
case 'C':
/* Match century number. */
@ -158,9 +340,30 @@ strptime (const char *buf, const char *format, struct tm *tm)
get_number (1, 31);
tm->tm_mday = val;
break;
case 'x':
#ifdef _NL_CURRENT
if (*decided != raw)
{
if (!recursive (_NL_CURRENT (LC_TIME, D_FMT)))
{
if (*decided == loc)
return NULL;
}
else
{
if (decided == not
&& strcmp (_NL_CURRENT (LC_TIME, D_FMT), HERE_D_FMT))
*decided = loc;
break;
}
*decided = raw;
}
#endif
/* Fall through. */
case 'D':
/* Match standard day format. */
recursive ("%m/%d/%y");
if (!recursive (HERE_D_FMT))
return NULL;
break;
case 'H':
/* Match hour in 24-hour clock. */
@ -197,19 +400,57 @@ strptime (const char *buf, const char *format, struct tm *tm)
break;
case 'p':
/* Match locale's equivalent of AM/PM. */
if (match_string (_NL_CURRENT (LC_TIME, AM_STR), rp))
break;
if (match_string (_NL_CURRENT (LC_TIME, PM_STR), rp))
#ifdef _NL_CURRENT
if (*decided != raw)
{
is_pm = 1;
break;
if (match_string (_NL_CURRENT (LC_TIME, AM_STR), rp))
{
if (strcmp (_NL_CURRENT (LC_TIME, AM_STR), HERE_AM_STR))
*decided = loc;
break;
}
if (match_string (_NL_CURRENT (LC_TIME, PM_STR), rp))
{
if (strcmp (_NL_CURRENT (LC_TIME, PM_STR), HERE_PM_STR))
*decided = loc;
is_pm = 1;
break;
}
*decided = raw;
}
return NULL;
#endif
if (!match_string (HERE_AM_STR, rp))
if (match_string (HERE_PM_STR, rp))
is_pm = 1;
else
return NULL;
break;
case 'r':
recursive (_NL_CURRENT (LC_TIME, T_FMT_AMPM));
#ifdef _NL_CURRENT
if (*decided != raw)
{
if (!recursive (_NL_CURRENT (LC_TIME, T_FMT_AMPM)))
{
if (*decided == loc)
return NULL;
}
else
{
if (*decided == not &&
strcmp (_NL_CURRENT (LC_TIME, T_FMT_AMPM),
HERE_T_FMT_AMPM))
*decided = loc;
break;
}
*decided = raw;
}
#endif
if (!recursive (HERE_T_FMT_AMPM))
return NULL;
break;
case 'R':
recursive ("%H:%M");
if (!recursive ("%H:%M"))
return NULL;
break;
case 's':
{
@ -229,7 +470,7 @@ strptime (const char *buf, const char *format, struct tm *tm)
}
while (*rp >= '0' && *rp <= '9');
if (__localtime_r (&secs, tm) == NULL)
if (localtime_r (&secs, tm) == NULL)
/* Error in function. */
return NULL;
}
@ -238,8 +479,28 @@ strptime (const char *buf, const char *format, struct tm *tm)
get_number (0, 61);
tm->tm_sec = val;
break;
case 'X':
#ifdef _NL_CURRENT
if (*decided != raw)
{
if (!recursive (_NL_CURRENT (LC_TIME, T_FMT)))
{
if (*decided == loc)
return NULL;
}
else
{
if (strcmp (_NL_CURRENT (LC_TIME, T_FMT), HERE_T_FMT))
*decided = loc;
break;
}
*decided = raw;
}
#endif
/* Fall through. */
case 'T':
recursive ("%H:%M:%S");
if (!recursive (HERE_T_FMT))
return NULL;
break;
case 'u':
get_number (1, 7);
@ -262,19 +523,14 @@ strptime (const char *buf, const char *format, struct tm *tm)
case 'V':
case 'W':
get_number (0, 53);
/* XXX This cannot determine any field in TM. */
/* XXX This cannot determine any field in TM without some
information. */
break;
case 'w':
/* Match number of weekday. */
get_number (0, 6);
tm->tm_wday = val;
break;
case 'x':
recursive (_NL_CURRENT (LC_TIME, D_FMT));
break;
case 'X':
recursive (_NL_CURRENT (LC_TIME, T_FMT));
break;
case 'y':
/* Match year within century. */
get_number (0, 99);
@ -289,11 +545,35 @@ strptime (const char *buf, const char *format, struct tm *tm)
/* XXX How to handle this? */
break;
case 'E':
#ifdef _NL_CURRENT
switch (*fmt++)
{
case 'c':
/* Match locale's alternate date and time format. */
recursive (_NL_CURRENT (LC_TIME, ERA_D_T_FMT));
if (*decided != raw)
{
const char *fmt = _NL_CURRENT (LC_TIME, ERA_D_T_FMT);
if (*fmt == '\0')
fmt = _NL_CURRENT (LC_TIME, D_T_FMT);
if (!recursive (fmt))
{
if (*decided == loc)
return NULL;
}
else
{
if (strcmp (fmt, HERE_D_T_FMT))
*decided = loc;
break;
}
*decided = raw;
}
/* The C locale has no era information, so use the
normal representation. */
if (!recursive (HERE_D_T_FMT))
return NULL;
break;
case 'C':
case 'y':
@ -301,20 +581,70 @@ strptime (const char *buf, const char *format, struct tm *tm)
/* Match name of base year in locale's alternate
representation. */
/* XXX This is currently not implemented. It should
use the value _NL_CURRENT (LC_TIME, ERA) but POSIX
leaves this implementation defined and we haven't
figured out how to do it yet. */
use the value _NL_CURRENT (LC_TIME, ERA). */
break;
case 'x':
recursive (_NL_CURRENT (LC_TIME, ERA_D_FMT));
if (*decided != raw)
{
const char *fmt = _NL_CURRENT (LC_TIME, ERA_D_FMT);
if (*fmt == '\0')
fmt = _NL_CURRENT (LC_TIME, D_FMT);
if (!recursive (fmt))
{
if (*decided == loc)
return NULL;
}
else
{
if (strcmp (fmt, HERE_D_FMT))
*decided = loc;
break;
}
*decided = raw;
}
if (!recursive (HERE_D_FMT))
return NULL;
break;
case 'X':
recursive (_NL_CURRENT (LC_TIME, ERA_T_FMT));
if (*decided != raw)
{
const char *fmt = _NL_CURRENT (LC_TIME, ERA_T_FMT);
if (*fmt == '\0')
fmt = _NL_CURRENT (LC_TIME, T_FMT);
if (!recursive (fmt))
{
if (*decided == loc)
return NULL;
}
else
{
if (strcmp (fmt, HERE_T_FMT))
*decided = loc;
break;
}
*decided = raw;
}
if (!recursive (HERE_T_FMT))
return NULL;
break;
default:
return NULL;
}
break;
#else
/* We have no information about the era format. Just use
the normal format. */
if (*fmt != 'c' && *fmt != 'C' && *fmt != 'y' && *fmt != 'Y'
&& *fmt != 'x' && *fmt != 'X')
/* This is an illegal format. */
return NULL;
goto start_over;
#endif
case 'O':
switch (*fmt++)
{
@ -357,7 +687,8 @@ strptime (const char *buf, const char *format, struct tm *tm)
case 'V':
case 'W':
get_alt_number (0, 53);
/* XXX This cannot determine any field in TM. */
/* XXX This cannot determine any field in TM without
further information. */
break;
case 'w':
/* Match number of weekday using alternate numeric symbols. */
@ -382,3 +713,19 @@ strptime (const char *buf, const char *format, struct tm *tm)
return (char *) rp;
}
char *
strptime (buf, format, tm)
const char *buf;
const char *format;
struct tm *tm;
{
enum locale_status decided;
#ifdef _NL_CURRENT
decided = not;
#else
decided = raw;
#endif
return strptime_internal (buf, format, tm, &decided);
}

View File

@ -17,7 +17,7 @@ struct {
int
main(int argc, char ** argv)
main (int argc, char ** argv)
{
int errors = 0;
struct tm tm;
@ -36,8 +36,7 @@ main(int argc, char ** argv)
for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
{
putenv (tests[i].env);
tzset ();
t = mktime(&tm);
t = mktime (&tm);
if (t != tests[i].expected)
{
printf ("%s: flunked test %u (expected %lu, got %lu)\n",

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 92, 93, 95, 96 Free Software Foundation, Inc.
/* Copyright (C) 1991, 92, 93, 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
@ -113,16 +113,28 @@ __tzfile_read (const char *file)
if (*file != '/')
{
static const char tzdir[] = TZDIR;
register const unsigned int len = strlen (file) + 1;
char *new = (char *) __alloca (sizeof (tzdir) + len);
memcpy (new, tzdir, sizeof(tzdir) - 1);
new[sizeof (tzdir) - 1] = '/';
memcpy (&new[sizeof (tzdir)], file, len);
static const char default_tzdir[] = TZDIR;
const char *tzdir;
unsigned int len, tzdir_len;
char *new;
tzdir = __secure_getenv ("TZDIR");
if (tzdir == NULL || *tzdir == '\0')
{
tzdir = default_tzdir;
tzdir_len = sizeof (default_tzdir) - 1;
}
else
tzdir_len = strlen (tzdir);
len = strlen (file) + 1;
new = (char *) __alloca (tzdir_len + 1 + len);
memcpy (new, tzdir, tzdir_len);
new[tzdir_len] = '/';
memcpy (&new[tzdir_len + 1], file, len);
file = new;
}
f = fopen(file, "r");
f = fopen (file, "r");
if (f == NULL)
return;
@ -171,6 +183,12 @@ __tzfile_read (const char *file)
fread(type_idxs, 1, num_transitions, f) != num_transitions)
goto lose;
/* Check for bogus indices in the data file, so we can hereafter
safely use type_idxs[T] as indices into `types' and never crash. */
for (i = 0; i < num_transitions; ++i)
if (type_idxs[i] >= num_types)
goto lose;
if (BYTE_ORDER != BIG_ENDIAN || sizeof (time_t) != 4)
{
/* Decode the transition times, stored as 4-byte integers in
@ -189,6 +207,8 @@ __tzfile_read (const char *file)
fread (&types[i].isdst, 1, 1, f) != 1 ||
fread (&types[i].idx, 1, 1, f) != 1)
goto lose;
if (types[i].idx >= chars) /* Bogus index in data file. */
goto lose;
types[i].offset = (long int) decode (x);
}
@ -335,6 +355,10 @@ __tzfile_default (char *std, char *dst, long int stdoff, long int dstoff)
types[1].offset = dstoff;
types[1].isdst = 1;
/* Reset the zone names to point to the user's names. */
__tzname[0] = &zone_names[0];
__tzname[1] = &zone_names[stdlen];
compute_tzname_max (stdlen + dstlen);
}
@ -425,7 +449,7 @@ compute_tzname_max (size_t chars)
const char *start = p;
while (*p != '\0')
++p;
if (p - start > __tzname_cur_max)
if ((size_t) (p - start) > __tzname_cur_max)
__tzname_cur_max = p - start;
} while (++p < &zone_names[chars]);
}

View File

@ -1,4 +1,4 @@
#! /bin/ksh
#! @KSH@
# Ask the user about the time zone, and output the resulting TZ value to stdout.
# Interact with the user via stderr and stdin.
@ -11,7 +11,7 @@
# you can use either of the following free programs instead:
#
# Bourne-Again shell (bash)
# <URL:ftp://prep.ai.mit.edu:/pub/gnu/bash-1.14.7.tar.gz>
# <URL:ftp://prep.ai.mit.edu:/pub/gnu/bash-2.0.tar.gz>
# (or any later version)
#
# Public domain ksh
@ -22,7 +22,7 @@
# you can use either of the following free programs instead:
#
# GNU awk (gawk)
# <URL:ftp://prep.ai.mit.edu:/pub/gnu/gawk-3.0.0.tar.gz>
# <URL:ftp://prep.ai.mit.edu:/pub/gnu/gawk-3.0.2.tar.gz>
# (or any later version)
#
# mawk
@ -32,7 +32,7 @@
# Specify default values for environment variables if they are unset.
: ${AWK=awk}
: ${TZDIR=$(pwd)}
: ${TZDIR=@TZDIR@}
# Check for awk Posix compliance.
($AWK -v x=y 'BEGIN { exit 123 }') </dev/null >/dev/null 2>&1

View File

@ -108,16 +108,12 @@ __tzset_internal (always)
/* Free old storage. */
if (tz_rules[0].name != NULL && *tz_rules[0].name != '\0')
{
free((void *) tz_rules[0].name);
tz_rules[0].name = NULL;
}
free((void *) tz_rules[0].name);
if (tz_rules[1].name != NULL && *tz_rules[1].name != '\0' &&
tz_rules[1].name != tz_rules[0].name)
{
free((void *) tz_rules[1].name);
tz_rules[1].name = NULL;
}
free((void *) tz_rules[1].name);
tz_rules[0].name = NULL;
tz_rules[1].name = NULL;
/* Save the value of `tz'. */
if (old_tz != NULL)
@ -234,6 +230,9 @@ __tzset_internal (always)
tz += l;
}
}
else
/* There is no DST. */
tz_rules[1].name = tz_rules[0].name;
/* Figure out the DST offset from GMT. */
if (*tz == '-' || *tz == '+')

View File

@ -1,5 +1,5 @@
/* Old compatibility names for <limits.h> and <float.h> constants.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
Copyright (C) 1995, 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
@ -21,7 +21,9 @@
<limits.h> and/or <float.h> instead of <values.h>. */
#ifndef _VALUES_H
#define _VALUES_H 1
#include <features.h>
#include <limits.h>
@ -30,7 +32,7 @@
#define CHARBITS _TYPEBITS (char)
#define SHORTBITS _TYPEBITS (short int)
#define INTBITS _TYPEBITS (int)
#define LONGBITS _TYPEBITS (long)
#define LONGBITS _TYPEBITS (long int)
#define PTRBITS _TYPEBITS (char *)
#define DOUBLEBITS _TYPEBITS (double)
#define FLOATBITS _TYPEBITS (float)
@ -59,4 +61,9 @@
#define FMAXEXP FLT_MAX_EXP
#ifdef __USE_MISC
/* Some systems define this name instead of CHAR_BIT or CHARBITS. */
#define BITSPERBYTE CHAR_BIT
#endif
#endif /* values.h */