mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-19 14:24:13 +08:00
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:
parent
b51c27c032
commit
5290baf06c
210
ChangeLog
210
ChangeLog
@ -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
32
FAQ
@ -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
|
||||
|
@ -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) \
|
||||
|
7
Makefile
7
Makefile
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
93
configure
vendored
@ -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
|
||||
|
15
configure.in
15
configure.in
@ -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
|
||||
|
@ -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' \
|
||||
|
16
glibcbug.in
16
glibcbug.in
@ -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
|
||||
|
@ -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 *));
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 = "";
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
@ -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] == ':' ? ':' : '?';
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
14
stdio-common/scanf11.c
Normal 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;
|
||||
}
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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. */
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
};
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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 $@
|
||||
|
||||
|
@ -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
|
||||
{
|
||||
|
7
sysdeps/unix/sysv/linux/alpha/kernel_sigaction.h
Normal file
7
sysdeps/unix/sysv/linux/alpha/kernel_sigaction.h
Normal 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;
|
||||
};
|
85
sysdeps/unix/sysv/linux/alpha/sys/ipc_buf.h
Normal file
85
sysdeps/unix/sysv/linux/alpha/sys/ipc_buf.h
Normal 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 */
|
109
sysdeps/unix/sysv/linux/alpha/sys/procfs.h
Normal file
109
sysdeps/unix/sysv/linux/alpha/sys/procfs.h
Normal 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 */
|
43
sysdeps/unix/sysv/linux/i386/getgroups.c
Normal file
43
sysdeps/unix/sysv/linux/i386/getgroups.c
Normal 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)
|
41
sysdeps/unix/sysv/linux/i386/setgroups.c
Normal file
41
sysdeps/unix/sysv/linux/i386/setgroups.c
Normal 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);
|
||||
}
|
@ -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
|
||||
|
10
sysdeps/unix/sysv/linux/kernel_sigaction.h
Normal file
10
sysdeps/unix/sysv/linux/kernel_sigaction.h
Normal 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));
|
||||
};
|
2
sysdeps/unix/sysv/linux/m68k/getgroups.c
Normal file
2
sysdeps/unix/sysv/linux/m68k/getgroups.c
Normal 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>
|
2
sysdeps/unix/sysv/linux/m68k/setgroups.c
Normal file
2
sysdeps/unix/sysv/linux/m68k/setgroups.c
Normal 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>
|
@ -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
|
||||
|
63
sysdeps/unix/sysv/linux/sigaction.c
Normal file
63
sysdeps/unix/sysv/linux/sigaction.c
Normal 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)
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
2
time/simplebackw
Normal file
@ -0,0 +1,2 @@
|
||||
Link Etc/UTC UTC
|
||||
Link Etc/Universal Universal
|
471
time/strptime.c
471
time/strptime.c
@ -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);
|
||||
}
|
||||
|
@ -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",
|
||||
|
@ -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]);
|
||||
}
|
||||
|
@ -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
|
||||
|
15
time/tzset.c
15
time/tzset.c
@ -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 == '+')
|
||||
|
11
values.h
11
values.h
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user