mirror of git://sourceware.org/git/glibc.git
Update.
1997-10-26 18:12 Ulrich Drepper <drepper@cygnus.com> * libio/genops.c: Partial undo of last patch. * libio/stdfiles.c: Likewise. * libio/iofdopen.c: Use _IO_FILE_complete, not _IO_file_plus. * libio/iopopen.c: Likewise. * libio/iovdprintf.c: Likewise. * libio/libio.h: Remove duplicated `;'. * libio/stdio.c: Remove misleading comment. * libio/stdio.h: Declare standard streams as variables. * login/Makefile (distribute): Add README.utmpd. * login/README.utmpd: New file. Provided by Mark M. Kettenis <kettenis@phys.uva.nl>. * manual/job.texi: Document tcgetsid. * manual/pattern.texi: Document globfree. * manual/terminal.texi: Document B38400 ... B460800. * posix/confstr.c: Print "-D_FILE_OFFSET_SIZE=64" for _CS_LFS_CFLAGS. * posix/unistd.h: Add explanation of _POSIX_* constants. * posix/unists.h: Add prototypes for __pread, __pread64, __pwrite and __pwrite64. * sysdeps/generic/pread.c: Define as __pread and make pread weak alias. * sysdeps/generic/pread64.c: Likewise. * sysdeps/generic/pwrite.c: Likewise. * sysdeps/generic/pwrite64.c: Likewise. * sysdeps/posix/pread.c: Likewise. * sysdeps/posix/pwrite.c: Likewise. * sysdeps/posix/pread64.c: New file. * sysdeps/posix/pwrite64.c: Likewise. * sysdeps/unix/sysv/linux/Makefile [$(subdir)=posix] (sysdep_routines): Add s_pread64 and s_pwrite64. * sysdeps/unix/sysv/linux/pread.c: New file. * sysdeps/unix/sysv/linux/pread64.c: New file. * sysdeps/unix/sysv/linux/pwrite.c: New file. * sysdeps/unix/sysv/linux/pwrite64.c: New file. * sysdeps/unix/sysv/linux/s_pread64.c: New file. * sysdeps/unix/sysv/linux/s_pwrite64.c: New file. * sysdeps/unix/sysv/linux/syscalls.list: Add pread and pwrite. * sysdeps/unix/sysv/linux/alpha/pread64.c: New (empty) file. * sysdeps/unix/sysv/linux/alpha/pwrite64.c: New (empty) file. * sysdeps/unix/sysv/linux/sparc/sparc64/pread64.c: New (empty) file. * sysdeps/unix/sysv/linux/sparc/sparc64/pwrite64.c: New (empty) file. * sysdeps/unix/sysv/linux/alpha/syscalls.list: Add pread and pwrite with weak aliases for *64 functions. * sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Likewise. * string/bits/string2.h: Add casts to allow void * arguments. * sysdeps/i386/i486/bits/string.h: Define index and rindex only if __USE_BSD or __USE_XOPEN_EXTENDED. * sysdeps/unix/sysv/linux/bits/socket.h: Add SCM_RIGHTS and other SCM_* constants from kernel header. * termios/termios.h: Add prototype for tcgetsid. 1997-10-26 13:26 Thorsten Kukuk <kukuk@vt.uni-paderborn.de> * sunrpc/clnt_perr.c: Add trailing '\0' to strings. * sunrpc/get_myaddr.c: Include rpc/clnt.h for prototypes. * sunrpc/pmap_clnt.c: Use get_myaddress from header file. 1997-10-26 05:26 Ulrich Drepper <drepper@cygnus.com> * configure.in: Punt if any directory mentioned in the enable-add-on parameter does not exist. 1997-10-25 19:25 Ulrich Drepper <drepper@cygnus.com> * termios/Makefile (routines): Add tcgetsid. * termios/tcgetsid.c: New file. Provided by Mark M. Kettenis <kettenis@phys.uva.nl>. 1997-10-25 18:56 Ulrich Drepper <drepper@cygnus.com> * stdlib/stdlib.h: Remove mblen optimization. * stdlib/mblen.c: Rewrite to make sure global state is not changed. Reported by anderson@metrolink.com. 1997-10-19 21:51 Wolfram Gloger <wg@wolfram.dent.med.uni-muenchen.de> * malloc/thread-m.h [_LIBC]: Use new __libc_internal_tsd_{set,get} interface for thread-specific data. 1997-10-25 06:51 Ulrich Drepper <drepper@cygnus.com> * elf/dl-addr.c: Use braces for correct logical grouping. Patch by Wolfram Gloger <wmglo@dent.med.uni-muenchen.de>. 1997-10-18 09:15 Geoff Keating <geoffk@ozemail.com.au> * io/ftwtest-sh: Sometimes /tmp is a symlink to somewhere more convenient; that caused this test to break. * sysdeps/powerpc/dl-machine.h: Fix typo. * sysdeps/powerpc/bits/fenv.h: Don't use floating-point registers when -msoft-float is in effect, because this causes compilation to stop. * sysdeps/powerpc/bits/mathinlines.h: Likewise. * rpm/template: Add description, use RPM flags rather than the ones used to build the spec. Build in a temporary directory, not /. * elf/dl-lookup.c: Don't include _itoa.h, it's not used. * elf/dl-minimal.c: Use _itoa_word rather than _itoa. It seems that _itoa is the only routine that ld.so uses that requires something from libgcc.a on powerpc, so it would be best to avoid it in ld.so. * elf/rtld.c: Likewise. * sysdeps/generic/_strerror.c: Likewise. * stdio-common/_itoa.c: Split out digits strings. * stdio-common/itoa-digits.c: New file. * stdio-common/Makefile: Add itoa-digits. 1997-10-21 Andreas Jaeger <aj@arthur.rhein-neckar.de> * manual/filesys.texi (Scanning Directory Content): Document error case more. * dirent/scandir.c (scandir): Ignore errors from select function. Suggested by urbanw@cs.umu.se (closes PR libc/316). 1997-10-25 06:18 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/sparc/sparc32/socket.S: Corrections. Patch by Erik Troan <ewt@redhat.com>. 1997-10-25 04:00 Ulrich Drepper <drepper@cygnus.com> * sysdeps/generic/dl-cache.c (_dl_load_cache_lookup): Favour exact matching of version function if both the general (1) and glibc-specific (3) entry are present. 1997-10-22 18:47 Thorsten Kukuk <kukuk@vt.uni-paderborn.de> * sunrpc/rpc/clnt.h: Add get_myaddress prototype. * nis/libnsl.map: Fix typo. * nis/nis_call.c: Fix memory leak. 1997-10-22 19:29 Ulrich Drepper <drepper@cygnus.com> * sysdeps/generic/memcmp.c: Define __P if not defined before. Patch by Jim Meyering <meyering@eng.ascend.com>. 1997-10-21 22:09 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/sys/prctl.h: New file by Richard Gooch <rgooch@atnf.csiro.au>. 1997-10-21 21:50 Ulrich Drepper <drepper@cygnus.com> * misc/syslog.c (vsyslog): Open console with O_NOCTTY. Patch by Zack Weinberg <zack@rabi.phys.columbia.edu>. 1997-10-21 18:07 Ulrich Drepper <drepper@cygnus.com> * posix/wordexp.c: Improve handling of $... expressions. Patch by Tim Waugh <tim@cyberelk.demon.co.uk>. 1997-10-21 16:12 Ulrich Drepper <drepper@cygnus.com> * manual/string.texi: Correct return values of bcopy and bzero. Patch by Matthew Wilcox <willy@odie.barnet.ac.uk>. 1997-10-18 15:03 Philip Blundell <Philip.Blundell@pobox.com> * sysdeps/unix/sysv/linux/bits/socket.h: Correct types of some elements in struct msghdr and struct cmsghdr, to keep in step with the kernel. 1997-10-17 22:29 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/sparc/sparc32/init-first.h: Fix another bug in startup code. Patch by Eric Delaunay <delaunay@lix.polytechnique.fr>. 1997-10-16 20:17 Richard Henderson <rth@cygnus.com> * sysdeps/unix/sysv/linux/sparc/sparc32/socket.S: Dump args to the stack and give the kernel a pointer. Use the sysdep.h macros. 1997-10-17 04:07 Ulrich Drepper <drepper@cygnus.com> * sysdeps/sparc/sparc32/elf/start.S: Calculate argv correctly. Patch by Eric Delaunay <delaunay@lix.polytechnique.fr>. 1997-10-16 Andreas Jaeger <aj@arthur.rhein-neckar.de> * sysdeps/libm-ieee754/s_nextafterxf.c [!__STDC__]: Correct typo. 1997-10-16 14:50 Ulrich Drepper <drepper@cygnus.com> * manual/pattern.texi: Document globfree. 1997-10-15 21:11 Philip Blundell <Philip.Blundell@pobox.com> * sysdeps/unix/sysv/linux/net/if_packet.h: New file. * sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add net/if_packet.h. * sysdeps/unix/sysv/linux/net/if_arp.h (ARPHRD_ASH): New type, for 64Mbps ASH. (ARPHRD_ETHER): This is used for 100Mbps networks too. 1997-10-15 Andreas Jaeger <aj@arthur.rhein-neckar.de> * Makerules (install): Use full pathnames for linker script. This is to work around a limitation in `ld' while no better solution is possible. 1997-10-15 Andreas Jaeger <aj@arthur.rhein-neckar.de> * malloc/malloc.c (mmap_chunk): Put inline before static in function definition to avoid compiler warning. (malloc_extend): Likewise. * sysdeps/generic/des_impl.c: Include "des.h" to avoid warning. 1997-10-15 Andreas Jaeger <aj@arthur.rhein-neckar.de> * NEWS: Fix @gnu.ai.mit.edu -> @gnu.org. * README.template: Likewise. * db/makedb.c: Likewise. * elf/ldd.bash.in: Likewise. * elf/ldd.sh.in: Likewise. * intl/locale.alias: Likewise. * login/programs/utmpd.c: Likewise. * libio/stdfiles.c [!_IO_MTSAFE] (DEF_STDFILE): Fix parameter list. 1997-10-14 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Rules: Remove all empty.* files. (shared-only-routines): Correct implementation. 1997-10-14 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/libm-ieee754/s_lrintl.c: Make compilable. * sysdeps/libm-ieee754/s_llrintl.c: Likewise. Optimized. 1997-10-14 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * elf/ldd.bash.in: Only prepend ./ if the file contains no slash at all. * elf/ldd.sh.in: Likewise. 1997-10-14 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/m68k/sys/ucontext.h: New file. 1997-10-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/m68k/fpu/s_scalbln.c: New (empty) file. * sysdeps/m68k/fpu/s_scalblnf.c: New (empty) file. * sysdeps/m68k/fpu/s_scalblnl.c: New (empty) file. * sysdeps/m68k/fpu/s_scalbn.c: Add scalbln alias. * sysdeps/m68k/fpu/s_scalbnf.c: Adapted. * sysdeps/m68k/fpu/s_scalbnl.c: Adapted. * sysdeps/m68k/fpu/s_lrint.c: Add standard skeleton stuff. * sysdeps/m68k/fpu/s_lrintf.c: New file. * sysdeps/m68k/fpu/s_lrintl.c: New file. * sysdeps/m68k/fpu/bits/mathinline.h: Add fma and scalbln. Update lrint and scalbn. (__m81_inline) [__cplusplus]: Define to __inline. * math/bits/mathcalls.h: Remove whitespace before second argument of __MATHDECL. Add note explaining this. 1997-10-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * manual/arith.texi (Absolute Value): Spelling fix. 1997-10-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * malloc/obstack.h (obstack_empty_p) [!__GNUC__]: Properly parenthesize the macro parameter. * Rules: Remove rules to magically install <subdir>.h headers.
This commit is contained in:
parent
f2ea0f5b0d
commit
af6f39063b
10
BUGS
10
BUGS
|
@ -1,7 +1,7 @@
|
||||||
List of known bugs (certainly very incomplete)
|
List of known bugs (certainly very incomplete)
|
||||||
----------------------------------------------
|
----------------------------------------------
|
||||||
|
|
||||||
Time-stamp: <1997-09-28T22:58:35+0200 drepper>
|
Time-stamp: <1997-10-25T06:32:15+0200 drepper>
|
||||||
|
|
||||||
This following list contains those bugs which I'm aware of. Please
|
This following list contains those bugs which I'm aware of. Please
|
||||||
make sure that bugs you report are not listed here. If you can fix one
|
make sure that bugs you report are not listed here. If you can fix one
|
||||||
|
@ -10,7 +10,7 @@ of these bugs/limitations I'll certainly be glad to receive a patch.
|
||||||
Another source of information about bugs is the problem data base of the
|
Another source of information about bugs is the problem data base of the
|
||||||
GNU project. There is an easy to use WWW interface available at
|
GNU project. There is an easy to use WWW interface available at
|
||||||
|
|
||||||
http://www-gnats.gnu.ai.mit.edu:8080/cgi-bin/wwwgnats.pl
|
http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl
|
||||||
|
|
||||||
I would appreciate it very much if you could verify the problem was not
|
I would appreciate it very much if you could verify the problem was not
|
||||||
reported before by looking through the database. To make the information
|
reported before by looking through the database. To make the information
|
||||||
|
@ -70,6 +70,12 @@ Severity: [ *] to [***]
|
||||||
have this bug).
|
have this bug).
|
||||||
[PR libc/245]
|
[PR libc/245]
|
||||||
|
|
||||||
|
[ *] gethostbyname returns HOST_NOT_FOUND if the nameserver is
|
||||||
|
unreachable and nsswitch.conf contains a line with:
|
||||||
|
hosts: files dns
|
||||||
|
If the only method is dns gethostbyname return
|
||||||
|
TRY_AGAIN. gethostbyname should return in both cases TRY_AGAIN.
|
||||||
|
[PR libc/244]
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Ulrich Drepper
|
Ulrich Drepper
|
||||||
drepper@cygnus.com
|
drepper@cygnus.com
|
||||||
|
|
289
ChangeLog
289
ChangeLog
|
@ -1,6 +1,293 @@
|
||||||
|
1997-10-26 18:12 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* libio/genops.c: Partial undo of last patch.
|
||||||
|
* libio/stdfiles.c: Likewise.
|
||||||
|
* libio/iofdopen.c: Use _IO_FILE_complete, not _IO_file_plus.
|
||||||
|
* libio/iopopen.c: Likewise.
|
||||||
|
* libio/iovdprintf.c: Likewise.
|
||||||
|
* libio/libio.h: Remove duplicated `;'.
|
||||||
|
* libio/stdio.c: Remove misleading comment.
|
||||||
|
* libio/stdio.h: Declare standard streams as variables.
|
||||||
|
|
||||||
|
* login/Makefile (distribute): Add README.utmpd.
|
||||||
|
* login/README.utmpd: New file.
|
||||||
|
Provided by Mark M. Kettenis <kettenis@phys.uva.nl>.
|
||||||
|
|
||||||
|
* manual/job.texi: Document tcgetsid.
|
||||||
|
* manual/pattern.texi: Document globfree.
|
||||||
|
* manual/terminal.texi: Document B38400 ... B460800.
|
||||||
|
|
||||||
|
* posix/confstr.c: Print "-D_FILE_OFFSET_SIZE=64" for _CS_LFS_CFLAGS.
|
||||||
|
|
||||||
|
* posix/unistd.h: Add explanation of _POSIX_* constants.
|
||||||
|
|
||||||
|
* posix/unists.h: Add prototypes for __pread, __pread64, __pwrite
|
||||||
|
and __pwrite64.
|
||||||
|
* sysdeps/generic/pread.c: Define as __pread and make pread weak alias.
|
||||||
|
* sysdeps/generic/pread64.c: Likewise.
|
||||||
|
* sysdeps/generic/pwrite.c: Likewise.
|
||||||
|
* sysdeps/generic/pwrite64.c: Likewise.
|
||||||
|
* sysdeps/posix/pread.c: Likewise.
|
||||||
|
* sysdeps/posix/pwrite.c: Likewise.
|
||||||
|
* sysdeps/posix/pread64.c: New file.
|
||||||
|
* sysdeps/posix/pwrite64.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/Makefile [$(subdir)=posix] (sysdep_routines):
|
||||||
|
Add s_pread64 and s_pwrite64.
|
||||||
|
* sysdeps/unix/sysv/linux/pread.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/pread64.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/pwrite.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/pwrite64.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/s_pread64.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/s_pwrite64.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/syscalls.list: Add pread and pwrite.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/pread64.c: New (empty) file.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/pwrite64.c: New (empty) file.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc64/pread64.c: New (empty) file.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc64/pwrite64.c: New (empty) file.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/syscalls.list: Add pread and pwrite
|
||||||
|
with weak aliases for *64 functions.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Likewise.
|
||||||
|
|
||||||
|
* string/bits/string2.h: Add casts to allow void * arguments.
|
||||||
|
|
||||||
|
* sysdeps/i386/i486/bits/string.h: Define index and rindex only if
|
||||||
|
__USE_BSD or __USE_XOPEN_EXTENDED.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/bits/socket.h: Add SCM_RIGHTS and other
|
||||||
|
SCM_* constants from kernel header.
|
||||||
|
|
||||||
|
* termios/termios.h: Add prototype for tcgetsid.
|
||||||
|
|
||||||
|
1997-10-26 13:26 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
|
||||||
|
|
||||||
|
* sunrpc/clnt_perr.c: Add trailing '\0' to strings.
|
||||||
|
|
||||||
|
* sunrpc/get_myaddr.c: Include rpc/clnt.h for prototypes.
|
||||||
|
|
||||||
|
* sunrpc/pmap_clnt.c: Use get_myaddress from header file.
|
||||||
|
|
||||||
|
1997-10-26 05:26 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* configure.in: Punt if any directory mentioned in the
|
||||||
|
enable-add-on parameter does not exist.
|
||||||
|
|
||||||
|
1997-10-25 19:25 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* termios/Makefile (routines): Add tcgetsid.
|
||||||
|
* termios/tcgetsid.c: New file.
|
||||||
|
Provided by Mark M. Kettenis <kettenis@phys.uva.nl>.
|
||||||
|
|
||||||
|
1997-10-25 18:56 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* stdlib/stdlib.h: Remove mblen optimization.
|
||||||
|
* stdlib/mblen.c: Rewrite to make sure global state is not changed.
|
||||||
|
Reported by anderson@metrolink.com.
|
||||||
|
|
||||||
|
1997-10-19 21:51 Wolfram Gloger <wg@wolfram.dent.med.uni-muenchen.de>
|
||||||
|
|
||||||
|
* malloc/thread-m.h [_LIBC]: Use new __libc_internal_tsd_{set,get}
|
||||||
|
interface for thread-specific data.
|
||||||
|
|
||||||
|
1997-10-25 06:51 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* elf/dl-addr.c: Use braces for correct logical grouping.
|
||||||
|
Patch by Wolfram Gloger <wmglo@dent.med.uni-muenchen.de>.
|
||||||
|
|
||||||
|
1997-10-18 09:15 Geoff Keating <geoffk@ozemail.com.au>
|
||||||
|
|
||||||
|
* io/ftwtest-sh: Sometimes /tmp is a symlink to somewhere more
|
||||||
|
convenient; that caused this test to break.
|
||||||
|
|
||||||
|
* sysdeps/powerpc/dl-machine.h: Fix typo.
|
||||||
|
|
||||||
|
* sysdeps/powerpc/bits/fenv.h: Don't use floating-point registers
|
||||||
|
when -msoft-float is in effect, because this causes compilation to
|
||||||
|
stop.
|
||||||
|
* sysdeps/powerpc/bits/mathinlines.h: Likewise.
|
||||||
|
|
||||||
|
* rpm/template: Add description, use RPM flags rather than the ones
|
||||||
|
used to build the spec. Build in a temporary directory, not /.
|
||||||
|
|
||||||
|
* elf/dl-lookup.c: Don't include _itoa.h, it's not used.
|
||||||
|
* elf/dl-minimal.c: Use _itoa_word rather than _itoa. It seems that
|
||||||
|
_itoa is the only routine that ld.so uses that requires something
|
||||||
|
from libgcc.a on powerpc, so it would be best to avoid it in ld.so.
|
||||||
|
* elf/rtld.c: Likewise.
|
||||||
|
* sysdeps/generic/_strerror.c: Likewise.
|
||||||
|
* stdio-common/_itoa.c: Split out digits strings.
|
||||||
|
* stdio-common/itoa-digits.c: New file.
|
||||||
|
* stdio-common/Makefile: Add itoa-digits.
|
||||||
|
|
||||||
|
1997-10-21 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
||||||
|
|
||||||
|
* manual/filesys.texi (Scanning Directory Content): Document error
|
||||||
|
case more.
|
||||||
|
|
||||||
|
* dirent/scandir.c (scandir): Ignore errors from select function.
|
||||||
|
Suggested by urbanw@cs.umu.se (closes PR libc/316).
|
||||||
|
|
||||||
|
1997-10-25 06:18 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/socket.S: Corrections.
|
||||||
|
Patch by Erik Troan <ewt@redhat.com>.
|
||||||
|
|
||||||
|
1997-10-25 04:00 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* sysdeps/generic/dl-cache.c (_dl_load_cache_lookup): Favour exact
|
||||||
|
matching of version function if both the general (1) and
|
||||||
|
glibc-specific (3) entry are present.
|
||||||
|
|
||||||
|
1997-10-22 18:47 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
|
||||||
|
|
||||||
|
* sunrpc/rpc/clnt.h: Add get_myaddress prototype.
|
||||||
|
|
||||||
|
* nis/libnsl.map: Fix typo.
|
||||||
|
|
||||||
|
* nis/nis_call.c: Fix memory leak.
|
||||||
|
|
||||||
|
1997-10-22 19:29 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* sysdeps/generic/memcmp.c: Define __P if not defined before.
|
||||||
|
Patch by Jim Meyering <meyering@eng.ascend.com>.
|
||||||
|
|
||||||
|
1997-10-21 22:09 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/sys/prctl.h: New file by Richard Gooch
|
||||||
|
<rgooch@atnf.csiro.au>.
|
||||||
|
|
||||||
|
1997-10-21 21:50 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* misc/syslog.c (vsyslog): Open console with O_NOCTTY.
|
||||||
|
Patch by Zack Weinberg <zack@rabi.phys.columbia.edu>.
|
||||||
|
|
||||||
|
1997-10-21 18:07 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* posix/wordexp.c: Improve handling of $... expressions.
|
||||||
|
Patch by Tim Waugh <tim@cyberelk.demon.co.uk>.
|
||||||
|
|
||||||
|
1997-10-21 16:12 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* manual/string.texi: Correct return values of bcopy and bzero.
|
||||||
|
Patch by Matthew Wilcox <willy@odie.barnet.ac.uk>.
|
||||||
|
|
||||||
|
1997-10-18 15:03 Philip Blundell <Philip.Blundell@pobox.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/bits/socket.h: Correct types of some
|
||||||
|
elements in struct msghdr and struct cmsghdr, to keep in step with
|
||||||
|
the kernel.
|
||||||
|
|
||||||
|
1997-10-17 22:29 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/init-first.h: Fix another
|
||||||
|
bug in startup code.
|
||||||
|
Patch by Eric Delaunay <delaunay@lix.polytechnique.fr>.
|
||||||
|
|
||||||
|
1997-10-16 20:17 Richard Henderson <rth@cygnus.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/socket.S: Dump args to the
|
||||||
|
stack and give the kernel a pointer. Use the sysdep.h macros.
|
||||||
|
|
||||||
|
1997-10-17 04:07 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* sysdeps/sparc/sparc32/elf/start.S: Calculate argv correctly.
|
||||||
|
Patch by Eric Delaunay <delaunay@lix.polytechnique.fr>.
|
||||||
|
|
||||||
|
1997-10-16 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
||||||
|
|
||||||
|
* sysdeps/libm-ieee754/s_nextafterxf.c [!__STDC__]: Correct typo.
|
||||||
|
|
||||||
|
1997-10-16 14:50 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* manual/pattern.texi: Document globfree.
|
||||||
|
|
||||||
|
1997-10-15 21:11 Philip Blundell <Philip.Blundell@pobox.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/net/if_packet.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add
|
||||||
|
net/if_packet.h.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/net/if_arp.h (ARPHRD_ASH): New type, for
|
||||||
|
64Mbps ASH.
|
||||||
|
(ARPHRD_ETHER): This is used for 100Mbps networks too.
|
||||||
|
|
||||||
|
1997-10-15 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
||||||
|
|
||||||
|
* Makerules (install): Use full pathnames for linker script.
|
||||||
|
This is to work around a limitation in `ld' while no better solution
|
||||||
|
is possible.
|
||||||
|
|
||||||
|
1997-10-15 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
||||||
|
|
||||||
|
* malloc/malloc.c (mmap_chunk): Put inline before static in
|
||||||
|
function definition to avoid compiler warning.
|
||||||
|
(malloc_extend): Likewise.
|
||||||
|
|
||||||
|
* sysdeps/generic/des_impl.c: Include "des.h" to avoid warning.
|
||||||
|
|
||||||
|
1997-10-15 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
||||||
|
|
||||||
|
* NEWS: Fix @gnu.ai.mit.edu -> @gnu.org.
|
||||||
|
* README.template: Likewise.
|
||||||
|
* db/makedb.c: Likewise.
|
||||||
|
* elf/ldd.bash.in: Likewise.
|
||||||
|
* elf/ldd.sh.in: Likewise.
|
||||||
|
* intl/locale.alias: Likewise.
|
||||||
|
* login/programs/utmpd.c: Likewise.
|
||||||
|
* libio/stdfiles.c [!_IO_MTSAFE] (DEF_STDFILE): Fix parameter list.
|
||||||
|
|
||||||
|
1997-10-14 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* Rules: Remove all empty.* files.
|
||||||
|
(shared-only-routines): Correct implementation.
|
||||||
|
|
||||||
|
1997-10-14 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* sysdeps/libm-ieee754/s_lrintl.c: Make compilable.
|
||||||
|
* sysdeps/libm-ieee754/s_llrintl.c: Likewise. Optimized.
|
||||||
|
|
||||||
|
1997-10-14 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* elf/ldd.bash.in: Only prepend ./ if the file contains no slash
|
||||||
|
at all.
|
||||||
|
* elf/ldd.sh.in: Likewise.
|
||||||
|
|
||||||
|
1997-10-14 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* sysdeps/m68k/sys/ucontext.h: New file.
|
||||||
|
|
||||||
|
1997-10-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* sysdeps/m68k/fpu/s_scalbln.c: New (empty) file.
|
||||||
|
* sysdeps/m68k/fpu/s_scalblnf.c: New (empty) file.
|
||||||
|
* sysdeps/m68k/fpu/s_scalblnl.c: New (empty) file.
|
||||||
|
|
||||||
|
* sysdeps/m68k/fpu/s_scalbn.c: Add scalbln alias.
|
||||||
|
* sysdeps/m68k/fpu/s_scalbnf.c: Adapted.
|
||||||
|
* sysdeps/m68k/fpu/s_scalbnl.c: Adapted.
|
||||||
|
|
||||||
|
* sysdeps/m68k/fpu/s_lrint.c: Add standard skeleton stuff.
|
||||||
|
* sysdeps/m68k/fpu/s_lrintf.c: New file.
|
||||||
|
* sysdeps/m68k/fpu/s_lrintl.c: New file.
|
||||||
|
|
||||||
|
* sysdeps/m68k/fpu/bits/mathinline.h: Add fma and scalbln. Update
|
||||||
|
lrint and scalbn.
|
||||||
|
(__m81_inline) [__cplusplus]: Define to __inline.
|
||||||
|
|
||||||
|
* math/bits/mathcalls.h: Remove whitespace before second argument
|
||||||
|
of __MATHDECL. Add note explaining this.
|
||||||
|
|
||||||
|
1997-10-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* manual/arith.texi (Absolute Value): Spelling fix.
|
||||||
|
|
||||||
|
1997-10-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* malloc/obstack.h (obstack_empty_p) [!__GNUC__]: Properly
|
||||||
|
parenthesize the macro parameter.
|
||||||
|
|
||||||
1997-10-15 06:56 Ulrich Drepper <drepper@cygnus.com>
|
1997-10-15 06:56 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
* Rules: Remove ruls to magically install <subdir>.h headers.
|
* Rules: Remove rules to magically install <subdir>.h headers.
|
||||||
Reported by Mark Kettenis <kettenis@phys.uva.nl>.
|
Reported by Mark Kettenis <kettenis@phys.uva.nl>.
|
||||||
|
|
||||||
* glibcbug.in: Fix @gnu.ai.mit.edu -> @gnu.org.
|
* glibcbug.in: Fix @gnu.ai.mit.edu -> @gnu.org.
|
||||||
|
|
23
FAQ
23
FAQ
|
@ -93,6 +93,10 @@ please let me know.
|
||||||
|
|
||||||
[Q26] ``I have /usr/include/net and /usr/include/scsi as symlinks
|
[Q26] ``I have /usr/include/net and /usr/include/scsi as symlinks
|
||||||
into my Linux source tree. Is that wrong?''
|
into my Linux source tree. Is that wrong?''
|
||||||
|
|
||||||
|
[Q27] ``Programs like `logname', `top', `uptime' `users', `w' and
|
||||||
|
`who', show incorrect information about the (number of)
|
||||||
|
users on my system. Why?''
|
||||||
|
|
||||||
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
[Q1] ``What systems does the GNU C Library run on?''
|
[Q1] ``What systems does the GNU C Library run on?''
|
||||||
|
@ -136,7 +140,9 @@ The GNU CC is found like all other GNU packages on
|
||||||
or better one of the many mirror sites.
|
or better one of the many mirror sites.
|
||||||
|
|
||||||
You always should try to use the latest official release. Older
|
You always should try to use the latest official release. Older
|
||||||
versions might not have all the features GNU libc could use.
|
versions might not have all the features GNU libc could use. It is
|
||||||
|
known that on most platforms compilers earlier than 2.7.2.3 fail so
|
||||||
|
at least use this version.
|
||||||
|
|
||||||
|
|
||||||
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
@ -199,6 +205,9 @@ Library.
|
||||||
<J.J.Troup@comp.brad.ac.uk> reports for a full build (shared, static,
|
<J.J.Troup@comp.brad.ac.uk> reports for a full build (shared, static,
|
||||||
and profiled) a compile time of 45h34m.
|
and profiled) a compile time of 45h34m.
|
||||||
|
|
||||||
|
For Atari TT030 (Motorola 68030 @ 32 Mhz, 34 Mb memory) (full build)
|
||||||
|
a compile time of 22h48m.
|
||||||
|
|
||||||
If you have some more measurements let me know.
|
If you have some more measurements let me know.
|
||||||
|
|
||||||
* When compiling for Linux:
|
* When compiling for Linux:
|
||||||
|
@ -345,6 +354,9 @@ be read by functions from the other library. Sorry, but this is what
|
||||||
a major release is for. It's better to have a cut now than having no
|
a major release is for. It's better to have a cut now than having no
|
||||||
means to support the new techniques later.
|
means to support the new techniques later.
|
||||||
|
|
||||||
|
{MK} There is however a (partial) solution for this problem. Please
|
||||||
|
take a look at the file `README.utmpd'.
|
||||||
|
|
||||||
|
|
||||||
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
[Q11] ``Where are the DST_* constants found in <sys/time.h> on many
|
[Q11] ``Where are the DST_* constants found in <sys/time.h> on many
|
||||||
|
@ -713,6 +725,14 @@ symlink that you have in place before you install glibc. However,
|
||||||
/usr/include/asm and /usr/include/linux should remain as they were.
|
/usr/include/asm and /usr/include/linux should remain as they were.
|
||||||
|
|
||||||
|
|
||||||
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
[Q27] ``Programs like `logname', `top', `uptime' `users', `w' and
|
||||||
|
`who', show incorrect information about the (number of)
|
||||||
|
users on my system. Why?''
|
||||||
|
|
||||||
|
[A27] {MK} See Q10.
|
||||||
|
|
||||||
|
|
||||||
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
|
||||||
Answers were given by:
|
Answers were given by:
|
||||||
|
@ -723,6 +743,7 @@ Answers were given by:
|
||||||
{AJ} Andreas Jaeger, <aj@arthur.rhein-neckar.de>
|
{AJ} Andreas Jaeger, <aj@arthur.rhein-neckar.de>
|
||||||
{EY} Eric Youngdale, <eric@andante.jic.com>
|
{EY} Eric Youngdale, <eric@andante.jic.com>
|
||||||
{PB} Phil Blundell, <Philip.Blundell@pobox.com>
|
{PB} Phil Blundell, <Philip.Blundell@pobox.com>
|
||||||
|
{MK} Mark Kettenis, <kettenis@phys.uva.nl>
|
||||||
|
|
||||||
Local Variables:
|
Local Variables:
|
||||||
mode:text
|
mode:text
|
||||||
|
|
|
@ -679,7 +679,7 @@ ifndef subdir
|
||||||
# What we install as libc.so for programs to link against is in fact a
|
# What we install as libc.so for programs to link against is in fact a
|
||||||
# link script. It contains references for the various libraries we need.
|
# link script. It contains references for the various libraries we need.
|
||||||
# The libc.so object is not complete since some functions are only defined
|
# The libc.so object is not complete since some functions are only defined
|
||||||
# in libc.a and the dynamic linker is an etra object.
|
# in libc.a and the dynamic linker is an extra object.
|
||||||
install: $(inst_libdir)/libc.so
|
install: $(inst_libdir)/libc.so
|
||||||
$(inst_libdir)/libc.so: $(common-objpfx)libc.so$(libc.so-version) \
|
$(inst_libdir)/libc.so: $(common-objpfx)libc.so$(libc.so-version) \
|
||||||
$(elfobjdir)/$(rtld-installed-name) \
|
$(elfobjdir)/$(rtld-installed-name) \
|
||||||
|
@ -690,7 +690,11 @@ $(inst_libdir)/libc.so: $(common-objpfx)libc.so$(libc.so-version) \
|
||||||
echo ' The dynamic linker defines some functions used by $(<F),';\
|
echo ' The dynamic linker defines some functions used by $(<F),';\
|
||||||
echo ' but ld uses definitions from libc.a before examining the';\
|
echo ' but ld uses definitions from libc.a before examining the';\
|
||||||
echo ' dependencies of $(<F) to find $(rtld-installed-name). */';\
|
echo ' dependencies of $(<F) to find $(rtld-installed-name). */';\
|
||||||
echo 'GROUP ( $(^F) )') > $@.new
|
echo 'GROUP ( $(slibdir)/libc.so$(libc.so-version)' \
|
||||||
|
'$(slibdir)/$(rtld-installed-name)' \
|
||||||
|
'$(libdir)/lib$(libc-name).a' \
|
||||||
|
')' > $@.new
|
||||||
|
mv -f $@.new $@
|
||||||
mv -f $@.new $@
|
mv -f $@.new $@
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
2
NEWS
2
NEWS
|
@ -4,7 +4,7 @@ Copyright (C) 1992, 93, 94, 95, 96, 97 Free Software Foundation, Inc.
|
||||||
See the end for copying conditions.
|
See the end for copying conditions.
|
||||||
|
|
||||||
Please send GNU C library bug reports using the `glibcbug' script to
|
Please send GNU C library bug reports using the `glibcbug' script to
|
||||||
<bugs@gnu.ai.mit.edu>. Questions and suggestions should be send to
|
<bugs@gnu.org>. Questions and suggestions should be send to
|
||||||
<bug-glibc@prep.ai.mit.edu>.
|
<bug-glibc@prep.ai.mit.edu>.
|
||||||
|
|
||||||
Version 2.1
|
Version 2.1
|
||||||
|
|
|
@ -80,7 +80,7 @@ in the GNU C library, explaining how you can tell the library what
|
||||||
facilities you want it to make available.
|
facilities you want it to make available.
|
||||||
|
|
||||||
We prefer to get bug reports sent using the `glibcbug' shell script which
|
We prefer to get bug reports sent using the `glibcbug' shell script which
|
||||||
is install together with the rest of the GNU libc to <bugs@gnu.ai.mit.edu>.
|
is install together with the rest of the GNU libc to <bugs@gnu.org>.
|
||||||
Simply run this shell script and fill in the information. Nevertheless
|
Simply run this shell script and fill in the information. Nevertheless
|
||||||
you can still send bug reports to <bug-glibc@prep.ai.mit.edu> as normal
|
you can still send bug reports to <bug-glibc@prep.ai.mit.edu> as normal
|
||||||
electronic mails.
|
electronic mails.
|
||||||
|
|
18
Rules
18
Rules
|
@ -75,7 +75,8 @@ $(common-objpfx)dummy.c:
|
||||||
echo 'void __dummy__ (void) { }' > $@
|
echo 'void __dummy__ (void) { }' > $@
|
||||||
$(common-objpfx)empty.c:
|
$(common-objpfx)empty.c:
|
||||||
cp -f /dev/null $@
|
cp -f /dev/null $@
|
||||||
common-generated := $(common-generated) dummy.o dummy.c empty.c empty.os
|
common-generated += dummy.o dummy.c empty.c \
|
||||||
|
$(addprefix empty,$(object-suffixes))
|
||||||
|
|
||||||
# This makes all the auxiliary and test programs.
|
# This makes all the auxiliary and test programs.
|
||||||
|
|
||||||
|
@ -152,6 +153,13 @@ subdir_dist: dist
|
||||||
generated: $(addprefix $(common-objpfx),$(common-generated)) \
|
generated: $(addprefix $(common-objpfx),$(common-generated)) \
|
||||||
$(addprefix $(objpfx),$(generated))
|
$(addprefix $(objpfx),$(generated))
|
||||||
|
|
||||||
|
define o-iterator-doit
|
||||||
|
$(common-objpfx)empty$o: $(common-objpfx)empty.c $(before-compile);
|
||||||
|
$$(compile-command.c)
|
||||||
|
endef
|
||||||
|
object-suffixes-left := $(object-suffixes)
|
||||||
|
include $(o-iterator)
|
||||||
|
|
||||||
ifndef libc.so-version
|
ifndef libc.so-version
|
||||||
# Undefine this because it can't work when we libc.so is unversioned.
|
# Undefine this because it can't work when we libc.so is unversioned.
|
||||||
static-only-routines =
|
static-only-routines =
|
||||||
|
@ -163,21 +171,15 @@ ifdef static-only-routines
|
||||||
$(static-only-routines:%=$(objpfx)%.os): %.os: $(common-objpfx)empty.os
|
$(static-only-routines:%=$(objpfx)%.os): %.os: $(common-objpfx)empty.os
|
||||||
rm -f $@
|
rm -f $@
|
||||||
ln $< $@
|
ln $< $@
|
||||||
|
|
||||||
$(common-objpfx)empty.os: $(common-objpfx)empty.c $(before-compile)
|
|
||||||
$(compile-command.c)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef shared-only-routines
|
ifdef shared-only-routines
|
||||||
# If we have versioned code we don't need the old versions in any of the
|
# If we have versioned code we don't need the old versions in any of the
|
||||||
# static libraries.
|
# static libraries.
|
||||||
define o-iterator-doit
|
define o-iterator-doit
|
||||||
$(shared-only-routines:%=$(objpfx)%.$o): %.$o: $(common-objpfx)empty.$o
|
$(shared-only-routines:%=$(objpfx)%$o): %$o: $(common-objpfx)empty$o;
|
||||||
rm -f $$@
|
rm -f $$@
|
||||||
ln $$< $$@
|
ln $$< $$@
|
||||||
|
|
||||||
$(common-objpfx)empty.$o: $(common-objpfx)empty.c $(before-compile)
|
|
||||||
$$(compile-command.c)
|
|
||||||
endef
|
endef
|
||||||
object-suffixes-left := $(filter-out .os,$(object-suffixes))
|
object-suffixes-left := $(filter-out .os,$(object-suffixes))
|
||||||
include $(o-iterator)
|
include $(o-iterator)
|
||||||
|
|
|
@ -0,0 +1,285 @@
|
||||||
|
GNU libc SNAPSHOT SYSTEM
|
||||||
|
(general info)
|
||||||
|
Updated 1997-9-26
|
||||||
|
|
||||||
|
WHAT ARE GNU libc SNAPSHOTS
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Snapshots are an "image" of the main glibc development tree, captured at a
|
||||||
|
particular random instant in time. When you use the snapshots, you should be
|
||||||
|
able to maintain a local copy of libc that is no more than one day older than
|
||||||
|
the official source tree used by the libc maintainers.
|
||||||
|
|
||||||
|
The primary purpose of providing snapshots is to widen the group of motivated
|
||||||
|
developers that would like to help test, debug, and enhance glibc, by providing
|
||||||
|
you with access to the "latest and greatest" source. This has several
|
||||||
|
advantages, and several disadvantages.
|
||||||
|
|
||||||
|
First the advantages:
|
||||||
|
|
||||||
|
o Once we have a large base of motivated testers using the snapshots,
|
||||||
|
this should provide good coverage across all currently supported
|
||||||
|
glibc hosts and targets. If a new bug is introduced in glibc due to
|
||||||
|
fixing another bug or ongoing development, it should become
|
||||||
|
obvious much more quickly and get fixed before the next general
|
||||||
|
net release. This should help to reduce the chances of glibc being
|
||||||
|
released to the general public with a major bug that went unnoticed
|
||||||
|
during the release cycle testing because they are machine dependent.
|
||||||
|
We hope to greatly improve glibc's stability and reliability by
|
||||||
|
involving more people and more execution environments in the
|
||||||
|
prerelease testing.
|
||||||
|
|
||||||
|
o With access to the latest source, any diffs that you send to fix
|
||||||
|
bugs or add new features should be much easier for the glibc team
|
||||||
|
to merge into the official source base (after suitable review
|
||||||
|
of course). This encourages us to merge your changes quicker,
|
||||||
|
while they are still "fresh".
|
||||||
|
|
||||||
|
o Once your diffs are merged, you can obtain a new copy of glibc
|
||||||
|
containing your changes almost immediately. Thus you do not
|
||||||
|
have to maintain local copies of your changes for any longer
|
||||||
|
than it takes to get them merged into the official source base.
|
||||||
|
This encourages you to send in changes quicker.
|
||||||
|
|
||||||
|
And the disadvantages:
|
||||||
|
|
||||||
|
o The snapshot you get will be largely untested and of unknown quality.
|
||||||
|
It may fail to configure or compile. It may have serious bugs.
|
||||||
|
You should always keep a copy of the last known working version
|
||||||
|
before updating to the current snapshot, or at least be able to
|
||||||
|
regenerate a working version if the latest snapshot is unusable
|
||||||
|
in your environment for some reason.
|
||||||
|
|
||||||
|
If a production version of glibc has a bug and a snapshot has the fix,
|
||||||
|
and you care about stability, you should put only the fix for that
|
||||||
|
particular problem into your production version. Of course, if you
|
||||||
|
are eager to test glibc, you can use the snapshot versions in your
|
||||||
|
daily work, but users who have not been consulted about whether they
|
||||||
|
feel like testing glibc should generally have something which is at
|
||||||
|
least as bug free as the last released version.
|
||||||
|
|
||||||
|
o Providing timely response to your questions, bug reports, and
|
||||||
|
submitted patches will require the glibc development team to allocate
|
||||||
|
time from an already thin time budget. Please try to help us make
|
||||||
|
this time as productive as possible. See the section below about
|
||||||
|
how to submit changes.
|
||||||
|
|
||||||
|
|
||||||
|
WHO SHOULD TRY THE SNAPSHOTS
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
Remember, these are snapshots not tested versions. So if you use
|
||||||
|
these versions you should be able to
|
||||||
|
|
||||||
|
o make sure your system stays usable
|
||||||
|
|
||||||
|
o locate and hopefully fix problems
|
||||||
|
|
||||||
|
o to port glibc to a new target yourself
|
||||||
|
|
||||||
|
You should not use the snapshots if
|
||||||
|
|
||||||
|
o your system is needed in a production environment which needs
|
||||||
|
stability
|
||||||
|
|
||||||
|
o you expect us to fix your problems since you somehow depend on them.
|
||||||
|
You must be willing to fix the problems yourself, we don't want to
|
||||||
|
see "I have problems, fix this" messages.
|
||||||
|
|
||||||
|
|
||||||
|
HOW TO GET THE SNAPSHOTS
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
At the moment we provide a full snapshot weekly (every sunday), so
|
||||||
|
that users getting a snapshot for the first time, or updating after
|
||||||
|
a long period of not updating, can get the latest version in a single
|
||||||
|
operation. Along with the full snapshot, we will provide incremental
|
||||||
|
diffs on a nearly daily basis (whenever code changes). Each daily
|
||||||
|
diff will be relative to the source tree after applying all previous
|
||||||
|
daily diffs. The daily diffs are for people who have relatively low
|
||||||
|
bandwidth ftp or uucp connections.
|
||||||
|
|
||||||
|
The files will be available via anonymous ftp from alpha.gnu.ai.mit.edu, in
|
||||||
|
directory /gnu/libc and on linux.kernel.org in /pub/software/libs/glibc. The
|
||||||
|
directories should look something like:
|
||||||
|
|
||||||
|
libc-970921.tar.gz
|
||||||
|
libc-970917-970922.diff.gz
|
||||||
|
libc-970922-970925.diff.gz
|
||||||
|
.
|
||||||
|
.
|
||||||
|
.
|
||||||
|
|
||||||
|
Please note that the snapshots on alpha.gnu.ai.mit.edu and on
|
||||||
|
linux.kernel.org are not always in sync. Patches to some files might
|
||||||
|
appear a day a diff earlier or later on alpha than on kernel.
|
||||||
|
Use always alpha or always kernel but don't mix them.
|
||||||
|
|
||||||
|
There are sometimes additionally test releases of the add-ons available in
|
||||||
|
these directories. If a new version of an add-on is available it is normally
|
||||||
|
required for the corresponding snapshot so always pay attention for these.
|
||||||
|
|
||||||
|
Note that we provide GNU gzip compressed files only. You can ftp gzip
|
||||||
|
from prep.ai.mit.edu in directory pub/gnu.
|
||||||
|
|
||||||
|
In some cases the dates for diffs and snapshots do not match like in the
|
||||||
|
example above. The full release is for 970921 but the patch is for
|
||||||
|
970917-970922. This only means that nothing changed between 970917 and 970922
|
||||||
|
and that you have to use this patch on top of the 970921 snapshot since the
|
||||||
|
patch is made on 970922.
|
||||||
|
|
||||||
|
Also, as the gcc developers did with their gcc snapshot system, even though we
|
||||||
|
will make the snapshots available on a publically accessible ftp area, we ask
|
||||||
|
that recipients not widely publicise their availability. The motivation for
|
||||||
|
this request is not to hoard them, but to avoid the situation where the
|
||||||
|
general glibc user base naively attempts to use the snapshots, has trouble with
|
||||||
|
them, complains publically, and the reputation of glibc declines because of a
|
||||||
|
perception of instability or lack of quality control.
|
||||||
|
|
||||||
|
|
||||||
|
GLIBC TEST SUITE
|
||||||
|
----------------
|
||||||
|
|
||||||
|
A test suite is distributed as an integral part of the snapshots. A simple
|
||||||
|
"make check" in your build directory is sufficient to run the tests. glibc
|
||||||
|
should pass all tests and if any fails, please report it. A failure might not
|
||||||
|
originate from a bug in glibc but also from bugs in the tools, e.g. with gcc
|
||||||
|
2.7.2.x the math tests fail some of the tests because of compiler bugs.
|
||||||
|
|
||||||
|
Note that the test suite is still in its infancy. The tests themselves only
|
||||||
|
cover a small portion of libc features, and where tests do exist for a feature
|
||||||
|
they are not exhaustive. New tests are welcome.
|
||||||
|
|
||||||
|
|
||||||
|
GETTING HELP, GLIBC DISCUSSIONS, etc
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
People who want to help with glibc and who test out snapshots regularly should
|
||||||
|
get on the libc-alpha@gnu.ai.mit.edu mailing list by sending an email to
|
||||||
|
libc-alpha-request@gnu.ai.mit.edu. This list is meant (as the name suggests)
|
||||||
|
for the discussion of test releases and also reports for them. People who are
|
||||||
|
on this list are welcome to post questions of general interest.
|
||||||
|
|
||||||
|
People who are not only willing to test the snapshots but instead really want
|
||||||
|
to help developing glibc should contact libc-hacker-request@gnu.ai.mit.edu to
|
||||||
|
be put on the developers mailing list. This list is really only meant for
|
||||||
|
developers. No questions about installation problems or other simple topics
|
||||||
|
are wanted nor will they be answered.
|
||||||
|
|
||||||
|
Do *not* send any questions about the snapshots or patches specific to the
|
||||||
|
snapshots to bug-glibc@prep.ai.mit.edu. Nobody there will have any idea what
|
||||||
|
you are talking about and it will just cause confusion.
|
||||||
|
|
||||||
|
|
||||||
|
BUG REPORTS
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Send bug reports directly to Ulrich Drepper <drepper@gnu.ai.mit.edu>. Please
|
||||||
|
do *not* use the glibcbug script for reporting bugs in the snapshots.
|
||||||
|
glibcbug should only be used for problems with the official released versions.
|
||||||
|
We don't like bug reports in the bug database because otherwise the impression
|
||||||
|
of instability or lack of quality control of glibc as a whole might manifest
|
||||||
|
in people's mind.
|
||||||
|
|
||||||
|
Note that since no testing is done on the snapshots, and snapshots may even be
|
||||||
|
made when glibc is in an inconsistent state, it may not be unusual for an
|
||||||
|
occasional snapshot to have a very obvious bug, such as failure to compile on
|
||||||
|
*any* machine. It is likely that such bugs will be fixed by the next
|
||||||
|
snapshot, so it really isn't necessary to report them unless they persist for
|
||||||
|
a couple of days.
|
||||||
|
|
||||||
|
Missing files should always be reported, since they usually mean there is a
|
||||||
|
problem with the snapshot-generating process and we won't know about them
|
||||||
|
unless someone tells us.
|
||||||
|
|
||||||
|
Bugs which are non-obvious, such as failure to compile on only a specific
|
||||||
|
machine, a new machine dependent or obscure bug (particularly one not detected
|
||||||
|
by the testsuite), etc should be reported when you discover them, or have a
|
||||||
|
suggested patch to fix them.
|
||||||
|
|
||||||
|
|
||||||
|
FORMAT FOR PATCHES
|
||||||
|
------------------
|
||||||
|
|
||||||
|
If you have a fix for a bug, or an enhancement to submit, send your patch to
|
||||||
|
Ulrich Drepper <drepper@gnu.ai.mit.edu>. Here are some simple guidelines for
|
||||||
|
submitting patches:
|
||||||
|
|
||||||
|
o Use "unified diffs" for patches. A typical command for generating
|
||||||
|
context diffs is "diff -ru glibc-old glibc-patched".
|
||||||
|
|
||||||
|
o Use the "minimalist approach" for patches. That is, each patch
|
||||||
|
should address only one particular bug, new feature, etc. Do not
|
||||||
|
save up many unrelated changes and submit them all in one big
|
||||||
|
patch, since in general, the larger the patch the more difficult
|
||||||
|
it is for us to decide if the patch is either correct or
|
||||||
|
desirable. And if we find something about the patch that needs
|
||||||
|
to be corrected before it can be installed, we would have to reject
|
||||||
|
the entire patch, which might contain changes which otherwise would
|
||||||
|
be accepted if submitted separately.
|
||||||
|
|
||||||
|
o Submit a sample ChangeLog entry with your patch. See the existing
|
||||||
|
glibc ChangeLog for examples of what a ChangeLog entry should look
|
||||||
|
like. The emacs command ^X4A will create a ChangeLog entry header
|
||||||
|
for you.
|
||||||
|
|
||||||
|
|
||||||
|
BUILDING SNAPSHOTS
|
||||||
|
------------------
|
||||||
|
|
||||||
|
The `best' way to build glibc is to use an extra directory, e.g.:
|
||||||
|
tar xzf libc-970921.tar.gz
|
||||||
|
mkdir build-glibc
|
||||||
|
cd build-glibc
|
||||||
|
../libc-970921/configure ...
|
||||||
|
|
||||||
|
In this way you can easily clean up (since `make clean' doesn't work at
|
||||||
|
the moment) and rebuild glibc.
|
||||||
|
|
||||||
|
|
||||||
|
NECESSARY TOOLS
|
||||||
|
---------------
|
||||||
|
|
||||||
|
For the recommended versions of gcc, binutils, make, texinfo, gettext,
|
||||||
|
autoconf and other tools which might be especially needed when using patches,
|
||||||
|
please read the file INSTALL.
|
||||||
|
|
||||||
|
|
||||||
|
HOW CAN YOU HELP
|
||||||
|
----------------
|
||||||
|
|
||||||
|
It helps already a lot if you just install glibc on your system and try to
|
||||||
|
solve any problems. You might want to look at the file `PROJECTS' and help
|
||||||
|
with one of those projects, fix some bugs (see `BUGS' or the bug database),
|
||||||
|
port to an unsupported platform, ...
|
||||||
|
|
||||||
|
|
||||||
|
FURTHER DOCUMENTATION
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
A lot of questions are answered in the FAQ. The files `INSTALL', `README' and
|
||||||
|
`NOTES' contain the most important documentation. Furthermore glibc has its
|
||||||
|
own 700+ pages info documentation, ...
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
And finally a word of caution: The libc is one of the most fundamental parts
|
||||||
|
of your system - and these snapshots are untested and come without any
|
||||||
|
guarantee or warranty. You might be lucky and everything works or you might
|
||||||
|
crash your system. If you install a glibc snapshot as primary library, you
|
||||||
|
should have a backup somewhere.
|
||||||
|
|
||||||
|
On many systems it is also a problem to replace the libc while the system is
|
||||||
|
running. In the worst case on broken OSes some systems crash. On better
|
||||||
|
systems you can move the old libc aside but removing it will cause problems
|
||||||
|
since there are still processes using this libc image and so you might have to
|
||||||
|
check the filesystem to get rid of the libc data. One good alternative (which
|
||||||
|
is also safer) is to use a chroot'ed environment.
|
||||||
|
|
||||||
|
Thanks for your help and support.
|
||||||
|
|
||||||
|
Thanks to Fred Fish from Cygnus for the original version of this text
|
||||||
|
(for GDB).
|
||||||
|
|
||||||
|
|
||||||
|
Ulrich Drepper
|
|
@ -729,7 +729,12 @@ subdirs="$add_ons"
|
||||||
add_ons_pfx=
|
add_ons_pfx=
|
||||||
if test x"$add_ons" != x; then
|
if test x"$add_ons" != x; then
|
||||||
for f in $add_ons; do
|
for f in $add_ons; do
|
||||||
|
# Test whether such a subdir really exists.
|
||||||
|
if test -d $srcdir/$f; then
|
||||||
add_ons_pfx="$add_ons_pfx $f/"
|
add_ons_pfx="$add_ons_pfx $f/"
|
||||||
|
else
|
||||||
|
{ echo "configure: error: add-on directory \"$f\" does not exist" 1>&2; exit 1; }
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -755,7 +760,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking host system type""... $ac_c" 1>&6
|
echo $ac_n "checking host system type""... $ac_c" 1>&6
|
||||||
echo "configure:759: checking host system type" >&5
|
echo "configure:764: checking host system type" >&5
|
||||||
|
|
||||||
host_alias=$host
|
host_alias=$host
|
||||||
case "$host_alias" in
|
case "$host_alias" in
|
||||||
|
@ -874,7 +879,7 @@ fi
|
||||||
# This can take a while to compute.
|
# This can take a while to compute.
|
||||||
sysdep_dir=$srcdir/sysdeps
|
sysdep_dir=$srcdir/sysdeps
|
||||||
echo $ac_n "checking sysdep dirs""... $ac_c" 1>&6
|
echo $ac_n "checking sysdep dirs""... $ac_c" 1>&6
|
||||||
echo "configure:878: checking sysdep dirs" >&5
|
echo "configure:883: checking sysdep dirs" >&5
|
||||||
# Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
|
# Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
|
||||||
os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
|
os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
|
||||||
|
|
||||||
|
@ -1075,7 +1080,7 @@ echo "$ac_t""sysdeps/generic" 1>&6
|
||||||
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
|
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
|
||||||
# ./install, which can be erroneously created by make from ./install.sh.
|
# ./install, which can be erroneously created by make from ./install.sh.
|
||||||
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
|
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
|
||||||
echo "configure:1079: checking for a BSD compatible install" >&5
|
echo "configure:1084: checking for a BSD compatible install" >&5
|
||||||
if test -z "$INSTALL"; then
|
if test -z "$INSTALL"; then
|
||||||
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1129,7 +1134,7 @@ if test "$INSTALL" = "${srcdir}/install-sh -c"; then
|
||||||
INSTALL='\$(..)./install-sh -c'
|
INSTALL='\$(..)./install-sh -c'
|
||||||
fi
|
fi
|
||||||
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
|
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
|
||||||
echo "configure:1133: checking whether ln -s works" >&5
|
echo "configure:1138: checking whether ln -s works" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1154,7 +1159,7 @@ do
|
||||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||||
set dummy $ac_prog; ac_word=$2
|
set dummy $ac_prog; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1158: checking for $ac_word" >&5
|
echo "configure:1163: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1187,7 +1192,7 @@ test -n "$MSGFMT" || MSGFMT=":"
|
||||||
# Extract the first word of "gcc", so it can be a program name with args.
|
# Extract the first word of "gcc", so it can be a program name with args.
|
||||||
set dummy gcc; ac_word=$2
|
set dummy gcc; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1191: checking for $ac_word" >&5
|
echo "configure:1196: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1216,7 +1221,7 @@ if test -z "$CC"; then
|
||||||
# Extract the first word of "cc", so it can be a program name with args.
|
# Extract the first word of "cc", so it can be a program name with args.
|
||||||
set dummy cc; ac_word=$2
|
set dummy cc; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1220: checking for $ac_word" >&5
|
echo "configure:1225: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1264,7 +1269,7 @@ fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
|
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
|
||||||
echo "configure:1268: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
|
echo "configure:1273: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
|
||||||
|
|
||||||
ac_ext=c
|
ac_ext=c
|
||||||
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
|
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
|
||||||
|
@ -1274,11 +1279,11 @@ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS
|
||||||
cross_compiling=$ac_cv_prog_cc_cross
|
cross_compiling=$ac_cv_prog_cc_cross
|
||||||
|
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1278 "configure"
|
#line 1283 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
main(){return(0);}
|
main(){return(0);}
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
ac_cv_prog_cc_works=yes
|
ac_cv_prog_cc_works=yes
|
||||||
# If we can't run a trivial program, we are probably using a cross compiler.
|
# If we can't run a trivial program, we are probably using a cross compiler.
|
||||||
if (./conftest; exit) 2>/dev/null; then
|
if (./conftest; exit) 2>/dev/null; then
|
||||||
|
@ -1301,13 +1306,13 @@ else
|
||||||
cross_linkable=yes
|
cross_linkable=yes
|
||||||
fi
|
fi
|
||||||
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
|
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
|
||||||
echo "configure:1305: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
|
echo "configure:1310: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
|
||||||
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
|
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
|
||||||
|
|
||||||
cross_compiling=$ac_cv_prog_cc_cross
|
cross_compiling=$ac_cv_prog_cc_cross
|
||||||
|
|
||||||
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
|
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
|
||||||
echo "configure:1311: checking whether we are using GNU C" >&5
|
echo "configure:1316: checking whether we are using GNU C" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1316,7 +1321,7 @@ else
|
||||||
yes;
|
yes;
|
||||||
#endif
|
#endif
|
||||||
EOF
|
EOF
|
||||||
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1320: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1325: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
||||||
ac_cv_prog_gcc=yes
|
ac_cv_prog_gcc=yes
|
||||||
else
|
else
|
||||||
ac_cv_prog_gcc=no
|
ac_cv_prog_gcc=no
|
||||||
|
@ -1333,7 +1338,7 @@ if test $ac_cv_prog_gcc = yes; then
|
||||||
yes;
|
yes;
|
||||||
#endif
|
#endif
|
||||||
EOF
|
EOF
|
||||||
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1337: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1342: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
||||||
if test -z "$CFLAGS"; then
|
if test -z "$CFLAGS"; then
|
||||||
CFLAGS="-g -O2"
|
CFLAGS="-g -O2"
|
||||||
fi
|
fi
|
||||||
|
@ -1345,7 +1350,7 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking build system type""... $ac_c" 1>&6
|
echo $ac_n "checking build system type""... $ac_c" 1>&6
|
||||||
echo "configure:1349: checking build system type" >&5
|
echo "configure:1354: checking build system type" >&5
|
||||||
|
|
||||||
build_alias=$build
|
build_alias=$build
|
||||||
case "$build_alias" in
|
case "$build_alias" in
|
||||||
|
@ -1368,7 +1373,7 @@ do
|
||||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||||
set dummy $ac_prog; ac_word=$2
|
set dummy $ac_prog; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1372: checking for $ac_word" >&5
|
echo "configure:1377: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1399,7 +1404,7 @@ done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
|
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
|
||||||
echo "configure:1403: checking how to run the C preprocessor" >&5
|
echo "configure:1408: checking how to run the C preprocessor" >&5
|
||||||
# On Suns, sometimes $CPP names a directory.
|
# On Suns, sometimes $CPP names a directory.
|
||||||
if test -n "$CPP" && test -d "$CPP"; then
|
if test -n "$CPP" && test -d "$CPP"; then
|
||||||
CPP=
|
CPP=
|
||||||
|
@ -1414,13 +1419,13 @@ else
|
||||||
# On the NeXT, cc -E runs the code through the compiler's parser,
|
# On the NeXT, cc -E runs the code through the compiler's parser,
|
||||||
# not just through cpp.
|
# not just through cpp.
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1418 "configure"
|
#line 1423 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
Syntax Error
|
Syntax Error
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:1424: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:1429: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out`
|
ac_err=`grep -v '^ *+' conftest.out`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
:
|
:
|
||||||
|
@ -1431,13 +1436,13 @@ else
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
CPP="${CC-cc} -E -traditional-cpp"
|
CPP="${CC-cc} -E -traditional-cpp"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1435 "configure"
|
#line 1440 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
Syntax Error
|
Syntax Error
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:1441: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:1446: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out`
|
ac_err=`grep -v '^ *+' conftest.out`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
:
|
:
|
||||||
|
@ -1470,7 +1475,7 @@ LD=`$CC -print-file-name=ld`
|
||||||
|
|
||||||
# Determine whether we are using GNU binutils.
|
# Determine whether we are using GNU binutils.
|
||||||
echo $ac_n "checking whether $AS is GNU as""... $ac_c" 1>&6
|
echo $ac_n "checking whether $AS is GNU as""... $ac_c" 1>&6
|
||||||
echo "configure:1474: checking whether $AS is GNU as" >&5
|
echo "configure:1479: checking whether $AS is GNU as" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_prog_as_gnu'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_prog_as_gnu'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1488,7 +1493,7 @@ rm -f a.out
|
||||||
gnu_as=$libc_cv_prog_as_gnu
|
gnu_as=$libc_cv_prog_as_gnu
|
||||||
|
|
||||||
echo $ac_n "checking whether $LD is GNU ld""... $ac_c" 1>&6
|
echo $ac_n "checking whether $LD is GNU ld""... $ac_c" 1>&6
|
||||||
echo "configure:1492: checking whether $LD is GNU ld" >&5
|
echo "configure:1497: checking whether $LD is GNU ld" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_prog_ld_gnu'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_prog_ld_gnu'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1512,7 +1517,7 @@ fi
|
||||||
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
|
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
|
||||||
set dummy ${ac_tool_prefix}ar; ac_word=$2
|
set dummy ${ac_tool_prefix}ar; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1516: checking for $ac_word" >&5
|
echo "configure:1521: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1543,7 +1548,7 @@ fi
|
||||||
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
|
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
|
||||||
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
|
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1547: checking for $ac_word" >&5
|
echo "configure:1552: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1574,7 +1579,7 @@ if test -n "$ac_tool_prefix"; then
|
||||||
# Extract the first word of "ranlib", so it can be a program name with args.
|
# Extract the first word of "ranlib", so it can be a program name with args.
|
||||||
set dummy ranlib; ac_word=$2
|
set dummy ranlib; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1578: checking for $ac_word" >&5
|
echo "configure:1583: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1609,7 +1614,7 @@ fi
|
||||||
# Extract the first word of "bash", so it can be a program name with args.
|
# Extract the first word of "bash", so it can be a program name with args.
|
||||||
set dummy bash; ac_word=$2
|
set dummy bash; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1613: checking for $ac_word" >&5
|
echo "configure:1618: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1650,7 +1655,7 @@ if test "$BASH" = no; then
|
||||||
# Extract the first word of "ksh", so it can be a program name with args.
|
# Extract the first word of "ksh", so it can be a program name with args.
|
||||||
set dummy ksh; ac_word=$2
|
set dummy ksh; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1654: checking for $ac_word" >&5
|
echo "configure:1659: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_path_KSH'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_path_KSH'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1696,7 +1701,7 @@ do
|
||||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||||
set dummy $ac_prog; ac_word=$2
|
set dummy $ac_prog; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1700: checking for $ac_word" >&5
|
echo "configure:1705: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1731,7 +1736,7 @@ test -n "$PERL" || PERL="no"
|
||||||
|
|
||||||
|
|
||||||
echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
|
echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
|
||||||
echo "configure:1735: checking for signed size_t type" >&5
|
echo "configure:1740: checking for signed size_t type" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1755,12 +1760,12 @@ EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
|
echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
|
||||||
echo "configure:1759: checking for libc-friendly stddef.h" >&5
|
echo "configure:1764: checking for libc-friendly stddef.h" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1764 "configure"
|
#line 1769 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#define __need_size_t
|
#define __need_size_t
|
||||||
#define __need_wchar_t
|
#define __need_wchar_t
|
||||||
|
@ -1775,7 +1780,7 @@ size_t size; wchar_t wchar;
|
||||||
if (&size == NULL || &wchar == NULL) abort ();
|
if (&size == NULL || &wchar == NULL) abort ();
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1779: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
if { (eval echo configure:1784: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
libc_cv_friendly_stddef=yes
|
libc_cv_friendly_stddef=yes
|
||||||
else
|
else
|
||||||
|
@ -1794,7 +1799,7 @@ override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking whether we need to use -P to assemble .S files""... $ac_c" 1>&6
|
echo $ac_n "checking whether we need to use -P to assemble .S files""... $ac_c" 1>&6
|
||||||
echo "configure:1798: checking whether we need to use -P to assemble .S files" >&5
|
echo "configure:1803: checking whether we need to use -P to assemble .S files" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1817,7 +1822,7 @@ asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6
|
echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6
|
||||||
echo "configure:1821: checking for assembler global-symbol directive" >&5
|
echo "configure:1826: checking for assembler global-symbol directive" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1847,7 +1852,7 @@ EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
|
echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
|
||||||
echo "configure:1851: checking for .set assembler directive" >&5
|
echo "configure:1856: checking for .set assembler directive" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1881,7 +1886,7 @@ EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6
|
echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6
|
||||||
echo "configure:1885: checking for .symver assembler directive" >&5
|
echo "configure:1890: checking for .symver assembler directive" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_asm_symver_directive'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_asm_symver_directive'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1900,7 +1905,7 @@ fi
|
||||||
|
|
||||||
echo "$ac_t""$libc_cv_asm_symver_directive" 1>&6
|
echo "$ac_t""$libc_cv_asm_symver_directive" 1>&6
|
||||||
echo $ac_n "checking for ld --version-script""... $ac_c" 1>&6
|
echo $ac_n "checking for ld --version-script""... $ac_c" 1>&6
|
||||||
echo "configure:1904: checking for ld --version-script" >&5
|
echo "configure:1909: checking for ld --version-script" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_ld_version_script_option'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_ld_version_script_option'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1919,7 +1924,7 @@ EOF
|
||||||
if { ac_try='${CC-cc} $CFLAGS -shared -o conftest.so conftest.o
|
if { ac_try='${CC-cc} $CFLAGS -shared -o conftest.so conftest.o
|
||||||
-nostartfiles -nostdlib
|
-nostartfiles -nostdlib
|
||||||
-Wl,--version-script,conftest.map
|
-Wl,--version-script,conftest.map
|
||||||
1>&5'; { (eval echo configure:1923: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
|
1>&5'; { (eval echo configure:1928: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
|
||||||
then
|
then
|
||||||
libc_cv_ld_version_script_option=yes
|
libc_cv_ld_version_script_option=yes
|
||||||
else
|
else
|
||||||
|
@ -1950,7 +1955,7 @@ fi
|
||||||
|
|
||||||
if test $elf = yes; then
|
if test $elf = yes; then
|
||||||
echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6
|
echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6
|
||||||
echo "configure:1954: checking for .previous assembler directive" >&5
|
echo "configure:1959: checking for .previous assembler directive" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1958,7 +1963,7 @@ else
|
||||||
.section foo_section
|
.section foo_section
|
||||||
.previous
|
.previous
|
||||||
EOF
|
EOF
|
||||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1962: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1967: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||||
libc_cv_asm_previous_directive=yes
|
libc_cv_asm_previous_directive=yes
|
||||||
else
|
else
|
||||||
libc_cv_asm_previous_directive=no
|
libc_cv_asm_previous_directive=no
|
||||||
|
@ -1974,7 +1979,7 @@ EOF
|
||||||
|
|
||||||
else
|
else
|
||||||
echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6
|
echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6
|
||||||
echo "configure:1978: checking for .popsection assembler directive" >&5
|
echo "configure:1983: checking for .popsection assembler directive" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -1982,7 +1987,7 @@ else
|
||||||
.pushsection foo_section
|
.pushsection foo_section
|
||||||
.popsection
|
.popsection
|
||||||
EOF
|
EOF
|
||||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1986: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1991: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||||
libc_cv_asm_popsection_directive=yes
|
libc_cv_asm_popsection_directive=yes
|
||||||
else
|
else
|
||||||
libc_cv_asm_popsection_directive=no
|
libc_cv_asm_popsection_directive=no
|
||||||
|
@ -2002,12 +2007,12 @@ fi
|
||||||
|
|
||||||
if test $elf != yes; then
|
if test $elf != yes; then
|
||||||
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
|
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
|
||||||
echo "configure:2006: checking for .init and .fini sections" >&5
|
echo "configure:2011: checking for .init and .fini sections" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2011 "configure"
|
#line 2016 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
@ -2016,7 +2021,7 @@ asm (".section .init");
|
||||||
asm (".text");
|
asm (".text");
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:2020: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
if { (eval echo configure:2025: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
libc_cv_have_initfini=yes
|
libc_cv_have_initfini=yes
|
||||||
else
|
else
|
||||||
|
@ -2044,19 +2049,19 @@ if test $elf = yes; then
|
||||||
else
|
else
|
||||||
if test $ac_cv_prog_cc_works = yes; then
|
if test $ac_cv_prog_cc_works = yes; then
|
||||||
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
|
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
|
||||||
echo "configure:2048: checking for _ prefix on C symbol names" >&5
|
echo "configure:2053: checking for _ prefix on C symbol names" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2053 "configure"
|
#line 2058 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
asm ("_glibc_foobar:");
|
asm ("_glibc_foobar:");
|
||||||
int main() {
|
int main() {
|
||||||
glibc_foobar ();
|
glibc_foobar ();
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:2060: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:2065: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
libc_cv_asm_underscores=yes
|
libc_cv_asm_underscores=yes
|
||||||
else
|
else
|
||||||
|
@ -2071,17 +2076,17 @@ fi
|
||||||
echo "$ac_t""$libc_cv_asm_underscores" 1>&6
|
echo "$ac_t""$libc_cv_asm_underscores" 1>&6
|
||||||
else
|
else
|
||||||
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
|
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
|
||||||
echo "configure:2075: checking for _ prefix on C symbol names" >&5
|
echo "configure:2080: checking for _ prefix on C symbol names" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 2080 "configure"
|
#line 2085 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
void underscore_test(void) {
|
void underscore_test(void) {
|
||||||
return; }
|
return; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:2085: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
if { (eval echo configure:2090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||||
if grep _underscore_test conftest* >/dev/null; then
|
if grep _underscore_test conftest* >/dev/null; then
|
||||||
rm -f conftest*
|
rm -f conftest*
|
||||||
libc_cv_asm_underscores=yes
|
libc_cv_asm_underscores=yes
|
||||||
|
@ -2114,7 +2119,7 @@ if test $elf = yes; then
|
||||||
libc_cv_asm_weakext_directive=no
|
libc_cv_asm_weakext_directive=no
|
||||||
else
|
else
|
||||||
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
|
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
|
||||||
echo "configure:2118: checking for assembler .weak directive" >&5
|
echo "configure:2123: checking for assembler .weak directive" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -2137,7 +2142,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
|
||||||
|
|
||||||
if test $libc_cv_asm_weak_directive = no; then
|
if test $libc_cv_asm_weak_directive = no; then
|
||||||
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
|
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
|
||||||
echo "configure:2141: checking for assembler .weakext directive" >&5
|
echo "configure:2146: checking for assembler .weakext directive" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -2174,7 +2179,7 @@ EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
|
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
|
||||||
echo "configure:2178: checking for ld --no-whole-archive" >&5
|
echo "configure:2183: checking for ld --no-whole-archive" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -2185,7 +2190,7 @@ __throw () {}
|
||||||
EOF
|
EOF
|
||||||
if { ac_try='${CC-cc} $CFLAGS
|
if { ac_try='${CC-cc} $CFLAGS
|
||||||
-nostdlib -nostartfiles -Wl,--no-whole-archive
|
-nostdlib -nostartfiles -Wl,--no-whole-archive
|
||||||
-o conftest conftest.c 1>&5'; { (eval echo configure:2189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
-o conftest conftest.c 1>&5'; { (eval echo configure:2194: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||||
libc_cv_ld_no_whole_archive=yes
|
libc_cv_ld_no_whole_archive=yes
|
||||||
else
|
else
|
||||||
libc_cv_ld_no_whole_archive=no
|
libc_cv_ld_no_whole_archive=no
|
||||||
|
@ -2196,7 +2201,7 @@ fi
|
||||||
echo "$ac_t""$libc_cv_ld_no_whole_archive" 1>&6
|
echo "$ac_t""$libc_cv_ld_no_whole_archive" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 1>&6
|
echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 1>&6
|
||||||
echo "configure:2200: checking for gcc -fno-exceptions" >&5
|
echo "configure:2205: checking for gcc -fno-exceptions" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -2207,7 +2212,7 @@ __throw () {}
|
||||||
EOF
|
EOF
|
||||||
if { ac_try='${CC-cc} $CFLAGS
|
if { ac_try='${CC-cc} $CFLAGS
|
||||||
-nostdlib -nostartfiles -fno-exceptions
|
-nostdlib -nostartfiles -fno-exceptions
|
||||||
-o conftest conftest.c 1>&5'; { (eval echo configure:2211: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
-o conftest conftest.c 1>&5'; { (eval echo configure:2216: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||||
libc_cv_gcc_no_exceptions=yes
|
libc_cv_gcc_no_exceptions=yes
|
||||||
else
|
else
|
||||||
libc_cv_gcc_no_exceptions=no
|
libc_cv_gcc_no_exceptions=no
|
||||||
|
@ -2218,12 +2223,12 @@ fi
|
||||||
echo "$ac_t""$libc_cv_gcc_no_exceptions" 1>&6
|
echo "$ac_t""$libc_cv_gcc_no_exceptions" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6
|
echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6
|
||||||
echo "configure:2222: checking for DWARF2 unwind info support" >&5
|
echo "configure:2227: checking for DWARF2 unwind info support" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.c <<EOF
|
cat > conftest.c <<EOF
|
||||||
#line 2227 "configure"
|
#line 2232 "configure"
|
||||||
static char __EH_FRAME_BEGIN__;
|
static char __EH_FRAME_BEGIN__;
|
||||||
_start ()
|
_start ()
|
||||||
{
|
{
|
||||||
|
@ -2244,7 +2249,7 @@ __bzero () {}
|
||||||
EOF
|
EOF
|
||||||
if { ac_try='${CC-cc} $CFLAGS
|
if { ac_try='${CC-cc} $CFLAGS
|
||||||
-nostdlib -nostartfiles
|
-nostdlib -nostartfiles
|
||||||
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:2248: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:2253: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||||
libc_cv_gcc_dwarf2_unwind_info=yes
|
libc_cv_gcc_dwarf2_unwind_info=yes
|
||||||
else
|
else
|
||||||
libc_cv_gcc_dwarf2_unwind_info=no
|
libc_cv_gcc_dwarf2_unwind_info=no
|
||||||
|
@ -2302,7 +2307,7 @@ if test "$uname" = "sysdeps/generic"; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
|
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
|
||||||
echo "configure:2306: checking OS release for uname" >&5
|
echo "configure:2311: checking OS release for uname" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -2324,7 +2329,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
|
||||||
uname_release="$libc_cv_uname_release"
|
uname_release="$libc_cv_uname_release"
|
||||||
|
|
||||||
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
|
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
|
||||||
echo "configure:2328: checking OS version for uname" >&5
|
echo "configure:2333: checking OS version for uname" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -2346,7 +2351,7 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking stdio selection""... $ac_c" 1>&6
|
echo $ac_n "checking stdio selection""... $ac_c" 1>&6
|
||||||
echo "configure:2350: checking stdio selection" >&5
|
echo "configure:2355: checking stdio selection" >&5
|
||||||
|
|
||||||
case $stdio in
|
case $stdio in
|
||||||
libio) cat >> confdefs.h <<\EOF
|
libio) cat >> confdefs.h <<\EOF
|
||||||
|
@ -2358,7 +2363,7 @@ esac
|
||||||
echo "$ac_t""$stdio" 1>&6
|
echo "$ac_t""$stdio" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking ldap selection""... $ac_c" 1>&6
|
echo $ac_n "checking ldap selection""... $ac_c" 1>&6
|
||||||
echo "configure:2362: checking ldap selection" >&5
|
echo "configure:2367: checking ldap selection" >&5
|
||||||
|
|
||||||
case $add_ons in
|
case $add_ons in
|
||||||
*ldap*)
|
*ldap*)
|
||||||
|
|
|
@ -88,7 +88,12 @@ AC_CONFIG_SUBDIRS($add_ons)
|
||||||
add_ons_pfx=
|
add_ons_pfx=
|
||||||
if test x"$add_ons" != x; then
|
if test x"$add_ons" != x; then
|
||||||
for f in $add_ons; do
|
for f in $add_ons; do
|
||||||
|
# Test whether such a subdir really exists.
|
||||||
|
if test -d $srcdir/$f; then
|
||||||
add_ons_pfx="$add_ons_pfx $f/"
|
add_ons_pfx="$add_ons_pfx $f/"
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR(add-on directory \"$f\" does not exist)
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -216,7 +216,7 @@ more_help (int key, const char *text, void *input)
|
||||||
case ARGP_KEY_HELP_EXTRA:
|
case ARGP_KEY_HELP_EXTRA:
|
||||||
/* We print some extra information. */
|
/* We print some extra information. */
|
||||||
return strdup (gettext ("\
|
return strdup (gettext ("\
|
||||||
Report bugs using the `glibcbug' script to <bugs@gnu.ai.mit.edu>.\n"));
|
Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"));
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
|
/* Copyright (C) 1992, 93, 94, 95, 96, 97 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
@ -46,6 +46,9 @@ scandir (dir, namelist, select, cmp)
|
||||||
{
|
{
|
||||||
size_t dsize;
|
size_t dsize;
|
||||||
|
|
||||||
|
/* Ignore errors from select or readdir */
|
||||||
|
__set_errno (0);
|
||||||
|
|
||||||
if (i == vsize)
|
if (i == vsize)
|
||||||
{
|
{
|
||||||
struct dirent **new;
|
struct dirent **new;
|
||||||
|
|
|
@ -33,7 +33,7 @@ _dl_addr (const void *address, Dl_info *info)
|
||||||
/* Find the highest-addressed object that ADDRESS is not below. */
|
/* Find the highest-addressed object that ADDRESS is not below. */
|
||||||
match = NULL;
|
match = NULL;
|
||||||
for (l = _dl_loaded; l; l = l->l_next)
|
for (l = _dl_loaded; l; l = l->l_next)
|
||||||
if (addr >= l->l_addr && !match || match->l_addr < l->l_addr)
|
if (addr >= l->l_addr && (!match || match->l_addr < l->l_addr))
|
||||||
match = l;
|
match = l;
|
||||||
|
|
||||||
if (match)
|
if (match)
|
||||||
|
@ -62,10 +62,11 @@ _dl_addr (const void *address, Dl_info *info)
|
||||||
/* We assume that the string table follows the symbol table, because
|
/* We assume that the string table follows the symbol table, because
|
||||||
there is no way in ELF to know the size of the dynamic symbol table!! */
|
there is no way in ELF to know the size of the dynamic symbol table!! */
|
||||||
for (matchsym = NULL; (void *) symtab < (void *) strtab; ++symtab)
|
for (matchsym = NULL; (void *) symtab < (void *) strtab; ++symtab)
|
||||||
if (addr >= match->l_addr + symtab->st_value && !matchsym ||
|
if (addr >= match->l_addr + symtab->st_value
|
||||||
matchsym->st_value < symtab->st_value &&
|
&& (!matchsym
|
||||||
ELFW(ST_BIND) (symtab->st_info) == STB_GLOBAL ||
|
|| (matchsym->st_value < symtab->st_value
|
||||||
ELFW(ST_BIND) (symtab->st_info) == STB_WEAK)
|
&& (ELFW(ST_BIND) (symtab->st_info) == STB_GLOBAL
|
||||||
|
|| ELFW(ST_BIND) (symtab->st_info) == STB_WEAK))))
|
||||||
matchsym = symtab;
|
matchsym = symtab;
|
||||||
|
|
||||||
if (matchsym)
|
if (matchsym)
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
|
|
||||||
#include "dl-hash.h"
|
#include "dl-hash.h"
|
||||||
#include <dl-machine.h>
|
#include <dl-machine.h>
|
||||||
#include <stdio-common/_itoa.h>
|
|
||||||
|
|
||||||
#define VERSTAG(tag) (DT_NUM + DT_PROCNUM + DT_VERSIONTAGIDX (tag))
|
#define VERSTAG(tag) (DT_NUM + DT_PROCNUM + DT_VERSIONTAGIDX (tag))
|
||||||
|
|
||||||
|
|
|
@ -146,7 +146,7 @@ __assert_fail (const char *assertion,
|
||||||
char buf[64];
|
char buf[64];
|
||||||
buf[sizeof buf - 1] = '\0';
|
buf[sizeof buf - 1] = '\0';
|
||||||
_dl_sysdep_fatal ("BUG IN DYNAMIC LINKER ld.so: ",
|
_dl_sysdep_fatal ("BUG IN DYNAMIC LINKER ld.so: ",
|
||||||
file, ": ", _itoa (line, buf + sizeof buf - 1, 10, 0),
|
file, ": ", _itoa_word (line, buf + sizeof buf - 1, 10, 0),
|
||||||
": ", function ?: "", function ? ": " : "",
|
": ", function ?: "", function ? ": " : "",
|
||||||
"Assertion `", assertion, "' failed!\n",
|
"Assertion `", assertion, "' failed!\n",
|
||||||
NULL);
|
NULL);
|
||||||
|
@ -161,7 +161,7 @@ __assert_perror_fail (int errnum,
|
||||||
char buf[64];
|
char buf[64];
|
||||||
buf[sizeof buf - 1] = '\0';
|
buf[sizeof buf - 1] = '\0';
|
||||||
_dl_sysdep_fatal ("BUG IN DYNAMIC LINKER ld.so: ",
|
_dl_sysdep_fatal ("BUG IN DYNAMIC LINKER ld.so: ",
|
||||||
file, ": ", _itoa (line, buf + sizeof buf - 1, 10, 0),
|
file, ": ", _itoa_word (line, buf + sizeof buf - 1, 10, 0),
|
||||||
": ", function ?: "", function ? ": " : "",
|
": ", function ?: "", function ? ": " : "",
|
||||||
"Unexpected error: ", strerror (errnum), "\n", NULL);
|
"Unexpected error: ", strerror (errnum), "\n", NULL);
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ Written by Roland McGrath and Ulrich Drepper."
|
||||||
-d, --data-relocs process data relocations
|
-d, --data-relocs process data relocations
|
||||||
-r, --function-relocs process data and function relocations
|
-r, --function-relocs process data and function relocations
|
||||||
-v, --verbose print all information
|
-v, --verbose print all information
|
||||||
Report bugs using the \`glibcbug' script to <bugs@gnu.ai.mit.edu>."
|
Report bugs using the \`glibcbug' script to <bugs@gnu.org>."
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
-d | --d | --da | --dat | --data | --data- | --data-r | --data-re | \
|
-d | --d | --da | --dat | --data | --data- | --data-r | --data-re | \
|
||||||
--data-rel | --data-relo | --data-reloc | --data-relocs)
|
--data-rel | --data-relo | --data-reloc | --data-relocs)
|
||||||
|
@ -88,7 +88,7 @@ case $# in
|
||||||
1)
|
1)
|
||||||
# We don't list the file name when there is only one.
|
# We don't list the file name when there is only one.
|
||||||
case "$1" in
|
case "$1" in
|
||||||
/*) file="$1" ;;
|
*/*) file="$1" ;;
|
||||||
*) file="./$1" ;;
|
*) file="./$1" ;;
|
||||||
esac
|
esac
|
||||||
if test ! -f "$file"; then
|
if test ! -f "$file"; then
|
||||||
|
@ -124,7 +124,7 @@ case $# in
|
||||||
for file; do
|
for file; do
|
||||||
echo "${file}:"
|
echo "${file}:"
|
||||||
case "$file" in
|
case "$file" in
|
||||||
/*) : ;;
|
*/*) : ;;
|
||||||
*) file="./$file" ;;
|
*) file="./$file" ;;
|
||||||
esac
|
esac
|
||||||
if test ! -f "$file"; then
|
if test ! -f "$file"; then
|
||||||
|
|
|
@ -44,7 +44,7 @@ Written by Roland McGrath and Ulrich Drepper.'
|
||||||
-d, --data-relocs process data relocations
|
-d, --data-relocs process data relocations
|
||||||
-r, --function-relocs process data and function relocations
|
-r, --function-relocs process data and function relocations
|
||||||
-v, --verbose print all information
|
-v, --verbose print all information
|
||||||
Report bugs using the \`glibcbug' script to <bugs@gnu.ai.mit.edu>."
|
Report bugs using the \`glibcbug' script to <bugs@gnu.org>."
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
-d | --d | --da | --dat | --data | --data- | --data-r | --data-re | \
|
-d | --d | --da | --dat | --data | --data- | --data-r | --data-re | \
|
||||||
--data-rel | --data-relo | --data-reloc | --data-relocs)
|
--data-rel | --data-relo | --data-reloc | --data-relocs)
|
||||||
|
@ -85,7 +85,7 @@ Try \`ldd --help' for more information."
|
||||||
1)
|
1)
|
||||||
# We don't list the file name when there is only one.
|
# We don't list the file name when there is only one.
|
||||||
case "$1" in
|
case "$1" in
|
||||||
/*) file="$1" ;;
|
*/*) file="$1" ;;
|
||||||
*) file="./$1" ;;
|
*) file="./$1" ;;
|
||||||
esac
|
esac
|
||||||
if test ! -f "$file"; then
|
if test ! -f "$file"; then
|
||||||
|
@ -124,7 +124,7 @@ Try \`ldd --help' for more information."
|
||||||
for file; do
|
for file; do
|
||||||
echo "${file}:"
|
echo "${file}:"
|
||||||
case "$file" in
|
case "$file" in
|
||||||
/*) : ;;
|
*/*) : ;;
|
||||||
*) file="./$file" ;;
|
*) file="./$file" ;;
|
||||||
esac
|
esac
|
||||||
if test ! -f "$file"; then
|
if test ! -f "$file"; then
|
||||||
|
|
|
@ -656,7 +656,7 @@ of this helper program; chances are you did not intend to run this program.\n",
|
||||||
{
|
{
|
||||||
char buf[20], *bp;
|
char buf[20], *bp;
|
||||||
buf[sizeof buf - 1] = '\0';
|
buf[sizeof buf - 1] = '\0';
|
||||||
bp = _itoa (l->l_addr, &buf[sizeof buf - 1], 16, 0);
|
bp = _itoa_word (l->l_addr, &buf[sizeof buf - 1], 16, 0);
|
||||||
while ((size_t) (&buf[sizeof buf - 1] - bp)
|
while ((size_t) (&buf[sizeof buf - 1] - bp)
|
||||||
< sizeof l->l_addr * 2)
|
< sizeof l->l_addr * 2)
|
||||||
*--bp = '0';
|
*--bp = '0';
|
||||||
|
@ -675,12 +675,12 @@ of this helper program; chances are you did not intend to run this program.\n",
|
||||||
ELF_MACHINE_JMP_SLOT);
|
ELF_MACHINE_JMP_SLOT);
|
||||||
char buf[20], *bp;
|
char buf[20], *bp;
|
||||||
buf[sizeof buf - 1] = '\0';
|
buf[sizeof buf - 1] = '\0';
|
||||||
bp = _itoa (ref->st_value, &buf[sizeof buf - 1], 16, 0);
|
bp = _itoa_word (ref->st_value, &buf[sizeof buf - 1], 16, 0);
|
||||||
while ((size_t) (&buf[sizeof buf - 1] - bp) < sizeof loadbase * 2)
|
while ((size_t) (&buf[sizeof buf - 1] - bp) < sizeof loadbase * 2)
|
||||||
*--bp = '0';
|
*--bp = '0';
|
||||||
_dl_sysdep_message (_dl_argv[i], " found at 0x", bp, NULL);
|
_dl_sysdep_message (_dl_argv[i], " found at 0x", bp, NULL);
|
||||||
buf[sizeof buf - 1] = '\0';
|
buf[sizeof buf - 1] = '\0';
|
||||||
bp = _itoa (loadbase, &buf[sizeof buf - 1], 16, 0);
|
bp = _itoa_word (loadbase, &buf[sizeof buf - 1], 16, 0);
|
||||||
while ((size_t) (&buf[sizeof buf - 1] - bp) < sizeof loadbase * 2)
|
while ((size_t) (&buf[sizeof buf - 1] - bp) < sizeof loadbase * 2)
|
||||||
*--bp = '0';
|
*--bp = '0';
|
||||||
_dl_sysdep_message (" in object at 0x", bp, "\n", NULL);
|
_dl_sysdep_message (" in object at 0x", bp, "\n", NULL);
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
# Note: This file is far from being complete. If you have a value for
|
# Note: This file is far from being complete. If you have a value for
|
||||||
# your own site which you think might be useful for others too, share
|
# your own site which you think might be useful for others too, share
|
||||||
# it with the rest of us. Send it using the `glibcbug' script to
|
# it with the rest of us. Send it using the `glibcbug' script to
|
||||||
# bugs@gnu.ai.mit.edu.
|
# bugs@gnu.org.
|
||||||
|
|
||||||
czech cs_CZ.ISO-8859-2
|
czech cs_CZ.ISO-8859-2
|
||||||
danish da_DK.ISO-8859-1
|
danish da_DK.ISO-8859-1
|
||||||
|
|
|
@ -107,19 +107,23 @@ chmod -R a+x $tmpdir
|
||||||
LD_LIBRARY_PATH=$objpfx $ldso $testprogram --chdir $tmpdir |
|
LD_LIBRARY_PATH=$objpfx $ldso $testprogram --chdir $tmpdir |
|
||||||
sort > $testout
|
sort > $testout
|
||||||
|
|
||||||
|
# perhaps $tmp involves some symlinks...
|
||||||
|
pwdprogram=`which pwd`
|
||||||
|
tmpreal=`( cd $tmp ; $pwdprogram )`
|
||||||
|
|
||||||
cat <<EOF | cmp $testout - || exit 1
|
cat <<EOF | cmp $testout - || exit 1
|
||||||
base = "$tmp/", file = "ftwtest.d", flag = FTW_D, cwd = $tmp, level = 0
|
base = "$tmp/", file = "ftwtest.d", flag = FTW_D, cwd = $tmpreal, level = 0
|
||||||
base = "$tmp/ftwtest.d/", file = "bar", flag = FTW_D, cwd = $tmp/ftwtest.d, level = 1
|
base = "$tmp/ftwtest.d/", file = "bar", flag = FTW_D, cwd = $tmpreal/ftwtest.d, level = 1
|
||||||
base = "$tmp/ftwtest.d/", file = "baz", flag = FTW_F, cwd = $tmp/ftwtest.d, level = 1
|
base = "$tmp/ftwtest.d/", file = "baz", flag = FTW_F, cwd = $tmpreal/ftwtest.d, level = 1
|
||||||
base = "$tmp/ftwtest.d/", file = "foo", flag = FTW_D, cwd = $tmp/ftwtest.d, level = 1
|
base = "$tmp/ftwtest.d/", file = "foo", flag = FTW_D, cwd = $tmpreal/ftwtest.d, level = 1
|
||||||
base = "$tmp/ftwtest.d/bar/", file = "xo", flag = FTW_F, cwd = $tmp/ftwtest.d/bar, level = 2
|
base = "$tmp/ftwtest.d/bar/", file = "xo", flag = FTW_F, cwd = $tmpreal/ftwtest.d/bar, level = 2
|
||||||
base = "$tmp/ftwtest.d/foo/", file = "lvl1", flag = FTW_D, cwd = $tmp/ftwtest.d/foo, level = 2
|
base = "$tmp/ftwtest.d/foo/", file = "lvl1", flag = FTW_D, cwd = $tmpreal/ftwtest.d/foo, level = 2
|
||||||
base = "$tmp/ftwtest.d/foo/lvl1/", file = "file@1", flag = FTW_F, cwd = $tmp/ftwtest.d/foo/lvl1, level = 3
|
base = "$tmp/ftwtest.d/foo/lvl1/", file = "file@1", flag = FTW_F, cwd = $tmpreal/ftwtest.d/foo/lvl1, level = 3
|
||||||
base = "$tmp/ftwtest.d/foo/lvl1/", file = "link@1", flag = FTW_SLN, cwd = $tmp/ftwtest.d/foo/lvl1, level = 3
|
base = "$tmp/ftwtest.d/foo/lvl1/", file = "link@1", flag = FTW_SLN, cwd = $tmpreal/ftwtest.d/foo/lvl1, level = 3
|
||||||
base = "$tmp/ftwtest.d/foo/lvl1/", file = "lvl2", flag = FTW_D, cwd = $tmp/ftwtest.d/foo/lvl1, level = 3
|
base = "$tmp/ftwtest.d/foo/lvl1/", file = "lvl2", flag = FTW_D, cwd = $tmpreal/ftwtest.d/foo/lvl1, level = 3
|
||||||
base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "file@2", flag = FTW_F, cwd = $tmp/ftwtest.d/foo/lvl1/lvl2, level = 4
|
base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "file@2", flag = FTW_F, cwd = $tmpreal/ftwtest.d/foo/lvl1/lvl2, level = 4
|
||||||
base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "lvl3", flag = FTW_D, cwd = $tmp/ftwtest.d/foo/lvl1/lvl2, level = 4
|
base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "lvl3", flag = FTW_D, cwd = $tmpreal/ftwtest.d/foo/lvl1/lvl2, level = 4
|
||||||
base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F, cwd = $tmp/ftwtest.d/foo/lvl1/lvl2/lvl3, level = 5
|
base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F, cwd = $tmpreal/ftwtest.d/foo/lvl1/lvl2/lvl3, level = 5
|
||||||
EOF
|
EOF
|
||||||
rm $testout
|
rm $testout
|
||||||
|
|
||||||
|
|
|
@ -710,7 +710,6 @@ _IO_cleanup ()
|
||||||
_IO_unbuffer_all ();
|
_IO_unbuffer_all ();
|
||||||
}
|
}
|
||||||
|
|
||||||
_IO_FILE *_IO_list_all = &_IO_stderr_.plus.file;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_IO_init_marker (marker, fp)
|
_IO_init_marker (marker, fp)
|
||||||
|
|
|
@ -42,7 +42,7 @@ _IO_fdopen (fd, mode)
|
||||||
int posix_mode = 0;
|
int posix_mode = 0;
|
||||||
struct locked_FILE
|
struct locked_FILE
|
||||||
{
|
{
|
||||||
struct _IO_FILE_plus fp;
|
struct _IO_FILE_complete fp;
|
||||||
#ifdef _IO_MTSAFE_IO
|
#ifdef _IO_MTSAFE_IO
|
||||||
_IO_lock_t lock;
|
_IO_lock_t lock;
|
||||||
#endif
|
#endif
|
||||||
|
@ -106,24 +106,24 @@ _IO_fdopen (fd, mode)
|
||||||
if (new_f == NULL)
|
if (new_f == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
#ifdef _IO_MTSAFE_IO
|
#ifdef _IO_MTSAFE_IO
|
||||||
new_f->fp.file._lock = &new_f->lock;
|
new_f->fp.plus.file._lock = &new_f->lock;
|
||||||
#endif
|
#endif
|
||||||
_IO_init (&new_f->fp.file, 0);
|
_IO_init (&new_f->fp.plus.file, 0);
|
||||||
_IO_JUMPS (&new_f->fp.file) = &_IO_file_jumps;
|
_IO_JUMPS (&new_f->fp.plus.file) = &_IO_file_jumps;
|
||||||
_IO_file_init (&new_f->fp.file);
|
_IO_file_init (&new_f->fp.plus.file);
|
||||||
#if !_IO_UNIFIED_JUMPTABLES
|
#if !_IO_UNIFIED_JUMPTABLES
|
||||||
new_f->fp.vtable = NULL;
|
new_f->fp.vtable = NULL;
|
||||||
#endif
|
#endif
|
||||||
if (_IO_file_attach (&new_f->fp.file, fd) == NULL)
|
if (_IO_file_attach (&new_f->fp.plus.file, fd) == NULL)
|
||||||
{
|
{
|
||||||
_IO_un_link (&new_f->fp.file);
|
_IO_un_link (&new_f->fp.plus.file);
|
||||||
free (new_f);
|
free (new_f);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
new_f->fp.file._flags &= ~_IO_DELETE_DONT_CLOSE;
|
new_f->fp.plus.file._flags &= ~_IO_DELETE_DONT_CLOSE;
|
||||||
|
|
||||||
new_f->fp.file._IO_file_flags =
|
new_f->fp.plus.file._IO_file_flags =
|
||||||
_IO_mask_flags (&new_f->fp.file, read_write,
|
_IO_mask_flags (&new_f->fp.plus.file, read_write,
|
||||||
_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
|
_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
|
||||||
|
|
||||||
return (_IO_FILE *) &new_f->fp;
|
return (_IO_FILE *) &new_f->fp;
|
||||||
|
|
|
@ -74,7 +74,7 @@ extern int _IO_dup2 __P ((int fd, int fd2));
|
||||||
|
|
||||||
struct _IO_proc_file
|
struct _IO_proc_file
|
||||||
{
|
{
|
||||||
struct _IO_FILE_plus file;
|
struct _IO_FILE_complete file;
|
||||||
/* Following fields must match those in class procbuf (procbuf.h) */
|
/* Following fields must match those in class procbuf (procbuf.h) */
|
||||||
_IO_pid_t pid;
|
_IO_pid_t pid;
|
||||||
struct _IO_proc_file *next;
|
struct _IO_proc_file *next;
|
||||||
|
@ -169,7 +169,7 @@ _IO_popen (command, mode)
|
||||||
if (new_f == NULL)
|
if (new_f == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
#ifdef _IO_MTSAFE_IO
|
#ifdef _IO_MTSAFE_IO
|
||||||
new_f->fpx.file.file._lock = &new_f->lock;
|
new_f->fpx.file.plus.file._lock = &new_f->lock;
|
||||||
#endif
|
#endif
|
||||||
fp = (_IO_FILE*)&new_f->fpx;
|
fp = (_IO_FILE*)&new_f->fpx;
|
||||||
_IO_init (fp, 0);
|
_IO_init (fp, 0);
|
||||||
|
|
|
@ -32,35 +32,35 @@ _IO_vdprintf (d, format, arg)
|
||||||
const char *format;
|
const char *format;
|
||||||
_IO_va_list arg;
|
_IO_va_list arg;
|
||||||
{
|
{
|
||||||
struct _IO_FILE_plus tmpfil;
|
struct _IO_FILE_complete tmpfil;
|
||||||
#ifdef _IO_MTSAFE_IO
|
#ifdef _IO_MTSAFE_IO
|
||||||
_IO_lock_t lock;
|
_IO_lock_t lock;
|
||||||
#endif
|
#endif
|
||||||
int done;
|
int done;
|
||||||
|
|
||||||
#ifdef _IO_MTSAFE_IO
|
#ifdef _IO_MTSAFE_IO
|
||||||
tmpfil.file._lock = &lock;
|
tmpfil.plus.file._lock = &lock;
|
||||||
#endif
|
#endif
|
||||||
_IO_init (&tmpfil.file, 0);
|
_IO_init (&tmpfil.plus.file, 0);
|
||||||
_IO_JUMPS (&tmpfil.file) = &_IO_file_jumps;
|
_IO_JUMPS (&tmpfil.plus.file) = &_IO_file_jumps;
|
||||||
_IO_file_init (&tmpfil.file);
|
_IO_file_init (&tmpfil.plus.file);
|
||||||
#if !_IO_UNIFIED_JUMPTABLES
|
#if !_IO_UNIFIED_JUMPTABLES
|
||||||
tmpfil.vtable = NULL;
|
tmpfil.vtable = NULL;
|
||||||
#endif
|
#endif
|
||||||
if (_IO_file_attach (&tmpfil.file, d) == NULL)
|
if (_IO_file_attach (&tmpfil.plus.file, d) == NULL)
|
||||||
{
|
{
|
||||||
_IO_un_link (&tmpfil.file);
|
_IO_un_link (&tmpfil.plus.file);
|
||||||
return EOF;
|
return EOF;
|
||||||
}
|
}
|
||||||
tmpfil.file._flags &= ~_IO_DELETE_DONT_CLOSE;
|
tmpfil.plus.file._flags &= ~_IO_DELETE_DONT_CLOSE;
|
||||||
|
|
||||||
tmpfil.file._IO_file_flags =
|
tmpfil.plus.file._IO_file_flags =
|
||||||
_IO_mask_flags (&tmpfil.file, _IO_NO_READS,
|
_IO_mask_flags (&tmpfil.plus.file, _IO_NO_READS,
|
||||||
_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
|
_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
|
||||||
|
|
||||||
done = _IO_vfprintf (&tmpfil.file, format, arg);
|
done = _IO_vfprintf (&tmpfil.plus.file, format, arg);
|
||||||
|
|
||||||
_IO_FINISH (&tmpfil.file);
|
_IO_FINISH (&tmpfil.plus.file);
|
||||||
|
|
||||||
return done;
|
return done;
|
||||||
}
|
}
|
||||||
|
|
|
@ -273,7 +273,7 @@ struct _IO_FILE_plus
|
||||||
same. */
|
same. */
|
||||||
struct _IO_FILE_complete
|
struct _IO_FILE_complete
|
||||||
{
|
{
|
||||||
struct _IO_FILE_plus plus;;
|
struct _IO_FILE_plus plus;
|
||||||
_IO_off64_t _offset;
|
_IO_off64_t _offset;
|
||||||
int _unused2[16]; /* Make sure we don't get into trouble again. */
|
int _unused2[16]; /* Make sure we don't get into trouble again. */
|
||||||
};
|
};
|
||||||
|
|
|
@ -51,7 +51,7 @@ DEF_STDFILE(_IO_new_stdout_, _IO_stdout_, 1, &_IO_stdin_.plus.file,
|
||||||
DEF_STDFILE(_IO_new_stderr_, _IO_stderr_, 2, &_IO_stdout_.plus.file,
|
DEF_STDFILE(_IO_new_stderr_, _IO_stderr_, 2, &_IO_stdout_.plus.file,
|
||||||
_IO_NO_READS+_IO_UNBUFFERED);
|
_IO_NO_READS+_IO_UNBUFFERED);
|
||||||
|
|
||||||
|
_IO_FILE *_IO_list_all = &_IO_stderr_.plus.file;
|
||||||
#if 0
|
#if 0
|
||||||
_IO_FILE *_IO_new_list_all = &_IO_stderr_.plus.file;
|
|
||||||
default_symbol_version (_IO_new_list_all, _IO_list_all, GLIBC_2.1);
|
default_symbol_version (_IO_new_list_all, _IO_list_all, GLIBC_2.1);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -26,9 +26,6 @@
|
||||||
#include "libioP.h"
|
#include "libioP.h"
|
||||||
#include "stdio.h"
|
#include "stdio.h"
|
||||||
|
|
||||||
/* Define non-macro versions of stdin/stdout/stderr, for use by
|
|
||||||
debuggers. */
|
|
||||||
|
|
||||||
#undef stdin
|
#undef stdin
|
||||||
#undef stdout
|
#undef stdout
|
||||||
#undef stderr
|
#undef stderr
|
||||||
|
|
|
@ -127,11 +127,9 @@ extern void __libc_fatal __P ((__const char *__message))
|
||||||
|
|
||||||
|
|
||||||
/* Standard streams. */
|
/* Standard streams. */
|
||||||
extern FILE *stdin, *stdout, *stderr;
|
extern FILE *stdin; /* Standard input stream. */
|
||||||
/* Refer to the real names by default. */
|
extern FILE *stdout; /* Standard output stream. */
|
||||||
#define stdin _IO_stdin
|
extern FILE *stderr; /* Standard error output stream. */
|
||||||
#define stdout _IO_stdout
|
|
||||||
#define stderr _IO_stderr
|
|
||||||
|
|
||||||
|
|
||||||
/* Remove file FILENAME. */
|
/* Remove file FILENAME. */
|
||||||
|
|
|
@ -32,7 +32,7 @@ install-sbin = utmpd
|
||||||
utmpd-routines := connection database error request xtmp
|
utmpd-routines := connection database error request xtmp
|
||||||
extra-objs := $(utmpd-routines:=.o)
|
extra-objs := $(utmpd-routines:=.o)
|
||||||
|
|
||||||
distribute := utmp-private.h programs/xtmp.h programs/utmpd.h \
|
distribute := utmp-private.h programs/xtmp.h programs/utmpd.h README.utmpd \
|
||||||
programs/utmpd-private.h $(utmpd-routines:%=programs/%.c)
|
programs/utmpd-private.h $(utmpd-routines:%=programs/%.c)
|
||||||
|
|
||||||
subdir-dirs = programs
|
subdir-dirs = programs
|
||||||
|
|
|
@ -0,0 +1,174 @@
|
||||||
|
With the introduction of version 2 of the GNU C Library the format of
|
||||||
|
the UTMP and WTMP files changed for some configurations (see Q&A 10 of
|
||||||
|
the FAQ). This version of the GNU C Library contains a solution for
|
||||||
|
the problems this may cause, by providing an UTMP daemon `utmpd'.
|
||||||
|
|
||||||
|
Do I need it?
|
||||||
|
=============
|
||||||
|
|
||||||
|
If your configuration is one of the following:
|
||||||
|
|
||||||
|
i[3456]86-*-linux-gnu Linux-2.0 on Intel
|
||||||
|
m68k-*-linux-gnu Linux-2.0 on Motorola 680x0
|
||||||
|
|
||||||
|
you might need it, so please read on. If it is not, please read the
|
||||||
|
section titled `Programming' at the end of this text.
|
||||||
|
|
||||||
|
In principle, you only need the daemon if you want to keep using old
|
||||||
|
programs linked against the previous version of the Linux C Library
|
||||||
|
(libc5). In addition you will need the daemon if you are running
|
||||||
|
Linux on Intel, and you are planning to use iBCS (Intel Binary
|
||||||
|
Compatibility Standard). If you have no libc5 programs left on your
|
||||||
|
system and you are not using iBCS, it is probably better not to
|
||||||
|
install the daemon since it uses (a small amount of) memory and CPU
|
||||||
|
time. But apart from that it shouldn't hurt to install `utmpd', so
|
||||||
|
when in doubt install it anyway.
|
||||||
|
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
The installation process (`make install') already places the `utmpd'
|
||||||
|
binary in $(sbindir). The only thing you have to do is modifying your
|
||||||
|
startup scripts to start the daemon. Unfortunately this is a bit of a
|
||||||
|
hassle, since the layout of these scripts is not standardized. You
|
||||||
|
should try to find the command that creates the file `/var/run/utmp'.
|
||||||
|
This is usually done in a script named `/etc/rc', `/etc/init.d/boot'
|
||||||
|
(Debian) or `/etc/rc.d/rc.S' (Slackware). You could try:
|
||||||
|
|
||||||
|
grep utmp /etc/* /etc/init.d/* /etc/rc.d/*
|
||||||
|
|
||||||
|
to find the right script. The creation of `/var/run/utmp' is usually
|
||||||
|
done with a command like:
|
||||||
|
|
||||||
|
: > /var/run/utmp
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
cat /dev/null > /var/run/utmp
|
||||||
|
|
||||||
|
Now add a line before this command to create the file `/var/run/utmpx'
|
||||||
|
e.g.
|
||||||
|
|
||||||
|
: > /var/run/utmpx
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
cat /dev/null > /var/run/utmpx
|
||||||
|
|
||||||
|
whatever you prefer, and after this command, add a line to start the
|
||||||
|
daemon
|
||||||
|
|
||||||
|
utmpd
|
||||||
|
|
||||||
|
The entire fragment could look something like
|
||||||
|
|
||||||
|
# Clean up /var/run and create /var/run/utmp so that we can login.
|
||||||
|
( cd /var/run && find . ! -type d -exec rm -f -- {} \; )
|
||||||
|
: > /var/run/utmpx
|
||||||
|
: > /var/run/utmp
|
||||||
|
utmpd
|
||||||
|
|
||||||
|
If the file `/var/log/wtmp' exists on your system, you will probably
|
||||||
|
want to create the file `/var/log/wtmpx'. Programs linked against the
|
||||||
|
GNU C Library will now write to `/var/log/wtmpx', while programs
|
||||||
|
linked against the old library will continue to write to
|
||||||
|
`/var/log/wtmp'. Of course this means that the information gets
|
||||||
|
spread over two files. We hope to provide a better solution in the
|
||||||
|
future.
|
||||||
|
|
||||||
|
After a reboot, user accounting should be working again. If not,
|
||||||
|
please refer to the section titled `Troubleshooting' below before
|
||||||
|
submitting a bug report.
|
||||||
|
|
||||||
|
|
||||||
|
What is `utmpd' doing?
|
||||||
|
======================
|
||||||
|
|
||||||
|
After installation there will be two files that store the user
|
||||||
|
accounting information: `/var/run/utmp' and `/var/run/utmpx'. The
|
||||||
|
file `/var/run/utmp' will be in the old format so libc5 programs will
|
||||||
|
continue to work (even if they are broken and do not use the library
|
||||||
|
functions to access the user accounting database). And on Intel, you
|
||||||
|
can safely link `/var/run/utmp' to `/etc/utmp' for iBCS programs.
|
||||||
|
Programs linked against the new GNU C Library (glibc2) will contact
|
||||||
|
the daemon for all user accounting database access. The daemon will
|
||||||
|
store its information in `/var/run/utmpx' and keeps this file in sync
|
||||||
|
with `/var/run/utmp'. Entries added to `/var/run/utmpx' will be
|
||||||
|
converted to the old format and will be added to `/var/run/utmp' and
|
||||||
|
vice versa. This way both libc5 and glibc2 see the same information
|
||||||
|
in the same fields of `struct utmp'. Of course libc5 programs see only
|
||||||
|
part of the information that glibc2 programs see because not all
|
||||||
|
members of the glibc2 `struct utmp' are present in the libc5 `struct
|
||||||
|
utmp'. For the same reason libc5 will see a truncated version of
|
||||||
|
those fields where the length of the glibc2 field is larger than the
|
||||||
|
corresponding libc5 field (ut_user, ut_line, ut_host).
|
||||||
|
|
||||||
|
|
||||||
|
Troubleshooting
|
||||||
|
===============
|
||||||
|
|
||||||
|
If user accounting is not working on your system, e.g. programs like
|
||||||
|
`who' or `logname' return rubbish, or you cannot login, make
|
||||||
|
sure that:
|
||||||
|
|
||||||
|
* The file `/var/run/utmpx' exists.
|
||||||
|
|
||||||
|
* The file `/var/log/wtmpx' exists.
|
||||||
|
|
||||||
|
* No program linked against the GNU C Library (libc6) is accessing
|
||||||
|
`/var/run/utmp' directly (see the section on `Programming' below).
|
||||||
|
|
||||||
|
If that does not solve your problems, please use the `glibcbug' script
|
||||||
|
to report the problem to <bugs@gnu.org>.
|
||||||
|
|
||||||
|
The `utmpd' daemon uses `syslogd' to report problems. It uses the
|
||||||
|
`daemon' facility and `warning' and `error' levels. Alternatively you
|
||||||
|
could use the following option to ease debugging:
|
||||||
|
|
||||||
|
`--debug'
|
||||||
|
Use this option if you want the daemon to output its warnings and
|
||||||
|
error messages to the terminal instead of sending them to the
|
||||||
|
system logger (`syslogd'). When using this option the daemon does
|
||||||
|
not auto-background itself.
|
||||||
|
|
||||||
|
To use this option you should first kill the daemon that is already
|
||||||
|
running, and start a fresh one with the desired option:
|
||||||
|
|
||||||
|
kill `cat /var/run/utmpd.pid`
|
||||||
|
utmpd --debug
|
||||||
|
|
||||||
|
Please include any warnings or error messages from `utmpd' in your
|
||||||
|
bug reports.
|
||||||
|
|
||||||
|
|
||||||
|
Programming
|
||||||
|
===========
|
||||||
|
|
||||||
|
In order for the `utmpd' approach to work it is essential that NO
|
||||||
|
program EVER accesses the UTMP and WTMP files directly. Instead, a
|
||||||
|
program should use ONLY the available library functions:
|
||||||
|
|
||||||
|
* utmpname() Select the database used (UTMP, WTMP, ...).
|
||||||
|
* setutent() Open the database.
|
||||||
|
* getutent() Read the next entry from the database.
|
||||||
|
* getutid() Search for the next entry with a specific ID.
|
||||||
|
* getutline() Search for the next entry for a specific line.
|
||||||
|
* pututline() Write an entry to the database.
|
||||||
|
* endutent() Close the database.
|
||||||
|
* updwtmp() Add an entry to a database (WTMP, ...).
|
||||||
|
|
||||||
|
For details, please refer to `The GNU C Library Reference Manual',
|
||||||
|
which also contains information about some additional functions
|
||||||
|
derived from BSD and XPG that may be of interest. The command
|
||||||
|
|
||||||
|
info libc "User Accounting Database"
|
||||||
|
|
||||||
|
should point you at the right location.
|
||||||
|
|
||||||
|
If you encounter a program that reads from or, even worse, writes to
|
||||||
|
the UTMP and WTMP files directly, please report this as a bug to the
|
||||||
|
author of that program. Note that the files referred to by the macros
|
||||||
|
`_PATH_UTMP' and `_PATH_WTMP' might even disappear in the future, so
|
||||||
|
please do not use these, except in a call to `utmpname()' or
|
||||||
|
`updwtmp()', not even to check their existence.
|
|
@ -205,7 +205,7 @@ Usage: %s [OPTION]...\n\
|
||||||
-V, --version output version information and exit\n"),
|
-V, --version output version information and exit\n"),
|
||||||
program_invocation_name);
|
program_invocation_name);
|
||||||
fputs (_("\
|
fputs (_("\
|
||||||
Report bugs using the `glibcbug' script to <bugs@gnu.ai.mit.edu>.\n"),
|
Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"),
|
||||||
stdout);
|
stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1750,11 +1750,11 @@ static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static mchunkptr
|
|
||||||
#if defined __GNUC__ && __GNUC__ >= 2
|
#if defined __GNUC__ && __GNUC__ >= 2
|
||||||
/* This function is only called from one place, inline it. */
|
/* This function is only called from one place, inline it. */
|
||||||
inline
|
inline
|
||||||
#endif
|
#endif
|
||||||
|
static mchunkptr
|
||||||
internal_function
|
internal_function
|
||||||
#if __STD_C
|
#if __STD_C
|
||||||
mmap_chunk(size_t size)
|
mmap_chunk(size_t size)
|
||||||
|
@ -2286,11 +2286,11 @@ arena *ar_ptr; mchunkptr p; INTERNAL_SIZE_T s;
|
||||||
Main interface to sbrk (but see also malloc_trim).
|
Main interface to sbrk (but see also malloc_trim).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
|
||||||
#if defined __GNUC__ && __GNUC__ >= 2
|
#if defined __GNUC__ && __GNUC__ >= 2
|
||||||
/* This function is called only from one place, inline it. */
|
/* This function is called only from one place, inline it. */
|
||||||
inline
|
inline
|
||||||
#endif
|
#endif
|
||||||
|
static void
|
||||||
internal_function
|
internal_function
|
||||||
#if __STD_C
|
#if __STD_C
|
||||||
malloc_extend_top(arena *ar_ptr, INTERNAL_SIZE_T nb)
|
malloc_extend_top(arena *ar_ptr, INTERNAL_SIZE_T nb)
|
||||||
|
|
|
@ -498,7 +498,7 @@ __extension__ \
|
||||||
(unsigned) ((h)->chunk_limit - (h)->next_free)
|
(unsigned) ((h)->chunk_limit - (h)->next_free)
|
||||||
|
|
||||||
#define obstack_empty_p(h) \
|
#define obstack_empty_p(h) \
|
||||||
(h->chunk->prev == 0 && h->next_free - h->chunk->contents == 0)
|
((h)->chunk->prev == 0 && (h)->next_free - (h)->chunk->contents == 0)
|
||||||
|
|
||||||
/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
|
/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
|
||||||
so that we can avoid having void expressions
|
so that we can avoid having void expressions
|
||||||
|
|
|
@ -19,7 +19,8 @@
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
/* One out of _LIBC, USE_PTHREADS, USE_THR or USE_SPROC should be
|
/* $Id$
|
||||||
|
One out of _LIBC, USE_PTHREADS, USE_THR or USE_SPROC should be
|
||||||
defined, otherwise the token NO_THREADS and dummy implementations
|
defined, otherwise the token NO_THREADS and dummy implementations
|
||||||
of the macros will be defined. */
|
of the macros will be defined. */
|
||||||
|
|
||||||
|
@ -40,23 +41,18 @@ typedef pthread_t thread_id;
|
||||||
typedef pthread_mutex_t mutex_t;
|
typedef pthread_mutex_t mutex_t;
|
||||||
|
|
||||||
/* thread specific data */
|
/* thread specific data */
|
||||||
typedef pthread_key_t tsd_key_t;
|
typedef void * tsd_key_t;
|
||||||
|
|
||||||
#define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
|
#define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
|
||||||
|
|
||||||
static Void_t *malloc_key_data;
|
#define tsd_key_create(key, destr) ( *(key) = NULL )
|
||||||
|
|
||||||
#define tsd_key_create(key, destr) \
|
|
||||||
if (__pthread_key_create != NULL) { \
|
|
||||||
__pthread_key_create(key, destr); \
|
|
||||||
} else { *(key) = (tsd_key_t) 0; }
|
|
||||||
#define tsd_setspecific(key, data) \
|
#define tsd_setspecific(key, data) \
|
||||||
if (__pthread_setspecific != NULL) { \
|
if (__libc_internal_tsd_set != NULL) { \
|
||||||
__pthread_setspecific(key, data); \
|
__libc_internal_tsd_set(_LIBC_TSD_KEY_MALLOC, data); \
|
||||||
} else { malloc_key_data = (Void_t *) data; }
|
} else { (key) = (Void_t *) data; }
|
||||||
#define tsd_getspecific(key, vptr) \
|
#define tsd_getspecific(key, vptr) \
|
||||||
(vptr = (__pthread_getspecific != NULL \
|
(vptr = (__libc_internal_tsd_get != NULL \
|
||||||
? __pthread_getspecific(key) : malloc_key_data))
|
? __libc_internal_tsd_get(_LIBC_TSD_KEY_MALLOC) : (key)))
|
||||||
|
|
||||||
#define mutex_init(m) \
|
#define mutex_init(m) \
|
||||||
(__pthread_mutex_init != NULL ? __pthread_mutex_init (m, NULL) : 0)
|
(__pthread_mutex_init != NULL ? __pthread_mutex_init (m, NULL) : 0)
|
||||||
|
@ -131,12 +127,33 @@ typedef pthread_mutex_t mutex_t;
|
||||||
#define mutex_unlock(m) pthread_mutex_unlock(m)
|
#define mutex_unlock(m) pthread_mutex_unlock(m)
|
||||||
|
|
||||||
/* thread specific data */
|
/* thread specific data */
|
||||||
|
#if defined(__sgi) || defined(USE_TSD_DATA_HACK)
|
||||||
|
|
||||||
|
/* Hack for thread-specific data, e.g. on Irix 6.x. We can't use
|
||||||
|
pthread_setspecific because that function calls malloc() itself.
|
||||||
|
The hack only works when pthread_t can be converted to an integral
|
||||||
|
type. */
|
||||||
|
|
||||||
|
typedef void *tsd_key_t[256];
|
||||||
|
#define tsd_key_create(key, destr) do { \
|
||||||
|
int i; \
|
||||||
|
for(i=0; i<256; i++) (*key)[i] = 0; \
|
||||||
|
} while(0)
|
||||||
|
#define tsd_setspecific(key, data) \
|
||||||
|
(key[(unsigned)pthread_self() % 256] = (data))
|
||||||
|
#define tsd_getspecific(key, vptr) \
|
||||||
|
(vptr = key[(unsigned)pthread_self() % 256])
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
typedef pthread_key_t tsd_key_t;
|
typedef pthread_key_t tsd_key_t;
|
||||||
|
|
||||||
#define tsd_key_create(key, destr) pthread_key_create(key, destr)
|
#define tsd_key_create(key, destr) pthread_key_create(key, destr)
|
||||||
#define tsd_setspecific(key, data) pthread_setspecific(key, data)
|
#define tsd_setspecific(key, data) pthread_setspecific(key, data)
|
||||||
#define tsd_getspecific(key, vptr) (vptr = pthread_getspecific(key))
|
#define tsd_getspecific(key, vptr) (vptr = pthread_getspecific(key))
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/* at fork */
|
/* at fork */
|
||||||
#define thread_atfork(prepare, parent, child) \
|
#define thread_atfork(prepare, parent, child) \
|
||||||
pthread_atfork(prepare, parent, child)
|
pthread_atfork(prepare, parent, child)
|
||||||
|
|
|
@ -422,11 +422,11 @@ sqrt (creal (@var{z}) * creal (@var{z}) + cimag (@var{z}) * cimag (@var{z}))
|
||||||
@end smallexample
|
@end smallexample
|
||||||
|
|
||||||
This function should always be used instead of the direct formula since
|
This function should always be used instead of the direct formula since
|
||||||
using the simple straight-forward method can mean to loose accuracy. If
|
using the simple straight-forward method can mean to lose accuracy. If
|
||||||
one of the squared values is neglectable in size compared to the other
|
one of the squared values is neglectable in size compared to the other
|
||||||
value the result should be the same as the larger value. But squaring
|
value the result should be the same as the larger value. But squaring
|
||||||
the value and afterwards using the square root function leads to
|
the value and afterwards using the square root function leads to
|
||||||
unaccuracy. See @code{hypot} in @xref{Exponents and Logarithms}.
|
inaccuracy. See @code{hypot} in @xref{Exponents and Logarithms}.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
@node Normalization Functions
|
@node Normalization Functions
|
||||||
|
|
|
@ -461,8 +461,9 @@ are of type @code{struct dirent **}. I.e., one cannot directly use the
|
||||||
@code{alphasort} and @code{versionsort} below.
|
@code{alphasort} and @code{versionsort} below.
|
||||||
|
|
||||||
The return value of the function gives the number of entries placed in
|
The return value of the function gives the number of entries placed in
|
||||||
@var{namelist}. If it is @code{-1} an error occurred and the global
|
@var{namelist}. If it is @code{-1} an error occurred (either the
|
||||||
variable @code{errno} contains more information on the error.
|
directory could not be opened for reading or the malloc call failed) and
|
||||||
|
the global variable @code{errno} contains more information on the error.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
As said above the fourth argument to the @code{scandir} function must be
|
As said above the fourth argument to the @code{scandir} function must be
|
||||||
|
|
|
@ -1247,3 +1247,21 @@ The @var{pgid} isn't a process group in the same session as the calling
|
||||||
process.
|
process.
|
||||||
@end table
|
@end table
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
|
@comment termios.h
|
||||||
|
@comment Unix98
|
||||||
|
@deftypefun pid_t tcgetsid (int @var{fildes})
|
||||||
|
This function is used to obtain the process group ID of the session
|
||||||
|
for which terminal specified by @var{fildes} is the controlling terminal.
|
||||||
|
If the call is successful the group ID is returned. Otherwise the
|
||||||
|
return value is @code{(pid_t) -1} and the global variable @var{errno}
|
||||||
|
is set to the following value:
|
||||||
|
@table @code
|
||||||
|
@item EBADF
|
||||||
|
The @var{filedes} argument is not a valid file descriptor.
|
||||||
|
|
||||||
|
@item ENOTTY
|
||||||
|
The calling process does not have a controlling terminal, or the file
|
||||||
|
ins not the controlling terminal.
|
||||||
|
@end table
|
||||||
|
@end deftypefun
|
||||||
|
|
|
@ -468,6 +468,21 @@ glob ("~homer/bin/*", GLOB_TILDE, NULL, &result)
|
||||||
This functionality is equivalent to what is available in C-shells.
|
This functionality is equivalent to what is available in C-shells.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
Calling @code{glob} will in most cases allocate resources which are used
|
||||||
|
to represent the result of the function call. If the same object of
|
||||||
|
type @code{glob_t} is used in multiple call to @code{glob} the resources
|
||||||
|
are freed or reused so that no leaks appear. But this does not include
|
||||||
|
the time when all @code{glob} calls are done.
|
||||||
|
|
||||||
|
@comment glob.h
|
||||||
|
@comment POSIX.2
|
||||||
|
@deftypefun void globfree (glob_t *@var{pglob})
|
||||||
|
The @code{globfree} function frees all resources allocated by previous
|
||||||
|
calls to @code{glob} associated with the object pointed to by
|
||||||
|
@var{pglob}. This function should be called whenever the currently used
|
||||||
|
@code{glob_t} typed object isn't used anymore.
|
||||||
|
@end deftypefun
|
||||||
|
|
||||||
|
|
||||||
@node Regular Expressions
|
@node Regular Expressions
|
||||||
@section Regular Expression Matching
|
@section Regular Expression Matching
|
||||||
|
|
|
@ -505,15 +505,15 @@ hello, wo
|
||||||
|
|
||||||
@comment string.h
|
@comment string.h
|
||||||
@comment BSD
|
@comment BSD
|
||||||
@deftypefun {void *} bcopy (void *@var{from}, const void *@var{to}, size_t @var{size})
|
@deftypefun void bcopy (const void *@var{from}, void *@var{to}, size_t @var{size})
|
||||||
This is a partially obsolete alternative for @code{memmove}, derived from
|
This is a partially obsolete alternative for @code{memmove}, derived from
|
||||||
BSD. Note that it is not quite equivalent to @code{memmove}, because the
|
BSD. Note that it is not quite equivalent to @code{memmove}, because the
|
||||||
arguments are not in the same order.
|
arguments are not in the same order and there is no return value.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
@comment string.h
|
@comment string.h
|
||||||
@comment BSD
|
@comment BSD
|
||||||
@deftypefun {void *} bzero (void *@var{block}, size_t @var{size})
|
@deftypefun void bzero (void *@var{block}, size_t @var{size})
|
||||||
This is a partially obsolete alternative for @code{memset}, derived from
|
This is a partially obsolete alternative for @code{memset}, derived from
|
||||||
BSD. Note that it is not as general as @code{memset}, because the only
|
BSD. Note that it is not as general as @code{memset}, because the only
|
||||||
value it can store is zero.
|
value it can store is zero.
|
||||||
|
|
|
@ -1096,10 +1096,23 @@ the only speeds that typical serial lines can support.
|
||||||
@comment termios.h
|
@comment termios.h
|
||||||
@comment POSIX.1
|
@comment POSIX.1
|
||||||
@vindex B38400
|
@vindex B38400
|
||||||
|
@comment termios.h
|
||||||
|
@comment GNU
|
||||||
|
@vindex B57600
|
||||||
|
@comment termios.h
|
||||||
|
@comment GNU
|
||||||
|
@vindex B115200
|
||||||
|
@comment termios.h
|
||||||
|
@comment GNU
|
||||||
|
@vindex B230400
|
||||||
|
@comment termios.h
|
||||||
|
@comment GNU
|
||||||
|
@vindex B460800
|
||||||
@smallexample
|
@smallexample
|
||||||
B0 B50 B75 B110 B134 B150 B200
|
B0 B50 B75 B110 B134 B150 B200
|
||||||
B300 B600 B1200 B1800 B2400 B4800
|
B300 B600 B1200 B1800 B2400 B4800
|
||||||
B9600 B19200 B38400
|
B9600 B19200 B38400 B57600 B115200
|
||||||
|
B230400 B460800
|
||||||
@end smallexample
|
@end smallexample
|
||||||
|
|
||||||
@vindex EXTA
|
@vindex EXTA
|
||||||
|
|
|
@ -80,7 +80,7 @@ tests = test-float test-double $(test-longdouble-$(long-double-fcts)) \
|
||||||
test-ifloat test-idouble test-matherr test-fenv \
|
test-ifloat test-idouble test-matherr test-fenv \
|
||||||
atest-exp atest-sincos atest-exp2 # test-reduce
|
atest-exp atest-sincos atest-exp2 # test-reduce
|
||||||
# We do the `long double' tests only if this data type is available and
|
# We do the `long double' tests only if this data type is available and
|
||||||
# distrinct from `double'.
|
# distinct from `double'.
|
||||||
test-longdouble-yes = test-ldouble test-ildoubl
|
test-longdouble-yes = test-ldouble test-ildoubl
|
||||||
|
|
||||||
CFLAGS-test-float.c = -fno-inline -ffloat-store
|
CFLAGS-test-float.c = -fno-inline -ffloat-store
|
||||||
|
|
|
@ -38,7 +38,10 @@
|
||||||
|
|
||||||
This is just like __MATHCALL but for a function returning `TYPE'
|
This is just like __MATHCALL but for a function returning `TYPE'
|
||||||
instead of `_Mdouble_'. In all of these cases, there is still
|
instead of `_Mdouble_'. In all of these cases, there is still
|
||||||
both a `NAME' and a `NAMEf' that takes `float' arguments. */
|
both a `NAME' and a `NAMEf' that takes `float' arguments.
|
||||||
|
|
||||||
|
Note that there must be no whitespace before the argument passed for
|
||||||
|
NAME, to make token pasting work with -traditional. */
|
||||||
|
|
||||||
#ifndef _MATH_H
|
#ifndef _MATH_H
|
||||||
#error "Never include <bits/mathcalls.h> directly; include <math.h> instead."
|
#error "Never include <bits/mathcalls.h> directly; include <math.h> instead."
|
||||||
|
@ -65,7 +68,7 @@ __MATHCALL (tan,, (_Mdouble_ __x));
|
||||||
|
|
||||||
#ifdef __USE_GNU
|
#ifdef __USE_GNU
|
||||||
/* Cosine and sine of X. */
|
/* Cosine and sine of X. */
|
||||||
__MATHDECL (void, sincos,,
|
__MATHDECL (void,sincos,,
|
||||||
(_Mdouble_ __x, _Mdouble_ *__sinx, _Mdouble_ *__cosx));
|
(_Mdouble_ __x, _Mdouble_ *__sinx, _Mdouble_ *__cosx));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -275,13 +278,13 @@ __MATHCALL (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo));
|
||||||
|
|
||||||
/* Round X to nearest integral value according to current rounding
|
/* Round X to nearest integral value according to current rounding
|
||||||
direction. */
|
direction. */
|
||||||
__MATHDECL (long int, lrint,, (_Mdouble_ __x));
|
__MATHDECL (long int,lrint,, (_Mdouble_ __x));
|
||||||
__MATHDECL (long long int, llrint,, (_Mdouble_ __x));
|
__MATHDECL (long long int,llrint,, (_Mdouble_ __x));
|
||||||
|
|
||||||
/* Round X to nearest integral value, rounding halfway cases away from
|
/* Round X to nearest integral value, rounding halfway cases away from
|
||||||
zero. */
|
zero. */
|
||||||
__MATHDECL (long int, lround,, (_Mdouble_ __x));
|
__MATHDECL (long int,lround,, (_Mdouble_ __x));
|
||||||
__MATHDECL (long long int, llround,, (_Mdouble_ __x));
|
__MATHDECL (long long int,llround,, (_Mdouble_ __x));
|
||||||
|
|
||||||
|
|
||||||
/* Return positive difference between X and Y. */
|
/* Return positive difference between X and Y. */
|
||||||
|
|
|
@ -210,7 +210,7 @@ vsyslog(pri, fmt, ap)
|
||||||
* is the one from the syslogd failure.
|
* is the one from the syslogd failure.
|
||||||
*/
|
*/
|
||||||
if (LogStat & LOG_CONS &&
|
if (LogStat & LOG_CONS &&
|
||||||
(fd = open(_PATH_CONSOLE, O_WRONLY, 0)) >= 0)
|
(fd = open(_PATH_CONSOLE, O_WRONLY|O_NOCTTY, 0)) >= 0)
|
||||||
{
|
{
|
||||||
dprintf (fd, "%s\r\n", buf + msgoff);
|
dprintf (fd, "%s\r\n", buf + msgoff);
|
||||||
(void)close(fd);
|
(void)close(fd);
|
||||||
|
|
|
@ -26,7 +26,7 @@ GLIBC_2.0 {
|
||||||
# This functions are needed by the NIS+ tools and rpc.nisd,
|
# This functions are needed by the NIS+ tools and rpc.nisd,
|
||||||
# they should never be used in a normal user program !
|
# they should never be used in a normal user program !
|
||||||
__nis_default_access; __nis_default_group; __nis_default_owner;
|
__nis_default_access; __nis_default_group; __nis_default_owner;
|
||||||
__nis_default_ttl; __nis_free_fdresult; __nis_finddirectory;
|
__nis_default_ttl; __free_fdresult; __nis_finddirectory;
|
||||||
__nis_hash; readColdStartFile; writeColdStartFile;
|
__nis_hash; readColdStartFile; writeColdStartFile;
|
||||||
|
|
||||||
# Many programs expect this, but every user program should
|
# Many programs expect this, but every user program should
|
||||||
|
|
|
@ -459,7 +459,7 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, u_long flags,
|
||||||
if (fd_res->status != NIS_SUCCESS)
|
if (fd_res->status != NIS_SUCCESS)
|
||||||
{
|
{
|
||||||
nis_free_directory (dir);
|
nis_free_directory (dir);
|
||||||
xdr_free((xdrproc_t)xdr_fd_result, (caddr_t)fd_res);
|
__free_fdresult (fd_res);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
obj = calloc(1, sizeof(directory_obj));
|
obj = calloc(1, sizeof(directory_obj));
|
||||||
|
@ -511,7 +511,7 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, u_long flags,
|
||||||
if (fd_res->status != NIS_SUCCESS)
|
if (fd_res->status != NIS_SUCCESS)
|
||||||
{
|
{
|
||||||
nis_free_directory (dir);
|
nis_free_directory (dir);
|
||||||
xdr_free((xdrproc_t)xdr_fd_result, (caddr_t)fd_res);
|
__free_fdresult (fd_res);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
obj = calloc(1, sizeof(directory_obj));
|
obj = calloc(1, sizeof(directory_obj));
|
||||||
|
|
|
@ -45,6 +45,14 @@ confstr (name, buf, len)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case _CS_LFS_CFLAGS:
|
case _CS_LFS_CFLAGS:
|
||||||
|
/* Signal that we want the new ABI. */
|
||||||
|
{
|
||||||
|
static const char file_offset[] = "-D_FILE_OFFSET_SIZE=64";
|
||||||
|
string = file_offset;
|
||||||
|
string_len = sizeof (file_offset);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case _CS_LFS_LINTFLAGS:
|
case _CS_LFS_LINTFLAGS:
|
||||||
case _CS_LFS_LDFLAGS:
|
case _CS_LFS_LDFLAGS:
|
||||||
case _CS_LFS_LIBS:
|
case _CS_LFS_LIBS:
|
||||||
|
@ -52,7 +60,7 @@ confstr (name, buf, len)
|
||||||
case _CS_LFS64_LINTFLAGS:
|
case _CS_LFS64_LINTFLAGS:
|
||||||
case _CS_LFS64_LDFLAGS:
|
case _CS_LFS64_LDFLAGS:
|
||||||
case _CS_LFS64_LIBS:
|
case _CS_LFS64_LIBS:
|
||||||
/* GNU libc does not require special actions to use LFS. */
|
/* GNU libc does not require special actions to use LFS functions. */
|
||||||
string = "";
|
string = "";
|
||||||
string_len = 1;
|
string_len = 1;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -101,6 +101,15 @@ __BEGIN_DECLS
|
||||||
_POSIX_MESSAGE_PASSING POSIX.4 message queues are supported.
|
_POSIX_MESSAGE_PASSING POSIX.4 message queues are supported.
|
||||||
_POSIX_SEMAPHORES POSIX.4 counting semaphores are supported.
|
_POSIX_SEMAPHORES POSIX.4 counting semaphores are supported.
|
||||||
_POSIX_SHARED_MEMORY_OBJECTS POSIX.4 shared memory objects are supported.
|
_POSIX_SHARED_MEMORY_OBJECTS POSIX.4 shared memory objects are supported.
|
||||||
|
_POSIX_THREADS POSIX.1c pthreads are supported.
|
||||||
|
_POSIX_THREAD_ATTR_STACKADDR Thread stack address attribute option supported.
|
||||||
|
_POSIX_THREAD_ATTR_STACKSIZE Thread stack size attribute option supported.
|
||||||
|
_POSIX_THREAD_SAFE_FUNCTIONS Thread-safe functions are supported.
|
||||||
|
_POSIX_THREAD_PRIORITY_SCHEDULING
|
||||||
|
POSIX.1c thread execution scheduling supported.
|
||||||
|
_POSIX_THREAD_PRIO_INHERIT Thread priority inheritance option supported.
|
||||||
|
_POSIX_THREAD_PRIO_PROTECT Thread priority protection option supported.
|
||||||
|
_POSIX_THREAD_PROCESS_SHARED Process-shared synchronization supported.
|
||||||
_POSIX_PII Protocol-independent interfaces are supported.
|
_POSIX_PII Protocol-independent interfaces are supported.
|
||||||
_POSIX_PII_XTI XTI protocol-indep. interfaces are supported.
|
_POSIX_PII_XTI XTI protocol-indep. interfaces are supported.
|
||||||
_POSIX_PII_SOCKET Socket protocol-indep. interfaces are supported.
|
_POSIX_PII_SOCKET Socket protocol-indep. interfaces are supported.
|
||||||
|
@ -261,6 +270,8 @@ extern ssize_t write __P ((int __fd, __const __ptr_t __buf, size_t __n));
|
||||||
/* Read NBYTES into BUF from FD at the given position OFFSET without
|
/* Read NBYTES into BUF from FD at the given position OFFSET without
|
||||||
changing the file pointer. Return the number read, -1 for errors
|
changing the file pointer. Return the number read, -1 for errors
|
||||||
or 0 for EOF. */
|
or 0 for EOF. */
|
||||||
|
extern ssize_t __pread __P ((int __fd, __ptr_t __buf, size_t __nbytes,
|
||||||
|
__off_t __offset));
|
||||||
# ifndef __USE_FILE_OFFSET64
|
# ifndef __USE_FILE_OFFSET64
|
||||||
extern ssize_t pread __P ((int __fd, __ptr_t __buf, size_t __nbytes,
|
extern ssize_t pread __P ((int __fd, __ptr_t __buf, size_t __nbytes,
|
||||||
__off_t __offset));
|
__off_t __offset));
|
||||||
|
@ -268,6 +279,8 @@ extern ssize_t pread __P ((int __fd, __ptr_t __buf, size_t __nbytes,
|
||||||
extern ssize_t pread __P ((int __fd, __ptr_t __buf, size_t __nbytes,
|
extern ssize_t pread __P ((int __fd, __ptr_t __buf, size_t __nbytes,
|
||||||
__off_t __offset)) __asm__ ("pread64");
|
__off_t __offset)) __asm__ ("pread64");
|
||||||
# endif
|
# endif
|
||||||
|
extern ssize_t __pread64 __P ((int __fd, __ptr_t __buf, size_t __nbytes,
|
||||||
|
__off64_t __offset));
|
||||||
# ifdef __USE_LARGEFILE64
|
# ifdef __USE_LARGEFILE64
|
||||||
extern ssize_t pread64 __P ((int __fd, __ptr_t __buf, size_t __nbytes,
|
extern ssize_t pread64 __P ((int __fd, __ptr_t __buf, size_t __nbytes,
|
||||||
__off64_t __offset));
|
__off64_t __offset));
|
||||||
|
@ -275,6 +288,8 @@ extern ssize_t pread64 __P ((int __fd, __ptr_t __buf, size_t __nbytes,
|
||||||
|
|
||||||
/* Write N bytes of BUF to FD at the given position OFFSET without
|
/* Write N bytes of BUF to FD at the given position OFFSET without
|
||||||
changing the file pointer. Return the number written, or -1. */
|
changing the file pointer. Return the number written, or -1. */
|
||||||
|
extern ssize_t __pwrite __P ((int __fd, __const __ptr_t __buf, size_t __n,
|
||||||
|
__off_t __offset));
|
||||||
# ifndef __USE_FILE_OFFSET64
|
# ifndef __USE_FILE_OFFSET64
|
||||||
extern ssize_t pwrite __P ((int __fd, __const __ptr_t __buf, size_t __n,
|
extern ssize_t pwrite __P ((int __fd, __const __ptr_t __buf, size_t __n,
|
||||||
__off_t __offset));
|
__off_t __offset));
|
||||||
|
@ -282,6 +297,8 @@ extern ssize_t pwrite __P ((int __fd, __const __ptr_t __buf, size_t __n,
|
||||||
extern ssize_t pwrite __P ((int __fd, __const __ptr_t __buf, size_t __n,
|
extern ssize_t pwrite __P ((int __fd, __const __ptr_t __buf, size_t __n,
|
||||||
__off_t __offset)) __asm__ ("pwrite64");
|
__off_t __offset)) __asm__ ("pwrite64");
|
||||||
# endif
|
# endif
|
||||||
|
extern ssize_t __pwrite64 __P ((int __fd, __const __ptr_t __buf, size_t __n,
|
||||||
|
__off64_t __offset));
|
||||||
# ifdef __USE_LARGEFILE64
|
# ifdef __USE_LARGEFILE64
|
||||||
extern ssize_t pwrite64 __P ((int __fd, __const __ptr_t __buf, size_t __n,
|
extern ssize_t pwrite64 __P ((int __fd, __const __ptr_t __buf, size_t __n,
|
||||||
__off64_t __offset));
|
__off64_t __offset));
|
||||||
|
|
209
posix/wordexp.c
209
posix/wordexp.c
|
@ -36,7 +36,10 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <fnmatch.h>
|
||||||
|
|
||||||
|
/* Undefine the following line for the production version. */
|
||||||
|
/* #define NDEBUG 1 */
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -874,6 +877,14 @@ parse_param (char **word, size_t *word_length, size_t *max_length,
|
||||||
const char *words, size_t *offset, int flags, wordexp_t *pwordexp)
|
const char *words, size_t *offset, int flags, wordexp_t *pwordexp)
|
||||||
{
|
{
|
||||||
/* We are poised just after "$" */
|
/* We are poised just after "$" */
|
||||||
|
enum remove_pattern_enum
|
||||||
|
{
|
||||||
|
RP_NONE = 0,
|
||||||
|
RP_SHORT_LEFT,
|
||||||
|
RP_LONG_LEFT,
|
||||||
|
RP_SHORT_RIGHT,
|
||||||
|
RP_LONG_RIGHT
|
||||||
|
};
|
||||||
size_t start = *offset;
|
size_t start = *offset;
|
||||||
size_t env_length = 0;
|
size_t env_length = 0;
|
||||||
size_t env_maxlen = 0;
|
size_t env_maxlen = 0;
|
||||||
|
@ -882,9 +893,8 @@ parse_param (char **word, size_t *word_length, size_t *max_length,
|
||||||
char *env = NULL;
|
char *env = NULL;
|
||||||
char *pattern = NULL;
|
char *pattern = NULL;
|
||||||
char *value;
|
char *value;
|
||||||
char action = 0;
|
char action = '\0';
|
||||||
int prefix = 0;
|
enum remove_pattern_enum remove = RP_NONE;
|
||||||
int suffix = 0;
|
|
||||||
int colon_seen = 0;
|
int colon_seen = 0;
|
||||||
int depth = 0;
|
int depth = 0;
|
||||||
int error;
|
int error;
|
||||||
|
@ -894,9 +904,10 @@ parse_param (char **word, size_t *word_length, size_t *max_length,
|
||||||
switch (words[*offset])
|
switch (words[*offset])
|
||||||
{
|
{
|
||||||
case '{':
|
case '{':
|
||||||
if (action || prefix || suffix)
|
|
||||||
{
|
|
||||||
++depth;
|
++depth;
|
||||||
|
|
||||||
|
if (action != '\0' || remove != RP_NONE)
|
||||||
|
{
|
||||||
pattern = w_addchar (pattern, &pat_length, &pat_maxlen,
|
pattern = w_addchar (pattern, &pat_length, &pat_maxlen,
|
||||||
words[*offset]);
|
words[*offset]);
|
||||||
if (pattern == NULL)
|
if (pattern == NULL)
|
||||||
|
@ -907,6 +918,7 @@ parse_param (char **word, size_t *word_length, size_t *max_length,
|
||||||
|
|
||||||
if (*offset == start)
|
if (*offset == start)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Otherwise evaluate */
|
/* Otherwise evaluate */
|
||||||
/* (and re-parse this character) */
|
/* (and re-parse this character) */
|
||||||
--(*offset);
|
--(*offset);
|
||||||
|
@ -914,11 +926,9 @@ parse_param (char **word, size_t *word_length, size_t *max_length,
|
||||||
|
|
||||||
case '}':
|
case '}':
|
||||||
if (words[start] != '{')
|
if (words[start] != '{')
|
||||||
{
|
|
||||||
--(*offset);
|
--(*offset);
|
||||||
}
|
|
||||||
|
|
||||||
if (action || prefix || suffix)
|
if (action != '\0' || remove != RP_NONE)
|
||||||
{
|
{
|
||||||
if (--depth)
|
if (--depth)
|
||||||
{
|
{
|
||||||
|
@ -935,30 +945,31 @@ parse_param (char **word, size_t *word_length, size_t *max_length,
|
||||||
goto envsubst;
|
goto envsubst;
|
||||||
|
|
||||||
case '#':
|
case '#':
|
||||||
case '%':
|
|
||||||
if (words[start] == '{')
|
|
||||||
{
|
|
||||||
/* At the start? (ie. 'string length') */
|
/* At the start? (ie. 'string length') */
|
||||||
if (*offset == start + 1)
|
if (*offset == start + 1)
|
||||||
|
/* FIXME: This isn't written yet! */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
if (words[start] != '{')
|
||||||
|
{
|
||||||
|
/* Evaluate */
|
||||||
|
/* (and re-parse this character) */
|
||||||
|
--(*offset);
|
||||||
|
goto envsubst;
|
||||||
|
}
|
||||||
|
|
||||||
/* Separating variable name from prefix pattern? */
|
/* Separating variable name from prefix pattern? */
|
||||||
if (words[*offset] == '#')
|
|
||||||
|
if (remove == RP_NONE)
|
||||||
{
|
{
|
||||||
if (prefix < 2 && !suffix)
|
remove = RP_SHORT_LEFT;
|
||||||
{
|
|
||||||
++prefix;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
else if (remove == RP_SHORT_LEFT)
|
||||||
else
|
|
||||||
{
|
{
|
||||||
if (suffix < 2 && !prefix)
|
remove = RP_LONG_LEFT;
|
||||||
{
|
|
||||||
++suffix;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Must be part of prefix/suffix pattern. */
|
/* Must be part of prefix/suffix pattern. */
|
||||||
pattern = w_addchar (pattern, &pat_length, &pat_maxlen,
|
pattern = w_addchar (pattern, &pat_length, &pat_maxlen,
|
||||||
|
@ -967,21 +978,36 @@ parse_param (char **word, size_t *word_length, size_t *max_length,
|
||||||
goto no_space;
|
goto no_space;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case '%':
|
||||||
|
if (!*env)
|
||||||
|
goto syntax;
|
||||||
|
|
||||||
|
/* Separating variable name from suffix pattern? */
|
||||||
|
if (remove == RP_NONE)
|
||||||
|
{
|
||||||
|
remove = RP_SHORT_RIGHT;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
/* Otherwise evaluate */
|
else if (remove == RP_SHORT_RIGHT)
|
||||||
/* (and re-parse this character) */
|
{
|
||||||
--(*offset);
|
remove = RP_LONG_RIGHT;
|
||||||
goto envsubst;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Must be part of prefix/suffix pattern. */
|
||||||
|
pattern = w_addchar (pattern, &pat_length, &pat_maxlen,
|
||||||
|
words[*offset]);
|
||||||
|
if (pattern == NULL)
|
||||||
|
goto no_space;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case ':':
|
case ':':
|
||||||
if (!*env)
|
if (!*env)
|
||||||
{
|
goto syntax;
|
||||||
free (env);
|
|
||||||
free (pattern);
|
|
||||||
return WRDE_SYNTAX;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (action || prefix || suffix)
|
if (action != '\0' || remove != RP_NONE)
|
||||||
{
|
{
|
||||||
pattern = w_addchar (pattern, &pat_length, &pat_maxlen,
|
pattern = w_addchar (pattern, &pat_length, &pat_maxlen,
|
||||||
words[*offset]);
|
words[*offset]);
|
||||||
|
@ -998,30 +1024,21 @@ parse_param (char **word, size_t *word_length, size_t *max_length,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
free (env);
|
goto syntax;
|
||||||
free (pattern);
|
|
||||||
return WRDE_SYNTAX;
|
|
||||||
|
|
||||||
case '-':
|
case '-':
|
||||||
case '=':
|
case '=':
|
||||||
case '?':
|
case '?':
|
||||||
case '+':
|
case '+':
|
||||||
if (!*env)
|
if (!*env)
|
||||||
{
|
goto syntax;
|
||||||
free (env);
|
|
||||||
free (pattern);
|
|
||||||
return WRDE_SYNTAX;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (action || prefix || suffix)
|
if (action != '\0' || remove != RP_NONE)
|
||||||
{
|
{
|
||||||
pattern = w_addchar (pattern, &pat_length, &pat_maxlen,
|
pattern = w_addchar (pattern, &pat_length, &pat_maxlen,
|
||||||
words[*offset]);
|
words[*offset]);
|
||||||
if (pattern == NULL)
|
if (pattern == NULL)
|
||||||
{
|
goto no_space;
|
||||||
free (env);
|
|
||||||
return WRDE_NOSPACE;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1030,8 +1047,9 @@ parse_param (char **word, size_t *word_length, size_t *max_length,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '\\':
|
case '\\':
|
||||||
if (action || prefix || suffix)
|
if (action != '\0' || remove != RP_NONE)
|
||||||
{
|
{
|
||||||
|
/* Um. Is this right? */
|
||||||
error = parse_qtd_backslash (word, word_length, max_length,
|
error = parse_qtd_backslash (word, word_length, max_length,
|
||||||
words, offset);
|
words, offset);
|
||||||
if (error == 0)
|
if (error == 0)
|
||||||
|
@ -1042,12 +1060,16 @@ parse_param (char **word, size_t *word_length, size_t *max_length,
|
||||||
error = WRDE_SYNTAX;
|
error = WRDE_SYNTAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (env)
|
||||||
free (env);
|
free (env);
|
||||||
|
|
||||||
|
if (pattern != NULL)
|
||||||
free (pattern);
|
free (pattern);
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (action || prefix || suffix)
|
if (action != '\0' || remove != RP_NONE)
|
||||||
{
|
{
|
||||||
pattern = w_addchar (pattern, &pat_length, &pat_maxlen,
|
pattern = w_addchar (pattern, &pat_length, &pat_maxlen,
|
||||||
words[*offset]);
|
words[*offset]);
|
||||||
|
@ -1076,11 +1098,7 @@ parse_param (char **word, size_t *word_length, size_t *max_length,
|
||||||
|
|
||||||
envsubst:
|
envsubst:
|
||||||
if (words[start] == '{' && words[*offset] != '}')
|
if (words[start] == '{' && words[*offset] != '}')
|
||||||
{
|
goto syntax;
|
||||||
free (env);
|
|
||||||
free (pattern);
|
|
||||||
return WRDE_SYNTAX;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!env || !*env)
|
if (!env || !*env)
|
||||||
{
|
{
|
||||||
|
@ -1093,15 +1111,89 @@ envsubst:
|
||||||
|
|
||||||
value = getenv (env);
|
value = getenv (env);
|
||||||
|
|
||||||
if (action || prefix || suffix)
|
if (action != '\0' || remove != RP_NONE)
|
||||||
{
|
{
|
||||||
switch (action)
|
switch (action)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
/* For the time being, pattern is ignored */
|
{
|
||||||
printf ("Pattern: %s\nPrefix: %d\nSuffix: %d\n", pattern, prefix, suffix);
|
char *p;
|
||||||
|
char c;
|
||||||
|
char *end;
|
||||||
|
|
||||||
|
if (!pattern || !*pattern)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
end = value + strlen (value);
|
||||||
|
|
||||||
|
if (value == NULL)
|
||||||
|
break;
|
||||||
|
|
||||||
|
switch (remove)
|
||||||
|
{
|
||||||
|
case RP_SHORT_LEFT:
|
||||||
|
for (p = value; p <= end; p++)
|
||||||
|
{
|
||||||
|
c = *p;
|
||||||
|
*p = '\0';
|
||||||
|
if (fnmatch (pattern, value, 0) != FNM_NOMATCH)
|
||||||
|
{
|
||||||
|
*p = c;
|
||||||
|
value = p;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*p = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RP_LONG_LEFT:
|
||||||
|
for (p = end; p >= value; p--)
|
||||||
|
{
|
||||||
|
c = *p;
|
||||||
|
*p = '\0';
|
||||||
|
if (fnmatch (pattern, value, 0) != FNM_NOMATCH)
|
||||||
|
{
|
||||||
|
*p = c;
|
||||||
|
value = p;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*p = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RP_SHORT_RIGHT:
|
||||||
|
for (p = end; p >= value; p--)
|
||||||
|
{
|
||||||
|
if (fnmatch (pattern, p, 0) != FNM_NOMATCH)
|
||||||
|
{
|
||||||
|
*p = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RP_LONG_RIGHT:
|
||||||
|
for (p = value; p <= end; p++)
|
||||||
|
{
|
||||||
|
if (fnmatch (pattern, p, 0) != FNM_NOMATCH)
|
||||||
|
{
|
||||||
|
*p = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
assert (! "Unexpected `remove' value\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case '?':
|
case '?':
|
||||||
if (value && *value)
|
if (value && *value)
|
||||||
break;
|
break;
|
||||||
|
@ -1182,6 +1274,15 @@ no_space:
|
||||||
free (pattern);
|
free (pattern);
|
||||||
|
|
||||||
return WRDE_NOSPACE;
|
return WRDE_NOSPACE;
|
||||||
|
|
||||||
|
syntax:
|
||||||
|
if (env)
|
||||||
|
free (env);
|
||||||
|
|
||||||
|
if (pattern)
|
||||||
|
free (pattern);
|
||||||
|
|
||||||
|
return WRDE_SYNTAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
29
rpm/template
29
rpm/template
|
@ -1,26 +1,41 @@
|
||||||
Name: glibc
|
Name: glibc
|
||||||
Description: GNU libc
|
Summary: GNU libc
|
||||||
Group: Development/Libraries/Libc
|
Group: Development/Libraries/Libc
|
||||||
Version: @VERSION@
|
Version: @VERSION@
|
||||||
Release: 1
|
Release: 1
|
||||||
Copyright: LGPL, GPL
|
Copyright: LGPL, GPL
|
||||||
Source: glibc-@VERSION@.tar.gz
|
Source: glibc-@VERSION@.tar.gz
|
||||||
|
BuildRoot: /tmp/libc
|
||||||
|
|
||||||
|
%description
|
||||||
|
The C language provides no built-in facilities for performing such
|
||||||
|
common operations as input/output, memory management, string
|
||||||
|
manipulation, and the like. Instead, these facilities are defined in
|
||||||
|
a standard library, which you compile and link with your programs. The
|
||||||
|
GNU C library (this package) defines all of the library functions that
|
||||||
|
are specified by the ISO C standard, as well as additional features
|
||||||
|
specific to POSIX and other derivatives of the Unix operating system,
|
||||||
|
and extensions specific to the GNU system.
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup
|
%setup
|
||||||
|
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
mkdir $RPM_BUILD_ROOT
|
||||||
|
|
||||||
%build
|
%build
|
||||||
configure --prefix=@prefix@
|
configure --prefix=@prefix@
|
||||||
if test x@prefix@ = x/usr; then
|
cat >configparms <<EOF
|
||||||
cat >configparms <<EOF
|
CFLAGS=$RPM_OPT_FLAGS
|
||||||
slibdir=/lib
|
install_root=$RPM_BUILD_ROOT
|
||||||
sysconfdir=/etc
|
|
||||||
EOF
|
EOF
|
||||||
fi
|
|
||||||
make
|
make
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
%install
|
%install
|
||||||
make install
|
make install
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%doc FAQ NEWS NOTES README INSTALL
|
%doc BUGS FAQ NEWS NOTES README INSTALL
|
||||||
|
|
|
@ -25,7 +25,8 @@ headers := bits/stdio_lim.h printf.h
|
||||||
|
|
||||||
routines := \
|
routines := \
|
||||||
ctermid cuserid \
|
ctermid cuserid \
|
||||||
vfprintf vprintf printf_fp reg-printf printf-prs _itoa printf_fphex \
|
_itoa itoa-digits \
|
||||||
|
vfprintf vprintf printf_fp reg-printf printf-prs printf_fphex \
|
||||||
printf_size fprintf printf snprintf sprintf asprintf dprintf \
|
printf_size fprintf printf snprintf sprintf asprintf dprintf \
|
||||||
vfscanf \
|
vfscanf \
|
||||||
fscanf scanf sscanf \
|
fscanf scanf sscanf \
|
||||||
|
|
|
@ -157,11 +157,9 @@ static const struct base_table_t base_table[] =
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Lower-case digits. */
|
/* Lower-case digits. */
|
||||||
const char _itoa_lower_digits[]
|
extern const char _itoa_lower_digits[];
|
||||||
= "0123456789abcdefghijklmnopqrstuvwxyz";
|
|
||||||
/* Upper-case digits. */
|
/* Upper-case digits. */
|
||||||
const char _itoa_upper_digits[]
|
extern const char _itoa_upper_digits[];
|
||||||
= "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
||||||
|
|
||||||
|
|
||||||
char *
|
char *
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
/* Digits.
|
||||||
|
Copyright (C) 1994, 1995, 1996 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. */
|
||||||
|
|
||||||
|
/* Lower-case digits. */
|
||||||
|
const char _itoa_lower_digits[]
|
||||||
|
= "0123456789abcdefghijklmnopqrstuvwxyz";
|
||||||
|
/* Upper-case digits. */
|
||||||
|
const char _itoa_upper_digits[]
|
||||||
|
= "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
|
|
|
@ -17,14 +17,37 @@
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <wchar.h>
|
||||||
#undef mblen
|
|
||||||
|
|
||||||
|
|
||||||
/* Return the length of the multibyte character (if there is one)
|
/* Return the length of the multibyte character (if there is one)
|
||||||
at S which is no longer than N characters. */
|
at S which is no longer than N characters.
|
||||||
|
The ISO C standard says that the `mblen' function must not change
|
||||||
|
the global state. */
|
||||||
int
|
int
|
||||||
mblen (const char *s, size_t n)
|
mblen (const char *s, size_t n)
|
||||||
{
|
{
|
||||||
return mbtowc ((wchar_t *) NULL, s, n);
|
mbstate_t state;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
/* If S is NULL the function has to return null or not null
|
||||||
|
depending on the encoding having a state depending encoding or
|
||||||
|
not. This is nonsense because any multibyte encoding has a
|
||||||
|
state. The ISO C amendment 1 corrects this while introducing the
|
||||||
|
restartable functions. We simply say here all encodings have a
|
||||||
|
state. */
|
||||||
|
if (s == NULL)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
state.count = 0;
|
||||||
|
state.value = 0;
|
||||||
|
|
||||||
|
result = __mbrtowc (NULL, s, n, &state);
|
||||||
|
|
||||||
|
/* The `mbrtowc' functions tell us more than we need. Fold the -1
|
||||||
|
and -2 result into -1. */
|
||||||
|
if (result < 0)
|
||||||
|
result = -1;
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -686,14 +686,6 @@ extern int mbtowc __P ((wchar_t *__restrict __pwc,
|
||||||
by WCHAR in S, returning its length. */
|
by WCHAR in S, returning its length. */
|
||||||
extern int wctomb __P ((char *__s, wchar_t __wchar));
|
extern int wctomb __P ((char *__s, wchar_t __wchar));
|
||||||
|
|
||||||
#if defined __OPTIMIZE__ && __GNUC__ >= 2
|
|
||||||
extern __inline int
|
|
||||||
mblen (__const char *__s, size_t __n)
|
|
||||||
{
|
|
||||||
return mbtowc ((wchar_t *) NULL, __s, __n);
|
|
||||||
}
|
|
||||||
#endif /* Optimizing GCC >=2. */
|
|
||||||
|
|
||||||
|
|
||||||
/* Convert a multibyte string to a wide char string. */
|
/* Convert a multibyte string to a wide char string. */
|
||||||
extern size_t mbstowcs __P ((wchar_t *__restrict __pwcs,
|
extern size_t mbstowcs __P ((wchar_t *__restrict __pwcs,
|
||||||
|
|
|
@ -52,16 +52,22 @@
|
||||||
|
|
||||||
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
# define __STRING2_SMALL_GET16(src, idx) \
|
# define __STRING2_SMALL_GET16(src, idx) \
|
||||||
(((src)[idx + 1] << 8) | (src)[idx])
|
(((__const unsigned char *) (src))[idx + 1] << 8 \
|
||||||
|
| ((__const unsigned char *) (src))[idx])
|
||||||
# define __STRING2_SMALL_GET32(src, idx) \
|
# define __STRING2_SMALL_GET32(src, idx) \
|
||||||
((((src)[idx + 3] << 8 | (src)[idx + 2]) << 8 \
|
(((((__const unsigned char *) (src))[idx + 3] << 8 \
|
||||||
| (src)[idx + 1]) << 8 | (src)[idx])
|
| ((__const char *) (src))[idx + 2]) << 8 \
|
||||||
|
| ((__const unsigned char *) (src))[idx + 1]) << 8 \
|
||||||
|
| ((__const unsigned char *) (src))[idx])
|
||||||
# else
|
# else
|
||||||
# define __STRING2_SMALL_GET16(src, idx) \
|
# define __STRING2_SMALL_GET16(src, idx) \
|
||||||
(((src)[idx] << 8) | (src)[idx + 1])
|
(((__const unsigned char *) (src))[idx] << 8 \
|
||||||
|
| ((__const unsigned char *) (src))[idx + 1])
|
||||||
# define __STRING2_SMALL_GET32(src, idx) \
|
# define __STRING2_SMALL_GET32(src, idx) \
|
||||||
((((src)[idx] << 8 | (src)[idx + 1]) << 8 \
|
(((((__const unsigned char *) (src))[idx] << 8 \
|
||||||
| (src)[idx + 2]) << 8 | (src)[idx + 3])
|
| ((__const unsigned char *) (src))[idx + 1]) << 8 \
|
||||||
|
| ((__const unsigned char *) (src))[idx + 2]) << 8 \
|
||||||
|
| ((__const unsigned char *) (src))[idx + 3])
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
/* These are a few types we need for the optimizations if we cannot
|
/* These are a few types we need for the optimizations if we cannot
|
||||||
|
@ -159,43 +165,66 @@ __STRING2_COPY_TYPE (8);
|
||||||
break; \
|
break; \
|
||||||
case 2: \
|
case 2: \
|
||||||
*((__STRING2_COPY_ARR2 *) __dest) = \
|
*((__STRING2_COPY_ARR2 *) __dest) = \
|
||||||
((__STRING2_COPY_ARR2) { { (src)[0], '\0' } }); \
|
((__STRING2_COPY_ARR2) \
|
||||||
|
{ { ((__const unsigned char *) (src))[0], \
|
||||||
|
'\0' } }); \
|
||||||
break; \
|
break; \
|
||||||
case 3: \
|
case 3: \
|
||||||
*((__STRING2_COPY_ARR3 *) __dest) = \
|
*((__STRING2_COPY_ARR3 *) __dest) = \
|
||||||
((__STRING2_COPY_ARR3) { { (src)[0], (src)[1], \
|
((__STRING2_COPY_ARR3) \
|
||||||
|
{ { ((__const unsigned char *) (src))[0], \
|
||||||
|
((__const unsigned char *) (src))[1], \
|
||||||
'\0' } }); \
|
'\0' } }); \
|
||||||
break; \
|
break; \
|
||||||
case 4: \
|
case 4: \
|
||||||
*((__STRING2_COPY_ARR4 *) __dest) = \
|
*((__STRING2_COPY_ARR4 *) __dest) = \
|
||||||
((__STRING2_COPY_ARR4) { { (src)[0], (src)[1], \
|
((__STRING2_COPY_ARR4) \
|
||||||
(src)[2], '\0' } }); \
|
{ { ((__const unsigned char *) (src))[0], \
|
||||||
|
((__const unsigned char *) (src))[1], \
|
||||||
|
((__const unsigned char *) (src))[2], \
|
||||||
|
'\0' } }); \
|
||||||
break; \
|
break; \
|
||||||
case 5: \
|
case 5: \
|
||||||
*((__STRING2_COPY_ARR5 *) __dest) = \
|
*((__STRING2_COPY_ARR5 *) __dest) = \
|
||||||
((__STRING2_COPY_ARR5) { { (src)[0], (src)[1], \
|
((__STRING2_COPY_ARR5) \
|
||||||
(src)[2], (src)[3], \
|
{ { ((__const unsigned char *) (src))[0], \
|
||||||
|
((__const unsigned char *) (src))[1], \
|
||||||
|
((__const unsigned char *) (src))[2], \
|
||||||
|
((__const unsigned char *) (src))[3], \
|
||||||
'\0' } }); \
|
'\0' } }); \
|
||||||
break; \
|
break; \
|
||||||
case 6: \
|
case 6: \
|
||||||
*((__STRING2_COPY_ARR6 *) __dest) = \
|
*((__STRING2_COPY_ARR6 *) __dest) = \
|
||||||
((__STRING2_COPY_ARR6) { { (src)[0], (src)[1], \
|
((__STRING2_COPY_ARR6) \
|
||||||
(src)[2], (src)[3], \
|
{ { ((__const unsigned char *) (src))[0], \
|
||||||
(src)[4], '\0' } }); \
|
((__const unsigned char *) (src))[1], \
|
||||||
|
((__const unsigned char *) (src))[2], \
|
||||||
|
((__const unsigned char *) (src))[3], \
|
||||||
|
((__const unsigned char *) (src))[4], \
|
||||||
|
'\0' } }); \
|
||||||
break; \
|
break; \
|
||||||
case 7: \
|
case 7: \
|
||||||
*((__STRING2_COPY_ARR7 *) __dest) = \
|
*((__STRING2_COPY_ARR7 *) __dest) = \
|
||||||
((__STRING2_COPY_ARR7) { { (src)[0], (src)[1], \
|
((__STRING2_COPY_ARR7) \
|
||||||
(src)[2], (src)[3], \
|
{ { ((__const unsigned char *) (src))[0], \
|
||||||
(src)[4], (src)[5], \
|
((__const unsigned char *) (src))[1], \
|
||||||
|
((__const unsigned char *) (src))[2], \
|
||||||
|
((__const unsigned char *) (src))[3], \
|
||||||
|
((__const unsigned char *) (src))[4], \
|
||||||
|
((__const unsigned char *) (src))[5], \
|
||||||
'\0' } }); \
|
'\0' } }); \
|
||||||
break; \
|
break; \
|
||||||
case 8: \
|
case 8: \
|
||||||
*((__STRING2_COPY_ARR8 *) __dest) = \
|
*((__STRING2_COPY_ARR8 *) __dest) = \
|
||||||
((__STRING2_COPY_ARR8) { { (src)[0], (src)[1], \
|
((__STRING2_COPY_ARR8) \
|
||||||
(src)[2], (src)[3], \
|
{ { ((__const unsigned char *) (src))[0], \
|
||||||
(src)[4], (src)[5], \
|
((__const unsigned char *) (src))[1], \
|
||||||
(src)[6], '\0' } }); \
|
((__const unsigned char *) (src))[2], \
|
||||||
|
((__const unsigned char *) (src))[3], \
|
||||||
|
((__const unsigned char *) (src))[4], \
|
||||||
|
((__const unsigned char *) (src))[5], \
|
||||||
|
((__const unsigned char *) (src))[6], \
|
||||||
|
'\0' } }); \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
(char *) __dest; }))
|
(char *) __dest; }))
|
||||||
|
@ -280,43 +309,66 @@ __STRING2_COPY_TYPE (8);
|
||||||
break; \
|
break; \
|
||||||
case 2: \
|
case 2: \
|
||||||
*((__STRING2_COPY_ARR2 *) __dest) = \
|
*((__STRING2_COPY_ARR2 *) __dest) = \
|
||||||
((__STRING2_COPY_ARR2) { { (src)[0], '\0' } }); \
|
((__STRING2_COPY_ARR2) \
|
||||||
|
{ { ((__const unsigned char *) (src))[0], \
|
||||||
|
'\0' } }); \
|
||||||
break; \
|
break; \
|
||||||
case 3: \
|
case 3: \
|
||||||
*((__STRING2_COPY_ARR3 *) __dest) = \
|
*((__STRING2_COPY_ARR3 *) __dest) = \
|
||||||
((__STRING2_COPY_ARR3) { { (src)[0], (src)[1], \
|
((__STRING2_COPY_ARR3) \
|
||||||
|
{ { ((__const unsigned char *) (src))[0], \
|
||||||
|
((__const unsigned char *) (src))[1], \
|
||||||
'\0' } }); \
|
'\0' } }); \
|
||||||
break; \
|
break; \
|
||||||
case 4: \
|
case 4: \
|
||||||
*((__STRING2_COPY_ARR4 *) __dest) = \
|
*((__STRING2_COPY_ARR4 *) __dest) = \
|
||||||
((__STRING2_COPY_ARR4) { { (src)[0], (src)[1], \
|
((__STRING2_COPY_ARR4) \
|
||||||
(src)[2], '\0' } }); \
|
{ { ((__const unsigned char *) (src))[0], \
|
||||||
|
((__const unsigned char *) (src))[1], \
|
||||||
|
((__const unsigned char *) (src))[2], \
|
||||||
|
'\0' } }); \
|
||||||
break; \
|
break; \
|
||||||
case 5: \
|
case 5: \
|
||||||
*((__STRING2_COPY_ARR5 *) __dest) = \
|
*((__STRING2_COPY_ARR5 *) __dest) = \
|
||||||
((__STRING2_COPY_ARR5) { { (src)[0], (src)[1], \
|
((__STRING2_COPY_ARR5) \
|
||||||
(src)[2], (src)[3], \
|
{ { ((__const unsigned char *) (src))[0], \
|
||||||
|
((__const unsigned char *) (src))[1], \
|
||||||
|
((__const unsigned char *) (src))[2], \
|
||||||
|
((__const unsigned char *) (src))[3], \
|
||||||
'\0' } }); \
|
'\0' } }); \
|
||||||
break; \
|
break; \
|
||||||
case 6: \
|
case 6: \
|
||||||
*((__STRING2_COPY_ARR6 *) __dest) = \
|
*((__STRING2_COPY_ARR6 *) __dest) = \
|
||||||
((__STRING2_COPY_ARR6) { { (src)[0], (src)[1], \
|
((__STRING2_COPY_ARR6) \
|
||||||
(src)[2], (src)[3], \
|
{ { ((__const unsigned char *) (src))[0], \
|
||||||
(src)[4], '\0' } }); \
|
((__const unsigned char *) (src))[1], \
|
||||||
|
((__const unsigned char *) (src))[2], \
|
||||||
|
((__const unsigned char *) (src))[3], \
|
||||||
|
((__const unsigned char *) (src))[4], \
|
||||||
|
'\0' } }); \
|
||||||
break; \
|
break; \
|
||||||
case 7: \
|
case 7: \
|
||||||
*((__STRING2_COPY_ARR7 *) __dest) = \
|
*((__STRING2_COPY_ARR7 *) __dest) = \
|
||||||
((__STRING2_COPY_ARR7) { { (src)[0], (src)[1], \
|
((__STRING2_COPY_ARR7) \
|
||||||
(src)[2], (src)[3], \
|
{ { ((__const unsigned char *) (src))[0], \
|
||||||
(src)[4], (src)[5], \
|
((__const unsigned char *) (src))[1], \
|
||||||
|
((__const unsigned char *) (src))[2], \
|
||||||
|
((__const unsigned char *) (src))[3], \
|
||||||
|
((__const unsigned char *) (src))[4], \
|
||||||
|
((__const unsigned char *) (src))[5], \
|
||||||
'\0' } }); \
|
'\0' } }); \
|
||||||
break; \
|
break; \
|
||||||
case 8: \
|
case 8: \
|
||||||
*((__STRING2_COPY_ARR8 *) __dest) = \
|
*((__STRING2_COPY_ARR8 *) __dest) = \
|
||||||
((__STRING2_COPY_ARR8) { { (src)[0], (src)[1], \
|
((__STRING2_COPY_ARR8) \
|
||||||
(src)[2], (src)[3], \
|
{ { ((__const unsigned char *) (src))[0], \
|
||||||
(src)[4], (src)[5], \
|
((__const unsigned char *) (src))[1], \
|
||||||
(src)[6], '\0' } }); \
|
((__const unsigned char *) (src))[2], \
|
||||||
|
((__const unsigned char *) (src))[3], \
|
||||||
|
((__const unsigned char *) (src))[4], \
|
||||||
|
((__const unsigned char *) (src))[5], \
|
||||||
|
((__const unsigned char *) (src))[6], \
|
||||||
|
'\0' } }); \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
(char *) (__dest + ((srclen) - 1)); }))
|
(char *) (__dest + ((srclen) - 1)); }))
|
||||||
|
@ -390,49 +442,63 @@ __STRING2_COPY_TYPE (8);
|
||||||
: strcmp (s1, s2)))))
|
: strcmp (s1, s2)))))
|
||||||
|
|
||||||
# define __strcmp_cc(s1, s2, l) \
|
# define __strcmp_cc(s1, s2, l) \
|
||||||
(__extension__ ({ register int __result = ((unsigned char) (s1)[0] \
|
(__extension__ ({ register int __result = \
|
||||||
- (unsigned char) (s2)[0]); \
|
(((__const unsigned char *) (s1))[0] \
|
||||||
|
- ((__const unsigned char *) (s2))[0]); \
|
||||||
if (l > 0 && __result == 0) \
|
if (l > 0 && __result == 0) \
|
||||||
{ \
|
{ \
|
||||||
__result = ((unsigned char) (s1)[1] \
|
__result = (((__const unsigned char *) (s1))[1] \
|
||||||
- (unsigned char) (s2)[1]); \
|
- ((__const unsigned char *) (s2))[1]); \
|
||||||
if (l > 1 && __result == 0) \
|
if (l > 1 && __result == 0) \
|
||||||
{ \
|
{ \
|
||||||
__result = ((unsigned char) (s1)[2] \
|
__result = \
|
||||||
- (unsigned char) (s2)[2]); \
|
(((__const unsigned char *) (s1))[2] \
|
||||||
|
- ((__const unsigned char *) (s2))[2]); \
|
||||||
if (l > 2 && __result == 0) \
|
if (l > 2 && __result == 0) \
|
||||||
__result = ((unsigned char) (s1)[3] \
|
__result = \
|
||||||
- (unsigned char) (s2)[3]); \
|
(((__const unsigned char *) (s1))[3] \
|
||||||
|
- ((__const unsigned char *) (s2))[3]); \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
__result; }))
|
__result; }))
|
||||||
|
|
||||||
# define __strcmp_cg(s1, s2, l1) \
|
# define __strcmp_cg(s1, s2, l1) \
|
||||||
(__extension__ ({ __const unsigned char *__s2 = (unsigned char *) (s2); \
|
(__extension__ ({ __const unsigned char *__s2 = \
|
||||||
register int __result = (unsigned char) (s1)[0] - __s2[0];\
|
(__const unsigned char *) (s2); \
|
||||||
|
register int __result = \
|
||||||
|
(((__const unsigned char *) (s1))[0] - __s2[0]); \
|
||||||
if (l1 > 0 && __result == 0) \
|
if (l1 > 0 && __result == 0) \
|
||||||
{ \
|
{ \
|
||||||
__result = (unsigned char) (s1)[1] - __s2[1]; \
|
__result = (((__const unsigned char *) (s1))[1] \
|
||||||
|
- __s2[1]); \
|
||||||
if (l1 > 1 && __result == 0) \
|
if (l1 > 1 && __result == 0) \
|
||||||
{ \
|
{ \
|
||||||
__result = (unsigned char) (s1)[2] - __s2[2]; \
|
__result = (((__const unsigned char *) (s1))[2] \
|
||||||
|
- __s2[2]); \
|
||||||
if (l1 > 2 && __result == 0) \
|
if (l1 > 2 && __result == 0) \
|
||||||
__result = (unsigned char) (s1)[3] - __s2[3]; \
|
__result = (((__const unsigned char *) (s1))[3] \
|
||||||
|
- __s2[3]); \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
__result; }))
|
__result; }))
|
||||||
|
|
||||||
# define __strcmp_gc(s1, s2, l2) \
|
# define __strcmp_gc(s1, s2, l2) \
|
||||||
(__extension__ ({ __const unsigned char *__s1 = (unsigned char *) (s1); \
|
(__extension__ ({ __const unsigned char *__s1 = \
|
||||||
register int __result = __s1[0] - (unsigned char) (s2)[0];\
|
(__const unsigned char *) (s1); \
|
||||||
|
register int __result = \
|
||||||
|
__s1[0] - ((__const unsigned char *) (s2))[0]; \
|
||||||
if (l2 > 0 && __result == 0) \
|
if (l2 > 0 && __result == 0) \
|
||||||
{ \
|
{ \
|
||||||
__result = __s1[1] - (unsigned char) (s2)[1]; \
|
__result = (__s1[1] \
|
||||||
|
- ((__const unsigned char *) (s2))[1]); \
|
||||||
if (l2 > 1 && __result == 0) \
|
if (l2 > 1 && __result == 0) \
|
||||||
{ \
|
{ \
|
||||||
__result = __s1[2] - (unsigned char) (s2)[2]; \
|
__result = \
|
||||||
|
(__s1[2] - ((__const unsigned char *) (s2))[2]);\
|
||||||
if (l2 > 2 && __result == 0) \
|
if (l2 > 2 && __result == 0) \
|
||||||
__result = __s1[3] - (unsigned char) (s2)[3]; \
|
__result = \
|
||||||
|
(__s1[3] \
|
||||||
|
- ((__const unsigned char *)(s2))[3]); \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
__result; }))
|
__result; }))
|
||||||
|
@ -455,10 +521,10 @@ __STRING2_COPY_TYPE (8);
|
||||||
#ifndef _HAVE_STRING_ARCH_strcspn
|
#ifndef _HAVE_STRING_ARCH_strcspn
|
||||||
# define strcspn(s, reject) \
|
# define strcspn(s, reject) \
|
||||||
(__extension__ (__builtin_constant_p (reject) && __string2_1bptr_p (reject) \
|
(__extension__ (__builtin_constant_p (reject) && __string2_1bptr_p (reject) \
|
||||||
? ((reject)[0] == '\0' \
|
? (((__const unsigned char *) (reject))[0] == '\0' \
|
||||||
? strlen (s) \
|
? strlen (s) \
|
||||||
: ((reject)[1] == '\0' \
|
: (((__const unsigned char *) (reject))[1] == '\0' \
|
||||||
? __strcspn_c1 (s, (reject)[0]) \
|
? __strcspn_c1 (s, ((__const char *) (reject))[0]) \
|
||||||
: strcspn (s, reject))) \
|
: strcspn (s, reject))) \
|
||||||
: strcspn (s, reject)))
|
: strcspn (s, reject)))
|
||||||
|
|
||||||
|
@ -479,10 +545,10 @@ __strcspn_c1 (__const char *__s, char __reject)
|
||||||
#ifndef _HAVE_STRING_ARCH_strspn
|
#ifndef _HAVE_STRING_ARCH_strspn
|
||||||
# define strspn(s, accept) \
|
# define strspn(s, accept) \
|
||||||
(__extension__ (__builtin_constant_p (accept) && __string2_1bptr_p (accept) \
|
(__extension__ (__builtin_constant_p (accept) && __string2_1bptr_p (accept) \
|
||||||
? ((accept)[0] == '\0' \
|
? (((__const unsigned char *) (accept))[0] == '\0' \
|
||||||
? 0 \
|
? 0 \
|
||||||
: ((accept)[1] == '\0' \
|
: (((__const unsigned char *) (accept))[1] == '\0' \
|
||||||
? __strspn_c1 (s, (accept)[0]) \
|
? __strspn_c1 (s, ((__const char *) (accept))[0]) \
|
||||||
: strspn (s, accept))) \
|
: strspn (s, accept))) \
|
||||||
: strspn (s, accept)))
|
: strspn (s, accept)))
|
||||||
|
|
||||||
|
@ -503,10 +569,10 @@ __strspn_c1 (__const char *__s, char __accept)
|
||||||
#ifndef _HAVE_STRING_ARCH_strpbrk
|
#ifndef _HAVE_STRING_ARCH_strpbrk
|
||||||
# define strpbrk(s, accept) \
|
# define strpbrk(s, accept) \
|
||||||
(__extension__ (__builtin_constant_p (accept) && __string2_1bptr_p (accept) \
|
(__extension__ (__builtin_constant_p (accept) && __string2_1bptr_p (accept) \
|
||||||
? ((accept)[0] == '\0' \
|
? (((__const unsigned char *) (accept))[0] == '\0' \
|
||||||
? NULL \
|
? NULL \
|
||||||
: ((accept)[1] == '\0' \
|
: (((__const unsigned char *) (accept))[1] == '\0' \
|
||||||
? strchr (s, (accept)[0]) \
|
? strchr (s, ((__const unsigned char *) (accept))[0]) \
|
||||||
: strpbrk (s, accept))) \
|
: strpbrk (s, accept))) \
|
||||||
: strpbrk (s, accept)))
|
: strpbrk (s, accept)))
|
||||||
#endif
|
#endif
|
||||||
|
@ -516,10 +582,11 @@ __strspn_c1 (__const char *__s, char __accept)
|
||||||
#ifndef _HAVE_STRING_ARCH_strstr
|
#ifndef _HAVE_STRING_ARCH_strstr
|
||||||
# define strstr(haystack, needle) \
|
# define strstr(haystack, needle) \
|
||||||
(__extension__ (__builtin_constant_p (needle) && __string2_1bptr_p (needle) \
|
(__extension__ (__builtin_constant_p (needle) && __string2_1bptr_p (needle) \
|
||||||
? ((needle)[0] == '\0' \
|
? (((__const unsigned char *) (needle))[0] == '\0' \
|
||||||
? haystack \
|
? haystack \
|
||||||
: ((needle)[1] == '\0' \
|
: (((__const unsigned char *) (needle))[1] == '\0' \
|
||||||
? strchr (haystack, (needle)[0]) \
|
? strchr (haystack, \
|
||||||
|
((__const unsigned char *) (needle))[0]) \
|
||||||
: strstr (haystack, needle))) \
|
: strstr (haystack, needle))) \
|
||||||
: strstr (haystack, needle)))
|
: strstr (haystack, needle)))
|
||||||
#endif
|
#endif
|
||||||
|
@ -543,8 +610,10 @@ strnlen (__const char *__string, size_t __maxlen)
|
||||||
|
|
||||||
# define strsep(s, reject) \
|
# define strsep(s, reject) \
|
||||||
(__extension__ (__builtin_constant_p (reject) && __string2_1bptr_p (reject) \
|
(__extension__ (__builtin_constant_p (reject) && __string2_1bptr_p (reject) \
|
||||||
? ((reject)[0] != '\0' && (reject)[1] == '\0' \
|
? (((__const unsigned char *) (reject))[0] != '\0' \
|
||||||
? __strsep_1c (s, (reject)[0]) \
|
&& ((__const unsigned char *) (reject))[1] == '\0' \
|
||||||
|
? __strsep_1c (s, \
|
||||||
|
((__const unsigned char *) (reject))[0]) \
|
||||||
: __strsep_g (s, reject)) \
|
: __strsep_g (s, reject)) \
|
||||||
: __strsep_g (s, reject)))
|
: __strsep_g (s, reject)))
|
||||||
|
|
||||||
|
|
|
@ -134,6 +134,7 @@ clnt_sperror (CLIENT * rpch, const char *msg)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
*str = '\n';
|
*str = '\n';
|
||||||
|
*++str = '\0';
|
||||||
return (strstart);
|
return (strstart);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,6 +253,7 @@ clnt_spcreateerror (const char *msg)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
*cp = '\n';
|
*cp = '\n';
|
||||||
|
*++cp = '\0';
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ static char sccsid[] = "@(#)get_myaddress.c 1.4 87/08/11 Copyr 1984 Sun Micro";
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <rpc/types.h>
|
#include <rpc/types.h>
|
||||||
|
#include <rpc/clnt.h>
|
||||||
#include <rpc/pmap_prot.h>
|
#include <rpc/pmap_prot.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -42,8 +42,6 @@ static char sccsid[] = "@(#)pmap_clnt.c 1.37 87/08/11 Copyr 1984 Sun Micro";
|
||||||
#include <rpc/pmap_prot.h>
|
#include <rpc/pmap_prot.h>
|
||||||
#include <rpc/pmap_clnt.h>
|
#include <rpc/pmap_clnt.h>
|
||||||
|
|
||||||
extern void get_myaddress (struct sockaddr_in *addr);
|
|
||||||
|
|
||||||
static const struct timeval timeout = {5, 0};
|
static const struct timeval timeout = {5, 0};
|
||||||
static const struct timeval tottimeout = {60, 0};
|
static const struct timeval tottimeout = {60, 0};
|
||||||
|
|
||||||
|
|
|
@ -379,9 +379,18 @@ extern struct rpc_createerr rpc_createerr;
|
||||||
*/
|
*/
|
||||||
extern char *clnt_sperrno __P ((enum clnt_stat __num)); /* string */
|
extern char *clnt_sperrno __P ((enum clnt_stat __num)); /* string */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* get the port number on the host for the rpc program,version and proto
|
||||||
|
*/
|
||||||
extern int getrpcport __P ((__const char * __host, u_long __prognum,
|
extern int getrpcport __P ((__const char * __host, u_long __prognum,
|
||||||
u_long __versnum, u_int proto));
|
u_long __versnum, u_int proto));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* get the local host's IP address without consulting
|
||||||
|
* name service library functions
|
||||||
|
*/
|
||||||
|
extern void get_myaddress __P ((struct sockaddr_in *));
|
||||||
|
|
||||||
#define UDPMSGSIZE 8800 /* rpc imposed limit on udp msg size */
|
#define UDPMSGSIZE 8800 /* rpc imposed limit on udp msg size */
|
||||||
#define RPCSMALLMSGSIZE 400 /* a more reasonable packet size */
|
#define RPCSMALLMSGSIZE 400 /* a more reasonable packet size */
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ _strerror_internal (int errnum, char *buf, size_t buflen)
|
||||||
const size_t unklen = strlen (unk);
|
const size_t unklen = strlen (unk);
|
||||||
char *p = buf + buflen;
|
char *p = buf + buflen;
|
||||||
*--p = '\0';
|
*--p = '\0';
|
||||||
p = _itoa (errnum, p, 10, 0);
|
p = _itoa_word (errnum, p, 10, 0);
|
||||||
return memcpy (p - unklen, unk, unklen);
|
return memcpy (p - unklen, unk, unklen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
|
|
||||||
/* We must not distribute the DES implementation as part of the glibc.
|
/* We must not distribute the DES implementation as part of the glibc.
|
||||||
So we have to provide a dummy version here. */
|
So we have to provide a dummy version here. */
|
||||||
|
#include <des.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
_des_crypt (char *buf, unsigned len, struct desparams *desp)
|
_des_crypt (char *buf, unsigned len, struct desparams *desp)
|
||||||
{
|
{
|
||||||
|
|
|
@ -53,10 +53,7 @@ _dl_load_cache_lookup (const char *name)
|
||||||
static struct cache_file *cache;
|
static struct cache_file *cache;
|
||||||
static size_t cachesize;
|
static size_t cachesize;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
const char *best;
|
||||||
if (cache == (void *) -1)
|
|
||||||
/* Previously looked for the cache file and didn't find it. */
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (cache == NULL)
|
if (cache == NULL)
|
||||||
{
|
{
|
||||||
|
@ -76,6 +73,11 @@ _dl_load_cache_lookup (const char *name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cache == (void *) -1)
|
||||||
|
/* Previously looked for the cache file and didn't find it. */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
best = NULL;
|
||||||
for (i = 0; i < cache->nlibs; ++i)
|
for (i = 0; i < cache->nlibs; ++i)
|
||||||
if ((cache->libs[i].flags == 1 ||
|
if ((cache->libs[i].flags == 1 ||
|
||||||
cache->libs[i].flags == 3) && /* ELF library entry. */
|
cache->libs[i].flags == 3) && /* ELF library entry. */
|
||||||
|
@ -85,7 +87,14 @@ _dl_load_cache_lookup (const char *name)
|
||||||
/* Does the name match? */
|
/* Does the name match? */
|
||||||
! strcmp (name, ((const char *) &cache->libs[cache->nlibs] +
|
! strcmp (name, ((const char *) &cache->libs[cache->nlibs] +
|
||||||
cache->libs[i].key)))
|
cache->libs[i].key)))
|
||||||
return (const char *) &cache->libs[cache->nlibs] + cache->libs[i].value;
|
{
|
||||||
|
best = ((const char *) &cache->libs[cache->nlibs]
|
||||||
|
+ cache->libs[i].value);
|
||||||
|
|
||||||
return NULL;
|
if (cache->libs[i].flags == 3)
|
||||||
|
/* We've found an exact match for the shared object and no
|
||||||
|
general `ELF' release. Stop searching. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return best;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,56 +18,64 @@
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
# include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef __ptr_t
|
#undef __ptr_t
|
||||||
#if defined (__cplusplus) || (defined (__STDC__) && __STDC__)
|
#if defined __cplusplus || (defined __STDC__ && __STDC__)
|
||||||
#define __ptr_t void *
|
# define __ptr_t void *
|
||||||
#else /* Not C++ or ANSI C. */
|
#else /* Not C++ or ANSI C. */
|
||||||
#undef const
|
# undef const
|
||||||
#define const
|
# define const
|
||||||
#define __ptr_t char *
|
# define __ptr_t char *
|
||||||
#endif /* C++ or ANSI C. */
|
#endif /* C++ or ANSI C. */
|
||||||
|
|
||||||
#if defined (HAVE_STRING_H) || defined (_LIBC)
|
#ifndef __P
|
||||||
#include <string.h>
|
# if defined __GNUC__ || (defined __STDC__ && __STDC__)
|
||||||
|
# define __P(args) args
|
||||||
|
# else
|
||||||
|
# define __P(args) ()
|
||||||
|
# endif /* GCC. */
|
||||||
|
#endif /* Not __P. */
|
||||||
|
|
||||||
|
#if defined HAVE_STRING_H || defined _LIBC
|
||||||
|
# include <string.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef memcmp
|
#undef memcmp
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
|
|
||||||
#include <memcopy.h>
|
# include <memcopy.h>
|
||||||
|
|
||||||
#else /* Not in the GNU C library. */
|
#else /* Not in the GNU C library. */
|
||||||
|
|
||||||
#include <sys/types.h>
|
# include <sys/types.h>
|
||||||
|
|
||||||
/* Type to use for aligned memory operations.
|
/* Type to use for aligned memory operations.
|
||||||
This should normally be the biggest type supported by a single load
|
This should normally be the biggest type supported by a single load
|
||||||
and store. Must be an unsigned type. */
|
and store. Must be an unsigned type. */
|
||||||
#define op_t unsigned long int
|
# define op_t unsigned long int
|
||||||
#define OPSIZ (sizeof(op_t))
|
# define OPSIZ (sizeof(op_t))
|
||||||
|
|
||||||
/* Threshold value for when to enter the unrolled loops. */
|
/* Threshold value for when to enter the unrolled loops. */
|
||||||
#define OP_T_THRES 16
|
# define OP_T_THRES 16
|
||||||
|
|
||||||
/* Type to use for unaligned operations. */
|
/* Type to use for unaligned operations. */
|
||||||
typedef unsigned char byte;
|
typedef unsigned char byte;
|
||||||
|
|
||||||
#ifndef WORDS_BIGENDIAN
|
# ifndef WORDS_BIGENDIAN
|
||||||
#define MERGE(w0, sh_1, w1, sh_2) (((w0) >> (sh_1)) | ((w1) << (sh_2)))
|
# define MERGE(w0, sh_1, w1, sh_2) (((w0) >> (sh_1)) | ((w1) << (sh_2)))
|
||||||
#else
|
# else
|
||||||
#define MERGE(w0, sh_1, w1, sh_2) (((w0) << (sh_1)) | ((w1) >> (sh_2)))
|
# define MERGE(w0, sh_1, w1, sh_2) (((w0) << (sh_1)) | ((w1) >> (sh_2)))
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#endif /* In the GNU C library. */
|
#endif /* In the GNU C library. */
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
#define CMP_LT_OR_GT(a, b) ((a) > (b) ? 1 : -1)
|
# define CMP_LT_OR_GT(a, b) ((a) > (b) ? 1 : -1)
|
||||||
#else
|
#else
|
||||||
#define CMP_LT_OR_GT(a, b) memcmp_bytes ((a), (b))
|
# define CMP_LT_OR_GT(a, b) memcmp_bytes ((a), (b))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* BE VERY CAREFUL IF YOU CHANGE THIS CODE! */
|
/* BE VERY CAREFUL IF YOU CHANGE THIS CODE! */
|
||||||
|
@ -90,9 +98,9 @@ typedef unsigned char byte;
|
||||||
|
|
||||||
static int memcmp_bytes __P((op_t, op_t));
|
static int memcmp_bytes __P((op_t, op_t));
|
||||||
|
|
||||||
#ifdef __GNUC__
|
# ifdef __GNUC__
|
||||||
__inline
|
__inline
|
||||||
#endif
|
# endif
|
||||||
static int
|
static int
|
||||||
memcmp_bytes (a, b)
|
memcmp_bytes (a, b)
|
||||||
op_t a, b;
|
op_t a, b;
|
||||||
|
@ -376,6 +384,6 @@ memcmp (s1, s2, len)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef weak_alias
|
#ifdef weak_alias
|
||||||
#undef bcmp
|
# undef bcmp
|
||||||
weak_alias (memcmp, bcmp)
|
weak_alias (memcmp, bcmp)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
/* Read NBYTES into BUF from FD at the given position OFFSET without
|
/* Read NBYTES into BUF from FD at the given position OFFSET without
|
||||||
changing the file pointer. Return the number read or -1. */
|
changing the file pointer. Return the number read or -1. */
|
||||||
ssize_t
|
ssize_t
|
||||||
pread (int fd, void *buf, size_t nbytes, off_t offset)
|
__pread (int fd, void *buf, size_t nbytes, off_t offset)
|
||||||
{
|
{
|
||||||
if (nbytes == 0)
|
if (nbytes == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -40,5 +40,6 @@ pread (int fd, void *buf, size_t nbytes, off_t offset)
|
||||||
__set_errno (ENOSYS);
|
__set_errno (ENOSYS);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
weak_alias (__pread, pread)
|
||||||
stub_warning (pread)
|
stub_warning (pread)
|
||||||
#include <stub-tag.h>
|
#include <stub-tag.h>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
/* Read NBYTES into BUF from FD at the given position OFFSET without
|
/* Read NBYTES into BUF from FD at the given position OFFSET without
|
||||||
changing the file pointer. Return the number read or -1. */
|
changing the file pointer. Return the number read or -1. */
|
||||||
ssize_t
|
ssize_t
|
||||||
pread64 (int fd, void *buf, size_t nbytes, off64_t offset)
|
__pread64 (int fd, void *buf, size_t nbytes, off64_t offset)
|
||||||
{
|
{
|
||||||
if (nbytes == 0)
|
if (nbytes == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -40,5 +40,6 @@ pread64 (int fd, void *buf, size_t nbytes, off64_t offset)
|
||||||
__set_errno (ENOSYS);
|
__set_errno (ENOSYS);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
weak_alias (__pread64, pread64)
|
||||||
stub_warning (pread64)
|
stub_warning (pread64)
|
||||||
#include <stub-tag.h>
|
#include <stub-tag.h>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
/* Write NBYTES of BUF to FD at given position OFFSET without changing
|
/* Write NBYTES of BUF to FD at given position OFFSET without changing
|
||||||
the file position. Return the number written, or -1. */
|
the file position. Return the number written, or -1. */
|
||||||
ssize_t
|
ssize_t
|
||||||
pwrite (int fd, const void *buf, size_t nbytes, off_t offset)
|
__pwrite (int fd, const void *buf, size_t nbytes, off_t offset)
|
||||||
{
|
{
|
||||||
if (nbytes == 0)
|
if (nbytes == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -40,5 +40,6 @@ pwrite (int fd, const void *buf, size_t nbytes, off_t offset)
|
||||||
__set_errno (ENOSYS);
|
__set_errno (ENOSYS);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
weak_alias (__pwrite, pwrite)
|
||||||
stub_warning (pwrite)
|
stub_warning (pwrite)
|
||||||
#include <stub-tag.h>
|
#include <stub-tag.h>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
/* Write NBYTES of BUF to FD at given position OFFSET without changing
|
/* Write NBYTES of BUF to FD at given position OFFSET without changing
|
||||||
the file position. Return the number written, or -1. */
|
the file position. Return the number written, or -1. */
|
||||||
ssize_t
|
ssize_t
|
||||||
pwrite64 (int fd, const void *buf, size_t nbytes, off64_t offset)
|
__pwrite64 (int fd, const void *buf, size_t nbytes, off64_t offset)
|
||||||
{
|
{
|
||||||
if (nbytes == 0)
|
if (nbytes == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -40,5 +40,6 @@ pwrite64 (int fd, const void *buf, size_t nbytes, off64_t offset)
|
||||||
__set_errno (ENOSYS);
|
__set_errno (ENOSYS);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
weak_alias (__pwrite64, pwrite64)
|
||||||
stub_warning (pwrite64)
|
stub_warning (pwrite64)
|
||||||
#include <stub-tag.h>
|
#include <stub-tag.h>
|
||||||
|
|
|
@ -979,12 +979,14 @@ __strchr_g (__const char *__s, int __c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
|
||||||
/* Find the first occurrence of C in S. This is the BSD name. */
|
/* Find the first occurrence of C in S. This is the BSD name. */
|
||||||
#define _HAVE_STRING_ARCH_index 1
|
# define _HAVE_STRING_ARCH_index 1
|
||||||
#define index(s, c) \
|
# define index(s, c) \
|
||||||
(__extension__ (__builtin_constant_p (c) \
|
(__extension__ (__builtin_constant_p (c) \
|
||||||
? __strchr_c (s, ((c) & 0xff) << 8) \
|
? __strchr_c (s, ((c) & 0xff) << 8) \
|
||||||
: __strchr_g (s, c)))
|
: __strchr_g (s, c)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Find the last occurrence of C in S. */
|
/* Find the last occurrence of C in S. */
|
||||||
|
@ -1075,12 +1077,14 @@ __strrchr_g (__const char *__s, int __c)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
|
||||||
/* Find the last occurrence of C in S. This is the BSD name. */
|
/* Find the last occurrence of C in S. This is the BSD name. */
|
||||||
#define _HAVE_STRING_ARCH_rindex 1
|
# define _HAVE_STRING_ARCH_rindex 1
|
||||||
#define rindex(s, c) \
|
# define rindex(s, c) \
|
||||||
(__extension__ (__builtin_constant_p (c) \
|
(__extension__ (__builtin_constant_p (c) \
|
||||||
? __strrchr_c (s, ((c) & 0xff) << 8) \
|
? __strrchr_c (s, ((c) & 0xff) << 8) \
|
||||||
: __strrchr_g (s, c)))
|
: __strrchr_g (s, c)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Return the length of the initial segment of S which
|
/* Return the length of the initial segment of S which
|
||||||
|
|
|
@ -34,7 +34,7 @@ long long int
|
||||||
__llrintl (long double x)
|
__llrintl (long double x)
|
||||||
{
|
{
|
||||||
int32_t se,j0;
|
int32_t se,j0;
|
||||||
u_int32_t i0, i1, i;
|
u_int32_t i0, i1;
|
||||||
long long int result;
|
long long int result;
|
||||||
volatile long double w;
|
volatile long double w;
|
||||||
long double t;
|
long double t;
|
||||||
|
@ -45,23 +45,11 @@ __llrintl (long double x)
|
||||||
sx = (se >> 15) & 1;
|
sx = (se >> 15) & 1;
|
||||||
j0 = (se & 0x7fff) - 0x3fff;
|
j0 = (se & 0x7fff) - 0x3fff;
|
||||||
|
|
||||||
if (j0 < 31)
|
if (j0 < (int32_t) (8 * sizeof (long long int)))
|
||||||
{
|
{
|
||||||
if (j0 < -1)
|
if (j0 < -1)
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else if (j0 >= 63)
|
||||||
{
|
|
||||||
w = two63[sx] + x;
|
|
||||||
t = w - two63[sx];
|
|
||||||
GET_LDOUBLE_WORDS (se, i0, i1, t);
|
|
||||||
j0 = (se & 0x7fff) - 0x3fff;
|
|
||||||
|
|
||||||
result = i0 >> (31 - j0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (j0 < (int32_t) (8 * sizeof (long long int)))
|
|
||||||
{
|
|
||||||
if (j0 >= 63)
|
|
||||||
result = ((long long int) i0 << (j0 - 31)) | (i1 << (j0 - 63));
|
result = ((long long int) i0 << (j0 - 31)) | (i1 << (j0 - 63));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -70,7 +58,10 @@ __llrintl (long double x)
|
||||||
GET_LDOUBLE_WORDS (se, i0, i1, t);
|
GET_LDOUBLE_WORDS (se, i0, i1, t);
|
||||||
j0 = (se & 0x7fff) - 0x3fff;
|
j0 = (se & 0x7fff) - 0x3fff;
|
||||||
|
|
||||||
result = ((long long int) i0 << (j0 - 31)) | (j >> (63 - j0));
|
if (j0 < 31)
|
||||||
|
result = i0 >> (31 - j0);
|
||||||
|
else
|
||||||
|
result = ((long long int) i0 << (j0 - 31)) | (i1 >> (63 - j0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -34,7 +34,7 @@ long int
|
||||||
__lrintl (long double x)
|
__lrintl (long double x)
|
||||||
{
|
{
|
||||||
int32_t se,j0;
|
int32_t se,j0;
|
||||||
u_int32_t i0,i1,i;
|
u_int32_t i0, i1;
|
||||||
long int result;
|
long int result;
|
||||||
volatile long double w;
|
volatile long double w;
|
||||||
long double t;
|
long double t;
|
||||||
|
@ -70,7 +70,7 @@ __lrintl (long double x)
|
||||||
GET_LDOUBLE_WORDS (se, i0, i1, t);
|
GET_LDOUBLE_WORDS (se, i0, i1, t);
|
||||||
j0 = (se & 0x7fff) - 0x3fff;
|
j0 = (se & 0x7fff) - 0x3fff;
|
||||||
|
|
||||||
result = ((long int) i0 << (j0 - 31)) | (j >> (63 - j0));
|
result = ((long int) i0 << (j0 - 31)) | (i1 >> (63 - j0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -25,7 +25,7 @@ static char rcsid[] = "$NetBSD: $";
|
||||||
#else
|
#else
|
||||||
float __nextafterxf(x,y)
|
float __nextafterxf(x,y)
|
||||||
float x;
|
float x;
|
||||||
log double y;
|
long double y;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
int32_t hx,ix,iy;
|
int32_t hx,ix,iy;
|
||||||
|
|
|
@ -76,12 +76,16 @@
|
||||||
/* This is used when defining the functions themselves. Define them with
|
/* This is used when defining the functions themselves. Define them with
|
||||||
__ names, and with `static inline' instead of `extern inline' so the
|
__ names, and with `static inline' instead of `extern inline' so the
|
||||||
bodies will always be used, never an external function call. */
|
bodies will always be used, never an external function call. */
|
||||||
# define __m81_u(x) __CONCAT(__,x)
|
#define __m81_u(x) __CONCAT(__,x)
|
||||||
# define __m81_inline static __inline
|
#define __m81_inline static __inline
|
||||||
#else
|
#else
|
||||||
# define __m81_u(x) x
|
#define __m81_u(x) x
|
||||||
# define __m81_inline extern __inline
|
#ifdef __cplusplus
|
||||||
# define __M81_MATH_INLINES 1
|
#define __m81_inline __inline
|
||||||
|
#else
|
||||||
|
#define __m81_inline extern __inline
|
||||||
|
#endif
|
||||||
|
#define __M81_MATH_INLINES 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Define a const math function. */
|
/* Define a const math function. */
|
||||||
|
@ -95,12 +99,12 @@
|
||||||
is the name of the fpu operation (without leading f). */
|
is the name of the fpu operation (without leading f). */
|
||||||
|
|
||||||
#if defined __USE_MISC || defined __USE_ISOC9X
|
#if defined __USE_MISC || defined __USE_ISOC9X
|
||||||
# define __inline_mathop(func, op) \
|
#define __inline_mathop(func, op) \
|
||||||
__inline_mathop1(double, func, op) \
|
__inline_mathop1(double, func, op) \
|
||||||
__inline_mathop1(float, __CONCAT(func,f), op) \
|
__inline_mathop1(float, __CONCAT(func,f), op) \
|
||||||
__inline_mathop1(long double, __CONCAT(func,l), op)
|
__inline_mathop1(long double, __CONCAT(func,l), op)
|
||||||
#else
|
#else
|
||||||
# define __inline_mathop(func, op) \
|
#define __inline_mathop(func, op) \
|
||||||
__inline_mathop1(double, func, op)
|
__inline_mathop1(double, func, op)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -309,13 +313,19 @@ __m81_defun (int, __CONCAT(__signbit,s), (float_type __value)) \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
__m81_defun (float_type, __CONCAT(__scalbn,s), \
|
__m81_defun (float_type, __CONCAT(__scalbn,s), \
|
||||||
(float_type __x, long int __n)) \
|
(float_type __x, int __n)) \
|
||||||
{ \
|
{ \
|
||||||
float_type __result; \
|
float_type __result; \
|
||||||
__asm ("fscale%.l %1, %0" : "=f" (__result) : "dmi" (__n), "0" (__x)); \
|
__asm ("fscale%.l %1, %0" : "=f" (__result) : "dmi" (__n), "0" (__x)); \
|
||||||
return __result; \
|
return __result; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
__m81_defun (float_type, __CONCAT(__scalbln,s), \
|
||||||
|
(float_type __x, long int __n)) \
|
||||||
|
{ \
|
||||||
|
return __CONCAT(__scalbn,s) (__x, __n); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
__m81_defun (float_type, __CONCAT(__nearbyint,s), (float_type __x)) \
|
__m81_defun (float_type, __CONCAT(__nearbyint,s), (float_type __x)) \
|
||||||
{ \
|
{ \
|
||||||
float_type __result; \
|
float_type __result; \
|
||||||
|
@ -330,12 +340,26 @@ __m81_defun (float_type, __CONCAT(__nearbyint,s), (float_type __x)) \
|
||||||
return __result; \
|
return __result; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
__m81_defun (long int, __CONCAT(__lrint,s), (float_type __x)) \
|
||||||
|
{ \
|
||||||
|
long int __result; \
|
||||||
|
__asm ("fmove%.l %1, %0" : "=dm" (__result) : "f" (__x)); \
|
||||||
|
return __result; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
__m81_inline void \
|
__m81_inline void \
|
||||||
__m81_u(__CONCAT(__sincos,s))(float_type __x, float_type *__sinx, \
|
__m81_u(__CONCAT(__sincos,s))(float_type __x, float_type *__sinx, \
|
||||||
float_type *__cosx) \
|
float_type *__cosx) \
|
||||||
{ \
|
{ \
|
||||||
__asm ("fsincos%.x %2,%1:%0" \
|
__asm ("fsincos%.x %2,%1:%0" \
|
||||||
: "=f" (*__sinx), "=f" (*__cosx) : "f" (__x)); \
|
: "=f" (*__sinx), "=f" (*__cosx) : "f" (__x)); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
__m81_inline float_type \
|
||||||
|
__m81_u(__CONCAT(__fma,s))(float_type __x, float_type __y, \
|
||||||
|
float_type __z) \
|
||||||
|
{ \
|
||||||
|
return (__x * __y) + __z; \
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This defines the three variants of the inline functions. */
|
/* This defines the three variants of the inline functions. */
|
||||||
|
@ -344,17 +368,12 @@ __inline_functions (float,f)
|
||||||
__inline_functions (long double,l)
|
__inline_functions (long double,l)
|
||||||
#undef __inline_functions
|
#undef __inline_functions
|
||||||
|
|
||||||
__m81_defun (long int, __lrint, (long double __x))
|
|
||||||
{
|
|
||||||
long int __result;
|
|
||||||
__asm ("fmove%.l %1, %0" : "=dm" (__result) : "f" (__x));
|
|
||||||
return __result;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if !defined __NO_MATH_INLINES && defined __OPTIMIZE__
|
#if !defined __NO_MATH_INLINES && defined __OPTIMIZE__
|
||||||
|
|
||||||
/* Define inline versions of the user visible functions. */
|
/* Define inline versions of the user visible functions. */
|
||||||
|
|
||||||
|
/* Note that there must be no whitespace before the argument passed for
|
||||||
|
NAME, to make token pasting work correctly with -traditional. */
|
||||||
#define __inline_forward_c(rettype, name, args1, args2) \
|
#define __inline_forward_c(rettype, name, args1, args2) \
|
||||||
extern __inline rettype __attribute__((__const__)) \
|
extern __inline rettype __attribute__((__const__)) \
|
||||||
name args1 \
|
name args1 \
|
||||||
|
@ -375,7 +394,8 @@ __inline_forward_c(double,ceil, (double __x), (__x))
|
||||||
#ifdef __USE_MISC
|
#ifdef __USE_MISC
|
||||||
__inline_forward_c(int,isinf, (double __value), (__value))
|
__inline_forward_c(int,isinf, (double __value), (__value))
|
||||||
__inline_forward_c(int,finite, (double __value), (__value))
|
__inline_forward_c(int,finite, (double __value), (__value))
|
||||||
__inline_forward_c(double,scalbn, (double __x, long int __n), (__x, __n))
|
__inline_forward_c(double,scalbn, (double __x, int __n), (__x, __n))
|
||||||
|
__inline_forward_c(double,scalbln, (double __x, long int __n), (__x, __n))
|
||||||
#endif
|
#endif
|
||||||
#if defined __USE_MISC || defined __USE_XOPEN
|
#if defined __USE_MISC || defined __USE_XOPEN
|
||||||
#ifndef __USE_ISOC9X /* Conflict with macro of same name. */
|
#ifndef __USE_ISOC9X /* Conflict with macro of same name. */
|
||||||
|
@ -384,6 +404,9 @@ __inline_forward_c(int,isnan, (double __value), (__value))
|
||||||
#endif
|
#endif
|
||||||
#ifdef __USE_ISOC9X
|
#ifdef __USE_ISOC9X
|
||||||
__inline_forward_c(double,nearbyint, (double __value), (__value))
|
__inline_forward_c(double,nearbyint, (double __value), (__value))
|
||||||
|
__inline_forward_c(long int,lrint, (double __value), (__value))
|
||||||
|
__inline_forward_c(double,fma, (double __x, double __y, double __z),
|
||||||
|
(__x, __y, __z))
|
||||||
#endif
|
#endif
|
||||||
#ifdef __USE_GNU
|
#ifdef __USE_GNU
|
||||||
__inline_forward(void,sincos, (double __x, double *__sinx, double *__cosx),
|
__inline_forward(void,sincos, (double __x, double *__sinx, double *__cosx),
|
||||||
|
@ -399,11 +422,15 @@ __inline_forward_c(float,ceilf, (float __x), (__x))
|
||||||
#ifdef __USE_MISC
|
#ifdef __USE_MISC
|
||||||
__inline_forward_c(int,isinff, (float __value), (__value))
|
__inline_forward_c(int,isinff, (float __value), (__value))
|
||||||
__inline_forward_c(int,finitef, (float __value), (__value))
|
__inline_forward_c(int,finitef, (float __value), (__value))
|
||||||
__inline_forward_c(float,scalbnf, (float __x, long int __n), (__x, __n))
|
__inline_forward_c(float,scalbnf, (float __x, int __n), (__x, __n))
|
||||||
|
__inline_forward_c(float,scalblnf, (float __x, long int __n), (__x, __n))
|
||||||
__inline_forward_c(int,isnanf, (float __value), (__value))
|
__inline_forward_c(int,isnanf, (float __value), (__value))
|
||||||
#endif
|
#endif
|
||||||
#ifdef __USE_ISOC9X
|
#ifdef __USE_ISOC9X
|
||||||
__inline_forward_c(float,nearbyintf, (float __value), (__value))
|
__inline_forward_c(float,nearbyintf, (float __value), (__value))
|
||||||
|
__inline_forward_c(long int,lrintf, (float __value), (__value))
|
||||||
|
__inline_forward_c(float,fmaf, (float __x, float __y, float __z),
|
||||||
|
(__x, __y, __z))
|
||||||
#endif
|
#endif
|
||||||
#ifdef __USE_GNU
|
#ifdef __USE_GNU
|
||||||
__inline_forward(void,sincosf, (float __x, float *__sinx, float *__cosx),
|
__inline_forward(void,sincosf, (float __x, float *__sinx, float *__cosx),
|
||||||
|
@ -417,13 +444,17 @@ __inline_forward_c(long double,ceill, (long double __x), (__x))
|
||||||
#ifdef __USE_MISC
|
#ifdef __USE_MISC
|
||||||
__inline_forward_c(int,isinfl, (long double __value), (__value))
|
__inline_forward_c(int,isinfl, (long double __value), (__value))
|
||||||
__inline_forward_c(int,finitel, (long double __value), (__value))
|
__inline_forward_c(int,finitel, (long double __value), (__value))
|
||||||
__inline_forward_c(long double,scalbnl, (long double __x, long int __n),
|
__inline_forward_c(long double,scalbnl, (long double __x, int __n), (__x, __n))
|
||||||
|
__inline_forward_c(long double,scalblnl, (long double __x, long int __n),
|
||||||
(__x, __n))
|
(__x, __n))
|
||||||
__inline_forward_c(int,isnanl, (long double __value), (__value))
|
__inline_forward_c(int,isnanl, (long double __value), (__value))
|
||||||
#endif
|
#endif
|
||||||
#ifdef __USE_ISOC9X
|
#ifdef __USE_ISOC9X
|
||||||
__inline_forward_c(long double,nearbyintl, (long double __value), (__value))
|
__inline_forward_c(long double,nearbyintl, (long double __value), (__value))
|
||||||
__inline_forward_c(long int,lrint, (long double __value), (__value))
|
__inline_forward_c(long int,lrintl, (long double __value), (__value))
|
||||||
|
__inline_forward_c(long double,fmal,
|
||||||
|
(long double __x, long double __y, long double __z),
|
||||||
|
(__x, __y, __z))
|
||||||
#endif
|
#endif
|
||||||
#ifdef __USE_GNU
|
#ifdef __USE_GNU
|
||||||
__inline_forward(void,sincosl,
|
__inline_forward(void,sincosl,
|
||||||
|
|
|
@ -22,10 +22,20 @@
|
||||||
#define __LIBC_M81_MATH_INLINES
|
#define __LIBC_M81_MATH_INLINES
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#ifndef suffix
|
||||||
|
#define suffix /*empty*/
|
||||||
|
#endif
|
||||||
|
#ifndef float_type
|
||||||
|
#define float_type double
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define CONCATX(a,b) __CONCAT(a,b)
|
||||||
|
|
||||||
long int
|
long int
|
||||||
__lrint (long double x)
|
CONCATX(__lrint,suffix) (float_type x)
|
||||||
{
|
{
|
||||||
return __m81_u(__lrint) (x);
|
return __m81_u(CONCATX(__lrint,suffix)) (x);
|
||||||
}
|
}
|
||||||
|
|
||||||
weak_alias (__lrint, lrint)
|
#define weak_aliasx(a,b) weak_alias(a,b)
|
||||||
|
weak_aliasx (CONCATX(__lrint,suffix), CONCATX(lrint,suffix))
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
#define suffix f
|
||||||
|
#define float_type float
|
||||||
|
#include <s_lrint.c>
|
|
@ -0,0 +1,3 @@
|
||||||
|
#define suffix l
|
||||||
|
#define float_type long double
|
||||||
|
#include <s_lrint.c>
|
|
@ -0,0 +1,2 @@
|
||||||
|
/* Nothing to do. This function is the same as scalbn. So we define an
|
||||||
|
alias. */
|
|
@ -0,0 +1,2 @@
|
||||||
|
/* Nothing to do. This function is the same as scalbnf. So we define an
|
||||||
|
alias. */
|
|
@ -0,0 +1,2 @@
|
||||||
|
/* Nothing to do. This function is the same as scalbnl. So we define an
|
||||||
|
alias. */
|
|
@ -17,10 +17,22 @@
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#define __LIBC_M81_MATH_INLINES
|
#define __LIBC_M81_MATH_INLINES
|
||||||
|
#define scalbln __no_scalbln_decl
|
||||||
|
#define scalblnf __no_scalblnf_decl
|
||||||
|
#define scalblnl __no_scalblnl_decl
|
||||||
|
#define __scalbln __no__scalbln_decl
|
||||||
|
#define __scalblnf __no__scalblnf_decl
|
||||||
|
#define __scalblnl __no__scalblnl_decl
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#undef scalbln
|
||||||
|
#undef scalblnf
|
||||||
|
#undef scalblnl
|
||||||
|
#undef __scalbln
|
||||||
|
#undef __scalblnf
|
||||||
|
#undef __scalblnl
|
||||||
|
|
||||||
#ifndef FUNC
|
#ifndef suffix
|
||||||
#define FUNC scalbn
|
#define suffix /*empty*/
|
||||||
#endif
|
#endif
|
||||||
#ifndef float_type
|
#ifndef float_type
|
||||||
#define float_type double
|
#define float_type double
|
||||||
|
@ -29,12 +41,15 @@
|
||||||
#define __CONCATX(a,b) __CONCAT(a,b)
|
#define __CONCATX(a,b) __CONCAT(a,b)
|
||||||
|
|
||||||
float_type
|
float_type
|
||||||
__CONCATX(__,FUNC) (x, exp)
|
__CONCATX(__scalbn,suffix) (x, exp)
|
||||||
float_type x;
|
float_type x;
|
||||||
long int exp;
|
int exp;
|
||||||
{
|
{
|
||||||
return __m81_u(__CONCATX(__,FUNC))(x, exp);
|
return __m81_u(__CONCATX(__scalbn,suffix))(x, exp);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define weak_aliasx(a,b) weak_alias(a,b)
|
#define weak_aliasx(a,b) weak_alias(a,b)
|
||||||
weak_aliasx (__CONCATX(__,FUNC), FUNC)
|
#define strong_aliasx(a,b) strong_alias(a,b)
|
||||||
|
weak_aliasx (__CONCATX(__scalbn,suffix), __CONCATX(scalbn,suffix))
|
||||||
|
strong_aliasx (__CONCATX(__scalbn,suffix), __CONCATX(__scalbln,suffix))
|
||||||
|
weak_aliasx (__CONCATX(__scalbn,suffix), __CONCATX(scalbln,suffix))
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#ifndef FUNC
|
#define suffix f
|
||||||
#define FUNC scalbnf
|
|
||||||
#endif
|
|
||||||
#define float_type float
|
#define float_type float
|
||||||
#include <s_scalbn.c>
|
#include <s_scalbn.c>
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#ifndef FUNC
|
#define suffix l
|
||||||
#define FUNC scalbnl
|
|
||||||
#endif
|
|
||||||
#define float_type long double
|
#define float_type long double
|
||||||
#include <s_scalbn.c>
|
#include <s_scalbn.c>
|
||||||
|
|
|
@ -0,0 +1,108 @@
|
||||||
|
/* 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. */
|
||||||
|
|
||||||
|
/* System V/m68k ABI compliant context switching support. */
|
||||||
|
|
||||||
|
#ifndef _SYS_UCONTEXT_H
|
||||||
|
#define _SYS_UCONTEXT_H 1
|
||||||
|
|
||||||
|
#include <features.h>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
/* Type for general register. */
|
||||||
|
typedef int greg_t;
|
||||||
|
|
||||||
|
/* Number of general registers. */
|
||||||
|
#define NGREG 18
|
||||||
|
|
||||||
|
/* Container for all general registers. */
|
||||||
|
typedef greg_t gregset_t[NGREG];
|
||||||
|
|
||||||
|
/* Number of each register is the `gregset_t' array. */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
R_D0 = 0,
|
||||||
|
#define R_D0 R_D0
|
||||||
|
R_D1 = 1,
|
||||||
|
#define R_D1 R_D1
|
||||||
|
R_D2 = 2,
|
||||||
|
#define R_D2 R_D2
|
||||||
|
R_D3 = 3,
|
||||||
|
#define R_D3 R_D3
|
||||||
|
R_D4 = 4,
|
||||||
|
#define R_D4 R_D4
|
||||||
|
R_D5 = 5,
|
||||||
|
#define R_D5 R_D5
|
||||||
|
R_D6 = 6,
|
||||||
|
#define R_D6 R_D6
|
||||||
|
R_D7 = 7,
|
||||||
|
#define R_D7 R_D7
|
||||||
|
R_A0 = 8,
|
||||||
|
#define R_A0 R_A0
|
||||||
|
R_A1 = 9,
|
||||||
|
#define R_A1 R_A1
|
||||||
|
R_A2 = 10,
|
||||||
|
#define R_A2 R_A2
|
||||||
|
R_A3 = 11,
|
||||||
|
#define R_A3 R_A3
|
||||||
|
R_A4 = 12,
|
||||||
|
#define R_A4 R_A4
|
||||||
|
R_A5 = 13,
|
||||||
|
#define R_A5 R_A5
|
||||||
|
R_A6 = 14,
|
||||||
|
#define R_A6 R_A6
|
||||||
|
R_A7 = 15,
|
||||||
|
#define R_A7 R_A7
|
||||||
|
R_SP = 15,
|
||||||
|
#define R_SP R_SP
|
||||||
|
R_PC = 16,
|
||||||
|
#define R_PC R_PC
|
||||||
|
R_PS = 17
|
||||||
|
#define R_PS R_PS
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Structure to describe FPU registers. */
|
||||||
|
typedef struct fpregset
|
||||||
|
{
|
||||||
|
int f_pcr;
|
||||||
|
int f_psr;
|
||||||
|
int f_fpiaddr;
|
||||||
|
int f_fpregs[8][3];
|
||||||
|
} fpregset_t;
|
||||||
|
|
||||||
|
/* Context to describe whole processor state. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int version;
|
||||||
|
gregset_t gregs;
|
||||||
|
} mcontext_t;
|
||||||
|
|
||||||
|
#define MCONTEXT_VERSION 1
|
||||||
|
|
||||||
|
/* Userlevel context. */
|
||||||
|
typedef struct ucontext
|
||||||
|
{
|
||||||
|
unsigned long int uc_flags;
|
||||||
|
struct ucontext *uc_links;
|
||||||
|
__sigset_t uc_sigmask;
|
||||||
|
stack_t uc_stack;
|
||||||
|
mcontext_t uc_mcontext;
|
||||||
|
long int uc_filler[201];
|
||||||
|
} ucontext_t;
|
||||||
|
|
||||||
|
#endif /* sys/ucontext.h */
|
|
@ -23,7 +23,7 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
pread (int fd, void *buf, size_t nbyte, off_t offset)
|
__pread (int fd, void *buf, size_t nbyte, off_t offset)
|
||||||
{
|
{
|
||||||
/* Since we must not change the file pointer preserve the value so that
|
/* Since we must not change the file pointer preserve the value so that
|
||||||
we can restore it later. */
|
we can restore it later. */
|
||||||
|
@ -54,3 +54,7 @@ pread (int fd, void *buf, size_t nbyte, off_t offset)
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef __pread
|
||||||
|
weak_alias (__pread, pread)
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
/* Read block from given position in file without changing file pointer.
|
||||||
|
POSIX version.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 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
|
||||||
|
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 <errno.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
ssize_t
|
||||||
|
__pread64 (int fd, void *buf, size_t nbyte, off64_t offset)
|
||||||
|
{
|
||||||
|
/* Since we must not change the file pointer preserve the value so that
|
||||||
|
we can restore it later. */
|
||||||
|
int save_errno;
|
||||||
|
ssize_t result;
|
||||||
|
off64_t old_offset = lseek64 (fd, 0, SEEK_CUR);
|
||||||
|
if (old_offset == (off64_t) -1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* Set to wanted position. */
|
||||||
|
if (lseek64 (fd, offset, SEEK_SET) == (off64_t) -1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* Write out the data. */
|
||||||
|
result = read (fd, buf, nbyte);
|
||||||
|
|
||||||
|
/* Now we have to restore the position. If this fails we have to
|
||||||
|
return this as an error. But if the writing also failed we
|
||||||
|
return this error. */
|
||||||
|
save_errno = errno;
|
||||||
|
if (lseek64 (fd, old_offset, SEEK_SET) == (off64_t) -1)
|
||||||
|
{
|
||||||
|
if (result == -1)
|
||||||
|
__set_errno (save_errno);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
__set_errno (save_errno);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef __pread64
|
||||||
|
weak_alias (__pread64, pread64)
|
||||||
|
#endif
|
|
@ -23,7 +23,7 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
pwrite (int fd, const void *buf, size_t nbyte, off_t offset)
|
__pwrite (int fd, const void *buf, size_t nbyte, off_t offset)
|
||||||
{
|
{
|
||||||
/* Since we must not change the file pointer preserve the value so that
|
/* Since we must not change the file pointer preserve the value so that
|
||||||
we can restore it later. */
|
we can restore it later. */
|
||||||
|
@ -54,3 +54,4 @@ pwrite (int fd, const void *buf, size_t nbyte, off_t offset)
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
weak_alias (__pwrite, pwrite)
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
/* Write block to given position in file without changing file pointer.
|
||||||
|
POSIX version.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 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
|
||||||
|
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 <errno.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
ssize_t
|
||||||
|
__pwrite64 (int fd, const void *buf, size_t nbyte, off64_t offset)
|
||||||
|
{
|
||||||
|
/* Since we must not change the file pointer preserve the value so that
|
||||||
|
we can restore it later. */
|
||||||
|
int save_errno;
|
||||||
|
ssize_t result;
|
||||||
|
off64_t old_offset = lseek64 (fd, 0, SEEK_CUR);
|
||||||
|
if (old_offset == (off64_t) -1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* Set to wanted position. */
|
||||||
|
if (lseek64 (fd, offset, SEEK_SET) == (off64_t) -1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* Write out the data. */
|
||||||
|
result = write (fd, buf, nbyte);
|
||||||
|
|
||||||
|
/* Now we have to restore the position. If this fails we have to
|
||||||
|
return this as an error. But if the writing also failed we
|
||||||
|
return this error. */
|
||||||
|
save_errno = errno;
|
||||||
|
if (lseek64 (fd, old_offset, SEEK_SET) == (off64_t) -1)
|
||||||
|
{
|
||||||
|
if (result == -1)
|
||||||
|
__set_errno (save_errno);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
__set_errno (save_errno);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#ifndef __pwrite64
|
||||||
|
weak_alias (__pwrite64, pwrite64)
|
||||||
|
#endif
|
|
@ -144,7 +144,7 @@ extern const fenv_t *__fe_nomask_env __P ((void));
|
||||||
# define FE_NOMASK_ENV (__fe_nomask_env ())
|
# define FE_NOMASK_ENV (__fe_nomask_env ())
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __OPTIMIZE__
|
#if defined __OPTIMIZE__ && !defined _SOFT_FLOAT
|
||||||
/* Inline definition for fegetround. */
|
/* Inline definition for fegetround. */
|
||||||
# define fegetround() \
|
# define fegetround() \
|
||||||
(__extension__ ({ int __fegetround_result; \
|
(__extension__ ({ int __fegetround_result; \
|
||||||
|
@ -175,4 +175,4 @@ extern const fenv_t *__fe_nomask_env __P ((void));
|
||||||
: : "i"(32 - __builtin_ffs (__excepts))); \
|
: : "i"(32 - __builtin_ffs (__excepts))); \
|
||||||
} else \
|
} else \
|
||||||
(feclearexcept) (__excepts); }))
|
(feclearexcept) (__excepts); }))
|
||||||
#endif /* __OPTIMIZE__ */
|
#endif /* __OPTIMIZE__ && !_SOFT_FLOAT */
|
||||||
|
|
|
@ -32,9 +32,9 @@ __sgn1 (double __x)
|
||||||
{
|
{
|
||||||
return __x >= 0.0 ? 1.0 : -1.0;
|
return __x >= 0.0 ? 1.0 : -1.0;
|
||||||
}
|
}
|
||||||
#endif /* __NO_MATH_INLINES && __OPTIMZE__ */
|
#endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */
|
||||||
|
|
||||||
#if __USE_ISOC9X
|
#if __USE_ISOC9X && !defined _SOFT_FLOAT
|
||||||
# define __unordered_cmp(x, y) \
|
# define __unordered_cmp(x, y) \
|
||||||
(__extension__ \
|
(__extension__ \
|
||||||
({ __typeof__(x) __x = (x); __typeof__(y) __y = (y); \
|
({ __typeof__(x) __x = (x); __typeof__(y) __y = (y); \
|
||||||
|
@ -48,6 +48,6 @@ __sgn1 (double __x)
|
||||||
# define islessequal(x, y) ((__unordered_cmp (x, y) & 0xA) != 0)
|
# define islessequal(x, y) ((__unordered_cmp (x, y) & 0xA) != 0)
|
||||||
# define islessgreater(x, y) ((__unordered_cmp (x, y) & 0xC) != 0)
|
# define islessgreater(x, y) ((__unordered_cmp (x, y) & 0xC) != 0)
|
||||||
# define isunordered(x, y) (__unordered_cmp (x, y) & 1)
|
# define isunordered(x, y) (__unordered_cmp (x, y) & 1)
|
||||||
#endif /* __USE_ISOC9X */
|
#endif /* __USE_ISOC9X && !_SOFT_FLOAT */
|
||||||
|
|
||||||
#endif /* __GNUC__ */
|
#endif /* __GNUC__ */
|
||||||
|
|
|
@ -243,8 +243,7 @@ _dl_prof_resolve:
|
||||||
# ...unwind the stack frame, and jump to the PLT entry we updated.
|
# ...unwind the stack frame, and jump to the PLT entry we updated.
|
||||||
addi 1,1,48
|
addi 1,1,48
|
||||||
bctr
|
bctr
|
||||||
0:
|
.size _dl_prof_resolve,.-_dl_prof_resolve
|
||||||
.size _dl_prof_resolve,0b-_dl_prof_resolve
|
|
||||||
# Undo '.section text'.
|
# Undo '.section text'.
|
||||||
.previous
|
.previous
|
||||||
");
|
");
|
||||||
|
@ -741,7 +740,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
|
||||||
}
|
}
|
||||||
else if (rinfo == R_PPC_JMP_SLOT)
|
else if (rinfo == R_PPC_JMP_SLOT)
|
||||||
{
|
{
|
||||||
elf_machine_fixup_plt (map, reloc, reloc_addr, finalvalue);
|
elf_machine_fixup_plt (map, reloc, reloc_addr, finaladdr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,7 +54,7 @@ _start:
|
||||||
argument info starts after one register window (16 words) past the SP. */
|
argument info starts after one register window (16 words) past the SP. */
|
||||||
ld [%sp+22*4], %o0
|
ld [%sp+22*4], %o0
|
||||||
add %sp, 23*4, %o1
|
add %sp, 23*4, %o1
|
||||||
sll %o0, 4, %o2
|
sll %o0, 2, %o2
|
||||||
add %o2, %o1, %o2
|
add %o2, %o1, %o2
|
||||||
sethi %hi(__environ), %g2
|
sethi %hi(__environ), %g2
|
||||||
add %o2, 4, %o2
|
add %o2, 4, %o2
|
||||||
|
|
|
@ -76,6 +76,10 @@ sysdep_headers += netinet/in_systm.h netinet/udp.h \
|
||||||
sys/socketvar.h
|
sys/socketvar.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(subdir),posix)
|
||||||
|
sysdep_routines += s_pread64 s_pwrite64
|
||||||
|
endif
|
||||||
|
|
||||||
# Don't compile the ctype glue code, since there is no old non-GNU C library.
|
# Don't compile the ctype glue code, since there is no old non-GNU C library.
|
||||||
inhibit-glue = yes
|
inhibit-glue = yes
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
/* Empty since the pread syscall is equivalent. */
|
|
@ -0,0 +1 @@
|
||||||
|
/* Empty since the pread syscall is equivalent. */
|
|
@ -21,6 +21,8 @@ getpeername - getpeername 3 __getpeername getpeername
|
||||||
getpriority - getpriority 2 __getpriority getpriority
|
getpriority - getpriority 2 __getpriority getpriority
|
||||||
mmap - mmap 6 __mmap mmap
|
mmap - mmap 6 __mmap mmap
|
||||||
llseek EXTRA lseek 3 llseek
|
llseek EXTRA lseek 3 llseek
|
||||||
|
pread EXTRA pread 4 __pread pread __pread64 pread64
|
||||||
|
pwrite EXTRA pwrite 4 __pwrite pwrite __pwrite64 pwrite64
|
||||||
|
|
||||||
# these are actually common with the x86:
|
# these are actually common with the x86:
|
||||||
fstatfs - fstatfs 2 __fstatfs fstatfs
|
fstatfs - fstatfs 2 __fstatfs fstatfs
|
||||||
|
|
|
@ -136,10 +136,10 @@ struct msghdr
|
||||||
socklen_t msg_namelen; /* Length of address data. */
|
socklen_t msg_namelen; /* Length of address data. */
|
||||||
|
|
||||||
struct iovec *msg_iov; /* Vector of data to send/receive into. */
|
struct iovec *msg_iov; /* Vector of data to send/receive into. */
|
||||||
int msg_iovlen; /* Number of elements in the vector. */
|
size_t msg_iovlen; /* Number of elements in the vector. */
|
||||||
|
|
||||||
__ptr_t msg_control; /* Ancillary data (eg BSD filedesc passing). */
|
__ptr_t msg_control; /* Ancillary data (eg BSD filedesc passing). */
|
||||||
socklen_t msg_controllen; /* Ancillary data buffer length. */
|
size_t msg_controllen; /* Ancillary data buffer length. */
|
||||||
|
|
||||||
int msg_flags; /* Flags on received message. */
|
int msg_flags; /* Flags on received message. */
|
||||||
};
|
};
|
||||||
|
@ -147,7 +147,7 @@ struct msghdr
|
||||||
/* Structure used for storage of ancillary data object information. */
|
/* Structure used for storage of ancillary data object information. */
|
||||||
struct cmsghdr
|
struct cmsghdr
|
||||||
{
|
{
|
||||||
socklen_t cmsg_len; /* Length of data in cmsg_data plus length
|
size_t cmsg_len; /* Length of data in cmsg_data plus length
|
||||||
of cmsghdr structure. */
|
of cmsghdr structure. */
|
||||||
int cmsg_level; /* Originating protocol. */
|
int cmsg_level; /* Originating protocol. */
|
||||||
int cmsg_type; /* Protocol specific type. */
|
int cmsg_type; /* Protocol specific type. */
|
||||||
|
@ -195,6 +195,16 @@ __cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg)
|
||||||
return (struct cmsghdr *) __p;
|
return (struct cmsghdr *) __p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Socket level message types. This must match the definitions in
|
||||||
|
<linux/socket.h>. */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
SCM_RIGHTS = 0x01, /* Data array contains access rights. */
|
||||||
|
#define SCM_RIGHTS SCM_RIGHTS
|
||||||
|
__SCM_CREDENTIALS = 0x02, /* Data array is `struct ucred'. */
|
||||||
|
__SCM_CONNECT = 0x03 /* Data array is `struct scm_connect'. */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/* Get socket manipulation related informations from kernel headers. */
|
/* Get socket manipulation related informations from kernel headers. */
|
||||||
#include <asm/socket.h>
|
#include <asm/socket.h>
|
||||||
|
|
|
@ -69,7 +69,7 @@ struct arphdr
|
||||||
|
|
||||||
/* ARP protocol HARDWARE identifiers. */
|
/* ARP protocol HARDWARE identifiers. */
|
||||||
#define ARPHRD_NETROM 0 /* From KA9Q: NET/ROM pseudo. */
|
#define ARPHRD_NETROM 0 /* From KA9Q: NET/ROM pseudo. */
|
||||||
#define ARPHRD_ETHER 1 /* Ethernet 10Mbps. */
|
#define ARPHRD_ETHER 1 /* Ethernet 10/100Mbps. */
|
||||||
#define ARPHRD_EETHER 2 /* Experimental Ethernet. */
|
#define ARPHRD_EETHER 2 /* Experimental Ethernet. */
|
||||||
#define ARPHRD_AX25 3 /* AX.25 Level 2. */
|
#define ARPHRD_AX25 3 /* AX.25 Level 2. */
|
||||||
#define ARPHRD_PRONET 4 /* PROnet token ring. */
|
#define ARPHRD_PRONET 4 /* PROnet token ring. */
|
||||||
|
@ -92,6 +92,7 @@ struct arphdr
|
||||||
#define ARPHRD_PPP 512
|
#define ARPHRD_PPP 512
|
||||||
#define ARPHRD_HDLC 513 /* (Cisco) HDLC. */
|
#define ARPHRD_HDLC 513 /* (Cisco) HDLC. */
|
||||||
#define ARPHRD_LAPB 516 /* LAPB. */
|
#define ARPHRD_LAPB 516 /* LAPB. */
|
||||||
|
#define ARPHRD_ASH 517 /* ASH. */
|
||||||
|
|
||||||
#define ARPHRD_TUNNEL 768 /* IPIP tunnel. */
|
#define ARPHRD_TUNNEL 768 /* IPIP tunnel. */
|
||||||
#define ARPHRD_TUNNEL6 769 /* IPIP6 tunnel. */
|
#define ARPHRD_TUNNEL6 769 /* IPIP6 tunnel. */
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
/* Definitions for use with Linux SOCK_PACKET sockets.
|
||||||
|
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. */
|
||||||
|
|
||||||
|
#ifndef __IF_PACKET_H
|
||||||
|
#define __IF_PACKET_H
|
||||||
|
|
||||||
|
/* For now we can just use the kernel definitions. */
|
||||||
|
#include <linux/if_packet.h>
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,28 @@
|
||||||
|
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 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
|
||||||
|
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 <unistd.h>
|
||||||
|
|
||||||
|
ssize_t
|
||||||
|
__pread (int fd, void *buf, size_t nbytes, off_t offset)
|
||||||
|
{
|
||||||
|
return __pread64 (fd, buf, nbytes, (off64_t) offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
weak_alias (__pread, pread)
|
|
@ -0,0 +1,53 @@
|
||||||
|
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 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
|
||||||
|
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 <errno.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
extern ssize_t __syscall_pread64 (int fd, void *buf, size_t count,
|
||||||
|
off_t offset_hi, off_t offset_lo);
|
||||||
|
|
||||||
|
static ssize_t __emulate_pread64 (int fd, void *buf, size_t count,
|
||||||
|
off64_t offset) internal_function;
|
||||||
|
|
||||||
|
|
||||||
|
ssize_t
|
||||||
|
__pread64 (fd, buf, count, offset)
|
||||||
|
int fd;
|
||||||
|
void *buf;
|
||||||
|
size_t count;
|
||||||
|
off64_t offset;
|
||||||
|
{
|
||||||
|
ssize_t result;
|
||||||
|
|
||||||
|
/* First try the syscall. */
|
||||||
|
result = __syscall_pread64 (fd, buf, count, (off_t) (offset >> 32),
|
||||||
|
(off_t) (offset & 0xffffffff));
|
||||||
|
if (result == -1 && errno == ENOSYS)
|
||||||
|
/* No system call available. Use the emulation. */
|
||||||
|
result = __emulate_pread64 (fd, buf, count, offset);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
weak_alias (__pread64, pread64)
|
||||||
|
|
||||||
|
#define __pread64(fd, buf, count, offset) \
|
||||||
|
static internal_function __emulate_pread64 (fd, buf, count, offset)
|
||||||
|
#include <sysdeps/posix/pread64.c>
|
|
@ -0,0 +1,28 @@
|
||||||
|
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 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
|
||||||
|
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 <unistd.h>
|
||||||
|
|
||||||
|
ssize_t
|
||||||
|
__pwrite (int fd, const void *buf, size_t nbytes, off_t offset)
|
||||||
|
{
|
||||||
|
return __pwrite64 (fd, buf, nbytes, (off64_t) offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
weak_alias (__pwrite, pwrite)
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue