Hi, Gals and Guys,

The Linux C library 5.4.23 is a bug-fixing release for libc 5.4.17.
There are no new features in this release. I have modified the NIS
support in libc. Please get the latst ypclients at where you get this
C library.

There is a NYS bug. If a service is not available, the some NIS/NIS+
routines will give back a NULL pointer, but the other functions expect a
struct with the error code. The easiest way to fix it is to remove the
services (nis, yp, ...) which are not available on your machine.

Binaries of locale and localedef are included in the binary release.

I added the support for larger PATH_MAX in linux 2.1.x. The old binaries
should run fine with the new shared library compiled with the new
PATH_MAX in linux 2.1.x.

I added some libc 6.x/glibc 2.x compatibility codes for libc 5.4.14
so that the old XFree86 binaries will run fine with the new XFree86
shared libraries compiled with libc 6.x/glibc 2.x.

If you use linux 2.1.x, you need libc 5.4.23 or above to compile libc
yourself. The pre-compiled libc should run fine under linux 2.1.x.
Also this library is compiled with -D_REENTRANT so that errno is MT
safe.

Again, if there is no new serious bug report, the next public release
of the Linux C library will be 6.0. The main features in libc 6.0,
aka glibc 2.0, are MT-safe and pthread support. With libc 6.0, Linux
will enter an era of SMP kernel support as well as the kernel-based
pthread support. I have been running an alpha version of libc 6.0
with gcc, binutils, bin86 and XFree86 3.2. Everything looks very
encouraging. As of 2.0.1, glibc is not suitable for general public.
But people are encouraged to try it out and send in bug report. glibc
2.0.2 should improve a lot. I expect glibc 2.0.x will be stabilized
soon to be used as libc 6.0.

The shared libraries are now compiled with -g1 which can provide
minimum information when core dump happens. You can strip
libc.so.5.4.23 if you want.

Due to the new, improved locale, the Linux C library 5.4.23 is binary
compatible with libc 5.3.12 but not vice versa. The binaries
compiled/linked with libc.so.5.4.23 may not run with libc.so.5.3.12.
You may need to regenerate locale files for the new locale in libc
5.4.23 if you use locales other tha C/POSIX which are the defaults.

The locale sources are at

ftp://dkuug.dk/i18n/WG15-collection/locales

There are many security bug fixes. Please consult ChangeLog for
details. Please let me know if there are more security bugs remains.

This is the public release of the Linux C library 5.4.23. Please read
the ChangeLog for details regarding changes/bug fixes.

DISTRIBUTION SITES:

The primary FTP sites for the compiler/C library are:

*     ftp://tsx-11.mit.edu/pub/linux/packages/GCC
*     ftp://sunsite.unc.edu/pub/Linux/GCC

DISTRIBUTION FILES:

1.	libc-5.4.23.bin.tar.gz

REQUIRED. This package contains the header files for libc, shared and
static ELF libraries libc and libm, and the static ELF library libbsd.a. 
The header files in libc-5.4.23.bin.tar.gz are not complete. You need to
install the kernel source tree for the system-dependent header files.

The header files are in lib-x.y.z.bin.tar.gz and libc-x.y.z.tar.gz. You
can do

# gzip -dc lib-x.y.z.bin.tar.gz | tar xvvf - usr/include

to extract the header files without the binaries files. A separate
tar file for the header files may cause unnecessary confusion.

2.	libc-5.4.23.tar.gz
 
Source tree for libc and header files.

3.	libc-5.4.17-5.4.23.diff.gz

Context diffs against the source tree from the previous libc release.
Please make sure the empty libc/regex/rx.h is deleted.

MISSING LIBRARIES:

The only libraries included in this package are the Linux C library, libc 
and the math library, libm.

ELF versions of libraries formerly included in the libc package can be 
found at the following FTP sites:

* gdbm		ftp://sunsite.unc.edu/pub/Linux/libs/db/gdbm-1.7.3-ELF.tar.gz
* db		ftp://sunsite.unc.edu/pub/Linux/libs/db/db-1.85.2.bin.tar.gz
* ncurses	ftp://ftp.tos.net/pub/linux/ncurses
* termcap	ftp://tsx-11.mit.edu/pub/linux/packages/GCC
		ftp://sunsite.unc.edu/pub/Linux/GCC

Gertjan van Wingerde (gertjan@cs.vu.nl) maintains the ELF db package.

Christopher Wiles (wileyc@moscow.com) maintains the ELF gdbm and
curses.

MacGyver <macgyver@tos.net> maintains the ELF ncurses.

NOTE: I strongly suggest using ncurses to replace curses/termcap. The
current ncurses supports ELF.

SYSTEM REQUIREMENTS:

* 	kernel 1.1.92 or above.  It may work with an older kernel if
	the QMAGIC format is supported. If you use the kernel 1.3.x,
	you should upgrade to 1.3.40 or above. Otherwise readv/writev
	system calls won't work right.
	To compile the MIT pthread kernel, I only builed it with
	Linux kernel source code 1.99.10. You can comment out
	pthreads in DIRS in libc/sysdeps/Makefile.
*	gcc-2.7.2 or above and binutils-2.7.0.3 or above.
*	ld.so-1.8.1 or above.  The latest version can be obtained from 
	ftp://ftp.ods.com/pub/linux
*	libg++ 2.7.2.1 or above.  This is only necessary for development 
	using c++.

BINARY INSTALLATION:

Ensure that /usr/include/asm and /usr/include/linux are a symlinks to 
their counterparts in the kernel source tree.  For example, if your kernel
source resides within /usr/src/linux, execute: 

ln -s -f /usr/src/linux/include/asm /usr/include/asm
ln -s -f /usr/src/linux/include/linux /usr/include/linux

As some programs need <linux/autoconf.h>, the following two commands may 
be necessary to generate that header file:
			  
cd /usr/src/linux
make config

Verify that /var/run/utmp and /var/log/wtmp exist.  Replace all other 
occurances of utmp and wtmp (/etc/utmp, for example) with symlinks.

Assuming the libc binary tarfile is in /, and as root, execute:
			       
cd /
rm -f /lib/libc.so /lib/libm.so
rm -f /usr/lib/libc.so /usr/lib/libm.so
rm -f /usr/include/iolibio.h /usr/include/iostdio.h 
rm -f /usr/include/wcstr.h /usr/include/mbstr.h
rm -f /usr/include/ld_so_config.h /usr/include/localeinfo.h
rm -rf /usr/include/netinet /usr/include/net /usr/include/pthread
gzip -dc libc-5.4.23.bin.tar.gz | tar xvf -

SOURCE INSTALLATION:

Unpack the libc source tarfile in your source directory.  Refer to the 
README for compilation instructions.

COMPATIBILITY NOTES:

If your kernel uses system call numbers 135 to 146 for unintended
purposes, this library may not work for you. One example is the kswap
kernel patch for 1.2.x uses the same system call numbers for other
uses. That breaks this library. Please compare/check <sys/syscall.h>,
<asm/unistd.h> and <linux/unistd.h>. You have to make sure those
system call numbers are consistent from libc to your kernel.

There is no support for a.out libraries in this source tree.  The latest
version of the a.out library suite is libc-4.7.5, which can be obtained
from one of the ftp sites listed below. 

The structure DIR, defined in sysdeps/linux/dirstream.h, was changed in
release 5.2.0.  If you upgrade from release 5.1.4 or earlier to release
5.2.0 or later, you must reboot after installing the new libraries.  If
you compile your own library, *do not* "make install".  Instead, copy the
new libc.so* to /lib, do "ldconfig -v", reboot, then do "make install" 

A dirent bug, which erroneously defined d->reclen to d->namlen if USE_GNU
was defined, has been fixed.  Unfortunately, some GNU packages depend on
this bug.  GNU make 3.xx is one of them.  A patch is included here.

A back door has been added for the file descriptor in DIR.  You need to
define DIRENT_ILLEGAL_ACCESS to access the dd_fd field.  You should use
dirfd () to get the the file descriptor in DIR.  Use this at your own
risk. 

A new dirent bug is fixed. The ELF nfsd should work fine. 

<iostdio.h> and <iolibio.h> have been removed.

PTHREAD NOTES:

The MIT pthread library is not supported in libc 5.4.x. The new
kernel-based pthread will be in libc 6.0.

NYS NOTES:

NYS binaries are not provided this time.  NYS 0.27.4 is included in the 
source tree as a compile-time option.  Please consult README.nys and other 
applicable NYS documents before attempting NYS installation. I disabled
DBM for NYS. Some changes are needed to support non-builtin dbm. 

INFORMATION/DOCUMENTATION:

ELF related WWW pages:

*	http://www.intac.com/~cully/elf.html
*	http://www.sjc.ox.ac.uk/users/barlow/linux-gcc.html
*	http://www.blackdown.org/elf/elf.html

ELF documentation:

*	ftp://sunsite.unc.edu/pub/Linux/GCC/elf.ps.gz
*	ftp://sunsite.unc.edu/pub/Linux/GCC/elf.latex.tar.gz
*	ftp://sunsite.unc.edu/pub/Linux/GCC/ELF.doc.tar.gz

H.J.
hjl@gnu.ai.mit.edu
02/17/97
----
RCS file: /home/cvs/gnu/make/dir.c,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 dir.c
*** 1.1.1.1	1995/06/25 03:27:16
--- dir.c	1995/06/25 03:55:22
***************
*** 20,26 ****
  
  #if	defined (POSIX) || defined (HAVE_DIRENT_H) || defined (__GNU_LIBRARY__)
  #include <dirent.h>
! #ifndef	__GNU_LIBRARY__
  #define D_NAMLEN(d) strlen((d)->d_name)
  #else	/* GNU C library.  */
  #define D_NAMLEN(d) ((d)->d_namlen)
--- 20,26 ----
  
  #if	defined (POSIX) || defined (HAVE_DIRENT_H) || defined (__GNU_LIBRARY__)
  #include <dirent.h>
! #ifndef	__BAD_GNU_LIBRARY__
  #define D_NAMLEN(d) strlen((d)->d_name)
  #else	/* GNU C library.  */
  #define D_NAMLEN(d) ((d)->d_namlen)
===================================================================
RCS file: /home/cvs/gnu/make/glob/glob.c,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 glob.c
*** 1.1.1.1	1995/06/25 03:27:18
--- glob/glob.c	1995/06/25 03:56:01
***************
*** 64,70 ****
  
  #if	defined (POSIX) || defined (HAVE_DIRENT_H) || defined (__GNU_LIBRARY__)
  #include <dirent.h>
! #ifndef	__GNU_LIBRARY__
  #define D_NAMLEN(d) strlen((d)->d_name)
  #else	/* GNU C library.  */
  #define D_NAMLEN(d) ((d)->d_namlen)
--- 64,70 ----
  
  #if	defined (POSIX) || defined (HAVE_DIRENT_H) || defined (__GNU_LIBRARY__)
  #include <dirent.h>
! #ifndef	__BAD_GNU_LIBRARY__
  #define D_NAMLEN(d) strlen((d)->d_name)
  #else	/* GNU C library.  */
  #define D_NAMLEN(d) ((d)->d_namlen)
