diff options
-rw-r--r-- | ChangeLog | 39 | ||||
-rw-r--r-- | INSTALL | 796 | ||||
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | glibcbug.in | 6 | ||||
-rw-r--r-- | libc.map | 4 | ||||
-rw-r--r-- | manual/filesys.texi | 2 | ||||
-rw-r--r-- | manual/install.texi | 34 | ||||
-rw-r--r-- | manual/maint.texi | 105 | ||||
-rw-r--r-- | posix/regex.c | 4 | ||||
-rw-r--r-- | posix/wordexp-test.c | 1 | ||||
-rw-r--r-- | posix/wordexp.c | 99 | ||||
-rw-r--r-- | sysdeps/i386/bits/string.h | 186 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/adjtime.c | 3 |
13 files changed, 363 insertions, 918 deletions
diff --git a/ChangeLog b/ChangeLog index d9dd45dd6a..704c4cecb5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,42 @@ +1998-03-25 Ulrich Drepper <drepper@cygnus.com> + + * glibcbug.in: Create files safely when mktemp is not available. + + * sysdeps/unix/sysv/linux/adjtime.c: Make weak alias appear again. + Patch by a sun <asun@saul1.u.washington.edu>. + +1998-03-25 Thorsten Kukuk <kukuk@vt.uni-paderborn.de> + + * libc.map: Rename getname to getnetname. + +1998-03-25 13:35 Ulrich Drepper <drepper@cygnus.com> + + * manual/maint.texi: Use supported platform in examples. + + * manual/install.texi: Document some installation tips. + +1998-03-25 10:56 Ulrich Drepper <drepper@cygnus.com> + + * posix/wordexp.c: Fix some memory leaks and makes $* more efficient. + Fix a bug so that it returns an error if a numeric parameter is + unset and WRDE_UNDEF is set. + Patch by Andreas Schwab and Tim Waugh. + * posix/wordexp-test.c: Add new new test. + +1998-03-25 Ulrich Drepper <drepper@cygnus.com> + + * posix/regex.c (regex_compile): Last patch wasn't entirely + correct. Patch by Alain Magloire <alainm@rcsm.ece.mcgill.ca>. + +1998-03-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * manual/filesys.texi (Scanning Directory Content): Fix typo. + +1998-03-25 09:24 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE> + + * sysdeps/i386/bits/string.h: Fix all assembler statements so that + clobbered registers don't appear as operands. + 1998-03-24 Ulrich Drepper <drepper@cygnus.com> * posix/regex.c: Undefine ISASCII and ISPRINT before defining for diff --git a/INSTALL b/INSTALL index 6a03afcf2b..369e50e822 100644 --- a/INSTALL +++ b/INSTALL @@ -1,313 +1,6 @@ Library Maintenance ******************* -How to Install the GNU C Library -================================ - - Installation of the GNU C library is relatively simple, but usually -requires several GNU tools to be installed already. - - To configure the GNU C library for your system, run the shell script -`configure' with `sh'. Use an argument which is the conventional GNU -name for your system configuration--for example, `sparc-sun-sunos4.1', -for a Sun 4 running SunOS 4.1. *Note Installation: -(gcc.info)Installation, for a full description of standard GNU -configuration names. If you omit the configuration name, `configure' -will try to guess one for you by inspecting the system it is running -on. It may or may not be able to come up with a guess, and the its -guess might be wrong. `configure' will tell you the canonical name of -the chosen configuration before proceeding. - - Here are some options that you should specify (if appropriate) when -you run `configure': - -`--with-binutils=DIRECTORY' - Use the binutils (assembler and linker) in `DIRECTORY', not the - ones the C compiler would default to. You could use this option if - the default binutils on your system cannot deal with all the - constructs in the GNU C library. (`configure' will detect the - problem and suppress these constructs, so the library will still - be usable, but functionality may be lost--for example, you can not - build a shared libc with old binutils.) - -`--without-fp' -`--nfp' - Use this option if your computer lacks hardware floating-point - support and your operating system does not emulate an FPU. - -`--prefix=DIRECTORY' - Install machine-independent data files in subdirectories of - `DIRECTORY'. (You can also set this in `configparms'; see below.) - The default is to install in `/usr/local'. - -`--exec-prefix=DIRECTORY' - Install the library and other machine-dependent files in - subdirectories of `DIRECTORY'. (You can also set this in - `configparms'; see below.) The default is to use <prefix>/bin and - <prefix>/sbin. - -`--enable-shared' -`--disable-shared' - Enable or disable building of an ELF shared library on systems that - support it. The default is to build the shared library on systems - using ELF when the GNU `binutils' are available. - -`--enable-profile' -`--disable-profile' - Enable or disable building of the profiled C library, `-lc_p'. The - default is to build the profiled library. You may wish to disable - it if you don't plan to do profiling, because it doubles the build - time of compiling just the unprofiled static library. - -`--enable-omitfp' - Enable building a highly-optimized but possibly undebuggable - static C library. This causes the normal static and shared (if - enabled) C libraries to be compiled with maximal optimization, - including the `-fomit-frame-pointer' switch that makes debugging - impossible on many machines, and without debugging information - (which makes the binaries substantially smaller). An additional - static library is compiled with no optimization and full debugging - information, and installed as `-lc_g'. - - The simplest way to run `configure' is to do it in the directory -that contains the library sources. This prepares to build the library -in that very directory. - - You can prepare to build the library in some other directory by going -to that other directory to run `configure'. In order to run configure, -you will have to specify a directory for it, like this: - - mkdir sun4 - cd sun4 - ../configure sparc-sun-sunos4.1 - -`configure' looks for the sources in whatever directory you specified -for finding `configure' itself. It does not matter where in the file -system the source and build directories are--as long as you specify the -source directory when you run `configure', you will get the proper -results. - - This feature lets you keep sources and binaries in different -directories, and that makes it easy to build the library for several -different machines from the same set of sources. Simply create a build -directory for each target machine, and run `configure' in that -directory specifying the target machine's configuration name. - - The library has a number of special-purpose configuration parameters. -These are defined in the file `Makeconfig'; see the comments in that -file for the details. - - But don't edit the file `Makeconfig' yourself--instead, create a -file `configparms' in the directory where you are building the library, -and define in that file the parameters you want to specify. -`configparms' should *not* be an edited copy of `Makeconfig'; specify -only the parameters that you want to override. To see how to set these -parameters, find the section of `Makeconfig' that says "These are the -configuration variables." Then for each parameter that you want to -change, copy the definition from `Makeconfig' to your new `configparms' -file, and change the value as appropriate for your system. - - It is easy to configure the GNU C library for cross-compilation by -setting a few variables in `configparms'. Set `CC' to the -cross-compiler for the target you configured the library for; it is -important to use this same `CC' value when running `configure', like -this: `CC=TARGET-gcc configure TARGET'. Set `BUILD_CC' to the compiler -to use for for programs run on the build system as part of compiling -the library. You may need to set `AR' and `RANLIB' to cross-compiling -versions of `ar' and `ranlib' if the native tools are not configured to -work with object files for the target you configured for. - - Some of the machine-dependent code for some machines uses extensions -in the GNU C compiler, so you may need to compile the library with GCC. -(In fact, all of the existing complete ports require GCC.) - - To build the library and related programs, type `make'. This will -produce a lot of output, some of which may look like errors from `make' -(but isn't). Look for error messages from `make' containing `***'. -Those indicate that something is really wrong. - - To build and run some test programs which exercise some of the -library facilities, type `make check'. This will produce several files -with names like `PROGRAM.out'. - - To format the `GNU C Library Reference Manual' for printing, type -`make dvi'. You need a working TeX installation to do this. - - To install the library and its header files, and the Info files of -the manual, type `make install'. This will build things if necessary, -before installing them. If you want to install the files in a different -place than the one specified at configuration time you can specify a -value for the Makefile variable `install_root' on the command line. -This is useful to create chroot'ed environment or to prepare binary -releases. - -Recommended Tools to Install the GNU C Library ----------------------------------------------- - - We recommend installing the following GNU tools before attempting to -build the GNU C library: - - * `make' 3.76.1 - - You need the latest version of GNU `make'. Modifying the GNU C - Library to work with other `make' programs would be so hard that we - recommend you port GNU `make' instead. *Really.* We recommend - version GNU `make' version 3.75, 3.76.1 or later. Version 3.76 is - known to have a bug which only shows up in big projects like GNU - `libc'. - - * GCC 2.7.2.3 - - On most platforms, the GNU C library can only be compiled with the - GNU C compiler. We recommend GCC version 2.7.2 or later; earlier - versions may have problems. - - On PowerPC, GCC versions dated earlier than 970904 are known not - to work (they crash), including 2.7.2. - - * `binutils' 2.8.1 - - Using the GNU `binutils' (assembler, linker, and related tools) is - preferable when possible, and they are required to build an ELF - shared C library. We recommend `binutils' version 2.8.1 or later; - earlier versions are known to have problems or to not support all - architectures. - - * `texinfo' 3.11 - - To correctly translate and install the Texinfo documentation you - need this version of the `texinfo' package. Former versions did - not understand all the tags used in the document and also the - installation mechanisms for the info files was not present or - worked differently. - - On some Debian Linux based systems the used `install-info' program - works differently. Here you have to run make like this: - - make INSTALL_INFO=/path/to/GNU/install-info install - - If you change any configuration file you will need also - - * `autoconf' 2.12 - -and if you change any of the message translation files you will also -need - - * `GNU gettext' 0.10 or later - -If you upgrade your source tree using the patches made available you -probably will need those package above in any case. - -Supported Configurations ------------------------- - - The GNU C Library currently supports configurations that match the -following patterns: - - alpha-ANYTHING-linux - iX86-ANYTHING-gnu - iX86-ANYTHING-linux - m68k-ANYTHING-linux - powerpc-ANYTHING-linux - sparc64-ANYTHING-linux - - Former releases of this library (version 1.09.1 and perhaps earlier -versions) used to run on the following configurations: - - alpha-dec-osf1 - alpha-ANYTHING-linuxecoff - iX86-ANYTHING-bsd4.3 - iX86-ANYTHING-isc2.2 - iX86-ANYTHING-isc3.N - iX86-ANYTHING-sco3.2 - iX86-ANYTHING-sco3.2v4 - iX86-ANYTHING-sysv - iX86-ANYTHING-sysv4 - iX86-force_cpu386-none - iX86-sequent-bsd - i960-nindy960-none - m68k-hp-bsd4.3 - m68k-mvme135-none - m68k-mvme136-none - m68k-sony-newsos3 - m68k-sony-newsos4 - m68k-sun-sunos4.N - mips-dec-ultrix4.N - mips-sgi-irix4.N - sparc-sun-solaris2.N - sparc-sun-sunos4.N - - Since no one has volunteered to test and fix the above -configurations, these are not supported at the moment. It's expected -that these don't work anymore. Porting the library is not hard. If -you are interested in doing a port, please contact the glibc -maintainers by sending electronic mail to <bug-glibc@prep.ai.mit.edu>. - - Each case of `iX86' can be `i386', `i486', `i586', or `i686'. All -of those configurations produce a library that can run on any of these -processors. The library will be optimized for the specified processor, -but will not use instructions not available on all of them. - - While no other configurations are supported, there are handy aliases -for these few. (These aliases work in other GNU software as well.) - - decstation - hp320-bsd4.3 hp300bsd - i486-gnu - i586-linux - i386-sco - i386-sco3.2v4 - i386-sequent-dynix - i386-svr4 - news - sun3-sunos4.N sun3 - sun4-solaris2.N sun4-sunos5.N - sun4-sunos4.N sun4 - -Reporting Bugs -============== - - There are probably bugs in the GNU C library. There are certainly -errors and omissions in this manual. If you report them, they will get -fixed. If you don't, no one will ever know about them and they will -remain unfixed for all eternity, if not longer. - - To report a bug, first you must find it. Hopefully, this will be the -hard part. Once you've found a bug, make sure it's really a bug. A -good way to do this is to see if the GNU C library behaves the same way -some other C library does. If so, probably you are wrong and the -libraries are right (but not necessarily). If not, one of the libraries -is probably wrong. - - Once you're sure you've found a bug, try to narrow it down to the -smallest test case that reproduces the problem. In the case of a C -library, you really only need to narrow it down to one library function -call, if possible. This should not be too difficult. - - The final step when you have a simple test case is to report the bug. -When reporting a bug, send your test case, the results you got, the -results you expected, what you think the problem might be (if you've -thought of anything), your system type, and the version of the GNU C -library which you are using. Also include the files `config.status' -and `config.make' which are created by running `configure'; they will -be in whatever directory was current when you ran `configure'. - - If you think you have found some way in which the GNU C library does -not conform to the ISO and POSIX standards (*note Standards and -Portability::.), that is definitely a bug. Report it! - - Send bug reports to the Internet address <bug-glibc@prep.ai.mit.edu> -or the UUCP path <mit-eddie!prep.ai.mit.edu!bug-glibc>. If you have -other problems with installation or use, please report those as well. - - If you are not sure how a function should behave, and this manual -doesn't tell you, that's a bug in the manual. Report that too! If the -function's behavior disagrees with the manual, then either the library -or the manual has a bug, so report the disagreement. If you find any -errors or omissions in this manual, please report them to the Internet -address <bug-glibc-manual@prep.ai.mit.edu> or the UUCP path -<mit-eddie!prep.ai.mit.edu!bug-glibc-manual>. - Adding New Functions ==================== @@ -463,8 +156,8 @@ function is used. Some rare functions are only useful on specific systems and aren't defined at all on others; these do not appear anywhere in the system-independent source code or makefiles (including the `generic' -and `stub' directories), only in the system-dependent `Makefile' in the -specific system's subdirectory. +directory), only in the system-dependent `Makefile' in the specific +system's subdirectory. If you come across a file that is in one of the main source directories (`string', `stdio', etc.), and you want to write a machine- @@ -560,73 +253,56 @@ manufacturer's name, and the operating system. `configure' uses these to pick the list of system-dependent directories to look for. If the `--nfp' option is *not* passed to `configure', the directory `MACHINE/fpu' is also used. The operating system often has a "base -operating system"; for example, if the operating system is `sunos4.1', -the base operating system is `unix/bsd'. The algorithm used to pick -the list of directories is simple: `configure' makes a list of the base +operating system"; for example, if the operating system is `Linux', the +base operating system is `unix/sysv'. The algorithm used to pick the +list of directories is simple: `configure' makes a list of the base operating system, manufacturer, CPU type, and operating system, in that order. It then concatenates all these together with slashes in between, to produce a directory name; for example, the configuration -`sparc-sun-sunos4.1' results in `unix/bsd/sun/sparc/sunos4.1'. -`configure' then tries removing each element of the list in turn, so -`unix/bsd/sparc' and `sun/sparc' are also tried, among others. Since +`i686-linux-gnu' results in `unix/sysv/linux/i386/i686'. `configure' +then tries removing each element of the list in turn, so +`unix/sysv/linux' and `unix/sysv' are also tried, among others. Since the precise version number of the operating system is often not important, and it would be very inconvenient, for example, to have -identical `sunos4.1.1' and `sunos4.1.2' directories, `configure' tries +identical `irix6.2' and `irix6.3' directories, `configure' tries successively less specific operating system names by removing trailing suffixes starting with a period. As an example, here is the complete list of directories that would be -tried for the configuration `sparc-sun-sunos4.1' (without the `--nfp' -option): - - sparc/fpu - unix/bsd/sun/sunos4.1/sparc - unix/bsd/sun/sunos4.1 - unix/bsd/sun/sunos4/sparc - unix/bsd/sun/sunos4 - unix/bsd/sun/sunos/sparc - unix/bsd/sun/sunos - unix/bsd/sun/sparc - unix/bsd/sun - unix/bsd/sunos4.1/sparc - unix/bsd/sunos4.1 - unix/bsd/sunos4/sparc - unix/bsd/sunos4 - unix/bsd/sunos/sparc - unix/bsd/sunos - unix/bsd/sparc - unix/bsd - unix/sun/sunos4.1/sparc - unix/sun/sunos4.1 - unix/sun/sunos4/sparc - unix/sun/sunos4 - unix/sun/sunos/sparc - unix/sun/sunos - unix/sun/sparc - unix/sun - unix/sunos4.1/sparc - unix/sunos4.1 - unix/sunos4/sparc - unix/sunos4 - unix/sunos/sparc - unix/sunos - unix/sparc - unix - sun/sunos4.1/sparc - sun/sunos4.1 - sun/sunos4/sparc - sun/sunos4 - sun/sunos/sparc - sun/sunos - sun/sparc - sun - sunos4.1/sparc - sunos4.1 - sunos4/sparc - sunos4 - sunos/sparc - sunos - sparc +tried for the configuration `i686-linux-gnu' (with the `crypt' and +`linuxthreads' add-on): + + sysdeps/i386/elf + crypt/sysdeps/unix + linuxthreads/sysdeps/unix/sysv/linux + linuxthreads/sysdeps/pthread + linuxthreads/sysdeps/unix/sysv + linuxthreads/sysdeps/unix + linuxthreads/sysdeps/i386/i686 + linuxthreads/sysdeps/i386 + linuxthreads/sysdeps/pthread/no-cmpxchg + sysdeps/unix/sysv/linux/i386 + sysdeps/unix/sysv/linux + sysdeps/gnu + sysdeps/unix/common + sysdeps/unix/mman + sysdeps/unix/inet + sysdeps/unix/sysv/i386/i686 + sysdeps/unix/sysv/i386 + sysdeps/unix/sysv + sysdeps/unix/i386 + sysdeps/unix + sysdeps/posix + sysdeps/i386/i686 + sysdeps/i386/i486 + sysdeps/libm-i387/i686 + sysdeps/i386/fpu + sysdeps/libm-i387 + sysdeps/i386 + sysdeps/wordsize-32 + sysdeps/ieee754 + sysdeps/libm-ieee754 + sysdeps/generic Different machine architectures are conventionally subdirectories at the top level of the `sysdeps' directory tree. For example, @@ -651,6 +327,15 @@ hierarchy that are not for particular machine architectures. this directory is referred to in the `Implies' file in a machine architecture-specific directory, such as `m68k/Implies'. +`libm-ieee754' + This directory contains an implementation of a mathematical library + usable on platforms which use IEEE 754 conformant floating-point + arithmetic. + +`libm-i387' + This is a special case. Ideally the code should be in + `sysdeps/i386/fpu' but for various reasons it is kept aside. + `posix' This directory contains implementations of things in the library in terms of POSIX.1 functions. This includes some of the POSIX.1 @@ -670,8 +355,8 @@ hierarchy that are not for particular machine architectures. `unix/inet' This directory is for `socket' and related functions on Unix - systems. The `inet' top-level subdirectory is enabled by - `unix/inet/Subdirs'. `unix/common' implies `unix/inet'. + systems. `unix/inet/Subdirs' enables the `inet' top-level + subdirectory. `unix/common' implies `unix/inet'. `mach' This is the directory for things based on the Mach microkernel @@ -695,10 +380,11 @@ subdirectories (and subdirectory trees) for various Unix variants. The functions which are system calls in most Unix systems are implemented in assembly code, which is generated automatically from -specifications in the file `sysdeps/unix/syscalls.list'. Some special -system calls are implemented in files that are named with a suffix of -`.S'; for example, `_exit.S'. Files ending in `.S' are run through the -C preprocessor before being fed to the assembler. +specifications in files named `syscalls.list'. There are several such +files, one in `sysdeps/unix' and others in its subdirectories. Some +special system calls are implemented in files that are named with a +suffix of `.S'; for example, `_exit.S'. Files ending in `.S' are run +through the C preprocessor before being fed to the assembler. These files all use a set of macros that should be defined in `sysdep.h'. The `sysdep.h' file in `sysdeps/unix' partially defines @@ -707,368 +393,12 @@ for the particular machine and operating system variant. See `sysdeps/unix/sysdep.h' and the machine-specific `sysdep.h' implementations to see what these macros are and what they should do. - The system-specific makefile for the `unix' directory (that is, the -file `sysdeps/unix/Makefile') gives rules to generate several files -from the Unix system you are building the library on (which is assumed -to be the target system you are building the library *for*). All the + The system-specific makefile for the `unix' directory +(`sysdeps/unix/Makefile') gives rules to generate several files from +the Unix system you are building the library on (which is assumed to be +the target system you are building the library *for*). All the generated files are put in the directory where the object files are kept; they should not affect the source tree itself. The files generated are `ioctls.h', `errnos.h', `sys/param.h', and `errlist.c' (for the `stdio' section of the library). -Contributors to the GNU C Library -================================= - - The GNU C library was written originally by Roland McGrath. Some -parts of the library were contributed or worked on by other people. - - * The `getopt' function and related code were written by Richard - Stallman, David J. MacKenzie, and Roland McGrath. - - * The merge sort function `qsort' was written by Michael J. Haertel. - - * The quick sort function used as a fallback by `qsort' was written - by Douglas C. Schmidt. - - * The memory allocation functions `malloc', `realloc' and `free' and - related code were written by Michael J. Haertel. - - * Fast implementations of many of the string functions (`memcpy', - `strlen', etc.) were written by Torbj"orn Granlund. - - * The `tar.h' header file was written by David J. MacKenzie. - - * The port to the MIPS DECStation running Ultrix 4 - (`mips-dec-ultrix4') was contributed by Brendan Kehoe and Ian - Lance Taylor. - - * The DES encryption function `crypt' and related functions were - contributed by Michael Glad. - - * The `ftw' and `nftw' function was contributed by Ulrich Drepper. - - * The startup code to support SunOS shared libraries was contributed - by Tom Quinn. - - * The `mktime' function was contributed by Paul Eggert. - - * The port to the Sequent Symmetry running Dynix version 3 - (`i386-sequent-bsd') was contributed by Jason Merrill. - - * The timezone support code is derived from the public-domain - timezone package by Arthur David Olson and his many contributors. - - * The port to the DEC Alpha running OSF/1 (`alpha-dec-osf1') was - contributed by Brendan Kehoe, using some code written by Roland - McGrath. - - * The port to SGI machines running Irix 4 (`mips-sgi-irix4') was - contributed by Tom Quinn. - - * The port of the Mach and Hurd code to the MIPS architecture - (`mips-ANYTHING-gnu') was contributed by Kazumoto Kojima. - - * The floating-point printing function used by `printf' and friends - and the floating-point reading function used by `scanf', `strtod' - and friends were written by Ulrich Drepper. The multi-precision - integer functions used in those functions are taken from GNU MP, - which was contributed by Torbj"orn Granlund. - - * The internationalization support in the library, and the support - programs `locale' and `localedef', were written by Ulrich Drepper. - Ulrich Drepper adapted the support code for message catalogs - (`libintl.h', etc.) from the GNU `gettext' package, which he also - wrote. He also contributed the `catgets' support and the entire - suite of multi-byte and wide-character support functions - (`wctype.h', `wchar.h', etc.). - - * The implementations of the `nsswitch.conf' mechanism and the files - and DNS backends for it were designed and written by Ulrich - Drepper and Roland McGrath, based on a backend interface defined - by Peter Eriksson. - - * The port to Linux i386/ELF (`i386-ANYTHING-linux') was contributed - by Ulrich Drepper, based in large part on work done in Hongjiu - Lu's Linux version of the GNU C Library. - - * The port to Linux/m68k (`m68k-ANYTHING-linux') was contributed by - Andreas Schwab. - - * The ports to Linux/ARM (`arm-ANYTHING-linuxaout') and ARM - standalone (`arm-ANYTHING-none'), as well as parts of the IPv6 - support code, were contributed by Philip Blundell. - - * Richard Henderson contributed the ELF dynamic linking code and - other support for the Alpha processor. - - * David Mosberger-Tang contributed the port to Linux/Alpha - (`alpha-ANYTHING-linux'). - - * The port to Linux on PowerPC (`powerpc-ANYTHING-linux') was - contributed by Geoffrey Keating. - - * Miles Bader wrote the argp argument-parsing package, and the - argz/envz interfaces. - - * Stephen R. van den Berg contributed a highly-optimized `strstr' - function. - - * Ulrich Drepper contributed the `hsearch' and `drand48' families of - functions; reentrant `...`_r'' versions of the `random' family; - System V shared memory and IPC support code; and several - highly-optimized string functions for iX86 processors. - - * The math functions are taken from `fdlibm-5.1' by Sun - Microsystems, as modified by J.T. Conklin, Ian Lance Taylor, - Ulrich Drepper, Andreas Schwab, and Roland McGrath. - - * The `libio' library used to implement `stdio' functions on some - platforms was written by Per Bothner and modified by Ulrich - Drepper. - - * The Internet-related code (most of the `inet' subdirectory) and - several other miscellaneous functions and header files have been - included from 4.4 BSD with little or no modification. - - All code incorporated from 4.4 BSD is under the following - copyright: - - Copyright (C) 1991 Regents of the University of California. - All rights reserved. - - Redistribution and use in source and binary forms, with or - without modification, are permitted provided that the - following conditions are met: - - 1. Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. - - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. - - 3. All advertising materials mentioning features or use of - this software must display the following acknowledgement: - This product includes software developed by the - University of California, Berkeley and its - contributors. - - 4. Neither the name of the University nor the names of its - contributors may be used to endorse or promote products - derived from this software without specific prior - written permission. - - THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF - THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - OF SUCH DAMAGE. - - * The random number generation functions `random', `srandom', - `setstate' and `initstate', which are also the basis for the - `rand' and `srand' functions, were written by Earl T. Cohen for - the University of California at Berkeley and are copyrighted by the - Regents of the University of California. They have undergone minor - changes to fit into the GNU C library and to fit the ISO C - standard, but the functional code is Berkeley's. - - * The Internet resolver code is taken directly from BIND 4.9.5, - which is under both the Berkeley copyright above and also: - - Portions Copyright (C) 1993 by Digital Equipment Corporation. - - Permission to use, copy, modify, and distribute this software - for any purpose with or without fee is hereby granted, - provided that the above copyright notice and this permission - notice appear in all copies, and that the name of Digital - Equipment Corporation not be used in advertising or publicity - pertaining to distribution of the document or software - without specific, written prior permission. - - THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. - DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT CORPORATION BE - LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - * The code to support Sun RPC is taken verbatim from Sun's - RPCSRC-4.0 distribution, and is covered by this copyright: - - Copyright (C) 1984, Sun Microsystems, Inc. - - Sun RPC is a product of Sun Microsystems, Inc. and is - provided for unrestricted use provided that this legend is - included on all tape media and as a part of the software - program in whole or part. Users may copy or modify Sun RPC - without charge, but are not authorized to license or - distribute it to anyone else except as part of a product or - program developed by the user. - - SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND - INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND - FITNESS FOR A PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF - DEALING, USAGE OR TRADE PRACTICE. - - Sun RPC is provided with no support and without any - obligation on the part of Sun Microsystems, Inc. to assist in - its use, correction, modification or enhancement. - - SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT - TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY - PATENTS BY SUN RPC OR ANY PART THEREOF. - - In no event will Sun Microsystems, Inc. be liable for any - lost revenue or profits or other special, indirect and - consequential damages, even if Sun has been advised of the - possibility of such damages. - - Sun Microsystems, Inc. - 2550 Garcia Avenue - Mountain View, California 94043 - - * Some of the support code for Mach is taken from Mach 3.0 by CMU, - and is under the following copyright terms: - - Mach Operating System - Copyright (C) 1991,1990,1989 Carnegie Mellon University - All Rights Reserved. - - Permission to use, copy, modify and distribute this software - and its documentation is hereby granted, provided that both - the copyright notice and this permission notice appear in all - copies of the software, derivative works or modified - versions, and any portions thereof, and that both notices - appear in supporting documentation. - - CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS - IS" CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF - ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF - THIS SOFTWARE. - - Carnegie Mellon requests users of this software to return to - - Software Distribution Coordinator - School of Computer Science - Carnegie Mellon University - Pittsburgh PA 15213-3890 - - or <Software.Distribution@CS.CMU.EDU> any improvements or - extensions that they make and grant Carnegie Mellon the - rights to redistribute these changes. - - * The code for the database library `libdb' comes from the 2.3 - release of Berkeley DB. That code is under the same copyright as - 4.4 BSD and also: - - Copyright (C) 1990, 1993, 1994, 1995, 1996, 1997 - Sleepycat Software. All rights reserved. - - Redistribution and use in source and binary forms, with or - without modification, are permitted provided that the - following conditions are met: - - 1. Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. - - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. - - 3. Redistributions in any form must be accompanied by - information on how to obtain complete source code for - the DB software and any accompanying software that uses - the DB software. The source code must either be - included in the distribution or be available for no more - than the cost of distribution plus a nominal fee, and - must be freely redistributable under reasonable - conditions. For an executable file, complete source - code means the source code for all modules it contains. - It does not mean source code for modules or files that - typically accompany the operating system on which the - executable file runs, e.g., standard library modules or - system header files. - - THIS SOFTWARE IS PROVIDED BY SLEEPYCAT SOFTWARE "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - SLEEPYCAT SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - DAMAGE. - - Portions copyright (C) 1995, 1996 - The President and Fellows of Harvard University. - All rights reserved. - - Redistribution and use in source and binary forms, with or - without modification, are permitted provided that the - following conditions are met: - 1. Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. - - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. - - 3. All advertising materials mentioning features or use of - this software must display the following acknowledgement: - This product includes software developed by - Harvard University and its contributors. - - 4. Neither the name of the University nor the names of its - contributors may be used to endorse or promote products - derived from this software without specific prior - written permission. - - THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF - THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - OF SUCH DAMAGE. - - For a license to use, redistribute or sell DB software under - conditions other than those described above, or to purchase - support for this software, please contact Sleepycat Software - at - - Sleepycat Software - 394 E. Riding Dr. - Carlisle, MA 01741 - USA - +1-508-287-4781 - - or <db@sleepycat.com>. - - diff --git a/configure b/configure index 6154b14221..6bb49c3dba 100755 --- a/configure +++ b/configure @@ -1685,7 +1685,7 @@ fi echo $ac_n "checking compiler version""... $ac_c" 1>&6 echo "configure:1687: checking compiler version" >&5 case `${CC-cc} -v 2>&1` in - *egcs-2.91.* | *egcs-1.0.[2-9]* | *egcs-1.1* | *2.8.[1-9]* | *2.9.[0-9] ) + *egcs-2.91.* | *egcs-1.0.[2-9]* | *egcs-1.1* | *2.8.[1-9]* | *2.9.[0-9]*) cc_is_recent="ok" ;; *) diff --git a/glibcbug.in b/glibcbug.in index b55995d164..c915f34f04 100644 --- a/glibcbug.in +++ b/glibcbug.in @@ -24,15 +24,17 @@ STDIO="@stdio@" PATH=/bin:/usr/bin:/usr/local/bin:$PATH export PATH -TEMP=`mktemp -q /tmp/glibcbugXXXXXX` +TEMP=`mktemp -q /tmp/glibcbugXXXXXX 2>/dev/null` if test $? -ne 0; then TEMP=/tmp/glibcbug.$$ echo > $TEMP + chmod 600 $TEMP fi -TEMPx=`mktemp -q /tmp/glibcbugXXXXXX` +TEMPx=`mktemp -q /tmp/glibcbugXXXXXX 2>/dev/null` if test $? -ne 0; then TEMPx=/tmp/glibcbug.$$.x echo > $TEMPx + chmod 600 $TEMPx fi BUGADDR=${1-$BUGGLIBC} diff --git a/libc.map b/libc.map index 3dbd234ee9..32f3c8c262 100644 --- a/libc.map +++ b/libc.map @@ -498,8 +498,8 @@ GLIBC_2.1 { fopen; fclose; fdopen; # g* - gai_strerror; getcontext; getdate; getdate_r; getitimer; getname; - getnameinfo; getpt; getrlimit64; getrusage; gettimeofday; + gai_strerror; getcontext; getdate; getdate_r; getitimer; getnameinfo; + getnetname; getpt; getrlimit64; getrusage; gettimeofday; getutxent; getutxid; getutxline; grantpt; # New special glibc functions. diff --git a/manual/filesys.texi b/manual/filesys.texi index c5c2f105d2..47f43adfb9 100644 --- a/manual/filesys.texi +++ b/manual/filesys.texi @@ -541,7 +541,7 @@ uses the @code{strverscmp} function internally. It is important not to mix the use of @code{scandir} and the 64 bits comparison functions or vice versa. There are systems on which this -work but on others it will fail miserably. +works but on others it will fail miserably. @node Simple Directory Lister Mark II @subsection Simple Program to List a Directory, Mark II diff --git a/manual/install.texi b/manual/install.texi index e1d20868a6..3313bf0f38 100644 --- a/manual/install.texi +++ b/manual/install.texi @@ -8,6 +8,7 @@ @menu * Tools for Installation:: We recommend using these tools to build. * Supported Configurations:: What systems the GNU C library runs on. +* Tips for Installation:: Useful hints for the installation. * Reporting Bugs:: How to report bugs (if you want to get them fixed) and other troubles you may have with the GNU C library. @@ -325,6 +326,39 @@ sun4-solaris2.@var{n} sun4-sunos5.@var{n} sun4-sunos4.@var{n} sun4 @end smallexample +@node Tips for Installation +@appendixsec Useful hints for the installation + +There are a some more or less obvious methods one should know when +compiling GNU libc: + +@itemize @bullet +@item +Better never compile in the source directory. Create a new directory +and run the @file{configure} from there. Everything should happen +automagically. + +@item +You can use the @code{-j} option of GNU make by changing the line +specifying @code{PARALLELMAKE} in the Makefile generated during the +configuration. + +It is not useful to start the @code{make} process using the @code{-j} +option since this option is not propagated down to the sub-@code{make}s. + +@item +If you made some changes after a complete build and only want to check +these changes run @code{make} while specifying the list of subdirs it +has to visit. + +@smallexample +make subdirs="nss elf" +@end smallexample + +The above build run will only visit the subdirectories @file{nss} and +@file{elf}. Beside this it updates the @file{libc} files itself. +@end itemize + @node Reporting Bugs @appendixsec Reporting Bugs @cindex reporting bugs diff --git a/manual/maint.texi b/manual/maint.texi index b8ae488c2f..a7e0cc4b0a 100644 --- a/manual/maint.texi +++ b/manual/maint.texi @@ -296,74 +296,57 @@ these to pick the list of system-dependent directories to look for. If the @samp{--nfp} option is @emph{not} passed to @file{configure}, the directory @file{@var{machine}/fpu} is also used. The operating system often has a @dfn{base operating system}; for example, if the operating -system is @samp{sunos4.1}, the base operating system is @samp{unix/bsd}. +system is @samp{Linux}, the base operating system is @samp{unix/sysv}. The algorithm used to pick the list of directories is simple: @file{configure} makes a list of the base operating system, manufacturer, CPU type, and operating system, in that order. It then concatenates all these together with slashes in between, to produce a -directory name; for example, the configuration @w{@samp{sparc-sun-sunos4.1}} -results in @file{unix/bsd/sun/sparc/sunos4.1}. @file{configure} then +directory name; for example, the configuration @w{@samp{i686-linux-gnu}} +results in @file{unix/sysv/linux/i386/i686}. @file{configure} then tries removing each element of the list in turn, so -@file{unix/bsd/sparc} and @file{sun/sparc} are also tried, among others. +@file{unix/sysv/linux} and @file{unix/sysv} are also tried, among others. Since the precise version number of the operating system is often not important, and it would be very inconvenient, for example, to have -identical @file{sunos4.1.1} and @file{sunos4.1.2} directories, +identical @file{irix6.2} and @file{irix6.3} directories, @file{configure} tries successively less specific operating system names by removing trailing suffixes starting with a period. As an example, here is the complete list of directories that would be -tried for the configuration @w{@samp{sparc-sun-sunos4.1}} (without the -@w{@samp{--nfp}} option): +tried for the configuration @w{@samp{i686-linux-gnu}} (with the +@file{crypt} and @file{linuxthreads} add-on): @smallexample -sparc/fpu -unix/bsd/sun/sunos4.1/sparc -unix/bsd/sun/sunos4.1 -unix/bsd/sun/sunos4/sparc -unix/bsd/sun/sunos4 -unix/bsd/sun/sunos/sparc -unix/bsd/sun/sunos -unix/bsd/sun/sparc -unix/bsd/sun -unix/bsd/sunos4.1/sparc -unix/bsd/sunos4.1 -unix/bsd/sunos4/sparc -unix/bsd/sunos4 -unix/bsd/sunos/sparc -unix/bsd/sunos -unix/bsd/sparc -unix/bsd -unix/sun/sunos4.1/sparc -unix/sun/sunos4.1 -unix/sun/sunos4/sparc -unix/sun/sunos4 -unix/sun/sunos/sparc -unix/sun/sunos -unix/sun/sparc -unix/sun -unix/sunos4.1/sparc -unix/sunos4.1 -unix/sunos4/sparc -unix/sunos4 -unix/sunos/sparc -unix/sunos -unix/sparc -unix -sun/sunos4.1/sparc -sun/sunos4.1 -sun/sunos4/sparc -sun/sunos4 -sun/sunos/sparc -sun/sunos -sun/sparc -sun -sunos4.1/sparc -sunos4.1 -sunos4/sparc -sunos4 -sunos/sparc -sunos -sparc +sysdeps/i386/elf +crypt/sysdeps/unix +linuxthreads/sysdeps/unix/sysv/linux +linuxthreads/sysdeps/pthread +linuxthreads/sysdeps/unix/sysv +linuxthreads/sysdeps/unix +linuxthreads/sysdeps/i386/i686 +linuxthreads/sysdeps/i386 +linuxthreads/sysdeps/pthread/no-cmpxchg +sysdeps/unix/sysv/linux/i386 +sysdeps/unix/sysv/linux +sysdeps/gnu +sysdeps/unix/common +sysdeps/unix/mman +sysdeps/unix/inet +sysdeps/unix/sysv/i386/i686 +sysdeps/unix/sysv/i386 +sysdeps/unix/sysv +sysdeps/unix/i386 +sysdeps/unix +sysdeps/posix +sysdeps/i386/i686 +sysdeps/i386/i486 +sysdeps/libm-i387/i686 +sysdeps/i386/fpu +sysdeps/libm-i387 +sysdeps/i386 +sysdeps/wordsize-32 +sysdeps/ieee754 +sysdeps/libm-ieee754 +sysdeps/generic @end smallexample Different machine architectures are conventionally subdirectories at the @@ -391,6 +374,15 @@ where the C type @code{float} is IEEE 754 single-precision format, and directory is referred to in the @file{Implies} file in a machine architecture-specific directory, such as @file{m68k/Implies}. +@item libm-ieee754 +This directory contains an implementation of a mathematical library +usable on platforms which use @w{IEEE 754} conformant floating-point +arithmetic. + +@item libm-i387 +This is a special case. Ideally the code should be in +@file{sysdeps/i386/fpu} but for various reasons it is kept aside. + @item posix This directory contains implementations of things in the library in terms of @sc{POSIX.1} functions. This includes some of the @sc{POSIX.1} @@ -466,6 +458,9 @@ generated are @file{ioctls.h}, @file{errnos.h}, @file{sys/param.h}, and @c ??? This section is really short now. Want to keep it? --roland +@c It's not anymore true. glibc 2.1 cannot be used with K&R compilers. +@c --drepper + Although the GNU C library implements the @w{ISO C} library facilities, you @emph{can} use the GNU C library with traditional, ``pre-ISO'' C compilers. However, you need to be careful because the content and diff --git a/posix/regex.c b/posix/regex.c index 8c259d972a..0778bb85df 100644 --- a/posix/regex.c +++ b/posix/regex.c @@ -2171,14 +2171,14 @@ regex_compile (pattern, size, syntax, bufp) for (;;) { PATFETCH (c); - if (c == ':' || c == ']' || !isalpha (c) || p == pend + if ((c == ':' && *p == ']') || p == pend || c1 == CHAR_CLASS_MAX_LENGTH) break; str[c1++] = c; } str[c1] = '\0'; - /* If isn't a word bracketed by `[:' and:`]': + /* If isn't a word bracketed by `[:' and `:]': undo the ending character, the letters, and leave the leading `:' and `[' (but set bits for them). */ if (c == ':' && *p == ']') diff --git a/posix/wordexp-test.c b/posix/wordexp-test.c index d9ecadcaa4..9ee1ab79c9 100644 --- a/posix/wordexp-test.c +++ b/posix/wordexp-test.c @@ -138,6 +138,7 @@ struct test_case_struct { WRDE_BADCHAR, NULL, "close-brace}", 0, 0, { NULL, } }, { WRDE_CMDSUB, NULL, "$(ls)", WRDE_NOCMD, 0, { NULL, } }, { WRDE_BADVAL, NULL, "$var", WRDE_UNDEF, 0, { NULL, } }, + { WRDE_BADVAL, NULL, "$9", WRDE_UNDEF, 0, { NULL, } }, { WRDE_SYNTAX, NULL, "$[50+20))", 0, 0, { NULL, } }, { WRDE_SYNTAX, NULL, "${%%noparam}", 0, 0, { NULL, } }, { WRDE_SYNTAX, NULL, "${missing-brace", 0, 0, { NULL, } }, diff --git a/posix/wordexp.c b/posix/wordexp.c index 64d5b3c5a5..265ddd8a87 100644 --- a/posix/wordexp.c +++ b/posix/wordexp.c @@ -1147,7 +1147,7 @@ parse_param (char **word, size_t *word_length, size_t *max_length, switch (words[*offset]) { case '}': - /* Evalute. */ + /* Evaluate. */ goto envsubst; case '#': @@ -1295,36 +1295,23 @@ envsubst: /* Is it `$*' or `$@' (unquoted) ? */ else if (*env == '*' || (*env == '@' && !quoted)) { - size_t plist_len = 1; + size_t plist_len = 0; int p; + char *end; /* Build up value parameter by parameter (copy them) */ for (p = 1; __libc_argv[p]; ++p) + plist_len += strlen (__libc_argv[p]) + 1; /* for space */ + value = malloc (plist_len); + if (value == NULL) + goto no_space; + end = value; + *end = 0; + for (p = 1; __libc_argv[p]; ++p) { - char *old_pointer = value; - size_t argv_len = strlen (__libc_argv[p]); - size_t old_plist_len = plist_len; - - if (value) - value[plist_len - 1] = 0; - - plist_len += 1 + argv_len; - - /* First realloc will act as malloc because value is - * initialised to NULL. */ - value = realloc (value, plist_len); /* ### re-work this */ - if (value == NULL) - { - free (old_pointer); - return WRDE_NOSPACE; - } - - memcpy (&value[old_plist_len - 1], __libc_argv[p], argv_len + 1); - if (__libc_argv[p + 1]) - { - value[plist_len - 1] = '\0'; - value[plist_len - 2] = ' '; - } + if (p > 1) + *end++ = ' '; + end = __stpcpy (end, __libc_argv[p]); } free_value = 1; @@ -1336,11 +1323,7 @@ envsubst: /* Each parameter is a separate word ("$@") */ if (__libc_argc == 2) - { - value = __strdup (__libc_argv[1]); - if (value == NULL) - goto no_space; - } + value = __libc_argv[1]; else if (__libc_argc > 2) { int p; @@ -1361,8 +1344,6 @@ envsubst: /* Start a new word with the last parameter. */ *word = w_newword (word_length, max_length); value = __strdup (__libc_argv[p]); - if (value == NULL) - goto no_space; } else { @@ -1373,11 +1354,16 @@ envsubst: } } else + value = getenv (env); + + if (value == NULL && (flags & WRDE_UNDEF)) { - value = getenv (env); - if (value == NULL && (flags & WRDE_UNDEF)) - /* Variable not defined. */ - return WRDE_BADVAL; + /* Variable not defined. */ + if (pattern) + free (pattern); + if (env) + free (env); + return WRDE_BADVAL; } if (action != ACT_NONE) @@ -1408,7 +1394,19 @@ envsubst: if (fnmatch (pattern, value, 0) != FNM_NOMATCH) { *p = c; - value = p; + if (free_value) + { + char *newval = __strdup (p); + if (newval == NULL) + { + free (value); + goto no_space; + } + free (value); + value = newval; + } + else + value = p; break; } *p = c; @@ -1424,7 +1422,19 @@ envsubst: if (fnmatch (pattern, value, 0) != FNM_NOMATCH) { *p = c; - value = p; + if (free_value) + { + char *newval = __strdup (p); + if (newval == NULL) + { + free (value); + goto no_space; + } + free (value); + value = newval; + } + else + value = p; break; } *p = c; @@ -1519,6 +1529,8 @@ envsubst: free (env); free (pattern); + if (free_value) + free (value); return error; case ACT_NULL_SUBST: @@ -1531,6 +1543,8 @@ envsubst: /* Substitute NULL */ free (env); free (pattern); + if (free_value) + free (value); return 0; } @@ -1540,6 +1554,9 @@ envsubst: wordexp_t we; int i; + if (free_value) + free (value); + if (quoted) { /* No field-splitting is allowed, so imagine @@ -1622,6 +1639,8 @@ envsubst: /* Substitute NULL */ free (env); free (pattern); + if (free_value) + free (value); return 0; case ACT_NULL_ASSIGN: @@ -1634,6 +1653,8 @@ envsubst: /* Substitute NULL */ free (env); free (pattern); + if (free_value) + free (value); return 0; } diff --git a/sysdeps/i386/bits/string.h b/sysdeps/i386/bits/string.h index c424306bcd..bf7d408cdc 100644 --- a/sysdeps/i386/bits/string.h +++ b/sysdeps/i386/bits/string.h @@ -48,6 +48,7 @@ __STRING_INLINE void * __memcpy_c (void *__dest, __const void *__src, size_t __n) { + unsigned long int __d0, __d1, __d2; switch (__n) { case 0: @@ -108,9 +109,9 @@ __memcpy_c (void *__dest, __const void *__src, size_t __n) ("cld\n\t" \ "rep; movsl" \ x \ - : /* no outputs */ \ - : "c" (__n / 4), "D" (__dest), "S" (__src) \ - : "cx", "di", "si", "memory"); + : "=&c" (__d0), "=&D" (__d1), "=&S" (__d2) \ + : "0" (__n / 4), "1" (__dest), "2" (__src) \ + : "memory"); switch (__n % 4) { @@ -137,24 +138,25 @@ __memcpy_c (void *__dest, __const void *__src, size_t __n) __STRING_INLINE void * memmove (void *__dest, __const void *__src, size_t __n) { + unsigned long int __d0, __d1, __d2; if (__dest < __src) __asm__ __volatile__ ("cld\n\t" "rep\n\t" "movsb" - : /* no output */ - : "c" (__n), "S" (__src),"D" (__dest) - : "cx", "si", "di"); + : "=&c" (__d0), "=&S" (__d1), "=&D" (__d2) + : "0" (__n), "1" (__src), "2" (__dest) + : "memory"); else __asm__ __volatile__ ("std\n\t" "rep\n\t" "movsb\n\t" "cld" - : /* no output */ - : "c" (__n), "S" (__n - 1 + (const char *) __src), - "D" (__n - 1 + (char *) __dest) - : "cx", "si", "di", "memory"); + : "=&c" (__d0), "=&S" (__d1), "=&D" (__d2) + : "0" (__n), "1" (__n - 1 + (const char *) __src), + "2" (__n - 1 + (char *) __dest) + : "memory"); return __dest; } @@ -171,6 +173,7 @@ memmove (void *__dest, __const void *__src, size_t __n) __STRING_INLINE void * __memset_cc (void *__s, unsigned long int __pattern, size_t __n) { + unsigned long int __d0, __d1; switch (__n) { case 0: @@ -194,9 +197,9 @@ __memset_cc (void *__s, unsigned long int __pattern, size_t __n) ("cld\n\t" \ "rep; stosl" \ x \ - : /* no outputs */ \ - : "a" (__pattern),"c" (__n / 4), "D" (__s) \ - : "cx", "di", "memory") + : "=&c" (__d0), "=&D" (__d1) \ + : "a" (__pattern),"0" (__n / 4), "1" (__s) \ + : "memory") switch (__n % 4) { @@ -219,32 +222,34 @@ __memset_cc (void *__s, unsigned long int __pattern, size_t __n) __STRING_INLINE void * __memset_cg (void *__s, unsigned long __c, size_t __n) { + unsigned long int __d0, __d1; __asm__ __volatile__ ("cld\n\t" "rep; stosl\n\t" - "testb $2,%b1\n\t" + "testb $2,%b3\n\t" "je 1f\n\t" "stosw\n" "1:\n\t" - "testb $1,%b1\n\t" + "testb $1,%b3\n\t" "je 2f\n\t" "stosb\n" "2:" - : /* no output */ - : "a" (__c), "q" (__n), "c" (__n / 4), "D" (__s) - : "cx", "di", "memory"); + : "=&c" (__d0), "=&D" (__d1) + : "a" (__c), "q" (__n), "0" (__n / 4), "1" (__s) + : "memory"); return __s; } __STRING_INLINE void * __memset_gg (void *__s, char __c, size_t __n) { + unsigned long int __d0, __d1; __asm__ __volatile__ ("cld\n\t" "rep; stosb" - : /* no output */ - : "a" (__c),"D" (__s), "c" (__n) - : "cx", "di", "memory"); + : "=&D" (__d0), "=&c" (__d1) + : "a" (__c), "0" (__s), "1" (__n) + : "memory"); return __s; } @@ -256,6 +261,7 @@ __memset_gg (void *__s, char __c, size_t __n) __STRING_INLINE void * memchr (__const void *__s, int __c, size_t __n) { + unsigned long int __d0; register void *__res; if (count == 0) return NULL; @@ -266,9 +272,8 @@ memchr (__const void *__s, int __c, size_t __n) "je 1f\n\t" "movl $1,%0\n" "1:" - : "=D" (__res) - : "a" (__c), "0" (__s), "c" (__n) - : "cx"); + : "=D" (__res), "=&c" (__d0) + : "a" (__c), "0" (__s), "1" (__n)); return __res - 1; } @@ -278,14 +283,15 @@ memchr (__const void *__s, int __c, size_t __n) __STRING_INLINE size_t strlen (__const char *__str) { + unsigned long int __d0; register size_t __res; __asm__ __volatile__ ("cld\n\t" "repne; scasb\n\t" "notl %0" - : "=c" (__res) - : "D" (__str), "a" (0), "0" (0xffffffff) - : "di", "cc"); + : "=c" (__res), "=&D" (__d0) + : "1" (__str), "a" (0), "0" (0xffffffff) + : "cc"); return __res - 1; } @@ -295,6 +301,7 @@ strlen (__const char *__str) __STRING_INLINE char * strcpy (char *__dest, __const char *__src) { + unsigned long int __d0, __d1; __asm__ __volatile__ ("cld\n" "1:\n\t" @@ -302,9 +309,9 @@ strcpy (char *__dest, __const char *__src) "stosb\n\t" "testb %%al,%%al\n\t" "jne 1b" - : /* no output */ - : "S" (__src), "D" (__dest) - : "si", "di", "ax", "memory", "cc"); + : "=&S" (__d0), "=&D" (__d1) + : "0" (__src), "1" (__dest) + : "ax", "memory", "cc"); return __dest; } @@ -314,6 +321,7 @@ strcpy (char *__dest, __const char *__src) __STRING_INLINE char * strncpy (char *__dest, __const char *__src, size_t __n) { + unsigned long int __d0, __d1, __d2; __asm__ __volatile__ ("cld\n" "1:\n\t" @@ -325,9 +333,9 @@ strncpy (char *__dest, __const char *__src, size_t __n) "jne 1b\n\t" "rep; stosb\n" "2:" - : /* no output */ - : "S" (__src), "D" (__dest), "c" (__n) - : "si", "di", "ax", "cx", "memory", "cc"); + : "=&S" (__d0), "=&D" (__d1), "=&c" (__d2) + : "0" (__src), "1" (__dest), "2" (__n) + : "ax", "memory", "cc"); return __dest; } @@ -337,6 +345,7 @@ strncpy (char *__dest, __const char *__src, size_t __n) __STRING_INLINE char * strcat (char *__dest, __const char *__src) { + unsigned long int __d0, __d1, __d2, __d3; __asm__ __volatile__ ("cld\n\t" "repne; scasb\n\t" @@ -346,9 +355,9 @@ strcat (char *__dest, __const char *__src) "stosb\n\t" "testb %%al,%%al\n\t" "jne 1b" - : /* no output */ - : "S" (__src), "D" (__dest), "a" (0), "c" (0xffffffff) - : "si", "di", "ax", "cx", "memory", "cc"); + : "=&S" (__d0), "=&D" (__d1), "=&c" (__d2), "=&a" (__d3) + : "0" (__src), "1" (__dest), "2" (0xffffffff), "3" (0) + : "memory", "cc"); return __dest; } @@ -358,11 +367,12 @@ strcat (char *__dest, __const char *__src) __STRING_INLINE char * strncat (char *__dest, __const char *__src, size_t __n) { + unsigned long int __d0, __d1, __d2, __d3; __asm__ __volatile__ ("cld\n\t" "repne; scasb\n\t" "decl %1\n\t" - "movl %4,%3\n" + "movl %5,%3\n" "1:\n\t" "decl %3\n\t" "js 2f\n\t" @@ -373,9 +383,9 @@ strncat (char *__dest, __const char *__src, size_t __n) "2:\n\t" "xorl %2,%2\n\t" "stosb" - : /* no output */ - : "S" (__src), "D" (__dest), "a" (0), "c" (0xffffffff), "g" (__n) - : "si", "di", "ax", "cx", "memory", "cc"); + : "=&S" (__d0), "=&D" (__d1), "=&c" (__d2), "=&a" (__d3) + : "g" (__n), "0" (__src), "1" (__dest), "2" (0xffffffff), "3" (0) + : "memory", "cc"); return __dest; } @@ -385,6 +395,7 @@ strncat (char *__dest, __const char *__src, size_t __n) __STRING_INLINE int strcmp (__const char *__s1, __const char *__s2) { + unsigned long int __d0, __d1; register int __res; __asm__ __volatile__ ("cld\n" @@ -400,9 +411,9 @@ strcmp (__const char *__s1, __const char *__s2) "sbbl %%eax,%%eax\n\t" "orb $1,%%eax\n" "3:" - : "=a" (__res) - : "S" (__s1), "D" (__s2) - : "si", "di", "cc"); + : "=a" (__res), "=&S" (__d0), "=&D" (__d1) + : "1" (__s1), "2" (__s2) + : "cc"); return __res; } @@ -412,6 +423,7 @@ strcmp (__const char *__s1, __const char *__s2) __STRING_INLINE int strncmp (__const char *__s1, __const char *__s2, size_t __n) { + unsigned long int __d0, __d1, __d2; register int __res; __asm__ __volatile__ ("cld\n" @@ -430,9 +442,9 @@ strncmp (__const char *__s1, __const char *__s2, size_t __n) "sbbl %%eax,%%eax\n\t" "orb $1,%%al\n" "4:" - : "=a" (__res) - : "S" (__s1), "D" (__s2), "c" (__n) - : "si", "di", "cx", "cc"); + : "=a" (__res), "=&S" (__d0), "=&D" (__d1), "=&c" (__d2) + : "1" (__s1), "2" (__s2), "3" (__n) + : "cc"); return __res; } @@ -447,6 +459,7 @@ strncmp (__const char *__s1, __const char *__s2, size_t __n) __STRING_INLINE char * __strchr_g (__const char *__s, int __c) { + unsigned long int __d0; register char *__res; __asm__ __volatile__ ("cld\n\t" @@ -460,15 +473,16 @@ __strchr_g (__const char *__s, int __c) "movl $1,%1\n" "2:\n\t" "movl %1,%0" - : "=a" (__res) - : "S" (__s), "0" (__c) - : "si", "cc"); + : "=a" (__res), "=&S" (__d0) + : "0" (__c), "1" (__s) + : "cc"); return __res - 1; } __STRING_INLINE char * __strchr_c (__const char *__s, int __c) { + unsigned long int __d0; register char *__res; __asm__ __volatile__ ("cld\n\t" @@ -481,9 +495,9 @@ __strchr_c (__const char *__s, int __c) "movl $1,%1\n" "2:\n\t" "movl %1,%0" - : "=a" (__res) - : "S" (__s), "0" (__c) - : "si", "cc"); + : "=a" (__res), "=&S" (__d0) + : "0" (__c), "1" (__s) + : "cc"); return __res - 1; } @@ -495,6 +509,7 @@ __strchr_c (__const char *__s, int __c) __STRING_INLINE size_t strcspn (__const char *__s, __const char *__reject) { + unsigned long int __d0, __d1, __d2; register char *__res; __asm__ __volatile__ ("pushl %%ebx\n\t" @@ -514,19 +529,20 @@ strcspn (__const char *__s, __const char *__reject) "jne 1b\n" "2:\n\t" "popl %%ebx" - : "=S" (__res) - : "a" (0), "c" (0xffffffff), "0" (__s), "r" (__reject) - : "ax", "cx", "di", "cc"); + : "=&S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2) + : "r" (__reject), "1" (0), "2" (0xffffffff), "3" (__s), + : "cc"); return (__res - 1) - __s; } #else __STRING_INLINE size_t strcspn (__const char *__s, __const char *__reject) { + unsigned long int __d0, __d1, __d2, __d3; register char *__res; __asm__ __volatile__ ("cld\n\t" - "movl %4,%%edi\n\t" + "movl %5,%%edi\n\t" "repne; scasb\n\t" "notl %%ecx\n\t" "decl %%ecx\n\t" @@ -535,14 +551,14 @@ strcspn (__const char *__s, __const char *__reject) "lodsb\n\t" "testb %%al,%%al\n\t" "je 2f\n\t" - "movl %4,%%edi\n\t" + "movl %5,%%edi\n\t" "movl %%edx,%%ecx\n\t" "repne; scasb\n\t" "jne 1b\n" "2:" - : "=S" (__res) - : "a" (0), "c" (0xffffffff),"0" (__s), "g" (__reject) - : "ax", "cx", "dx", "di", "cc"); + : "=&S" (__res), "=&a" (__d0), "=&c" (__d1), "=&d" (__d2), "=&D" (__d3) + : "g" (__reject), "0" (__s), "1" (0), "2" (0xffffffff) + : "cc"); return (__res - 1) - __s; } #endif @@ -555,6 +571,7 @@ strcspn (__const char *__s, __const char *__reject) __STRING_INLINE size_t strspn (__const char *__s, __const char *__accept) { + unsigned long int __d0, __d1, __d2; register char *__res; __asm__ __volatile__ ("pushl %%ebx\n\t" @@ -574,19 +591,20 @@ strspn (__const char *__s, __const char *__accept) "je 1b\n" "2:\n\t" "popl %%ebx" - : "=S" (__res) - : "a" (0), "c" (0xffffffff), "0" (__s), "r" (__accept) - : "ax", "cx", "di", "cc"); + : "=&S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2) + : "r" (__accept), "0" (__s), "1" (0), "2" (0xffffffff) + : "cc"); return (__res - 1) - __s; } #else __STRING_INLINE size_t strspn (__const char *__s, __const char *__accept) { + unsigned long int __d0, __d1, __d2, __d3; register char *__res; __asm__ __volatile__ ("cld\n\t" - "movl %4,%%edi\n\t" + "movl %5,%%edi\n\t" "repne; scasb\n\t" "notl %%ecx\n\t" "decl %%ecx\n\t" @@ -595,14 +613,14 @@ strspn (__const char *__s, __const char *__accept) "lodsb\n\t" "testb %%al,%%al\n\t" "je 2f\n\t" - "movl %4,%%edi\n\t" + "movl %5,%%edi\n\t" "movl %%edx,%%ecx\n\t" "repne; scasb\n\t" "je 1b\n" "2:" - : "=S" (__res) - : "a" (0), "c" (0xffffffff), "0" (__s), "g" (__accept) - : "ax", "cx", "dx", "di", "cc"); + : "=&S" (__res), "=&a" (__d0), "=&c" (__d1), "=&d" (__d2), "=&D" (__d3) + : "g" (__accept), "0" (__s), "a" (0), "c" (0xffffffff) + : "cc"); return (__res - 1) - __s; } #endif @@ -614,6 +632,7 @@ strspn (__const char *__s, __const char *__accept) __STRING_INLINE char * strpbrk (__const char *__s, __const char *__accept) { + unsigned long int __d0, __d1, __d2; register char *__res; __asm__ __volatile__ ("pushl %%ebx\n\t" @@ -637,15 +656,16 @@ strpbrk (__const char *__s, __const char *__accept) "xorl %0,%0\n" "3:\n\t" "popl %%ebx" - : "=S" (__res) - : "a" (0), "c" (0xffffffff), "0" (__s), "r" (__accept) - : "ax", "cx", "di", "cc"); + : "=&S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2) + : "r" (__accept), "0" (__s), "1" (0), "2" (0xffffffff) + : "cc"); return __res; } #else __STRING_INLINE char * strpbrk (__const char *__s, __const char *__accept) { + unsigned long int __d0, __d1, __d2, __d3; register char *__res; __asm__ __volatile__ ("cld\n\t" @@ -667,9 +687,9 @@ strpbrk (__const char *__s, __const char *__accept) "2:\n\t" "xorl %0,%0\n" "3:" - : "=S" (__res) - : "a" (0), "c" (0xffffffff), "0" (__s), "g" (__accept) - : "ax", "cx", "dx", "di", "cc"); + : "=&S" (__res), "=&a" (__d0), "=&c" (__d1), "=&d" (__d2), "=&D" (__d3) + : "g" (__accept), "0" (__s), "1" (0), "2" (0xffffffff) + : "cc"); return __res; } #endif @@ -681,6 +701,7 @@ strpbrk (__const char *__s, __const char *__accept) __STRING_INLINE char * strstr (__const char *__haystack, __const char *__needle) { + unsigned long int __d0, __d1, __d2, __d3; register char *__res; __asm__ __volatile__ ("pushl %%ebx\n\t" @@ -703,25 +724,26 @@ strstr (__const char *__haystack, __const char *__needle) "xorl %%eax,%%eax\n\t" "2:\n\t" "popl %%ebx" - : "=a" (__res) - : "0" (0), "c" (0xffffffff), "S" (__haystack), "r" (__needle) - : "cx", "di", "si", "cc"); + : "=&a" (__res), "=&c" (__d0), "=&S" (__d1), "=&D" (__d2) + : "r" (__needle), "0" (0), "1" (0xffffffff), "2" (__haystack) + : "cc"); return __res; } #else __STRING_INLINE char * strstr (__const char *__haystack, __const char *__needle) { + unsigned long int __d0, __d1, __d2, __d3; register char *__res; __asm__ __volatile__ ("cld\n\t" \ - "movl %4,%%edi\n\t" + "movl %5,%%edi\n\t" "repne; scasb\n\t" "notl %%ecx\n\t" "decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */ "movl %%ecx,%%edx\n" "1:\n\t" - "movl %4,%%edi\n\t" + "movl %5,%%edi\n\t" "movl %%esi,%%eax\n\t" "movl %%edx,%%ecx\n\t" "repe; cmpsb\n\t" @@ -732,9 +754,9 @@ strstr (__const char *__haystack, __const char *__needle) "jne 1b\n\t" "xorl %%eax,%%eax\n\t" "2:" - : "=a" (__res) - : "0" (0), "c" (0xffffffff), "S" (__haystack), "g" (__needle) - : "cx", "dx", "di", "si", "cc"); + : "=&a" (__res), "=&c" (__d0), "=&S" (__d1), "=&d" (__d2), "=&D" (__d3) + : "g" (__needle), "0" (0), "1" (0xffffffff), "2" (__haystack) + : "cc"); return __res; } #endif diff --git a/sysdeps/unix/sysv/linux/adjtime.c b/sysdeps/unix/sysv/linux/adjtime.c index 7e8d90b71e..c294ecd6b0 100644 --- a/sysdeps/unix/sysv/linux/adjtime.c +++ b/sysdeps/unix/sysv/linux/adjtime.c @@ -41,6 +41,7 @@ #endif #ifndef ADJTIMEX +#define NO_LOCAL_ADJTIME #define ADJTIMEX(x) __adjtimex (x) #endif @@ -91,6 +92,6 @@ ADJTIME (itv, otv) return 0; } -#ifndef ADJTIME +#ifdef NO_LOCAL_ADJTIME weak_alias (__adjtime, adjtime) #endif |