Compare commits

...
Author SHA1 Message Date
Ulrich Drepper cccda09fd7 update from main archive 961005
Sun Oct  6 02:05:52 1996  Ulrich Drepper  <drepper@cygnus.com>

	* posix/getopt.c: Add casts to prevent warnings.
	* posix/regex.c: Likewise.

	* math/Makefile (long-m-routines, long-m-yes): Define to correct
	values to make `long double' functions available.
	(distribute): Add $(long-m-yes:=.c).

	* sysdeps/libm-i387/s_ceill.S: Correct loading of return value.
	Use long double instruction.

	* sysdeps/libm-ieee754/e_atanhl.c (huge): Correct constant.
	* sysdeps/libm-ieee754/e_asinhl.c: Likewise.
	* sysdeps/libm-ieee754/s_tanhl.c: Likewise.

	* sysdeps/libm-ieee754/e_coshl.c: New file.

	* sysdeps/libm-ieee754/s_asinh.c [!NO_LONG_DOUBLE]: Define names
	for `long double' version as alias.
	* sysdeps/libm-ieee754/s_atan.c: Likewise.
	* sysdeps/libm-ieee754/s_cbrt.c: Likewise.
	* sysdeps/libm-ieee754/s_ceil.c: Likewise.
	* sysdeps/libm-ieee754/s_copysign.c: Likewise.
	* sysdeps/libm-ieee754/s_cos.c: Likewise.
	* sysdeps/libm-ieee754/s_erf.c: Likewise.
	* sysdeps/libm-ieee754/s_expm1.c: Likewise.
	* sysdeps/libm-ieee754/s_fabs.c: Likewise.
	* sysdeps/libm-ieee754/s_finite.c: Likewise.
	* sysdeps/libm-ieee754/s_floor.c: Likewise.
	* sysdeps/libm-ieee754/s_frexp.c: Likewise.
	* sysdeps/libm-ieee754/s_ilogb.c: Likewise.
	* sysdeps/libm-ieee754/s_ldexp.c: Likewise.
	* sysdeps/libm-ieee754/s_log1p.c: Likewise.
	* sysdeps/libm-ieee754/s_logb.c: Likewise.
	* sysdeps/libm-ieee754/s_modf.c: Likewise.
	* sysdeps/libm-ieee754/s_nextafter.c: Likewise.
	* sysdeps/libm-ieee754/s_rint.c: Likewise.
	* sysdeps/libm-ieee754/s_scalbn.c: Likewise.
	* sysdeps/libm-ieee754/s_significand.c: Likewise.
	* sysdeps/libm-ieee754/s_sin.c: Likewise.
	* sysdeps/libm-ieee754/s_tan.c: Likewise.
	* sysdeps/libm-ieee754/s_tanh.c: Likewise.
	* sysdeps/libm-ieee754/w_acos.c: Likewise.
	* sysdeps/libm-ieee754/w_acosh.c: Likewise.
	* sysdeps/libm-ieee754/w_sin.c: Likewise.
	* sysdeps/libm-ieee754/w_atan2.c: Likewise.
	* sysdeps/libm-ieee754/w_atanh.c: Likewise.
	* sysdeps/libm-ieee754/w_cabs.c: Likewise.
	* sysdeps/libm-ieee754/w_cosh.c: Likewise.
	* sysdeps/libm-ieee754/w_drem.c: Likewise.
	* sysdeps/libm-ieee754/w_exp.c: Likewise.
	* sysdeps/libm-ieee754/w_fmod.c: Likewise.
	* sysdeps/libm-ieee754/w_gamma.c: Likewise.
	* sysdeps/libm-ieee754/w_gamma_r.c: Likewise.
	* sysdeps/libm-ieee754/w_hypot.c: Likewise.
	* sysdeps/libm-ieee754/w_j0.c: Likewise.
	* sysdeps/libm-ieee754/w_j1.c: Likewise.
	* sysdeps/libm-ieee754/w_jn.c: Likewise.
	* sysdeps/libm-ieee754/w_lgamma.c: Likewise.
	* sysdeps/libm-ieee754/w_lgamma_r.c: Likewise.
	* sysdeps/libm-ieee754/w_log.c: Likewise.
	* sysdeps/libm-ieee754/w_log10.c: Likewise.
	* sysdeps/libm-ieee754/w_pow.c: Likewise.
	* sysdeps/libm-ieee754/w_remainder.c: Likewise.
	* sysdeps/libm-ieee754/w_scalb.c: Likewise.
	* sysdeps/libm-ieee754/w_sinh.c: Likewise.
	* sysdeps/libm-ieee754/w_sqrt.c: Likewise.

	Stub files for missing long double math functions.
	* sysdeps/stub/e_acoshl.c: New file.
	* sysdeps/stub/e_hypotl.c: New file.
	* sysdeps/stub/e_j0l.c: New file.
	* sysdeps/stub/e_j1l.c: New file.
	* sysdeps/stub/e_jnl.c: New file.
	* sysdeps/stub/e_lgammal_r.c: New file.
	* sysdeps/stub/e_powl.c: New file.
	* sysdeps/stub/e_rem_pio2l.c: New file.
	* sysdeps/stub/e_sinhl.c: New file.
	* sysdeps/stub/k_cosl.c: New file.
	* sysdeps/stub/k_rem_pio2l.c: New file.
	* sysdeps/stub/k_sinl.c: New file.
	* sysdeps/stub/k_tanl.c: New file.
	* sysdeps/stub/s_erfl.c: New file.
	* sysdeps/stub/s_expm1l.c: New file.

	* sysdeps/i386/__longjmp.S: Use PSEUDO_END macro to provide
	.size directive.
	* sysdeps/i386/bsd-_setjmp.S: Likewise.
	* sysdeps/i386/bsd-setjmp.S: Likewise.
	* sysdeps/i386/memchr.S: Likewise.
	* sysdeps/i386/memcmp.S: Likewise.
	* sysdeps/i386/setjmp.S: Likewise.
	* sysdeps/i386/stpcpy.S: Likewise.
	* sysdeps/i386/stpncpy.S: Likewise.
	* sysdeps/i386/strchr.S: Likewise.
	* sysdeps/i386/strcspn.S: Likewise.
	* sysdeps/i386/strpbrk.S: Likewise.
	* sysdeps/i386/strrchr.S: Likewise.
	* sysdeps/i386/strspn.S: Likewise.
	* sysdeps/i386/strtok.S: Likewise.
	* sysdeps/i386/i486/strcat.S: Likewise.
	* sysdeps/i386/i486/strlen.S: Likewise.
	* sysdeps/i386/i586/memset.S: Likewise.
	* sysdeps/i386/i586/strchr.S: Likewise.
	* sysdeps/i386/i586/strlen.S: Likewise.
	* sysdeps/libm-i387/e_acos.S: Likewise.
	* sysdeps/libm-i387/e_acosl.S: Likewise.
	* sysdeps/libm-i387/e_asin.S: Likewise.
	* sysdeps/libm-i387/e_asinl.S: Likewise.
	* sysdeps/libm-i387/e_atan2.S: Likewise.
	* sysdeps/libm-i387/e_atan2l.S: Likewise.
	* sysdeps/libm-i387/e_exp.S: Likewise.
	* sysdeps/libm-i387/e_expl.S: Likewise.
	* sysdeps/libm-i387/e_fmod.S: Likewise.
	* sysdeps/libm-i387/e_fmodl.S: Likewise.
	* sysdeps/libm-i387/e_log.S: Likewise.
	* sysdeps/libm-i387/e_log10.S: Likewise.
	* sysdeps/libm-i387/e_log10l.S: Likewise.
	* sysdeps/libm-i387/e_logl.S: Likewise.
	* sysdeps/libm-i387/e_remainder.S: Likewise.
	* sysdeps/libm-i387/e_remainderf.S: Likewise.
	* sysdeps/libm-i387/e_remainderl.S: Likewise.
	* sysdeps/libm-i387/e_scalb.S: Likewise.
	* sysdeps/libm-i387/e_scalbl.S: Likewise.
	* sysdeps/libm-i387/e_sqrt.S: Likewise.
	* sysdeps/libm-i387/e_sqrtf.S: Likewise.
	* sysdeps/libm-i387/e_sqrtl.S: Likewise.
	* sysdeps/libm-i387/s_atan.S: Likewise.
	* sysdeps/libm-i387/s_atanf.S: Likewise.
	* sysdeps/libm-i387/s_atanl.S: Likewise.
	* sysdeps/libm-i387/s_ceil.S: Likewise.
	* sysdeps/libm-i387/s_ceilf.S: Likewise.
	* sysdeps/libm-i387/s_ceill.S: Likewise.
	* sysdeps/libm-i387/s_copysign.S: Likewise.
	* sysdeps/libm-i387/s_copysignf.S: Likewise.
	* sysdeps/libm-i387/s_copysignl.S: Likewise.
	* sysdeps/libm-i387/s_cos.S: Likewise.
	* sysdeps/libm-i387/s_cosf.S: Likewise.
	* sysdeps/libm-i387/s_cosl.S: Likewise.
	* sysdeps/libm-i387/s_finite.S: Likewise.
	* sysdeps/libm-i387/s_finitef.S: Likewise.
	* sysdeps/libm-i387/s_finitel.S: Likewise.
	* sysdeps/libm-i387/s_floor.S: Likewise.
	* sysdeps/libm-i387/s_floorf.S: Likewise.
	* sysdeps/libm-i387/s_floorl.S: Likewise.
	* sysdeps/libm-i387/s_ilogb.S: Likewise.
	* sysdeps/libm-i387/s_ilogbf.S: Likewise.
	* sysdeps/libm-i387/s_ilogbl.S: Likewise.
	* sysdeps/libm-i387/s_log1p.S: Likewise.
	* sysdeps/libm-i387/s_log1pf.S: Likewise.
	* sysdeps/libm-i387/s_log1pl.S: Likewise.
	* sysdeps/libm-i387/s_logb.S: Likewise.
	* sysdeps/libm-i387/s_logbf.S: Likewise.
	* sysdeps/libm-i387/s_logbl.S: Likewise.
	* sysdeps/libm-i387/s_rint.S: Likewise.
	* sysdeps/libm-i387/s_rintf.S: Likewise.
	* sysdeps/libm-i387/s_rintl.S: Likewise.
	* sysdeps/libm-i387/s_scalbn.S: Likewise.
	* sysdeps/libm-i387/s_scalbnf.S: Likewise.
	* sysdeps/libm-i387/s_scalbnl.S: Likewise.
	* sysdeps/libm-i387/s_significand.S: Likewise.
	* sysdeps/libm-i387/s_significandf.S: Likewise.
	* sysdeps/libm-i387/s_significandl.S: Likewise.
	* sysdeps/libm-i387/s_sin.S: Likewise.
	* sysdeps/libm-i387/s_sinf.S: Likewise.
	* sysdeps/libm-i387/s_sinl.S: Likewise.
	* sysdeps/libm-i387/s_tan.S: Likewise.
	* sysdeps/libm-i387/s_tanf.S: Likewise.
	* sysdeps/libm-i387/s_tanl.S: Likewise.

	* sysdeps/unix/sysv/linux/i386/clone.S: Add .size directive.
	* sysdeps/unix/sysv/linux/i386/mmap.S. Likewise.
	* sysdeps/unix/sysv/linux/i386/socket.S. Likewise.
	* sysdeps/unix/sysv/linux/i386/sysdep.S. More compact .size line.

	* sysdeps/i386/sysdep.h (ASM_SIZE_DIRECTIVE): New macro.  Used
	to provide .size directive on ELF systems.

	* sysdeps/unix/sysv/linux/i386/profil-counter.h: Include
	<sigcontext.h> and rename parameter type to sigcontext.
	* sysdeps/unix/sysv/linux/i386/sigcontext.h New file.

	* sysdeps/unix/sysv/linux/i386/syscall.S: From Linux 2.1 on
	negative values might occur as positive results.  Test against
	-125 to decide for error or not.
	* sysdeps/unix/sysv/linux/i386/sysdep.h: Likewise for system calls.

Thu Oct  3 21:07:58 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf/dl-open.c: Use _DYNAMIC instead of _dl_start to decide
	whether this is a statically linked program.  The latter is now
	always defined.

Fri Oct  4 02:08:10 1996  Bang Jun-Young  <bangjy@nownuri.nowcom.co.kr>

	* po/ko.po: Update.

Fri Oct  4 02:07:46 1996  Michel Robitaille  <robitail@IRO.UMontreal.CA>

	* po/fr.po: New file.

Fri Oct  4 05:04:52 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/i386/sigcontext.h: New file.

	Add support for MD5 crypt replacement.
	* Makefile (subdirs): Add crypt.
	* shlib-versions: Add entry for libcrypt.
	* crypt/md5-crypt.c: New file.
	* crypt/md5.c: New file.
	* crypt/md5.h: New file.
	* sysdeps/generic/crypt-entry.c: New file.
	* sysdeps/generic/crypt.h: New file.

Thu Oct  3 20:53:23 1996  Andreas Jaeger  <aj@arthur.pfalz.de>

	* dirent/tst-seekdir.c: Provide correct prototypes.
	* io/test-utime.c: Likewise.
	* malloc/mallocbug.c: Likewise.
	* posix/testfnm.c: Likewise.
	* stdio-common/xbug.c: Likewise.
	* sysdeps/posix/cuserid.c: Likewise.

Wed Oct  2 13:33:48 1996  Richard Henderson  <rth@tamu.edu>

	Provide optimized string functions for Alpha processors.
	* sysdeps/alpha/bzero.S: New file.
	* sysdeps/alpha/memset.S: New file.
	* sysdeps/alpha/stpcpy.S: New file.
	* sysdeps/alpha/stpncpy.S: New file.
	* sysdeps/alpha/strcat.S: New file.
	* sysdeps/alpha/strchr.S: New file.
	* sysdeps/alpha/strcpy.S: New file.
	* sysdeps/alpha/strncat.S: New file.
	* sysdeps/alpha/strncpy.S: New file.
	* sysdeps/alpha/strrchr.S: New file.
	* sysdeps/alpha/stxcpy.S: New file.
	* sysdeps/alpha/stxncpy.S: New file.

	* sysdeps/alpha/Makefile [$(sudir)==string]: Add stxcpy and
	stxncpy to sysdep_routines.
	Minor correction.

Wed Oct  2 13:41:48 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/generic/strtok.c: Don't set stored pointer to NULL when
 	notheing is found.  This guarantees all subsequent calls behave
 	the same.
	* sysdeps/generic/strtok_r.c: Likewise.

Mon Sep 30 22:27:36 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/posix/tempname.c (__stdio_gen_tempname): Don't declare
	`i' as const.

Mon Sep 30 22:38:29 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/generic/strtok.c: When we hit EOS, don't set olds to
	NULL immediately; we're going to get called one more time.
	* sysdeps/generic/strtok_r.c: Likewise.

Tue Oct  1 09:12:21 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/programs/ld-time.c: Always write some bytes at the end of
 	the file even if no `era's are specified.

	* stdio-common/tmpname.c (tmpbuf): Don't define as array of
 	pointers.

Tue Oct  1 01:43:11 1996  Ulrich Drepper  <drepper@cygnus.com>

	* libio/iofclose.c: Move unlocking to right position.

Mon Sep 30 03:08:34 1996  Richard Henderson  <rth@tamu.edu>

	* misc/Makefile: Kill force-wrapper.
	* misc/force-wrapper.c: Delete.

	* elf/eval.c: Add <string.h>.

	* gmon/sys/gmon_out.h: Nonsense like `char foo[sizeof(char*)]'
	followed by `bcopy(&ptr, &foo, sizeof(foo))' helps portability
	and binary compatibility not at all.  Better to do `char *foo'
	followed by `foo = ptr' as it is much cleaner.
	(struct gmon_hdr): Fix version.
	(struct gmon_hist_hdr): Fix low_pc, high_pc, hist_size, prof_rate.
	(struct gmon_cg_arc_record): Fix from_pc, self_pc, count.
	* gmon/gmon.c: De-ansidecl-ify.
	(write_hist): De-bcopy-fy.
	(write_call_graph): Likewise.

	* gmon/mcount.c: Assume _MCOUNT_DECL does the entire declaration.
	* sysdeps/alpha/machine-gmon.h: Update _MCOUNT_DECL.
	* sysdeps/generic/machine-gmon.h: Likewise.

	* resolv/netdb.h: Add __set_h_errno to mimic __set_errno.
	* nss/getXXent_r.c: Use __set_h_errno to set h_errno in all funcs.
	* nss/nss_dns/dns-network.c: Likewise.
	* resolv/getunamaddr.c: Likewise.  Also use __set_errno where needed.
	* resolv/getnetnamadr.c: Likewise.
	* resolv/res_debug.c: Likewise.
	* resolv/res_mkquery.c: Likewise.
	* resolv/res_query.c: Likewise.

	* libio/clearerr_u.c: It's not necessary to define __ protected
	function so don't do it.
	* libio/feof_u.c, libio/ferror_u.c, libio/fputc_u.c,
	  libio/getc_u.c, libio/getchar_u.c, libio/iofflush_u.c: Likewise.

	* libio/fgetc.c: Avoid a warning by casting _IO_funlockfile for
	the cleanup registrar.
	* libio/fputc.c, libio/freopen.c, libio/fseek.c, libio/getc.c,
	  libio/getchar.c, libio/iofclose.c, libio/iofflush.c,
	  libio/iofgetpos.c, libio/iofgets.c, libio/iofputs.c,
	  libio/iofread.c, libio/iofsetpos.c, libio/ioftell.c,
	  libio/iofwrite.c, libio/iogetdelim.c, libio/iogets.c,
	  libio/ioputs.c, libio/iosetbuffer.c, libio/iosetvbuf.c,
	  libio/ioungetc.c, libio/putc.c, libio/putchar.c, libio/rewind.c:
	Likewise.

	* locale/programs/ld-ctype.c: Include <alloca.h>.

	* login/login_tty.c: Get login_tty prototype from <utmp.h>.

	* posix/sys/types.h: Change #defines to typedefs.  This is looking
	forward to more comprehensive namespace cleanups for C++.
	* posix/unistd.h: Likewise for ssize_t.

	* pwd/getpw.c: Prototype and rename getpw -> __getpw and add a
	weak alias.

	* resolv/base64.c: Don't do `for (NULL; ...)' as it causes
	`statement with no effect' warnings.
	* resolv/inet_neta.c: Include <string.h> for strlen.

	* stdio-common/getline.c: Undef ssize_t before libio redefinition.
	* stdio-common/tstgetln.c: Same.  De-ansidecl-ify.
	* stdio-common/vfprintf.c: Same for va_list.
	* stdio-common/vfscanf.c: Same.
	* stdio-common/reg-printf.c: Prototype the __ function.
	* stdio-common/scanf.c [USE_IN_LIBIO]: Include <libioP.h> for
	_IO_vscanf declaration.

	* string/tester.c: Tsk, tsk.  Don't cast pointers to int,
	but to unsigned long for the health of 64-bit systems.

	* sunrpc/svc_udp.c: Define MAX only if we don't have it yet.
	Many system's <sys/param.h> pulls this in.

	* sysdeps/generic/dl-cache.c: Kill the bottom half of the
	patch doubled file.

	* sysdeps/generic/pty.c (forkpty): Get login_tty decl from <utmp.h>
	instead of defining it locally.

	* sysdeps/posix/sigvec.c: Prototype wrapper_handler and convert_mask.
	* sysdeps/stub/chflags.c: Prototype chflags.
	* sysdeps/stub/fchflags.c: Prototype fchflags.
	* sysdeps/stub/sstk.c: Prototype sstk.

	* sysdeps/unix/alpha/sysdep.S:  Add strong alias from errno
	variable to __errno.  Update __syscall_error to store to both
	the global and per-thread variables.

	* sysdeps/unix/sysv/linux/init-first.c: Change include of
	init-first.h from "" to <> as "" does not search the include path.
	Prototype _dl_start.

Sun Sep 29 14:41:17 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/Makefile ($(common-objpfx)s-proto.d): Make it a
	pattern rule to get the right stem.

Sat Sep 28 01:30:06 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile ($(objpfx)version-info.h): Fix typo in previous change.

Sat Sep 28 00:44:38 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/posix/euidaccess.c (__set_errno): Fix typo.

Sat Sep 28 00:40:38 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* malloc/free.c (_free_internal): Don't call free recursively, use
	the internal functions instead.

Sat Sep 28 00:23:20 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/posix/tempname.c (__stdio_gen_tempname) [USE_IN_LIBIO &&
	_IO_MTSAFE_IO]: Allocate and initialize the file lock.

Fri Sep 27 23:58:17 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* catgets/gencat.c (main): Print version information on stdout,
	not stderr.
	* db/makedb.c: Likewise.
	* locale/programs/locale.c: Likewise.
	* locale/programs/localedef.c: Likewise.

Mon Sep 30 00:14:26 1996  Ulrich Drepper  <drepper@cygnus.com>

	Add implementation of netgroup.
	* inet/Makefile (distributes): Add netgroup.h.
	(routines): Add getnetgrent.c and getnetgrent_r.c.
	* inet/getnetgrent.c: New file.
	* inet/getnetgrent_r.c: New file.
	* inet/netgroup.h: New file.
	* netgroup.h: New file.
	* nsswitch.h: New file.
	* nss/Makefile (databases): Add getgrp.
	* nss/databases.def: Add netgroup.
	* nss/db-Makefile: Add rules for netgroup.
	* nss/netgrp-lookup.c: New file.
	* nss/nss.h: Add new status value NSS_STATUS_RETURN which will
	always return without a check of the transition table.
	* nss/nsswitch.h (struct service_user): Extend actions array to
	five elements.
	* nss/nsswitch.c (__nss_next): Allow NSS_STATUS_RETURN as legal
	status value.
	(nss_parse_service_list): Initialize action for NSS_STATUS_RETURN
	to NSS_ACTION_RETURN.
	* nss/nss_db/db-netgrp.c: New file.
	* nss/nss_files/files-netgrp.c: New file.
	* nss/nsswitch.conf: Add entry for netgroup.
	* resolv/netdb.h: Add prototypes for netgroup functions.

	* nss/nss_db/db-XXX.c: Use `enum nss_status' type when status
	value is used.

Sun Sep 29 12:55:58 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/syscalls.list: Change funciton name for
 	_llseek to _llseek (not llseek).
	Reported by Matthias Urlichs <smurf@smurf.noris.de>.

Sun Sep 29 05:34:32 1996  Ulrich Drepper  <drepper@cygnus.com>

	* inet/rcmd.c: Remove definition of MIN.

Sat Sep 28 14:22:51 1996  Ulrich Drepper  <drepper@cygnus.com>

	* dirent/readdir_r.c: Removed.  We indeed need a real implementation.
	* sysdeps/unix/readdir_r.c: New file.
	* sysdeps/unix/readdir.c: Remove check for correct parameter
	values.  Let them simply die.
	* manual/filesys.texi: Document readdir_r.

	* sysdeps/gnu/errlist.awk: Define _sys_errlist as `const char* const'.
	Proposed by Per Abrahamsen <abraham@dina.kvl.dk>.
1996-10-06 02:05:11 +00:00
Thomas Bushnell, BSG 106b47fccf Regenerated from sysdeps/mach/hurd/errnos.awk manual/errno.texi /home/hi2/build/i486-gnu/libc/config.h libintl.h intl/libintl.h features.h sys/cdefs.h misc/sys/cdefs.h /usr/lib/gcc-lib/i486-gnu-miles/2.7.2/include/stddef.h locale.h locale/locale.h /gd4/gnu/miles/i486-gnu/install/include/mach/message.h /gd4/gnu/miles/i486-gnu/install/include/mach/kern_return.h /gd4/gnu/miles/i486-gnu/install/include/mach/machine/kern_return.h /gd4/gnu/miles/i486-gnu/install/include/mach/port.h /gd4/gnu/miles/i486-gnu/install/include/mach/boolean.h /gd4/gnu/miles/i486-gnu/install/include/mach/machine/boolean.h /gd4/gnu/miles/i486-gnu/install/include/mach/machine/vm_types.h /gd4/gnu/miles/i486-gnu/install/include/mach/mig_errors.h /gd4/gnu/miles/i486-gnu/install/include/device/device_types.h /gd4/gnu/miles/i486-gnu/install/include/mach/std_types.h 1996-10-03 21:26:11 +00:00
Ulrich Drepper a68b0d31a3 update from main archive 961001 1996-10-02 01:40:17 +00:00
Karl Berry 2d07133b50 Untabify. 1996-09-30 17:47:57 +00:00
Karl Berry 359a1d0b5f Changes for Texinfo 3.8 release; see ChangeLog. 1996-09-30 17:39:54 +00:00
Ulrich Drepper d68171edce update from main archive 960927
Sat Sep 28 03:02:49 1996  Ulrich Drepper  <drepper@cygnus.com>
	* dirent/Makefile (routines): Add readdir_r.
	* dirent/readdir_r.c: New file.  Wrapper around readdir.c.
	* dirent/dirent.h: Add prototype for readdir_r.
	* misc/hsearch_r.c (ENTRY): Make field `used' of type `unsigned int'
	to prevent warnings.
	* sysdeps/unix/sysv/linux/getsysstats.c (get_proc_path):
 	Initialize `result'.

Sat Sep 28 01:16:42 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/generic/strsep.c: Rename to __strsep and make strsep
	weak alias.
	* string/string.h: Add prototype for __strsep.
	* misc/mntent_r.c: Use __strsep instead of strsep to keep
	namespace clean.

	* sysdeps/stub/nanosleep.c: Rename to __libc_nanosleep and make
	__nanosleep and nanosleep weak aliases.
	* sysdeps/unix/sysv/linux/syscalls.list: Add __nanosleep as weak
	alias.
	* sysdeps/unix/sysv/linux/sleep.c: Call __nanosleep instead of
	nanosleep to keep namespace clean.

	* sysdeps/posix/ttyname.c (ttyname): Add cast to prevent warning.
	* sysdeps/posix/ttyname_r.c (ttyname_r): Likewise.
	* sysdeps/posix/getcwd.c (__getcwd): Likewise.

	* sysdeps/unix/nlist.c: Use ISO C definition since we don't always
	have prototype.

	* login/Makefile (headers): Add pty.h.
	* login/pty.h: New file.
	* sysdeps/generic/pty.h: Include <pty.h>.
	* login/pututline_r.c: Add cast to prevent warning.

	* gmon/gmon.c: Add prototype for __profile_frequency.
	(monstartup): Add cast to prevent warning.
	* sysdeps/generic/prof-freq.c: Change to use ISO C style definition.

	* locale/programs/ld-time.c (time_output): Write `era' information
	in correct order.

Sat Sep 28 00:11:08 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/syscalls.list: Add weak alias
	`adjtimex'.
	Set caller for mlock, mlockall, mremap, munlock, and munlockall
	to EXTRA.
	Reported by Matthias Urlichs <smurf@smurf.noris.de>.

1996-09-27  Paul Eggert  <eggert@twinsun.com>

	* strftime.c (strftime): Output incomplete formats like %E
	at end of string.

1996-09-27  Paul Eggert  <eggert@twinsun.com>

	* strftime.c (strftime): Add support for %EC and %Ey.
	Fix support for %EY.  This uses the new _nl_get_era_entry function.

Fri Sep 27 14:12:27 1996  Ulrich Drepper  <drepper@cygnus.com>

	Security related patch by Elliot Lee <sopwith@redhat.com> and
	David Holland <dholland@eecs.harvard.edu>.

	* inet/rexec.c (rexec): Increase size of `num' array from 8 to 32.
	* inet/ruserpass.c (ruserpass): Don't allow $HOME envvar to not exist.

	* sysdeps/generic/getenv.c (__secure_getenv): New function.  Return
	NULL when programs runs with SUID or SGID enabled.
	* sysdeps/stub/getenv.c: Make __secure_getenv an alias of getenv.
	* stdlib/stdlib.h: Add prototype for __secure_getenv.

	* locale/setlocale.c: Use __secure_getenv.
	* resolv/res_init.c: Likewise.
	* resolv/res_query.c: Likewise.
	* inet/ruserpass.c: Likewise.
	* sysdeps/posix/tempname.c: Likewise.
	* malloc/mtrace.c: Likewise.
	* catgets/catgets.c: Likewise.

	Make temporary file handling functions reentrant.

	* stdio-common/tmpnam.c: Rewrite to have own buffer to write
	result to.  The called __stdio_gen_tempname function must be
	thread safe.
	* stdio-common/tmpnam_r.c: New file.
	* stdio/stdio.h: Add prototype for `tmpnam_r'.
	Change prototype for __stdio_gen_tempname.
	* stdio/libio.h: Likewise.
	* sysdeps/posix/tempname.c: Add new parameters and use them instead
	of static buffer.
	Don't reset `indeces' when PID changed between calls.
	Don't fail for long running programs when index counter once
	reached the limit.
	* sysdeps/stub/tempname.c: Likewise.
	* stdio-common/tempnam.c: Provide local buffer as extra argument
	to __stdio_gen_tempname.  This makes this function reentrant.
	* stdio-common/tmpfile.c: Likewise.
	* stdio-common/temptest.c: Provide extra argument to
	__stdio_gen_tempname.
	* manual/filesys.texi: Describe tmpnam_r and add comments about
	reentrancy of the functions.

	* inet/rcmd.c: Fixed address length handling.

	* sysdeps/posix/mk-stdiolim.c: Count final \0 byte in L_tmpnam value.

	* time/strftime.c: Remove unused variables alt_digits and
 	end_alt_digits.

	* sysdeps/unix/sysv/linux/sys/sysinfo.h: Correct prototype names
	for get_nprocs and get_nprocs_conf.
	* sysdeps/generic/sys/sysinfo.h: Likewise.

	* stdlib/test-canon.c: Finally do the right fix.

	* misc/Makefile: Only compile force-wrapper when compiling
	reentrant libc.
1996-09-28 03:24:10 +00:00
Ulrich Drepper c40298232a update from main archive
Mon Sep 23 15:31:04 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* hurd/Makefile ($(includedir)/rpc/netdb.h): There is no make
	variable `top_srcdir' in libc; use $(..) instead.

	* sysdeps/mach/hurd/Makefile (rtld-installed-name): Delete special
	definition.  It was a *Mistake*.  (With a capital M.)

	* sysdeps/mach/getsysstats.c (__get_nprocs): Renamed from
	__get_nproc.
	(__get_nprocs_conf): Renamed from __get_nproc_conf.

Fri Sep 27 03:49:56 1996  Ulrich Drepper  <drepper@cygnus.com>

	Add support for cancelable system calls.

	* csu/initfini.c: Make in crti.o reference to symbol
 	__libc_force_cancel_wrapper when compiling reentrant version.
	* misc/Makefile (routines): Add force-wrapper.
	* misc/force-wrapper.c: New file.

	* posix/system.c: Rename function to __libc_system and make system
 	a weak alias.
	* sysdeps/stub/system.c: Likewise.
	* posix/wait.c: Rename function to __libc_wait and make __wait a
	weak alias.  De-ANSI-fy.
	* sysdeps/standalone/read.c: Rename function to __libc_read and
	make __read a weak alias.
	* sysdeps/stub/read.c: Likewise.
	* sysdeps/standalone/write.c: Rename function to __libc_write and
	make __write a weak alias.
	* sysdeps/stub/write.c: Likewise.
	* sysdeps/stub/tcdrain.c: Rename function to __libc_tcdrain and
 	make tcdrain a weak alias.
	* sysdeps/unix/bsd/tcdrain.c: Likewise.
	* sysdeps/unix/bsd/bsd4.4/tcdrain.c: Likewise.
	* sysdeps/unix/sysv/tcdrain.c: Likewise.
	* sysdeps/unix/sysv/linux/tcdrain.c: Likewise.
	* sysdeps/unix/bsd/bsd4.4/wait.c: Rename function to __libc_wait
	and make __wait a weak alias.
	* sysdeps/stub/waitpid.c: Rename function to __libc_waitpid and
	make __waitpid a weak alias.
	* sysdeps/unix/bsd/bsd4.4/waitpid.c: Likewise.
	* sysdeps/unix/sysv/linux/waitpid.c: Likewise.
	* sysdeps/unix/sysv/sysv4/waitpid.c: Likewise.
	* sysdeps/unix/common/pause.c: Rename function to __libc_pause
	and make pause a weak alias.  De-ANSI-fy.

	* sysdeps/unix/syscalls.list: Change name for close, fcntl, fsync,
 	lseek, open, read, and write to have __libc_ prefix and make old
 	names a weak alias.
	* sysdeps/unix/mman/syscalls.list: Likewise for msync.
	* sysdeps/unix/sysv/linux/syscalls.list: Likewise for nanosleep.

	* io/creat.c: De-ANSI-fy.

	* sysdeps/unix/sysv/linux/syscalls.list: Add pause.

Thu Sep 26 19:15:55 1996  Ulrich Drepper  <drepper@cygnus.com>

	* misc/mntent.h: Add MNTTYPE_* and MNTOPT_* macros.
	Reported by Hans Grobler <grobh@nolian.ee.sun.ac.za>.

Thu Sep 26 14:40:10 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/posix/pathconf.c: Pass descriptor for just opened file
 	to fpathconf.
	Reported by Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>.

Thu Sep 26 04:02:43 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/programs/locfile.c (write_locale_data): Allocate room
	even for file name for LC_MESSAGES locale.
	(locafile_read): `tok_era' must be handled as a string list.
	* locale/programs/ld-time.c: Finish correction of handling `era'.
	* locale/C-time.c (_nl_C_LC_TIME): Add initializer for new fields.
	* locale/categories.def: Add postload function for LC_TIME.
	* locale/setlocale.c: Make lock global and rename to
 	__libc_setlocale_lock.
	* locale/localeinfo.h (struct era_entry): New type.  Used in strftime.
	Add prototypes for _nl_get_era_entry and _nl_get_alt_digit.
	* locale/lc-time.c (_nl_postload_time): New function.  Initialize
	lazy intialization.
	(_nl_get_era_entry): New function.  Return era entry which corresponds
	to given year.
	(_nl_get_alt_digit): New function.  Return string with alternate
	digit representation for given number.

	* time/strftime.c (strftime): Use _nl_get_alt_digit to get
	string representing alternate digit notation.

Wed Sep 25 17:31:55 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/generic/waitstatus.h (union wait): Add w_status field.
	Reported by Hans Grobler <grobh@nolian.ee.sun.ac.za>.

	* elf/rtld.c (dl_main): Process LD_PRELOAD before loading
 	ld.so.preload.  Suggested by David Engel <david@elo.ods.com>.

Wed Sep 25 13:10:57 1996  Ulrich Drepper  <drepper@cygnus.com>

	* catgets/gencat.c (main): Change --version again because RMS wants
	the package name in parentheses.
	* db/makedb.c: Likewise.
	* locale/programs/locale.c: Likewise.
	* locale/programs/localedef.c: Likewise.

Tue Sep 24 01:28:05 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile ($(objpfx)sysd-dirs): Depend on Subdirs files, command
	rewritten.
	($(objpfx)version-info.h): Depend on Banner files, command
	rewritten.

Wed Sep 25 02:44:41 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/sleep.c: New file.  Based on nanosleep.

Tue Sep 24 21:46:02 1996  Ulrich Drepper  <drepper@cygnus.com>

	* shadow/lckpwdf.c (PWD_LOCKFILE): Change to /etc/lock.pwd to be
 	on the same device as the password file.
	* shadow/shadow.h (struct spwd): Change type of numeric fields
	to `long int' since there value are days, not seconds.
	* shadow/putspent.c: Change casts from time_t to `long int'.
	* shadow/sgetspent_r.c (LINE_READER): Likewise.

Mon Sep 23 23:05:24 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/errnos.h: Define __set_errno to make
	sure the thread specific variable is set as well as the global
	variable.
	* sysdeps/mach/hurd/errnos.awk: Define macro for source code
	compatibility.
	* sysdeps/stub/errnos.h: Likewise.
	* sysdeps/unix/bsd/bsd4.4/errnos.h: Likewise.

	* shadow/putspent.c: Don't include <errno.h>.

	* dirent/scandir.c (scandir): Use __set_errno to set errno
 	variable.
	* elf/dl-load.c (open_path): Likewise.
	* inet/rcmd.c (rcmd): Likewise.
	(rresvport): Likewise.
	* intl/dcgettext.c [!__set_errno]: Define __set_errno.
	(DCGETTEXT): Use __set_errno to set errno variable.
	* io/fts.c (fts_open): Likewise.
	(fts_close): Likewise.
	(fts_read): Likewise.
	(fts_set): Likewise.
	(fts_children): Likewise.
	(fts_build): Likewise.
	(fts_stat): Likewise.
	* io/ftw.c (ftw_dir): Likewise.
	(ftw): Likewise.
	* io/getwd.c (getwd): Likewise.
	* io/lockf.c (lockf): Likewise.
	* libio/libioP.h [EINVAL]: Use __set_errno to define MAYBE_SET_EINVAL.
	* libio/iofdopen.c (_IO_fdopen): Use MAYBE_SET_EINVAL to errno.
	* libio/iogetdelim.c (_IO_getdelim): Likewise.
	* libio/fileops.c (_IO_file_open): Use __set_errno to set errno
	variable.
	* libio/iofgetpos.c (_IO_fgetpos): Likewise.
	* libio/iofsetpos.c (_IO_fsetpos): Likewise.
	* libio/ioftell.c (_IO_ftell): Likewise.
	* locale/loadlocale.c (_nl_load_locale): Likewise.
	* locale/nl_langinfo.c (nl_langinfo): Likewise.
	* locale/setlocale.c (ERROR_RETURN): Likewise.
	* login/getutid_r (__getutid_r): Likewise.
	* login/getutline_r (__getutline_r): Likewise.
	* login/login.c (tty_name): Likewise.
	* login/oututline_r.c (__pututline_r): Likewise.
	* malloc/malloc.c (morecore): Likewise.
	* misc/efgcvt_r.c (fcvt_r): Likewise.
	* misc/hsearch_r.c (hcreate_r): Likewise.
	(hdestroy_r): Likewise.
	(hsearch_r): Likewise.
	* nss/nsswitch.c (__nss_configure_lookup): Likewise.
	* nss/nss_dns/dns-host.c (_nss_dns_gethostbyname2_r): Likewise.
	(_nss_dns_gethostbyaddr_r): Likewise.
	* nss/nss_files/files-XXX.c (internal_getent): Likewise.
	* nss/nss_files/files-parse.c (parse_list): Likewise.
	* posix/confstr.c (confstr): Likewise.  De-ANSI-fy.
	* posix/execvp.c (execvp): Likewise.
	* posix/glob.c: Define __set_errno.
	(glob): Use __set_errno to set errno variable.
	(glob_in_dir): Likewise.
	* pwd/getpw.c: Likewise. De-ANSI-fy.
	* pwd/putpwent.c: Likewise.
	* resolv/inet_net_ntop.c: Likewise.
	* resolv/inet_net_pton.c: Likewise.
	* resolv/inet_neta.c: Likewise.
	* resolv/inet_ntop.c: Likewise.
	* resolv/inet_pton.c: Likewise.
	* resolv/res_query.c (res_search): Likewise.
	* resolv/res_send.c (Aerror): Likewise.
	(Perror): Likewise.
	(res_send): Likewise.
	* signal/sigaddset.c: Likewise.  De-ANSI-fy.
	* signal/sigdelset.c: Likewise.
	* signal/sigempty.c: Likewise.
	* signal/sigfillset.c: Likewise.
	* signal/sigismem.c: Likewise.
	* stdio/fclose.c: Likewise.
	* stdio/feof.c: Likewise.
	* stdio/ferror.c: Likewise.
	* stdio/fflush.c: Likewise.
	* stdio/fgetc.c: Likewise.
	* stdio/fgetpos.c: Likewise.
	* stdio/fgets.c: Likewise.
	* stdio/fileno.c: Likewise.
	* stdio/fmemopen.c: Likewise.
	* stdio/fopen.c: Likewise.
	* stdio/fputc.c: Likewise.
	* stdio/fread.c: Likewise.
	* stdio/freopen.c: Likewise.
	* stdio/fseek.c: Likewise.
	* stdio/fsetpos.c: Likewise.
	* stdio/ftell.c: Likewise.
	* stdio/fwrite.c: Likewise.
	* stdio/getdelim.c: Likewise.
	* stdio/gets.c: Likewise.
	* stdio/glue.c: Likewise.
	* stdio/internals.c: Likewise.
	* stdio/memstream.c: Likewise.
	* stdio/setvbuf.c: Likewise.
	* stdio/ungetc.c: Likewise.
	* stdio/vsscanf.c: Likewise.
	* stdio-common/reg-printf.c: Likewise.
	* stdio-common/vfprintf.c: Likewise.
	* stdio-common/vfscanf.c: Likewise.
	* stdlib/canonicalize.c: Likewise.
	* stdlib/msort.c: Likewise.
	* stdlib/random_r.c: Likewise.
	* stdlib/strfmon.c: Likewise.
	* stdlib/strtod.c: Likewise.
	* stdlib/strtol.c: Likewise.
	* sunrpc/bindrsvprt.c: Likewise.
	* time/asctime.c: Likewise.
	* time/localtime.c: Likewise.
	* wcsmbs/mbrtowc.c: Likewise.
	* wcsmbs/mbsnrtowcs.c: Likewise.
	* wcsmbs/mbsrtowcs.c: Likewise.
	* wcsmbs/wcrtomb.c: Likewise.
	* wcsmbs/wcsnrtombs.c: Likewise.
	* wcsmbs/wcsrtombs.c: Likewise.
	* wcsmbs/wcstok.c: Likewise.
	* sysdeps/generic/ftime.c: Likewise.
	* sysdeps/generic/pty.c: Likewise.
	* sysdeps/generic/setenv.c: Likewise.
	* sysdeps/generic/speed.c: Likewise.
	* sysdeps/generic/sysd-stdio.c: Likewise.
	* sysdeps/generic/uname.c: Likewise.
	* sysdeps/generic/vlimit.c: Likewise.
	* sysdeps/libm-ieee754/k_standard.c: Likewise.
	* sysdeps/libm-ieee754/s_ldexp.c: Likewise.
	* sysdeps/libm-ieee754/s_ldexpf.c: Likewise.
	* sysdeps/libm-ieee754/s_ldexpl.c: Likewise.
	* sysdeps/libm-ieee754/w_scalb.c: Likewise.
	* sysdeps/libm-ieee754/w_scalbf.c: Likewise.
	* sysdeps/libm-ieee754/w_scalbl.c: Likewise.
	* sysdeps/posix/dup2.c: Likewise.
	* sysdeps/posix/euidaccess.c: Likewise.
	* sysdeps/posix/fdopen.c: Likewise.
	* sysdeps/posix/flock.c: Likewise.
	* sysdeps/posix/fpathconf.c: Likewise.
	* sysdeps/posix/getcwd.c: Likewise.
	* sysdeps/posix/gettimeofday.c: Likewise.
	* sysdeps/posix/isatty.c: Likewise.
	* sysdeps/posix/isfdtype.c: Likewise.
	* sysdeps/posix/killpg.c: Likewise.
	* sysdeps/posix/mkstemp.c: Likewise.
	* sysdeps/posix/mktemp.c: Likewise.
	* sysdeps/posix/pathconf.c: Likewise.
	* sysdeps/posix/pipestream.c: Likewise.
	* sysdeps/posix/remove.c: Likewise.
	* sysdeps/posix/rename.c: Likewise.
	* sysdeps/posix/sigintr.c: Likewise.
	* sysdeps/posix/signal.c: Likewise.
	* sysdeps/posix/sigsuspend.c: Likewise.
	* sysdeps/posix/sigvec.c: Likewise.
	* sysdeps/posix/sleep.c: Likewise.
	* sysdeps/posix/sysconf.c: Likewise.
	* sysdeps/posix/system.c: Likewise.
	* sysdeps/posix/tempname.c: Likewise.
	* sysdeps/posix/truncate.c: Likewise.
	* sysdeps/posix/ttyname.c: Likewise.
	* sysdeps/posix/ttyname_r.c: Likewise.
	* sysdeps/posix/wait3.c: Likewise.
	* sysdeps/standalone/close.c: Likewise.
	* sysdeps/standalone/open.c: Likewise.
	* sysdeps/standalone/read.c: Likewise.
	* sysdeps/standalone/write.c: Likewise.
	* sysdeps/stub/__longjmp.c: Likewise.
	* sysdeps/stub/accept.c: Likewise.
	* sysdeps/stub/access.c: Likewise.
	* sysdeps/stub/acct.c: Likewise.
	* sysdeps/stub/adjtime.c: Likewise.
	* sysdeps/stub/alarm.c: Likewise.
	* sysdeps/stub/bind.c: Likewise.
	* sysdeps/stub/brk.c: Likewise.
	* sysdeps/stub/chdir.c: Likewise.
	* sysdeps/stub/chflags.c: Likewise.
	* sysdeps/stub/chmod.c: Likewise.
	* sysdeps/stub/chown.c: Likewise.
	* sysdeps/stub/chroot.c: Likewise.
	* sysdeps/stub/clock.c: Likewise.
	* sysdeps/stub/close.c: Likewise.
	* sysdeps/stub/closedir.c: Likewise.
	* sysdeps/stub/connect.c: Likewise.
	* sysdeps/stub/ctermid.c: Likewise.
	* sysdeps/stub/cuserid.c: Likewise.
	* sysdeps/stub/dirfd.c: Likewise.
	* sysdeps/stub/dup.c: Likewise.
	* sysdeps/stub/dup2.c: Likewise.
	* sysdeps/stub/euidaccess.c: Likewise.
	* sysdeps/stub/execve.c: Likewise.
	* sysdeps/stub/fchdir.c: Likewise.
	* sysdeps/stub/fchflags.c: Likewise.
	* sysdeps/stub/fchmod.c: Likewise.
	* sysdeps/stub/fchown.c: Likewise.
	* sysdeps/stub/fcntl.c: Likewise.
	* sysdeps/stub/fdopen.c: Likewise.
	* sysdeps/stub/fexecve.c: Likewise.
	* sysdeps/stub/flock.c: Likewise.
	* sysdeps/stub/fork.c: Likewise.
	* sysdeps/stub/fpathconf.c: Likewise.
	* sysdeps/stub/fstatfs.c: Likewise.
	* sysdeps/stub/fsync.c: Likewise.
	* sysdeps/stub/ftruncate.c: Likewise.
	* sysdeps/stub/fxstat.c: Likewise.
	* sysdeps/stub/getcwd.c: Likewise.
	* sysdeps/stub/getdents.c: Likewise.
	* sysdeps/stub/getdomain.c: Likewise.
	* sysdeps/stub/getdtsz.c: Likewise.
	* sysdeps/stub/getegid.c: Likewise.
	* sysdeps/stub/getenv.c: Likewise.
	* sysdeps/stub/geteuid.c: Likewise.
	* sysdeps/stub/getgid.c: Likewise.
	* sysdeps/stub/getgroups.c: Likewise.
	* sysdeps/stub/gethostid.c: Likewise.
	* sysdeps/stub/gethostname.c: Likewise.
	* sysdeps/stub/getitimer.c: Likewise.
	* sysdeps/stub/getlogin.c: Likewise.
	* sysdeps/stub/getlogin_r.c: Likewise.
	* sysdeps/stub/getpagesize.c: Likewise.
	* sysdeps/stub/getpeername.c: Likewise.
	* sysdeps/stub/getpid.c: Likewise.
	* sysdeps/stub/getppid.c: Likewise.
	* sysdeps/stub/getpriority.c: Likewise.
	* sysdeps/stub/getrlimit.c: Likewise.
	* sysdeps/stub/getrusage.c: Likewise.
	* sysdeps/stub/getsid.c: Likewise.
	* sysdeps/stub/getsockname.c: Likewise.
	* sysdeps/stub/getsockopt.c: Likewise.
	* sysdeps/stub/getsysstats.c: Likewise.
	* sysdeps/stub/gettimeofday.c: Likewise.
	* sysdeps/stub/getuid.c: Likewise.
	* sysdeps/stub/gtty.c: Likewise.
	* sysdeps/stub/ioctl.c: Likewise.
	* sysdeps/stub/isatty.c: Likewise.
	* sysdeps/stub/isfdtype.c: Likewise.
	* sysdeps/stub/kill.c: Likewise.
	* sysdeps/stub/killpg.c: Likewise.
	* sysdeps/stub/link.c: Likewise.
	* sysdeps/stub/listen.c: Likewise.
	* sysdeps/stub/lseek.c: Likewise.
	* sysdeps/stub/lxstat.c: Likewise.
	* sysdeps/stub/madvice.c: Likewise.
	* sysdeps/stub/mkdir.c: Likewise.
	* sysdeps/stub/mkfifo.c: Likewise.
	* sysdeps/stub/mkstemp.c: Likewise.
	* sysdeps/stub/mktemp.c: Likewise.
	* sysdeps/stub/mmap.c: Likewise.
	* sysdeps/stub/morecore.c: Likewise.
	* sysdeps/stub/mprotect.c: Likewise.
	* sysdeps/stub/msgctl.c: Likewise.
	* sysdeps/stub/msgget.c: Likewise.
	* sysdeps/stub/msgrcv.c: Likewise.
	* sysdeps/stub/msgsnd.c: Likewise.
	* sysdeps/stub/msync.c: Likewise.
	* sysdeps/stub/munmap.c: Likewise.
	* sysdeps/stub/nanosleep.c: Likewise.
	* sysdeps/stub/nice.c: Likewise.
	* sysdeps/stub/nlist.c: Likewise.
	* sysdeps/stub/open.c: Likewise.
	* sysdeps/stub/opendir.c: Likewise.
	* sysdeps/stub/pathconf.c: Likewise.
	* sysdeps/stub/pause.c: Likewise.
	* sysdeps/stub/pipe.c: Likewise.
	* sysdeps/stub/pipestream.c: Likewise.
	* sysdeps/stub/poll.c: Likewise.
	* sysdeps/stub/profil.c: Likewise.
	* sysdeps/stub/ptrace.c: Likewise.
	* sysdeps/stub/putenv.c: Likewise.
	* sysdeps/stub/raise.c: Likewise.
	* sysdeps/stub/read.c: Likewise.
	* sysdeps/stub/readdir.c: Likewise.
	* sysdeps/stub/readlink.c: Likewise.
	* sysdeps/stub/readv.c: Likewise.
	* sysdeps/stub/reboot.c: Likewise.
	* sysdeps/stub/recv.c: Likewise.
	* sysdeps/stub/recvfrom.c: Likewise.
	* sysdeps/stub/recvmsg.c: Likewise.
	* sysdeps/stub/remove.c: Likewise.
	* sysdeps/stub/rename.c: Likewise.
	* sysdeps/stub/revoke.c: Likewise.
	* sysdeps/stub/rewinddir.c: Likewise.
	* sysdeps/stub/rmdir.c: Likewise.
	* sysdeps/stub/sbrk.c: Likewise.
	* sysdeps/stub/sched_getp.c: Likewise.
	* sysdeps/stub/sched_gets.c: Likewise.
	* sysdeps/stub/sched_primax.c: Likewise.
	* sysdeps/stub/sched_primin.c: Likewise.
	* sysdeps/stub/sched_rr_gi.c: Likewise.
	* sysdeps/stub/sched_setp.c: Likewise.
	* sysdeps/stub/sched_sets.c: Likewise.
	* sysdeps/stub/sched_yield.c: Likewise.
	* sysdeps/stub/seekdir.c: Likewise.
	* sysdeps/stub/select.c: Likewise.
	* sysdeps/stub/semctl.c: Likewise.
	* sysdeps/stub/semget.c: Likewise.
	* sysdeps/stub/semop.c: Likewise.
	* sysdeps/stub/send.c: Likewise.
	* sysdeps/stub/sendmsg.c: Likewise.
	* sysdeps/stub/sendto.c: Likewise.
	* sysdeps/stub/setdomain.c: Likewise.
	* sysdeps/stub/setegid.c: Likewise.
	* sysdeps/stub/setenv.c: Likewise.
	* sysdeps/stub/seteuid.c: Likewise.
	* sysdeps/stub/setgid.c: Likewise.
	* sysdeps/stub/setgroups.c: Likewise.
	* sysdeps/stub/sethostid.c: Likewise.
	* sysdeps/stub/sethostname.c: Likewise.
	* sysdeps/stub/setitimer.c: Likewise.
	* sysdeps/stub/setjmp.c: Likewise.
	* sysdeps/stub/setlogin.c: Likewise.
	* sysdeps/stub/setpgid.c: Likewise.
	* sysdeps/stub/setpriority.c: Likewise.
	* sysdeps/stub/setregid.c: Likewise.
	* sysdeps/stub/setreuid.c: Likewise.
	* sysdeps/stub/setrlimit.c: Likewise.
	* sysdeps/stub/setsid.c: Likewise.
	* sysdeps/stub/setsockopt.c: Likewise.
	* sysdeps/stub/settimeofday.c: Likewise.
	* sysdeps/stub/setuid.c: Likewise.
	* sysdeps/stub/shmat.c: Likewise.
	* sysdeps/stub/shmctl.c: Likewise.
	* sysdeps/stub/shmdt.c: Likewise.
	* sysdeps/stub/shmget.c: Likewise.
	* sysdeps/stub/shutdown.c: Likewise.
	* sysdeps/stub/sigaction.c: Likewise.
	* sysdeps/stub/sigaltstack.c: Likewise.
	* sysdeps/stub/sigblock.c: Likewise.
	* sysdeps/stub/sigintr.c: Likewise.
	* sysdeps/stub/signal.c: Likewise.
	* sysdeps/stub/sigpause.c: Likewise.
	* sysdeps/stub/sigpending.c: Likewise.
	* sysdeps/stub/sigprocmask.c: Likewise.
	* sysdeps/stub/sigreturn.c: Likewise.
	* sysdeps/stub/sigsetmask.c: Likewise.
	* sysdeps/stub/sigstack.c: Likewise.
	* sysdeps/stub/sigsuspend.c: Likewise.
	* sysdeps/stub/sigvec.c: Likewise.
	* sysdeps/stub/sleep.c: Likewise.
	* sysdeps/stub/socket.c: Likewise.
	* sysdeps/stub/socketpair.c: Likewise.
	* sysdeps/stub/sstk.c: Likewise.
	* sysdeps/stub/statfs.c: Likewise.
	* sysdeps/stub/stime.c: Likewise.
	* sysdeps/stub/stty.c: Likewise.
	* sysdeps/stub/swapoff.c: Likewise.
	* sysdeps/stub/swapon.c: Likewise.
	* sysdeps/stub/symlink.c: Likewise.
	* sysdeps/stub/sync.c: Likewise.
	* sysdeps/stub/syscall.c: Likewise.
	* sysdeps/stub/sysconf.c: Likewise.
	* sysdeps/stub/sysd-stdio.c: Likewise.
	* sysdeps/stub/system.c: Likewise.
	* sysdeps/stub/tcdrain.c: Likewise.
	* sysdeps/stub/tcflow.c: Likewise.
	* sysdeps/stub/tcflush.c: Likewise.
	* sysdeps/stub/tcgetattr.c: Likewise.
	* sysdeps/stub/tcgetpgrp.c: Likewise.
	* sysdeps/stub/tcsendbrk.c: Likewise.
	* sysdeps/stub/tcsetattr.c: Likewise.
	* sysdeps/stub/tcsetpgrp.c: Likewise.
	* sysdeps/stub/telldir.c: Likewise.
	* sysdeps/stub/tempname.c: Likewise.
	* sysdeps/stub/time.c: Likewise.
	* sysdeps/stub/times.c: Likewise.
	* sysdeps/stub/truncate.c: Likewise.
	* sysdeps/stub/ttyname.c: Likewise.
	* sysdeps/stub/ttyname_r.c: Likewise.
	* sysdeps/stub/ualarm.c: Likewise.
	* sysdeps/stub/ulimit.c: Likewise.
	* sysdeps/stub/umask.c: Likewise.
	* sysdeps/stub/unlink.c: Likewise.
	* sysdeps/stub/usleep.c: Likewise.
	* sysdeps/stub/ustat.c: Likewise.
	* sysdeps/stub/utime.c: Likewise.
	* sysdeps/stub/utimes.c: Likewise.
	* sysdeps/stub/vhangup.c: Likewise.
	* sysdeps/stub/wait.c: Likewise.
	* sysdeps/stub/wait3.c: Likewise.
	* sysdeps/stub/wait4.c: Likewise.
	* sysdeps/stub/waitpid.c: Likewise.
	* sysdeps/stub/write.c: Likewise.
	* sysdeps/stub/writev.c: Likewise.
	* sysdeps/stub/xmknod.c: Likewise.
	* sysdeps/stub/xstat.c: Likewise.
	* sysdeps/unix/closedir.c: Likewise.
	* sysdeps/unix/fxstat.c: Likewise.
	* sysdeps/unix/getlogin.c: Likewise.
	* sysdeps/unix/getlogin_r.c: Likewise.
	* sysdeps/unix/mkdir.c: Likewise.
	* sysdeps/unix/nice.c: Likewise.
	* sysdeps/unix/nlist.c: Likewise.
	* sysdeps/unix/opendir.c: Likewise.
	* sysdeps/unix/readdir.c: Likewise.
	* sysdeps/unix/rmdir.c: Likewise.
	* sysdeps/unix/stime.c: Likewise.
	* sysdeps/unix/xmknod.c: Likewise.
	* sysdeps/unix/xstat.c: Likewise.
	* sysdeps/unix/bsd/isatty.c: Likewise.
	* sysdeps/unix/bsd/setegid.c: Likewise.
	* sysdeps/unix/bsd/seteuid.c: Likewise.
	* sysdeps/unix/bsd/setsid.c: Likewise.
	* sysdeps/unix/bsd/sigaction.c: Likewise.
	* sysdeps/unix/bsd/sigprocmask.c: Likewise.
	* sysdeps/unix/bsd/sigsuspend.c: Likewise.
	* sysdeps/unix/bsd/tcflow.c: Likewise.
	* sysdeps/unix/bsd/tcflush.c: Likewise.
	* sysdeps/unix/bsd/tcgetattr.c: Likewise.
	* sysdeps/unix/bsd/tcsetattr.c: Likewise.
	* sysdeps/unix/bsd/times.c: Likewise.
	* sysdeps/unix/bsd/ulimit.c: Likewise.
	* sysdeps/unix/common/lxstat.c: Likewise.
	* sysdeps/unix/common/tcsendbrk.c: Likewise.
	* sysdeps/unix/sysv/setrlimit.c: Likewise.
	* sysdeps/unix/sysv/settimeofday.c: Likewise.
	* sysdeps/unix/sysv/sigaction.c: Likewise.
	* sysdeps/unix/sysv/tcflow.c: Likewise.
	* sysdeps/unix/sysv/tcflush.c: Likewise.
	* sysdeps/unix/sysv/tcgetattr.c: Likewise.
	* sysdeps/unix/sysv/tcsendbrk.c: Likewise.
	* sysdeps/unix/sysv/tcsetattr.c: Likewise.
	* sysdeps/unix/bsd/ultrix4/sysconf.c: Likewise.
	* sysdeps/unix/sysv/irix4/getpriority.c: Likewise.
	* sysdeps/unix/sysv/irix4/setpriority.c: Likewise.
	* sysdeps/unix/sysv/linux/adjtime.c: Likewise.
	* sysdeps/unix/sysv/linux/gethostid.c: Likewise.
	* sysdeps/unix/sysv/linux/gethostname.c: Likewise.
	* sysdeps/unix/sysv/linux/getsysstats.c: Likewise.
	* sysdeps/unix/sysv/linux/ptrace.c: Likewise.
	* sysdeps/unix/sysv/linux/speed.c: Likewise.
	* sysdeps/unix/sysv/linux/ulimit.c: Likewise.
	* sysdeps/unix/sysv/sysv4/sigaction.c: Likewise.
	* sysdeps/unix/sysv/sysv4/sysconf.c: Likewise.
	* sysdeps/unix/bsd/sun/m68k/sigtramp.c: Likewise.
	* sysdeps/unix/bsd/sun/sparc/sigtramp.c: Likewise.
	* sysdeps/unix/bsd/sun/sunos4/speed.c: Likewise.
	* sysdeps/unix/bsd/sun/sunos4/tcsetattr.c: Likewise.
	* sysdeps/unix/sysv/linux/alpha/ioperm.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/brk.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/sigaction.c: Likewise.
	* sysdeps/unix/sysv/linux/m68k/brk.c: Likewise.

	* sunrpc/clnt_tcp.c: Protect declaration of errno by #ifndef.
	* sunrpc/clnt_udp.c: Likewise.
	* sunrpc/bindrsvprt.c: Likewise.
	* sunrpc/pm_getmaps.c: Likewise.
	* sunrpc/pmap_rmt.c: Likewise.
	* sunrpc/svc.c: Likewise.
	* sunrpc/svc_run.c: Likewise.
	* sunrpc/svc_tcp.c: Likewise.
	* sunrpc/svc_udp.c: Likewise.

	* sysdeps/generic/strtok.c: Don't check argument, just crash.
	* sysdeps/generic/strtok_r.c: Likewise.

	* sysdeps/stub/start.c: Make __errno a strong alias of errno.
	* sysdeps/unix/start.c: Likewise.  De-ANSI-fy.
	* sysdeps/unix/sparc/start.c: Likewise.
	* sysdeps/standalone/m68k/m68020/start.S: Likewise.
	* sysdeps/unix/sysv/irix4/start.c: Likewise.
	* sysdeps/unix/bsd/ultrix4/mips/start.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/sysdep.S: Likewise.
	* sysdeps/unix/sysv/linux/m68k/sysdep.S: Likewise.

Mon Sep 23 17:54:57 1996  Ulrich Drepper  <drepper@cygnus.com>

	* catgets/gencat.c (main): Put package name in --version message
	in parantheses.  Reported by Jim Meyering.
	* db/makedb.c: Likewise.
	* locale/programs/locale.c: Likewise.
	* locale/programs/localedef.c: Likewise.

	* sysdeps/i386/fpu/__math.h (tan): Make sure gcc knows we use
	two registers.  Patch by John Bowman.

Sat Sep 21 15:08:25 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/mach/libc-lock.h: Fix comment.
	* sysdeps/stubs/libc-lock.h: Likewise.

Sat Sep 21 13:50:40 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* libio/genops.c (_IO_init) [_IO_MTSAFE_IO]: Dereference pointer
 	to lock when passing it to __libc_lock_init macro.
	(_IO_default_finish) [_IO_MTSAFE_IO]: Dereference pointer to lock
	when passing it to __libc_lock_fini macro.

Sat Sep 21 14:35:40 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/m68k/sysdep.h (SYSCALL_ERROR_HANDLER)
	[_LIBC_REENTRANT]: Add missing semicolon.

	* sysdeps/unix/sysv/linux/m68k/sysdep.S: Move inclusion of
 	sysdep.h to the top outside of #ifndef PIC.  Don't include errnos.h.
  	Use the ENTRY macro.

Sat Sep 21 14:33:41 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* libio/Makefile: Make `all' the default target.
	* po/Makefile: Likewise.

Mon Sep 23 15:49:47 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/test-canon.c: Correct patch from Thu Sep 12 23:01:16 1996.
	I applied it incorrectly.
	* sysdeps/m68k/fpu/s_scalbn.c: Likewise.
	* sysdeps/m68k/fpu/s_scalbnf.c: Likewise.
	* sysdeps/m68k/fpu/s_scalbnl.c: Likewise.

Mon Sep 23 03:00:10 1996  Ulrich Drepper  <drepper@cygnus.com>

	* shadow/sgetspent_r.c (LINE_PARSER): Accept empty 9th field.
	Patch by NIIBE Yutaka <gniibe@mri.co.jp>.

	* shadow/sgetspent_r.c (LINE_PARSER): Don't accept any chars after
 	9th field.

	* sysdeps/unix/sysv/linux/Makefile [$(subdir)==misc]
	(sysdep_headers): Add sys/debugreg.h, sys/kd.h, sys/soundcard.h,
 	and sys/vt.h.
	* sysdeps/unix/sysv/linux/sys/debugreg.h: New file.
	* sysdeps/unix/sysv/linux/sys/kd.h: New file.
	* sysdeps/unix/sysv/linux/sys/soundcard.h: New file.
	* sysdeps/unix/sysv/linux/sys/vt.h: New file.
	Reported by NIIBE Yutaka <gniibe@mri.co.jp>.
1996-09-27 03:45:24 +00:00
Thomas Bushnell, BSG d022f6ab9f *** empty log message ***
Thu Sep 26 13:44:29 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* hurd/Makefile (installed-sunrpc-headers): New variable.
	(sunrpc-headers): New variable.
	(install-headers-nosubir): Depend on $(installed-sunrpc-headers),
	not just <rpc/netdb.h>.
	($(installed-sunrpc-headers)): Provide rule for all of these.
1996-09-26 17:48:47 +00:00
Thomas Bushnell, BSG 0820914952 Thu Sep 26 13:44:29 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* hurd/Makefile (installed-sunrpc-headers): New variable.
	(sunrpc-headers): New variable.
	(install-headers-nosubir): Depend on $(installed-sunrpc-headers),
	not just <rpc/netdb.h>.
	($(installed-sunrpc-headers)): Provide rule for all of these.
1996-09-26 17:48:09 +00:00
Richard Kenner 5686557215 (-vxsim*): New operating system. 1996-09-24 02:44:17 +00:00
Thomas Bushnell, BSG d8766439cb *** empty log message ***
Mon Sep 23 15:31:04 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* hurd/Makefile ($(includedir)/rpc/netdb.h): There is no make
	variable `top_srcdir' in libc; use $(..) instead.

	* sysdeps/mach/hurd/Makefile (rtld-installed-name): Delete special
	definition.  It was a *Mistake*.  (With a capital M.)

	* sysdeps/mach/getsysstats.c (__get_nprocs): Renamed from
	__get_nproc.
	(__get_nprocs_conf): Renamed from __get_nproc_conf.
1996-09-23 21:51:36 +00:00
Ulrich Drepper e320cbc913 update from main archive 960922
Sun Sep 22 15:18:41 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/init-first.c: Define dummy function
 	`_dl_start' so that linking fails if this file should ever be used
 	in ld.so.

	* catgets/gencat.c (main): Change --version message according to
 	RMS' last standard revision.
	* db/makedb.c: Likewise.
	* locale/programs/locale.c: Likewise.
	* locale/programs/localedef.c: Likewise.

	(__get_nproc_conf): New function.
1996-09-23 00:24:55 +00:00
Thomas Bushnell, BSG 7816fbdf7a *** empty log message ***
Sat Sep 21 23:42:39 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>
	* sysdeps/mach/getsysstats.c: Include <sys/sysinfo.h>.
 	(__get_nproc_conf): New function.
Sat Sep 21 14:59:22 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/getsysstats.c: New file.

	* shlib-versions (*-*-gnu*): Increment libc to 0.2 for upcoming
	binary distribution.

	* sysdeps/mach/hurd/Makefile (rtld-installed-name): Provide
	definition to override dangerous one in Makeconfig.

	* hurd/Makefile (install-headers-nosubdir): Install <rpc/netdb.h>.
	($(includedir)/rpc/netdb.h): New rule.
	[ This is XXX until sunrpc can be built; <rpc/netdb.h> is
	essential. ]

Fri Sep 20 16:06:06 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/i386/init-first.c (_dl_start): Add definition,
	to guarantee link errors if this is included in ld.so.

Thu Sep 19 23:36:19 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* hurd/hurdinit.c (__libc_argv): Provide common decl.
	(_hurd_setproc): Don't declare __libc_argv here.

Tue Sep 17 10:51:58 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* malloc/memalign.c (memalign): Only acquire __libc_malloc_lock
	for actual modifications to global state.  

Fri Sep 13 01:21:36 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/Makefile (includes): Add -I$(common-objpfx)mach/.
	* sysdeps/mach/hurd/Makefile (includes): Add
	-I$(common-objpfx)hurd/.  Reported by Marcus Daniels.

	* sysdeps/generic/schedbits.h (struct sched_param): Renamed from
	struct sched_params.
	* sysdeps/stub/sched_setp.c (__sched_setparam): struct
	sched_params -> struct sched_param.
	* sysdeps/stub/sched_getp.c (__sched_getparam): Likewise.
	* sysdeps/stub/sched_sets.c (__sched_setscheduler): Likewise.

Thu Sep 12 23:58:25 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/libc-lock.h (__libc_cleanup_region_start): Fix
	syntax error.
	
	* stdio-common/Makefile: Put lockfile in routines
	unconditionally. 
		
	* stdio-common/vfprintf.c (__flockfile, __funlockfile): Declare
	this always, not just if _LIBC_REENTRANT.
	(__funlockfile): Don't use weak_extern for this one;
	__libc_cleanup_region_end might be defined and the use of
	__funlockfile can't be protected the way the use of __flockfile
	can be.
1996-09-22 03:44:47 +00:00
Ulrich Drepper 845dcb57b1 update from main archive 960921
Sun Sep 22 03:40:52 1996  Ulrich Drepper  <drepper@cygnus.com>

	* resolv/resolv.h: Update to bind-4.9.5-T4B.
	* resolv/base64.c: Likewise.
	* resolv/res_debug.c: Likewise.
	* resolv/res_query.c: Likewise.
	* resolv/gethnamaddr.c: Likewise.
	* nss/nss_dns/dns-host.c: Likewise.
	* resolv/res_comp.c: Likewise.
	* resolv/res_send.c: Likewise.
	* resolv/arpa/nameser.h: Likewise.  Attention: MAXDNAME is much
	higher now.

	* resolv/Banner: New file.
	* resolv/Makefile (distribute): Add Banner.

Sat Sep 21 19:15:24 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/stub/getsysstats.c: New file.
	* sysdeps/unix/sysv/linux/getsysstats.c: New file.

	* misc/Makefile (headers): Add sys/sysinfo.h.
	(routines): Add getsysstats.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir)==misc]
 	(sysdep_headers): Remove sys/sysinfo.h.
	* sysdeps/generic/sys/sysinfo.h: New file.
	* sysdeps/unix/sysv/linux/sys/sysinfo.h: Add prototype for get_nprocs,
	get_phys_pages, and get_avphys_pages.

	* misc/Makefile (routines): Add mntent_r.
	* misc/mntent_r.c: New file.
	* misc/mntent.c: Remove all functions but getmntent and use
	__getmntent_r.
	* misc/mntent.h: Add prototype for __getmntent_r.
	* misc/fstab.c: Use __getmntent_r function instead of getmntent.
	This will not clobber the state in getmntent.

	* sysdeps/generic/confname.h: Add _SC_PROCESSORS_CONF,
	_SC_NPROCESSORS_ONLN, _SC_PHYS_PAGES, _SC_AVPHYS_PAGES,
	_SC_ATEXIT_MAX, and _SC_PASS_MAX.
	* sysdeps/stub/sysconf.c: Add handling _SC_PROCESSORS_CONF and
	_SC_NPROCESSORS_ONLN by calling __get_nprocs, _SC_PHYS_PAGES by
	calling __get_phys_pages, _SY_AVPHYS_PAGES by calling
	__get_avphys_pages, _SC_ATEXIT_MAX and _SC_PASS_MAX.
	* sysdeps/posix/sysconf.c: Likewise.
	* posix/getconf.c (vars): Add _NPROCESSORS_CONF, _NPROCESSORS_ONLN,
	_PHYS_PAGES, _AVPHYS_PAGES, ATEXIT_MAX, and PASS_MAX entries.

Sat Sep 21 05:20:36 1996  Ulrich Drepper  <drepper@cygnus.com>

	* version.h (VERSION): Bump to 1.95.

	* Make-dist (+tsrcs): Don't filter out files in subdirs which
 	match files in the sysdeps hierachy (welcome back,
 	sys/syscall.h!).

	* resolv/Makefile (libresolv-routines): Remove getnetnamad.

Sat Sep 21 03:00:19 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/loadlocale.c (_nl_free_locale): Remove function.
	* locale/localeinfo.h: Remove prototype for _nl_free_locale.
	* locale/setlocale.c (setlocale): Don't free locale data of
 	categories which succeeded to load after a wrong or missing data
 	file was observed.

	* locale/setlocale (setlocale): Initialize NEWNAME correctly so
	that it works even when the locale data is not used.

	* stdlib/random_r.c: Fix typo in comment.
	* stdlib/drand48-iter.c: Likewise.
	* stdlib/drand48.c: Likewise.
	* stdlib/erand48.c: Likewise.
	* stdlib/jrand48.c: Likewise.
	* stdlib/lcong48.c: Likewise.
	* stdlib/lrand48.c: Likewise.
	* stdlib/mrand48.c: Likewise.
	* stdlib/nrand48.c: Likewise.
	* stdlib/random.c: Likewise.
	* stdlib/seed48.c: Likewise.
	* stdlib/srand48.c: Likewise.
	* misc/search.h: Likewise.
	* misc/hsearch.c: Likewise.
	* misc/hsearch_r.c: Likewise.

	* sysdeps/unix/sysv/linux/m68k/sysdep.S (__errno_location):
Thu Sep 19 23:36:19 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* hurd/hurdinit.c (__libc_argv): Provide common decl.
	(_hurd_setproc): Don't declare __libc_argv here.
1996-09-22 03:06:42 +00:00
Thomas Bushnell, BSG daf2bb515b *** empty log message ***
* sysdeps/mach/getsysstats.c: New file.
1996-09-21 23:54:18 +00:00
Thomas Bushnell, BSG 8a080f40d8 *** empty log message ***
Sat Sep 21 14:59:22 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* shlib-versions (*-*-gnu*): Increment libc to 0.2 for upcoming
	binary distribution.

	* sysdeps/mach/hurd/Makefile (rtld-installed-name): Provide
	definition to override dangerous one in Makeconfig.

	* hurd/Makefile (install-headers-nosubdir): Install <rpc/netdb.h>.
	($(includedir)/rpc/netdb.h): New rule.
	[ This is XXX until sunrpc can be built; <rpc/netdb.h> is
	essential. ]

Fri Sep 20 16:06:06 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/i386/init-first.c (_dl_start): Add definition,
	to guarantee link errors if this is included in ld.so.
1996-09-21 20:05:50 +00:00
Ulrich Drepper 8de8ca1b94 Why are these removed? 1996-09-21 12:41:17 +00:00
Thomas Bushnell, BSG c55698973e *** empty log message *** 1996-09-20 19:41:28 +00:00
Thomas Bushnell, BSG 6bbcfbfedb *** empty log message ***
Thu Sep 19 23:36:19 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* hurd/hurdinit.c (__libc_argv): Provide common decl.
	(_hurd_setproc): Don't declare __libc_argv here.
1996-09-20 19:40:31 +00:00
Ulrich Drepper ec4b0518a3 update from main archive 960919
Thu Sep 19 21:50:55 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/posix/gettimeofday.c (__gettimeofday): Use localtime_r
	instead of localtime.
	Reported by Matthias Urlichs.

	* shlib-versions: Remove version number for libcrypt.
	* features.h: Define __USE_REENTRANT if _REENTRANT or _THREAD_SAFE.
	* libc-symbols.h: Define _REENTRANT while compiling libc.

	* sysdeps/unix/sysv/linux/i386/sysdep.S (__errno_location):
	Define even if !_LIBC_REENTRANT.
	* sysdeps/unix/sysv/linux/i386/sysdep.S (__errno_location):
	Likewise.

	* sysdeps/posix/cuserid.h: Remove prototype for geteuid().
	De-ANSI-fy.

	* MakeTAGS ($P/libc.pot): Generate correctly formed header.
	* po/header.pot: Correct title line.
	* po/nl.po: Update.

Thu Sep 19 18:59:55 1996  Ulrich Drepper  <drepper@cygnus.com>

	* Makeconfig (soversions.mk): Prefer shared lib version numbers
	is add ons over version in libc itself.

	* sysdeps/unix/sysv/linux/i386/sysdep.S: Include <sysdep.h>.
	* sysdeps/unix/sysv/linux/i386/sysdep.h: Prevent multiple
	inclusion.

	* libio/iofgets.c: Use __flockfile and __funlockfile instead of
 	_IO_flockfile and _IO_funlockfile resp.

	* locale/categories.def: Partly support for correct `era' handling
	in LC_TIME category.
	* locale/langinfo.h: Likewise.
	* locale/programs/ld-time.c: Likewise.
	* locale/localeinfo.h: Change comment a bit.

	* malloc/memalign.c: Don't use goto, not necessary anymore.

1996-09-18  Paul Eggert  <eggert@twinsun.com>

	* time/mktime.c (ydhms_tm_diff):  Work correctly even if year
	is negative, or if time_t is unsigned.
	* time/strftime.c (tm_diff): Work correctly even if tm_year
	is near INT_MIN.

Tue Sep 17 16:14:34 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/__math.h (__inline_mathop): Changed to generate
 	all three versions of the math function.
	(__inline_mathopf, __inline_mathopl): Removed.
	(__inline_functions): New temporary definition containing all
 	non-trivial inline functions.

Wed Sep 18 00:25:41 1996  Ulrich Drepper  <drepper@cygnus.com>

	* time/strftime.c (strftime): The T_FMT_AMPM string may be empty.

Tue Sep 17 20:27:18 1996  Ulrich Drepper  <drepper@cygnus.com>

	* math/Makefile (extra-libs-others): Use $(extra-libs) instead
	of $(extra-libc).

Tue Sep 17 17:09:44 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/stub/fpu_control.h: Correct end of file comment.

Tue Sep 17 05:39:18 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdio-common/bug3.c, stdio-common/bug4.c, stdio-common/bug5.c,
	stdio-common/test-popen.c: Remove temporary files after test.
	* stdio-common/bug5.c: Use `system' instead of `execlp'.
	Patches by Andreas Jaeger.

	* stdio-common/bug5.c: Create string for `system' argument to
	make sure the input and output file names are really correct.

Sun Sep 15 12:46:44 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure.in: If $os contains a hyphen add the part before the
	hyphen to $ostry.

Sun Sep 15 18:14:02 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/__math.h (__ieee754_pow, __ieee754_powf,
	__ieee754_powl): Rename local variable i to __i.
	(__ieee754_atan2, __ieee754_atan2f, __ieee754_atan2l): New inline
	functions.
	* sysdeps/m68k/fpu/e_atan2.c, sysdeps/m68k/fpu/e_atan2f.c,
	sysdeps/m68k/fpu/e_atan2l.c: New files.

1996-09-15  Paul Eggert  <eggert@twinsun.com>

	* manual/time.texi: Change `range X to Y' to `range X through
	Y', to avoid ambiguity in English.

	(strftime): Numbers that do not have a range indicated are not padded.
	Describe E and O modifiers.
	%g, %G, %u: New formats.
	%C, %y, %Y: Describe behavior on negative years.
	%e: Fix typo (was labeled %d).
	%l, %V: Fix typo in range.
	%M, %S, %U, %w, %W: Give ranges.
	%p: Clarify how noon and midnight are handled for AM and PM.
	%s: Clarify leap second handling.
	%r: Now locale-defined.
	%C, %D, %e, %h, %n, %r, %t, %T: Say that they are POSIX.2 extensions.
	%z: Say that it is a GNU extension.
	%Z: Wording fix.

	* time/strftime.c: (strftime):
		%V: Fix mishandling of week numbers near year boundaries.
		%g, %G: New formats (suggested by Arthur David Olson).
		%U, %W: Use inline expression instead of `week' function.
		%C, %y: Handle negative years portably.
		%C, %Y: Use width 1, since values can be arbitrarily wide.
		%r: Use T_FMT_AMPM format if _NL_CURRENT is defined.
		%u: New Posix.2 format.
		%w: Width is 1, not 2.
	(iso_week_days): New function, for %V, %G, %g.
	(week): Remove; it didn't handle %V correctly.
	(__isleap): New macro.
	(mbsinit): Use arg, to pacify GCC -Wall.

1996-09-13  Paul Eggert  <eggert@twinsun.com>

	* time/strftime.c (strftime):
	If using the GNU C library, do not bother to check for
	multibyte encodings, since they're safe in formats.  Otherwise:
	  - Check for multibyte encodings when encountering any character that
	  is not in the basic execution character set of the C Standard.
	  - Use mbrlen (if available) instead of mblen, to avoid modifying
	  mblen's internal state.
	  - Do not assume that '%' cannot appear as the first character of a
	  multibyte character sequence, since this is possible when not in the
	  initial shift state.
	(HAVE_MBRLEN, MULTIBYTE_IS_FORMAT_SAFE): Define if _LIBC is defined.
	(DO_MULTIBYTE): New macro.
	(<ctype.h>): Do not include.
	(<wchar.h>): Include if HAVE_MBRLEN.
	(mbstate_t, mbrlen, mbsinit): Define if ! HAVE_MBRLEN.
	(mbstate_zero): New constant.

1996-09-12  Paul Eggert  <eggert@twinsun.com>

	* time/strftime.c (strftime):
	Use an empty zone if it can't be determined; POSIX.2 requires this.
	Use plain `int' for pad and modifier (which now contain char value).
	Use plain `int' for number_value, to print negative values correctly.
	Use plain `int' for digits; there was no need to make it unsigned.
	Initialize subfmt consistently.
	Remove incorrect code for %EC and %Ey; they aren't implemented yet.
	For %O, if there is no alternate digit, output Ascii instead of "".
	Output the `%' of an unknown format; this is most likely the right
	thing to do if a multibyte string has been misparsed.

Thu Sep 12 23:23:13 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* stdio-common/scanf7.c (main): Remove extra conversion from
	printf format string.

Thu Sep 12 23:01:16 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* stdlib/test-canon.c (tests): Rename structure member from errno
	to error, all uses changed.

Thu Sep 12 20:08:06 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/__math.h (__ldexp, __ldexpf, __ldexpl):
	Removed.
	* sysdeps/m68k/fpu/s_ldexp.c, sysdeps/m68k/fpu/s_ldexpf.c,
	sysdeps/m68k/fpu/s_ldexpl.c: Removed, use generic implementation
	instead.
	* sysdeps/m68k/fpu/s_scalbn.c, sysdeps/m68k/fpu/s_scalbnf.c,
	sysdeps/m68k/fpu/s_scalbnl.c: Replaced with old contents of
	s_ldexp.c, s_ldexpf.c and s_ldexpl.c, resp., suitably adpted.

	* sysdeps/m68k/fpu/__math.h (__frexp, __frexpf, __frexpl):
	Return value must be in [0.5, 1), not [1, 2).  Reported by Chris
	Lawrence.
	(__ilogb, __ilogbf, __ilogbl): Check for argument being zero.
	(__scalbn, __scalbnf, __scalbnl): Use second argument directly.

Thu Sep 12 19:59:24 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/libm-ieee754/e_acoshl.c: Fix typos.
	* sysdeps/libm-ieee754/s_cbrtl.c: Remove unused variable.

Thu Sep 12 19:59:24 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/libm-ieee754/e_acoshl.c: Fix typos.
	* sysdeps/libm-ieee754/s_cbrtl.c: Remove unused variable.

Thu Sep 12 19:56:07 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* inet/herrno.c (__h_errno_location): Fix return type.

Tue Sep 17 10:51:58 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* malloc/memalign.c (memalign): Only acquire __libc_malloc_lock
	for actual modifications to global state.

Fri Sep 13 01:21:36 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/Makefile (includes): Add -I$(common-objpfx)mach/.
	* sysdeps/mach/hurd/Makefile (includes): Add
	-I$(common-objpfx)hurd/.  Reported by Marcus Daniels.

	* sysdeps/generic/schedbits.h (struct sched_param): Renamed from
	struct sched_params.
	* sysdeps/stub/sched_setp.c (__sched_setparam): struct
	sched_params -> struct sched_param.
	* sysdeps/stub/sched_getp.c (__sched_getparam): Likewise.
	* sysdeps/stub/sched_sets.c (__sched_setscheduler): Likewise.

Thu Sep 12 23:58:25 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/libc-lock.h (__libc_cleanup_region_start): Fix
	syntax error.

	* stdio-common/Makefile: Put lockfile in routines
	unconditionally.
	Define _MT_SAFE_IO if using for libio and compiling reentrant
	libc.

	* stdio-common/vfprintf.c (__flockfile, __funlockfile): Declare
	this always, not just if _LIBC_REENTRANT.
	(__funlockfile): Don't use weak_extern for this one;
	__libc_cleanup_region_end might be defined and the use of
	__funlockfile can't be protected the way the use of __flockfile
	can be.

	* sched.h: New file.  Helper to access posix/sched.h.
Thu Sep 12 12:33:52 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/dl-cache.c: Delete second copy of file
	accidentally added on.

	* sysdeps/stub/intr-msg.h: New file.

	* stdio-common/vfprintf.c: Include <libc-lock.h>.
	* stdio-common/vfscanf.c: Include <libc-lock.h>.

	* sysdeps/mach/libc-lock.h (__libc_cleanup_region_start): New
	macro.
	(__libc_cleanup_region_end): New macro.
1996-09-20 01:58:09 +00:00
Karl Berry d66b7b41b8 (\inforef): Move to more appropriate place.
* texinfo.tex (\inforef): Move to more appropriate place. 
(\pounds): Remove spurious extra $. 
(\email): Typeset argument in angle brackets. 
(\macro): Use \doignore for robustness, instead of just letting TeX 
parse the argument. 
(\unmacro): Define.
1996-09-18 12:15:20 +00:00
Thomas Bushnell, BSG bcc7b35158 *** empty log message ***
Tue Sep 17 10:51:58 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* malloc/memalign.c (memalign): Only acquire __libc_malloc_lock
	for actual modifications to global state.
1996-09-17 14:58:48 +00:00
Richard Kenner cd136c56eb RMS:
Use pc instead of unknown, for pc clones.
Use -linux-gnu for Linux-based GNU systems.
1996-09-15 00:49:22 +00:00
Thomas Bushnell, BSG 757dc096f3 *** empty log message ***
* sysdeps/mach/Makefile (includes): Add -I$(common-objpfx)mach/.
	* sysdeps/mach/hurd/Makefile (includes): Add
	-I$(common-objpfx)hurd/.  Reported by Marcus Daniels.
1996-09-13 06:22:21 +00:00
Thomas Bushnell, BSG 39a0b05667 *** empty log message ***
Fri Sep 13 01:21:36 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/generic/schedbits.h (struct sched_param): Renamed from
	struct sched_params.
	* sysdeps/stub/sched_setp.c (__sched_setparam): struct
	sched_params -> struct sched_param.
	* sysdeps/stub/sched_getp.c (__sched_getparam): Likewise.
	* sysdeps/stub/sched_sets.c (__sched_setscheduler): Likewise.
1996-09-13 05:28:59 +00:00
Thomas Bushnell, BSG a8ed817809 *** empty log message ***
Thu Sep 12 23:58:25 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/libc-lock.h (__libc_cleanup_region_start): Fix
	syntax error.
	
	* stdio-common/Makefile: Put lockfile in routines
	unconditionally. 
		
	* stdio-common/vfprintf.c (__flockfile, __funlockfile): Declare
	this always, not just if _LIBC_REENTRANT.
	(__funlockfile): Don't use weak_extern for this one;
	__libc_cleanup_region_end might be defined and the use of
	__funlockfile can't be protected the way the use of __flockfile
	can be. 
	
	* sysdeps/mach/hurd/dl-cache.c: Delete second copy of file
	accidentally added on.

	* sysdeps/stub/intr-msg.h: New file.
1996-09-13 05:05:58 +00:00
Richard M. Stallman 20e77fa06c Use pc instead of unknown, for pc clone systems. Change linux to linux-gnu. 1996-09-13 03:46:14 +00:00
Ulrich Drepper fafaa44ef0 update from main archive 960912
Fri Sep 13 04:33:08 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sched.h: New file.  helper to access posix/sched.h.
	* posix/sched.h: Change `sched_params' to `sched_param' to follow
	POSIX.4.

Thu Sep 12 20:12:40 1996  Ulrich Drepper  <drepper@cygnus.com>

	* db/makedb.c (usage): Print bug report address separately to
	ease translators task.
	* catgets/gencat.c (usage): Likewise.
	* locale/locale.c (usage): Likewise.
	* locale/localedef.c (usage): Likewise.

1996-09-12  Paul Eggert  <eggert@twinsun.com>

	* time/strftime.c (my_localtime_r): Define if ! HAVE_LOCALTIME_R,
	and #define localtime_r to it.	If _LIBC, use __localtime_r instead.
	(my_gmtime_r): Similar, except it's not needed if ! HAVE_TM_GMTOFF.

Thu Sep 12 14:03:29 1996  Ulrich Drepper  <drepper@cygnus.com>

	* crypt/Makefile: Include Makeconfig and add crypt object dir to
 	rpath-link so that running the check finds the new library.
	* crypt/cert.c: provide correct prototypes to prevent warnings.
	Reported by Andreas Jaeger.

	* sysdeps/mach/hurd/Makefile (rpath-link): Don't use += because
	old and new value must be glued using `:'.
	Reported by Marcus Daniels.
1996-09-13 03:21:39 +00:00
Thomas Bushnell, BSG ae2ddc98c1 *** empty log message ***
(vfprintf): Only call __libc_cleanup_region_end if USE_IN_LIBIO,
	thus matching the sense of the tests around
	__libc_cleanup_region_start at the front of the function.
	* stdio-common/vfscanf.c: Include <libc-lock.h>.
	(UNLOCK_STREAM) [! USE_IN_LIBIO]: Call
	__libc_cleanup_region_end, not __libc_cleanup_region_start.
1996-09-12 22:22:29 +00:00
Thomas Bushnell, BSG f33b97f913 *** empty log message ***
Thu Sep 12 12:33:52 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* stdio-common/vfprintf.c: Include <libc-lock.h>.
	* stdio-common/vfscanf.c: Likewise.

	* sysdeps/mach/libc-lock.h (__libc_cleanup_region_start): New
	macro.
	(__libc_cleanup_region_end): New macro.

	* stdio-common/vfscanf.c (UNLOCK_STREAM) [! USE_IN_LIBIO]: Call
	__libc_cleanup_region_end, not __libc_cleanup_region_start.
1996-09-12 21:52:04 +00:00
Ulrich Drepper d0045e79eb Use POSIX version of version.c. 1996-09-12 18:29:32 +00:00
Ulrich Drepper f0f1bf8536 update from main archive 960911
Thu Sep 12 03:35:27 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/i386/Dist: Remove init-first.h.
	* sysdeps/unix/sysv/linux/m68k/Dist: Likewise.
	* sysdeps/unix/sysv/linux/Dist: Add init-first.h.

1996-09-11  Paul Eggert  <eggert@twinsun.com>

	* strftime.c (strftime):
	Handle E and O modifiers, required for POSIX.2 and XPG4.
	Don't use sprintf to format numbers; this way, we can handle time_t
	correctly regardless of whether it's signed.
	Don't dump core if format ends in %.
	In default %c format, use %e instead of %d, for POSIX.2 compatibility.
	For %z:
		Use tm_gmtoff if available.
		Output nothing if tm_isdst is negative.
		Output correct value even if arg is 1969-12-31 23:59:59 UTC.
		Don't assume that UTC offset is less than 24 hours;
		Posix requires support for 24 hours, and there's no point
		limiting it at all.
	(HAVE_TM_GMTOFF, TYPE_SIGNED, INT_STRLEN_BOUND): New macros.
	(CHAR_BIT): Define if <limits.h> doesn't.
	(tm_diff): New function.
	(fmt, <stdio.h>): Remove; no longer used.

Thu Sep 12 02:21:44 1996  Ulrich Drepper  <drepper@cygnus.com>

	* db/Makefile: Add extra-libs-others variable so that shared
	library is built in `others' pass.
	* elf/Makefile: Likewise.
	* math/Makefile: Likewise.
	* resolv/Makefile: Likewise.

	* Makefile (generated): Add version.info.h.

	* time/checktab.awk: New file.  From ADO 96k.
	* time/iso3166.tab: Likewise.
	* time/tzselect.ksh: Likewise.
	* time/zone.tab: Likewise.

	* stdio-common/vfprintf.c: Correct cleanup registration.  We
	cannot use a macro

1996-09-11  Paul Eggert  <eggert@twinsun.com>

	* time/time.h (tm_gmtoff, tm_zone): Prefix with `__' unless
	__USE_BSD; this is required for ANSI C compatibility.
	* manual/time.texi: Replace GMT by UTC, daylight savings by
 	daylight saving, timezone by time zone.
	Rewrite description of %V to match ISO 8601.
	Fix TZ Posix string example for US Eastern time.
	Explain tzname[1] when DST isn't used.
	Explain tzname when multiple abbreviations used (e.g. EST/EWT/EDT).
	Explain that timezone's sign is opposite from tm_gmtoff, and that
	timezone lacks DST adjustment whereas tm_gmtoff has it.
	Deprecate tzname and timezone.

Tue Sep 10 14:46:16 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	Implement Roland McGrath's idea of how to put an .interp into
	shared libraries.
	* interp.c: New file.
	* Makerules (interp-obj): New object, linked into every shared
	library.
	(common-generated): Add interp.so.
	(CFLAGS-interp.c): Pass name of interpreter.

Tue Sep 10 21:09:35 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* db/Makefile: Fix typo.

Tue Sep 10 19:29:53 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* nss/db-Makefile ($(VAR_DB)/passwd.db): Look for multiple
	occurences of the same uid, and only generate a mapping for the
	first one.

Tue Sep 10 03:14:59 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/system.c: New file, to override
	sysdeps/unix/system.c.

Tue Sep 10 15:05:40 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile (before-compile): Add version-info.h, needed to build
	version.d.

Tue Sep 10 14:14:33 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/m68k/sysdep.S: Remove check for
	EWOULDBLOCK, never true on Linux.
	(__errno_location): New function.
	[_LIBC_REENTRANT]: Set errno using __errno_location function.
	* sysdeps/unix/sysv/linux/m68k/sysdep.h [PIC]: Add second
 	syscall_error handler for reentrant libc.

Tue Sep 10 13:27:49 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf/Makefile (extra-objs): Add eval.so to get dependencies.

Wed Sep 11 04:40:57 1996  Ulrich Drepper  <drepper@cygnus.com>

	* time/tzset.c (__tzname_cur_max): Use type `size_t' to avoid
 	warning.
	* time/tzfile.c (compute_tzname_max): Likewise.
1996-09-12 02:51:03 +00:00
Thomas Bushnell, BSG 158ff48e34 *** empty log message ***
Tue Sep 10 14:42:39 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* elf/dl-cache.c: Rename to ...
	* sysdeps/generic/dl-cache.c:  ... here.
	* sysdeps/mach/hurd/dl-cache.c: New file.
	
	* mach/Makefile (distribute): Add `errsystems.awk'.
	* hurd/Makefile (distribute): Add `Notes' and `intr-msg.h'.
	* hurd/hurdintr.awk: Delete file.  (Not used in ages.)
	* hurd/intr-rpc.awk: Likewise.
	* hurd/invoke-trans.c: Likewise.
	* sysdeps/mach/hurd/i386/longjmp-ctx.c: Likewise.
	* sysdeps/mach/hurd/alpha/longjmp-ctx.c: Likewise.
	* sysdeps/mach/hurd/mips/longjmp-ctx.c: Likewise.
	* sysdeps/mach/hurd/i386/init-fault.c: Likewise.
	* sysdeps/mach/hurd/mips/init-fault.c: Likewise.
	* sysdeps/stub/init-fault.c: Likewise.
	* sysdeps/stub/longjmp-ctx.c: Likewise.
	
Thu Sep  5 08:58:47 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/alpha/elf/start.S: Make _start global again.
1996-09-11 02:48:08 +00:00
Ulrich Drepper da74e90200 update from main archive 960910
Wed Sep 11 02:57:31 1996  Ulrich Drepper  <drepper@cygnus.com>

	* configure.in: Quote $add_ons argument in loop to generated
	prefices.

Tue Sep 10 20:43:45 1996  Ulrich Drepper  <drepper@cygnus.com>

	* db/makedb.c: Include <locale.h>.  Reported by Fila Kolodny.

Tue Sep 10 13:49:08 1996  Ulrich Drepper  <drepper@cygnus.com>

	* inet/herrno.c: Initialize `h_errno' so that we can provide
	alias.

	* Makefile (version-info.h): Fix typo in shell script.

	* sysdeps/i386/i586/strlen.S: Optimize startup code a bit.
	* sysdeps/i386/i586/strchr.S: Likewise.
1996-09-11 01:52:48 +00:00
Ulrich Drepper 569c558c88 update from main archive 960909
Mon Sep  9 20:31:27 1996  Ulrich Drepper  <drepper@cygnus.com>

	* version.c (banner): Report to bug-glibc@prep not @gnu.
	Reported by Andreas Jaeger.

	* libio/stdio.h [!__USE_REENTRANT]: Don't define getc as
 	_IO_getc_unlocked.
	[__USE_REENTRANT]: Don't define

Mon Sep  9 15:59:32 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/i386/strrchr.c: Fix bug where NUL byte is not recognized
	when it is the third byte in the string.  Reported by
	NIIBE Yutaka.
	* string/tester.c: Add tests for above bug to strlen, strchr, and
	strrchr tests.

Fri Sep  6 21:23:33 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/e_acos.c: Deansideclized.  Include
	"math_private.h" to get prototype.
	* sysdeps/m68k/fpu/e_fmod.c: Likewise.
	* sysdeps/m68k/fpu/k_cos.c: Likewise.
	* sysdeps/m68k/fpu/k_sin.c: Likewise.
	* sysdeps/m68k/fpu/k_tan.c: Likewise.

	* sysdeps/m68k/fpu/k_sin.c: Remove uneeded indirection of
	__m81_u.
	* sysdeps/m68k/fpu/k_tan.c: Likewise.

Sun Sep  1 18:01:35 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/__math.h: Check for __NO_M81_MATH_INLINES
	instead of __NO_MATH_INLINES.
	(__M81_MATH_INLINES): Renamed from __MATH_INLINES.
	* sysdeps/m68k/fpu/e_acos.c: Define __NO_M81_MATH_INLINES.
	* sysdeps/m68k/fpu/e_fmod.c: Likewise.
	* sysdeps/m68k/fpu/k_cos.c: Likewise.
	* sysdeps/m68k/fpu/k_sin.c: Likewise.
	* sysdeps/m68k/fpu/k_tan.c: Likewise.
	* sysdeps/m68k/fpu/s_atan.c: Likewise.
	* sysdeps/m68k/fpu/s_frexp.c: Likewise.
	* sysdeps/m68k/fpu/s_ilogb.c: Likewise.
	* sysdeps/m68k/fpu/s_isinf.c: Likewise.
	* sysdeps/m68k/fpu/s_ldexp.c: Likewise.
	* sysdeps/m68k/fpu/s_modf.c: Likewise.
	* sysdeps/m68k/fpu/k_cos.c: Use inline version of __cos.
	* sysdeps/m68k/fpu/k_sin.c: Likewise.
	* sysdeps/m68k/fpu/k_tan.c: Likewise.

Mon Sep  9 12:55:14 1996  Ulrich Drepper  <drepper@cygnus.com>

	* nss/nss_files/files-parse.c (INT_FIELD_MAYBE_NULL): Check for
	available character before converting number and return with
	error if none is available.

Fri Sep  6 22:09:08 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/init-first.h: New file, generic
	implementation for architectures where parameters are passed on
	stack.
	* sysdeps/unix/sysv/linux/m68k/init-first.h: Removed.
	* sysdeps/unix/sysv/linux/i386/init-first.h: Removed.

Fri Sep  6 22:05:32 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure.in: Remove unneeded sysnames frobbing.

Mon Sep  9 05:29:09 1996  Ulrich Drepper  <drepper@cygnus.com>

	* time/zic.c: Update from ADO 96l.
	* time/africa: Update from ADO 96k.
	* time/antarctica: Likewise.
	* time/asia: Likewise.
	* time/australia: Likewise.
	* time/europe: Likewise.
	* time/northamerica: Likewise.
	* time/southamerica: Likewise.

Mon Sep  9 05:03:47 1996  NIIBE Yutaka  <gniibe@mri.co.jp>

	* sysdeps/unix/sysv/linux/i386/init-first.h: Work around buggy
	gcc <= 2.7.2.1 which optimizes away address operations on weak
	objects.

	* nss/nss_files/files-parse.c (INT_FIELD_MAYBE_NULL): New macro.
	Like INT_FIELD but also accept non-existing field.
	* shadow/sgetspent_r.c (LINE_PARSER): Use INT_FIELD_MAYBE_NULL
	for last four fields.
	* shadow/putspent.c (putspent): Print `:' after numeric value.

Mon Sep  9 02:42:48 1996  Richard Henderson  <rth@tamu.edu>

	* libio/stdio.h (BUFSIZ): Define using _IO_BUFSIZ.

Sun Sep  8 16:43:56 1996  Ulrich Drepper  <drepper@cygnus.com>

	* Make-dist: Filter out $(add-ons) from $(subdirs).
	Don't distribute TAGS files.
	($(tardir).tar): Remove dist.tar when all is done.
	* manual/Makefile (distribute): Add libc.info*.
	* libio/Makefile (distribute): Add Banner.
	* inet/Makefile (headers): Add netinet/tcp.h.

	* resolv/Makefile (libresolv-routines): Add getnetnamadr.

	* crypt-README: Removed.
	* gnu-stabs.h: Removed.

	* sysdeps/alpha/copysign.S: Renamed to...
	* sysdeps/alpha/s_copysign.S: ...this.
	* sysdeps/alpha/fabs.S: Renamed to...
	* sysdeps/alpha/s_fabs.S: ...this.

	* sysdeps/m68k/isinfl.c: Renamed to...
	* sysdeps/m68k/s_isinfl.c: ...this.
	* sysdeps/m68k/isnanl.c: Renamed to...
	* sysdeps/m68k/s_isnanl.c: ...this.

	* sysdeps/sparc/sqrt.c: Renamed to...
	* sysdeps/sparc/e_sqrt.c: ...this.  Function name now is
	__ieee754_sqrt.

	* sysdeps/generic/get_str.c: Removed.

	* sysdeps/ieee754/cbrt.c: Removed.
	* sysdeps/ieee754/drem.c: Removed.
	* sysdeps/ieee754/logb.c: Removed.
	* sysdeps/ieee754/sqrt.c: Removed.

	* sysdeps/stub/cbrt.c: Removed.
	* sysdeps/stub/cos.c: Removed.
	* sysdeps/stub/drem.c: Removed.
	* sysdeps/stub/isinf.c: Removed.
	* sysdeps/stub/isinfl.c: Removed.
	* sysdeps/stub/isnanl.c: Removed.
	* sysdeps/stub/logb.c: Removed.
	* sysdeps/stub/sin.c: Removed.
	* sysdeps/stub/sqrt.c: Removed.

	* sysdeps/tahoe/log10.c: Removed.

	* sysdeps/vax/index.s: Removed.
	* sysdeps/vax/rindex.s: Removed.
	* sysdeps/vax/bcmp.s: Removed.
	* sysdeps/vax/log10.c: Removed.
	* sysdeps/vax/infnan.c: Removed.
	* sysdeps/vax/Dist: Add fl.h.

	* sysdeps/unix/sysv/linux/alpha/Dist: Add llseek.S.

	* inet/rcmd.c (rcmd): Make messages more uniform.

Sun Sep  8 14:15:42 1996  Ulrich Drepper  <drepper@cygnus.com>

	* po/de.po: Update.
	* po/es.po: Update.
	* po/ko.po: Update.
	* po/pl.po: New file.
	* po/nl.po: New file.

	take care for a possible clash.  Nobody will name the domain
1996-09-10 02:00:15 +00:00
Ulrich Drepper c2bb8cabc5 third update from main archive 960907
Sat Sep  7 18:41:17 1996  Richard Henderson  <rth@tamu.edu>

	* Makeconfig (+link): Filter out start, pre & postinit from the
	generic depenancies as well.
	* Rules: Add start, pre & postinit to the dependancies of
	$(others) and $(tests).

	* configure.in: elf_dirs missing "sysdeps" component.

	* locale/Makefile (distribute): Add locale.c and localedef.c.
1996-09-08 02:16:48 +00:00
Ulrich Drepper 8ca5c11bdf second update 960907 from main archive
Sun Sep  8 02:36:02 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/SYS_libc.c (_libc_intl_domainname): Change value to "libc".
	This is consistent with all other GNU packages.  We shouldn't
	take care for a possible clash.  Somebody will name the domain
	of a package libc if it is not the libc itself.
	* MakeTAGS ($P/SYS_libc.pot): Rename to $P/libc.pot.
	* po/Makefile (domainname): Change to libc.
	(distribute): Now ship libc.pot.
	* catgets/gencat.c (usage): Use `PACKAGE' for package name in
	version information banner.
	Change bug report address to bug-glibc@prep not @gnu.
	* db/makedb.c (PACKAGE): New macro.  Set to _libc_intl_domain.
	(main): Use `PACKAGE' for package name in version information
	banner.
	Change bug report address to bug-glibc@prep not @gnu.
	* locale/programs/locale.c (main): Use `PACKAGE' for package name
 	in version information banner.
	Change bug report address to bug-glibc@prep not @gnu.
	* locale/programs/localedef.c (main): Likewise.

	* version.h (VERSION): Bump to 1.94.

	* libio/iofdopen: Initialize _lock field only if _IO_MTSAFE_IO.
1996-09-08 02:07:08 +00:00
Ulrich Drepper 499e7464ed update from main archive 960907
Sat Sep  7 14:00:33 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* catgets/catgets.c (catopen): Allocate sizeof(*result) bytes
	instead of sizeof(nl_catd) (which is just a pointer!).

Sat Sep  7 19:39:19 1996  Ulrich Drepper  <drepper@cygnus.com>

	* Makefile ($(objpfx)version-info.h): Generate from Banner files.
	* version.c (banner): Add contents of version-info.h to string.

	* Makerules: If $($(subdir)-version) is available name versioned
	shared library according to this value instead of glibc's version.

	* libio/Banner: New file.

	* elf/eval.c (funcall): Write error message in case function is
	not found.
	(eval): Recognize `_' in names.
1996-09-07 23:56:19 +00:00
Ulrich Drepper edf5b2d716 update from main archive 960906
Sat Sep  7 05:15:45 1996  Ulrich Drepper  <drepper@cygnus.com>

 	* libio/iofdopen: Initialize _lock field only if _IO_MTSAFE_IO.
	* libio/iofopen: Likewise.
	* libio/iofopncook.c: Likewise.
	* libio/iopopen.c: Likewise.
	* libio/iovsprintf.c: Likewise.
	* libio/iovsscanf.c: Likewise.
	* libio/memstream.c: Likewise.
	* libio/vasprintf.c: Likewise.
	* libio/vdprintf.c: Likewise.
	* libio/vsnprintf.c: Likewise.

Sat Sep  7 03:55:47 1996  Ulrich Drepper  <drepper@cygnus.com>

	* Makeconfig (soversions.mk): Also use shlib-versions files
	in add-on directories.
	* config.make.in (config-defines): Remove.  Not used anymore.
	(defines): New variable.  Initiliazed by @DEFINES@.
	* configure.in: Add AC_SUBST(DEFINES).

	* libio/Makefile (routines): When compiling reentrant libc add
 	clearerr_u, feof_u, ferror_u, fputc_u, getc_u, getchar_u,
 	iofflush_u, putc_u, putchar_u, ioflockfile.
	(CPPFLAGS): Add -D_IO_MTSAFE_IO for reentrant libc.

	* sysdeps/stub/libc-lock.h: Add stubs for __libc_cleanup_region_start
	and __libc_cleanup_region_end.

	* sysdeps/unix/i386/sysdep.S [_LIBC_REENTRANT]: Set errno
 	using __errno_location function.
	* sysdeps/unix/sysv/linux/i386/sysdep.S [_LIBC_REENTRANT]: Set errno
	using __errno_location function.
	(__errno_location): New function.
	* sysdeps/unix/sysv/linux/i386/sysdep.h [PIC]: Add second
 	syscall_error handler for reentrant libc.

	* sysdeps/unix/opendir.c: Remove unneeded `;'.

	* libio.h [_IO_MTSAFE_IO]: Include <pthread.h>.
	[!_IO_MTSAFE_IO]: Define _IO_flockfile and _IO_funlockfile
	as empty macros.
	* libioP.h: Include <libc-lock.h>.
	* libio/stdio.h: Add prototypes for *_locked and *_unlocked
	functions.

	* libio/clearerr.c: Use _IO_ protected versions of flockfile
	and funlockfile to be namespace clean.

	* libio/genops.c: Use __libc_lock_* macros for handling lock.

	* libio/iofdopen: Add initialization of _lock in _IO_FILE.
	* libio/iofopen: Likewise.
	* libio/iofopncook.c: Likewise.
	* libio/iopopen.c: Likewise.
	* libio/iovsprintf.c: Likewise.
	* libio/iovsscanf.c: Likewise.
	* libio/memstream.c: Likewise.
	* libio/vasprintf.c: Likewise.
	* libio/vdprintf.c: Likewise.
	* libio/vsnprintf.c: Likewise.

	* libio/fgetc.c: Use __libc_cleanup_region_* macros instead
	of flockfile etc.
	* libio/fputc.c: Likewise.
	* libio/freopen.c: Likewise.
	* libio/fseek.c: Likewise.
	* libio/getc.c: Likewise.
	* libio/getchar.c: Likewise.
	* libio/iofclose.c: Likewise.
	* libio/iofflush.c: Likewise.
	* libio/iofgetpos.c: Likewise.
	* libio/iofgets.c: Likewise.
	* libio/iofputs.c: Likewise.
	* libio/iofread.c: Likewise.
	* libio/iofsetpos.c: Likewise.
	* libio/ioftell.c: Likewise.
	* libio/iofwrite.c: Likewise.
	* libio/iogetdelim.c: Likewise.
	* libio/iogets.c: Likewise.
	* libio/ioputs.c: Likewise.
	* libio/iosetbuffer.c: Likewise.
	* libio/iosetvbuf.c: Likewise.
	* libio/ioungetc.c: Likewise.
	* libio/putc.c: Likewise.
	* libio/putchar.c: Likewise.
	* libio/rewind.c: Likewise.
	* stdio-common/vfprintf.c: Likewise.
	* stdio-common/vfscanf.c: Likewise.

	* libio/clearerr_u.c: Correct alias name.
	* libio/ferror_u.c: Likewise.
	* libio/fileno.c: Likewise.
	* libio/fputc_u.c: Likewise.
	* libio/getc.c: Likewise.
	* libio/getc_u.c: Likewise.
	* libio/getchar.c: Likewise.
	* libio/getchar_u.c: Likewise.
	* libio/putc.c: Likewise.
	* libio/putchar.c: Likewise.

	* libio/feof_u.c: Undefine macro with name of function before
 	definition of function itself.

	* libio/ioflockfile.c: New file.  Implementation of flockfile and
 	funlockfile.

	* libio/putchar_u.c: Fix typo.  Use stdout instead of fp.

	* malloc/malloc.h: Don't include <libc-lock.h> and don't declare
 	_malloc_loc.

	* malloc/free.c: Include <libc-lock.h>.
	* malloc/realloc.c: Likewise.
	* malloc/malloc-find.c: Likewise.
	* malloc/malloc-size.c: Likewise.
	* malloc/malloc-walk.c: Likewise.
	* malloc/memalign.c: Likewise.
	* malloc/malloc.c: Likewise.

	* sysdeps/i386/dl-machine.h: Correct clearing of _dl_starting_up.

Fri Sep  6 19:38:49 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/stub/libc-lock.h: Define __libc_lock_critical_start
	and __libc_lock_critical_end as empty macros.

	* malloc/malloc.h: Don't include <libc-lock.h> and don't declare
	__libc_malloc_lock.
	* malloc/free.c: Include <libc-lock.h>.
	* malloc/malloc-find.c: Likewise.
	* malloc/malloc-size.c: Likewise.
	* malloc/malloc-walk.c: Likewise.
	* malloc/malloc.c: Likewise.
	* malloc/memalign.c: Likewise.
	* malloc/realloc.c: Likewise.

	* Makefile: Undo change from Mon Sep  2 22:15:14 1996.  No more
	extra_solibs pass.
	* Rules: Likewise.
	* extra-lib.mk: Likewise.
	* manual/Makefile: Likewise.

	* db/Makefile (makedb): Choose dependecies based on build-shared.
	Patch by Andres Schwab.

	* sysdeps/posix/sysconf.c: Don't use PTHREAD_DESTRUCTOR_ITERATIONS
 	but _POSIX_THREAD_DESTRUCTOR_ITERATIONS.

	* sysdeps/unix/sysv/linux/errnos.h: New file.
	* sysdeps/unix/sysv/linux/schedbits.h: New file.
	* sysdeps/unix/sysv/linux/waitflags.h: New file.

	* sysdeps/unix/sysv/linux/gnu/types.h: Add definition of `key_t'.

Fri Sep  6 08:26:31 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* rpm/template: Fix typo in %build section.

Fri Sep  6 03:31:07 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/errnos.h: Don't define errno macro when
	building libc without thread support.
	* resolv/netdb.h: Likewise for h_errno macro.

Thu Sep  5 23:01:48 1996  Ulrich Drepper  <drepper@cygnus.com>

	* libc-symbols.h: Add new macro weak_const_function.  It's like
	weak_function, but the function is additionally marked as const.
	* features.h: Only include <sys/cdefs.h> if !__ASSEMBLER__.

Thu Sep  5 22:55:49 1996  Richard Henderson  <rth@tamu.edu>

	* inet/herrno.c (__h_errno_location): New function.
	(h_errno): Make strong_alias __h_errno so that we can access
	the variable even if `h_errno' is a macro.
	* resolv/netdb.h: Define macro h_errno to access thread specific
	version of h_errno variable.  Declare alias __h_errno for h_errno.
	* resolv/res_query (h_errno): Remove definition.
	* sysdeps/unix/sysv/linux/errnos.h [!__ASSEMBLER__ && __USE_REENTRANT]:
 	Add macro `errno' to get thread specific variable.
	* sysdeps/unix/alpha/sysdep.S [_LIBC_REENTRANT]: Set errno using
 	__errno_location function.
	(__errno_location): New function.

Thu Sep  5 21:08:44 1996  Ulrich Drepper  <drepper@cygnus.com>

	* posix/gnu/types.h: Remove definition of key_t.
	* sysdeps/generic/gnu/types.h: Move it to here.
	* sysdeps/unix/sysv/linux/gnu/types.h: Add Linux specific
	definition of key_t.

	* sysdeps/unix/sysv/linux/waitflags.h: New file.  Linux specific
	definitions.
	* sysdeps/unix/sysv/linux/schedbits.h: New file.  Include
	clone prototypes and associated flags.

Thu Sep  5 08:58:47 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/alpha/elf/start.S: Make _start global again.

	hertz.
	here.

Wed Sep  4 16:16:13 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/mach/hurd/send.c (__send): De-ANSI-fy.
	* sysdeps/mach/hurd/sendto.c (sendto): Likewise.
1996-09-07 04:10:57 +00:00
Karl Berry 474be527c8 Formatting change, define @pounds, etc. 1996-09-06 19:24:48 +00:00
Thomas Bushnell, BSG acf51e0261 *** empty log message ***
Thu Sep  5 13:18:25 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/i386/init-first.c (__libc_argc, __libc_argv):
	New variables.
	(init1): Initialize them.
	* hurd/hurdinit.c (_hurd_setproc): Now that happens to be
	available, pass __libc_argv in call to __proc_set_arg_locations.

	* gmon/gmon.c (write_hist): Call __profile_frequency instead of
	hertz. 
	(hertz): Delete function.
	* gmon/Makefile (routines): Add `prof-freq'.
	* sysdeps/generic/prof-freq.c: New file.
	* sysdeps/mach/hurd/prof-freq.c: New (stubby) file.
	* sysdeps/mach/hurd/profil.c (profile_tick): New variable.
	(update_waiter): Store frequency in profile_tick.
	(__profile_frequency): New function.

	* sysdeps/mach/hurd/sendto.c (sendto): Use prototype definition
	syntax.

	* Rules (generated): Restore reference to $(generated).

	* mach/Machrules (mig.uh, mig.__h): Don't include $(user-MIGFLAGS)
	here. 

 	* malloc/free.c (free): __lib_malloc_lock -> __libc_malloc_lock.
	
	* malloc/free.c: Provide extern decl of __libc_malloc_lock.
	* malloc/realloc.c: Likewise.
	* malloc/malloc-find.c: Likewise.
	* malloc/malloc-size.c: Likewise.
	* malloc/malloc-walk.c: Likewise.
	* malloc/memalign.c: Likewise.

  	* mach/Machrules (mig.uh, mig.__h): Include $(user-MIGFLAGS) and
1996-09-06 00:08:55 +00:00
Ulrich Drepper 57ba7bb471 update from main archive 960904
Thu Sep  5 03:20:42 1996  Ulrich Drepper  <drepper@cygnus.com>

	Change configuration and Makefiles to allow add-ons to have a
	sysdeps/ directory hierachy.
	* configure.in: Test for sysdeps/ directory in add-ons.  Before
	all test and searches in these hierachies, too.
	* Makeconfig (full-config-subdirs): Define based on $(config-sysdirs).
	Extend with $(..) if not absolute path.
	Use $(full-config-subdirs) where $(config-sysdirs) was used.
	* Makefile ($(objpfx)sysd-dirs): Use config-sysdirs.
	* MakeTAGS: Use $(full-config-subdirs).
	* Makerules: Change comment to libc.so link script.
	(sysdirs): Define based on $(full-config-subdirs).
	(sysd-Makefile): Define using config-sysdirs.
	(sysd-rules): Likewise.
	* sysdeps/unix/Makefile (sysd-syscalls): Define based on +sysdep-dirs.
	* sysdeps/unix/make-syscalls.sh: Remove basedir argument.

Wed Sep  4 01:32:21 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/k_cos.c: Rewritten for better accuracy.
	* sysdeps/m68k/fpu/k_sin.c: Likewise.
	* sysdeps/m68k/fpu/k_tan.c: Likewise.

Thu Sep  5 01:06:09 1996  Richard Henderson  <rth@tamu.edu>

	* malloc/free.c (free): Protect by using __libc_malloc_lock.
	* malloc/malloc-find.c (malloc_find_object_address): Likewise.
	* malloc/malloc-size.c (malloc_usable_size): Likewise.
	* malloc/malloc-walk.c (malloc_walk): Likewise.
	* malloc/memalign.c (memalign): Likewise.
	* malloc/realloc.c (realloc): Likewise.
	* malloc/malloc.c: Define __libc_malloc_lock.
	(_malloc_internal): Don't use `malloc'.  Instead look for
	`__malloc_hook' or call `_malloc_internal'.
	(malloc): Protect by using `__libc_malloc_lock'.
	* malloc/malloc.h: Declare `__libc_malloc_lock'.

Mon Sep  2 22:42:59 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/alpha/elf/start.S: Use weak_alias for __start
	instead of the hard definition.

	* sysdeps/alpha/dl-machine.h (RTLD_START): Add type info for
	_start and _dl_start_user.

	* sysdeps/unix/sysv/linux/alpha/init-first.h (SYSDEP_CALL_INIT):
	Make _dl_starting_up weak.  Add type info for NAME.

Mon Sep  2 22:15:14 1996  Richard Henderson  <rth@tamu.edu>

	* Makefile (all): Add extra_solibs pass.
	(+subdir_targets): Same.
	* Rules (extra_solibs): New phony empty target for subdirs without
	extra libs.
	* extra-lib.mk: Build lib*.so* in extra_solibs not lib-noranlib.
	* manual/Makefile: Add dummy extra_solibs target.

Sun Sep  1 15:41:22 1996  Richard Henderson  <rth@tamu.edu>

	* Makeconfig (+link): Add $(link-extra-libs).
	(link-extra-libs): New variable which expands to the full paths of
	the other libraries needed by a program, as controled by LDLIBS-$(@F).
	* db/Makefile: Use LDLIBS-makedb to link libdb not a dependency, as
	the later attempts to install the library before linking it.

	* sysdeps/unix/alpha/sysdep.S: Align errno.

	* sysdeps/unix/sysv/linux/alpha/ioperm.c (struct platform): Add
	hae_shift entry.
	(io): Move bus_memory_base and sparse_bus_memory_base into struct.
	(_hae_shift): New function.
	* sysdeps/unix/sysv/linux/alpha/sys/io.h: New file.  Prototypes
	for the bus query functions.

Sat Aug 31 18:14:54 1996  Richard Henderson  <rth@tamu.edu>

	* elf/dl-close.c (_dl_close): In static executables, map->l_prev
	can be NULL when unloading a library.

	* elf/dl-open.c (_dl_open): Pass __environ instead of __libc_envp
	to the library .init function.

	* sysdeps/alpha/dl-machine.h (elf_machine_rela):  Since we omitted
	part of the COPY reloc processing earlier, omit the rest now --
	we'll get into less trouble later when some fool does use a COPY.

	* sysdeps/unix/sysv/linux/init-first.c (init): Accept argc et al as
	parameters.  Move all argc and __libc_multiple_libcs calculation out
	to init-first.h.  Use __environ not __libc_envp.
	* sysdeps/unix/sysv/linux/alpha/init-first.h: Rewrite.
	* sysdeps/unix/sysv/linux/i386/init-first.h: Rewrite.

Thu Aug 29 20:26:40 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/posix/profil.c (profil): Don't clobber saved timer and
	signal settings when profiling was already turned on.

	* csu/gmon-start.c (__gmon_start__) [HAVE_INITFINI]: Protect from
	being called twice.

Wed Sep  4 01:31:50 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/i386/mmap.S: Test for
	0 < return value < -4096 and not < 0 to decide about failure.
	Reported by Andreas Jaeger.

Tue Sep  3 19:04:05 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdio-common/vfscanf.c (__vfscanf): Don't count EOF char
	in %c format.

Sat Aug 31 18:10:51 1996  Ulrich Drepper  <drepper@cygnus.com>

	* wcsmbs/wchar.h: Define prototypes for wcstoq and wcstouq only
	#ifdef __USE_GNU.

Sat Aug 31 12:34:29 1996  Ulrich Drepper  <drepper@cygnus.com>

	* version.c: Add missing newline character in banner.

	* sysdeps/unix/sysv/linux/alpha/Dist: Correct typo.
	* sysdeps/unix/sysv/linux/i386/Dist: Likewise.

Sat Aug 31 03:07:39 1996  Ulrich Drepper  <drepper@cygnus.com>

	* intl/l10nflist.c (_nl_normalize_codeset): We convert to lower
 	case, so don't prepend uppercase `ISO' for only numeric arg.
1996-09-05 02:49:18 +00:00
Thomas Bushnell, BSG db813f25f2 *** empty log message ***
Tue Sep  3 11:16:07 1996  Thomas Bushnell/ n/BSG  <thomas@gnu.ai.mit.edu>

	* shadow/lckpwdf.c (__ulckpwdf): Don't take address of LOCK in
 	call to __libc_lock_lock.

	* sysdeps/mach/hurd/send.c (__send): Declare BUF const.
	* sysdeps/mach/hurd/sendto.c (sendto): Likewise.

	* sysdeps/stub/ustat.c: Include <sys/ustat.h>.

	* misc/syslog.c (vsyslog): Fix typo (`mow_tm' -> `now_tm').
1996-09-03 22:24:21 +00:00
Thomas Bushnell, BSG 3112c3742d *** empty log message *** 1996-09-03 14:06:08 +00:00
Karl Berry 843be0d3b6 (\centerchfplain): Rewrite to use \chfplain, and to
actually center. 
(\unnchfplain): Just call \chfplain. 
(\chfplain): Rewrite to be generally callable. 
(\centerparametersmaybe): Hook, a no-op except with @centerchap.
1996-09-02 15:14:43 +00:00
Karl Berry b2cd2155a0 (\key): Do not uppercase the argument; key names can be mixed case, e.g., `Control'. 1996-08-31 19:08:16 +00:00
Ulrich Drepper adfa20781b update from main archive 960830
Fri Aug 30 19:55:27 1996  Ulrich Drepper  <drepper@cygnus.com>

	* libio/genops.c: Make _cleanup an alias of _IO_cleanup.
	Reported by Erik Troan.

Fri Aug 30 15:40:04 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/Dist: Add sys/procfs.h and
 	sys/sysmacros.h.  Reported by Curtiss <1CMC3466@IBM.MTSAC.EDU>.

Fri Aug 30 13:53:32 1996  Andreas Jaeger  <aj@arthur.pfalz.de>

	* sysdeps/unix/mman/syscalls.list: `mmap' has 6 arguments, not 5.

Fri Aug 30 13:01:10 1996  NIIBE Yutaka  <gniibe@mri.co.jp>

	* sysdeps/i386/fpu/__math.h (tan): Pop 1.0 in ST to get
	real result.

Fri Aug 30 03:33:33 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-ieee754/s_cbrtl.c: New file.  `long double'
	implementation.

	* sysdeps/unix/sysv/linux/i386/Dist: Add clone.S.
1996-08-31 00:13:23 +00:00
Thomas Bushnell, BSG 924840c542 *** empty log message ***
Fri Aug 30 13:39:21 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* Makerules (BUILD_CFLAGS): Use @(common-objpfx) for config.h, not
 	$(..).  Some rules (like sysdeps/posix/Makefile for mk-stdiolim)
 	do `cd' commands.
	(sed-remove-objpfx): Don't substitute for $(objpfx) anymore;
 	$(common-objpfx) is good enough.
	* Rules (common-generated): Provide default (empty) value.
	(dummy.o, dummy.c, empty.o, empty.c): Put these in
 	$(common-generated), not $(generated), and without $(..).
	(subdir_echo-distinfo): Treat $(common-generated) just like
 	$(generated).
	(generated): Depend on the (suitably mutated) $(common-generated)
 	files too.
	* Makerules (common-clean): Remove common-generated files too.
	* sysdeps/mach/hurd/Makefile (generated): Don't put errnos.d and
 	stamp-errnos here.
	(common-generated): Do put errnos.d and stamp-errnos here.
	(rpath-link): Don't use +=; $(rpath-link) is a colon separated list.

	* sysdeps/mach/hurd/Makefile (before-compile): Add auth; also add
 	auth to following rule to get it built.

	$(common-objpfx).  All uses in dependency lists changed.
1996-08-30 23:40:22 +00:00
Ulrich Drepper 6e953631df update from main archive 960829
Fri Aug 30 01:26:44 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/i386/Dist: Add close.S.
	* sysdeps/unix/sysv/linux/m68k/Dist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/Dist: Likewise.

	* version.c: Add comment about where to report bugs to.
	* catgets/gencat.c (usage): Likewise.
	* db/makedb.c (usage): Likewise.
	* locale/programs/locale.c (usage): Likewise.
	* locale/programs/localedef.c (usage): Likewise.

	* manual/socket.texi: A little bit better wording.

Thu Aug 29 18:03:06 1996  Ulrich Drepper  <drepper@cygnus.com>

	* Makerules: Make sure directory exists before generating stamp file.
	(BUILD_CFLAGS): Always refer to using $(..).
	* manual/Makefile: Make sure directory exists before generating
 	stamp file.
	(make-target-directory): Add macro definition.
	* sysdeps/generic/Makefile: Make sure directory exists before
 	generating stamp file.

	* Makefile (distribute): Add autolock.sh.  Reported by Fila Kolodny.

Tue Aug 27 10:06:22 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	When compiling in separate directory put objects into
	subdirectories matching the source layout.
	* Makeconfig (objpfx) [ifdef objdir]: Append $(subdir).
	When looking for configparms try in $(common-objpfx).
	Use $(common-objpfx)SUBDIR to find objects from other subdirectory
	builds.
	* Makerules: Add $(objpfx) to vpath list.
	(make-dummy-dep): Use $(common-objpfx) to avoid creating dummy.d
	more than once.  All uses in dependency lists changed.
	(+make-deps): Make target directory.
	(sed-remove-objpfx): Substitute $(common-objpfx).
	(do-ar, build-extra-lib, $(common-objpfx)stub-$(subdir)): Use
	$(objpfx) instead of $(objdir) for cd command.
	(O%-lib): Always find libc relative to $(..).
	(subdir-stamps): Collect stamp files from subdirs.
	(common-mostlyclean): Remove stub file in $(common-objpfx).
	* MakeTAGS ($P/siglist.pot): Find siglist.c in stdio-common.
	* Rules (dep-dummy-lib): Use $(common-objpfx) to avoid creating to
	more than once.
	($(objpfx)dummy.c, $(objpfx)empty.c): Change target name to use
	$(common-objfpx).  All uses in dependency lists changed.
	(generated): Prepend $(..) to names.
	* bare/Makefile ($(objpfx)lib$(config-vendor).a): Remove $(objpfx)
	from $@.
	* nss/Makefile ($(objpfx)libnss_dns.so, $(objpfx)libnss_db.so):
	Use $(common-objpfx) instead of $(..) in dependencies.
	* sysdeps/mach/Makefile (mach-objpfx): Unconditionally use
	$(common-objpfx) instead of $(..) and (objpfx).
	* sysdeps/mach/hurd/Makefile (hurd-objpfx): Likewise.
	(rpath-link): Likewise.
	(rpcuserlibs): Likewise.
	* sysdeps/unix/Makefile [$(subdir) = stdio-common]: Check for
	errlist.c in $(objpfx), not $(common-objpfx).
	($(common-objpfx)s-proto.d): Special rule not covered by pattern
	rule.
	* sysdeps/unix/make-syscalls.sh: Make syscall rules depending on
	s-proto.d in $(common-objpfx), not $(objpfx).

Thu Aug 29 17:45:49 1996  Ulrich Drepper  <drepper@cygnus.com>

	* nss/nsswitch.c (nss_dlerror_run): Free returned error
	string.

Thu Aug 29 15:53:33 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-ieee754/e_acoshl.c: New file. `long double'
 	implementation.
	* sysdeps/libm-ieee754/e_atanhl.c: Likewise.
	* sysdeps/libm-ieee754/e_remainderl.c: Likewise.
	* sysdeps/libm-ieee754/e_scalbl.c: Likewise.
	* sysdeps/libm-ieee754/s_asinhl.c: Likewise.
	* sysdeps/libm-ieee754/s_cosl.c: Likewise.
	* sysdeps/libm-ieee754/s_sinl.c: Likewise.
	* sysdeps/libm-ieee754/s_tanhl.c: Likewise.
	* sysdeps/libm-ieee754/s_tanl.c: Likewise.

	* stdio-common/printf_fp.c (__printf_fp): Use default value '.' if
1996-08-30 00:58:28 +00:00
Thomas Bushnell, BSG 747e2b4361 *** empty log message ***
* sysdeps/mach/hurd/setitimer.c (setitimer_locked): Correct
 	spelling error of _hurd_itimerval.
1996-08-29 21:09:30 +00:00
Thomas Bushnell, BSG bfb826224b *** empty log message ***
* mach/Makefile (MIGFLAGS-mach/mach4): Define variable.
  	mach/Machrules (mig.uh, mig.__h): Include $(user-MIGFLAGS) and
 	$(MIGFLAGS-$*) here too, as well as in the code-generating MiG calls.
1996-08-29 19:45:04 +00:00
Thomas Bushnell, BSG b77409e605 *** empty log message ***
* hurd/hurdinline.c: Include "hurd.h" for function definitions too.
1996-08-29 17:59:39 +00:00
Thomas Bushnell, BSG 9607dca3f4 *** empty log message ***
Thu Aug 29 12:00:30 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* stdio/fseek.c (fseek): Don't assume we know the file position;
 	other handles may have changed it.  So set STREAM.__offset to -1
 	before calling __stdio_check_offset to make sure we have a correct
 	value.
1996-08-29 16:02:14 +00:00
Ulrich Drepper 14bab8de31 update from main archive 960828
Thu Aug 29 00:28:08 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdio-common/printf_fp.c (__printf_fp): Use default value `.` if
 	`decimal' char is 0.

	* C-numeric.c (not_available): New constant.
	(_nl_C_LC_NUMERIC): Use `not_available' for grouping value.

	* nss/nsswitch.conf: Example configuration file.
	* nss/db-Makefile: Example Makefile for generation of databases
	for nss_db.
	* nss/Makefile (distribute): Add nsswitch.conf and db-Makefile.

1996-08-28  Paul Eggert  <eggert@twinsun.com>

	* C-messages.c (_nl_C_LC_MESSAGES): Set yesexpr to "^[yY]" and
 	noexpr to "^[nN]"; this conforms to POSIX.2.

	* C-time.c (_nl_C_LC_TIME): Change %d to %e in d_t_format, to
 	conform to POSIX.2.

1996-08-28  Paul Eggert  <eggert@twinsun.com>

	* C-monetary.c (not_available): New constant.
	(_nl_C_LC_MONETARY): Set mon_decimal_point to "", and set
 	mon_grouping, int_frac_digits, frac_digits, p_cs_precedes,
 	p_sep_by_space, n_cs_precedes, n_sep_by_space, p_sign_posn, and
 	n_sign_posn to CHAR_MAX, as required by the POSIX Standard.

Wed Aug 28 23:12:28 1996  Ulrich Drepper  <drepper@cygnus.com>

	* nss/nss_db/db-XXX.c: Correct function names.  They must be
	`_nss_db_*' instead of `_nss_files_*'.
	(lookup): `parse_line' returns 1 if succesful.
	* nss/nss_files/files-service.c (servbyname): Key for database
	must also contain protocol names.
	(servbypt): Likewise.
	Test must also check for protocol.  Add `proto' argument.

Tue Aug 27 09:56:13 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* MakeTAGS ($P/subdirs.pot): Prefix all file names, not only the
	first one.

Fri Aug 16 16:11:25 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* nss/nss_dns/dns-host.c (_nss_dns_gethostbyname2_r): Treat
 	EPFNOSUPPORT and EAFNOSUPPORT as implying NSS_STATUS_UNAVAIL just
 	like ECONNREFUSED already does.
	(_nss_dns_gethostbyaddr_r): Likewise.
	* nss/nss_dns/dns-network.c (_nss_dns_getnetbyname_r): Likewise.
	(_nss_dns_getnetbyaddr_r): Likewise.

	* sysdeps/mach/hurd/socket.c (socket): For message transmission
 	and RPC errors that indicate that the socket server is not really
 	present and able to do its job, turn the error into EPFNOSUPPORT.

	* sysdeps/generic/sbrk.c (__sbrk):  Get kernel brk address
	always only if in static libc or if statically linked program
	uses libc.so.
1996-08-29 00:31:18 +00:00
Ulrich Drepper b236e99d90 Upadte.
Tue Aug 27 17:45:21 1996  Ulrich Drepper  <drepper@cygnus.com>

	* Makerules: Add some test for correct version of GNU Make.

	* io/fcntl.h: Undo change from Mon Aug 26 22:22:17 1996.
	* sysdeps/unix/sysv/linux/fcntlbits.h: Place macros here instead.

	* sysdeps/generic/dl-sysdep.c: Initialize break address to
	avoid overwriting last page (OK, Roland).

Tue Aug 27 16:20:37 1996  Ulrich Drepper  <drepper@cygnus.com>

	* resolv/resolv.h: Update from BIND-4.9.5-T3A.
	* resolv/arpa/nameser.h: Likewise.
	* resolv/res_init.c: Likewise.
	* resolv/res_debug.c: Likewise.
	* resolv/res_mkquery.c: Likewise.

Tue Aug 27 15:47:04 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/dl-error.c (catch): Define errstring element not as const.
	(_dl_catch_error): ERRSTRING argument is not const pointer.
	Initialize *ERRSTRING and *OBJNAME separately.
	* elf/link.h: Change prototype for `_dl_catch_error'.

	* elf/dl-load.c (_dl_map_object): Use separate variable for
	copied NAME to avoid `const' warning.

	* elf/dlerror.c: Make `last_errstring' variable not const pointer.

	* elf/rtld.c: Implement reading of /etc/ld.so.preload.  This
	provides preloading even for SUID binaries.
	Add some more casts to avoid signed<->unsigned warnings.

Tue Aug 27 15:40:28 1996  NIIBE Yutaka  <gniibe@mri.co.jp>

	* posix/sys/types.h: Define loff_t.
	* sysdeps/unix/sysv/linux/gnu/types.h: Define __loff_t.

Mon Aug 26 16:31:33 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/setitimer.c (setitimer_locked): Tolerate NEW
	being null; in that case don't touch the timer at all (but do
	return something in OLD if necessary).

Mon Aug 26 13:35:16 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/i386/init-first.c (__libc_multiple_libcs): New
 	variable.
	* sysdeps/i386/init-first.c: Likewise.
	* sysdeps/stub/init-first.c: Likewise.
1996-08-28 00:26:07 +00:00
Ulrich Drepper 0b72c47ecf Update 960827.
Mon Aug 26 22:22:17 1996  Ulrich Drepper  <drepper@cygnus.com>

	* io/fcntl.h: Add definition for BSD F* macros.

	* misc/init-misc.c (__init_misc): Make static.
	* misc/Makefile: Pass -fkeep-inline-functions flag for init-misc.c.

	* configure.in: Add test for -fno-exception option of gcc.
	* config.make.in: Add definition of have-no-exceptions.
	* Makerules: Define no-exceptions based on have-no-exceptions.
	* csu/Makefile: When translating initfini.c pass $(no-exceptions).
	This is necessary for gcc >= ss-960816.

Mon Aug 26 17:16:48 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/alpha/dl-machine.h: Clear startup flag.

Fri Aug 16 21:17:50 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules (o-iterator-doit): Simplify reference to autolock
	script.

Fri Aug 16 21:17:50 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules (o-iterator-doit): Simplify reference to autolock
	script.

Sat Aug 24 15:27:41 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/mach/hurd/getcwd.c
	(_hurd_canonicalize_directory_name_internal): After resizing the
	buffer move the current contents to the end.  Correctly relocate
	file name pointer to upper half of the buffer.

Mon Aug 26 15:49:59 1996  Ulrich Drepper  <drepper@cygnus.com>

	* rtld.c (dl_main): Remove code to call ld.so initializer.  This
	was introduced for compatibility with Linux ld.so and would not
	be used anymore.  Now we don't have any good values to use as the
	parameters to the initializer so simply remove it.

Sun Aug 25 18:25:52 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* gmon/gmon.c (ERR): Don't write the terminating NUL.

	* sysdeps/posix/profil.c (profil): Disable the profiling timer at
	first.
	(profil_count): Use 64 bit arithmethic to avoid overflow.

	* sysdeps/generic/machine-gmon.h (MCOUNT): Fix argument order.

	* sysdeps/generic/ftime.c: Likewise.
1996-08-27 01:46:37 +00:00
Ulrich Drepper 59f63dc4f5 Regenerated: autoconf configure.in 1996-08-27 00:14:18 +00:00
Thomas Bushnell, BSG 485604b41c *** empty log message *** 1996-08-26 20:34:42 +00:00
Thomas Bushnell, BSG 548330d38e *** empty log message *** 1996-08-26 17:39:10 +00:00
Ulrich Drepper dcf0671d90 handle password file locking. 1996-08-26 10:28:45 +00:00
Ulrich Drepper 4884d0f03c Update.
Mon Aug 26 02:01:37 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/dl-open.c (_dl_open): Call library initializer with
	correct command line arguments and environment information.
	* elf/rtld.c (dl_main): Provide arguments to initializer of
	ld.so itself.

Sun Aug 25 19:15:46 1996  Ulrich Drepper  <drepper@cygnus.com>

	* shadow/Makefile (routines): Add lckpwdf.
	* shadow/lckpwdf.c: New file.

	* sysdeps/i386/fpu_control.h (_FPU_GETCW, _FPU_SETCW): Force
	argument `cw' to be placed in memory.  Patch by Torbjorn Granlund.

Sun Aug 25 12:53:37 1996  Ulrich Drepper  <drepper@cygnus.com>

	* configure.in: Add definition for `__eh_pc' and `__throw' in
	test for --no-whole-archive.  The compiler generates dependencies
	for this but none of the standard librares and startup files
	are used.  Necessary for gcc >= ss-960816.

Sun Aug 25 01:31:33 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/dl-error.c (_dl_signal_error): If error is catched, malloc
	return string since string might be on stack.
	* elf/dl-lookup.c (_dl_lookup_symbol): Undo change of
	Wed Aug 21 10:14:59 1996.
	* elf/dlerror.c (dlerror): Free error string after printing.
	(_dlerror_run): If error string was not printed since last error
	free string.
	* rtld.c (dl_main): Free error string in case of error.

Sat Aug 24 03:16:47 1996  Ulrich Drepper  <drepper@cygnus.com>

	* misc/syslog.c (vsyslog): Don't use `localtime' or `gmtime' since
 	this changes the global state for `localtime' and `gmtime'.  Use
 	`__localtime_r'/`__gmtime_r' instead.
	* resolv/res_debug.c (__p_secstodate): Likewise.
	* sysdeps/generoc/ftime.c: Likewise.
	* sysdeps/posix/gettimeofday.c: Likewise.
	Reported by Paul Eggert.

	* time/gmtime.c: De-ANSI-fy.
	* time/strftime.c: Don't call non-reentrant functions which change
 	state.

Wed Aug 21 10:14:59 1996  Richard Henderson  <rth@tamu.edu>

	* elf/dl-lookup.c (_dl_lookup_symbol): Malloc the error string rather
	than putting it on the stack.

Wed Aug 21 10:12:42 1996  Richard Henderson  <rth@tamu.edu>

	* elf/rtld.c (dl_main): When looking up symbols in response to --list,
	don't find .plt entries.

Mon Aug 19 23:18:12 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/dl-machine.h (RTLD_START): Optimize clearing
	_dl_starting_up.

Tue Aug 20 17:42:10 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* stdio/linewrap.c (line_wrap_stream): Initialize D->seek.
1996-08-26 00:14:11 +00:00
Ulrich Drepper 655a5796e7 Add definition of __eh_pc and __throw to --no-whole-archive test program. 1996-08-25 23:59:31 +00:00
Miles Bader 0f86f6c9a1 (line_wrap_stream): Initialize D->seek. 1996-08-20 21:55:39 +00:00
Karl Berry f77a6b9e45 (\key): Typeset a lozenge around the argument (from gildea@intouchsys.com). 1996-08-20 18:37:11 +00:00
Ulrich Drepper 39778c6c9e update from main archive 960818 1996-08-19 01:07:44 +00:00
Ulrich Drepper e9d258b798 Update.
Sat Aug 17 12:19:37 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* login/pututline_r.c (__pututline_r): Fix handling of case where
 	getutid_r() fails with ESRCH.  Reported by Miquel van Smoorenburg.

Wed Aug 14 14:10:54 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/ioperm.c (platform): Change entry
 	for "Jensen" so _bus_base() returns 0 on that platform.  Use
 	_bus_base_sparse() to determine base address of sparse memory.

	* sysdeps/unix/sysv/linux/sys/io.h: Enclose #include <asm/io.h>
	and declarations in __BEGIN_DECLS/__END_DECLS.

Sun Aug 18 13:37:09 1996  Ulrich Drepper  <drepper@cygnus.com>

	* err.h: New file.  Wrapper around misc/err.h.

	Correct solution of multiple initialization problem by
	Roland McGrath.
	* csu/initfini.c: Remove global variable __libc_is_static.
	* elf/rtld.c: Introduce new global variable _dl_starting_up.
	It's nonzero during the startup.
	* elf/dl-open.c (_dl_open): When _dl_start function is not
	available (i.e., if in static libc) set `__libc_multiple_libcs'
	to nonzero value.
	* sysdeps/unix/sysv/linux/init-first.c (__libc_multiple_libc):
	New global variable.
	(init): Undo change of Fri Aug  2 03:12:40 1996.
	Initialize `__libc_multiple_libcs' to nonzero only if this is
	a shared lib called from a statically linked program and don't
	call `personality' and `setfpucw' in this case either.
	* sysdeps/generic/sbrk.c: Undo change of Fri Aug  2 03:12:40 1996.
	Don't call brk(0) until `__libc_multiple_libcs' is nonzero.
	* sysdeps/i386/dl-machine.h (RTLD_START): Clear _dl_starting_up
	before jumping to user code.
	* sysdeps/m68k/dl-machine.h (RTLD_START): Likewise.

Fri Aug 16 04:59:01 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/init-first.c: Remove hack from
	Thu Aug  8 12:40:20 1996.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir) = csu]: Use
	-fkeep-inline-functions flag instead.
1996-08-18 14:47:31 +00:00
Thomas Bushnell, BSG a057e7dcc7 *** empty log message *** 1996-08-16 20:42:32 +00:00
Ulrich Drepper 2de99474c3 update from main archive 960815 1996-08-16 01:33:20 +00:00
Ulrich Drepper ad86485dcf Update.
Fri Aug 16 01:24:33 1996  Ulrich Drepper  <drepper@cygnus.com>

	* inet/ruserpass.c (userpass): Allocate buffer for .netrc file
	name dynamically.  Reported by Alan Cox.
	Uncomment warnings and mark as translatable.

	* time/strftime (strftime): Add implementation for %s and %z
	format.  Change behaviour for unknown format character: now
	simply print it.  This matches the behaviour of printf.
	Reported by Jim Meyering.
	* manual/time.texi: Document all formats and flags of strftime.

Thu Aug 15 18:02:51 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/rtld.c (dl_main): Loaded object has type lt_executable,
	not lt_library.

	* misc/sys/select.h: Define fd_set using typedef, not #define.
	Proposed by David Mosberger-Tang.

Thu Aug 15 12:48:21 1996  Ulrich Drepper  <drepper@cygnus.com>

	* po/header.pot: Use real description line.

Thu Aug 15 04:42:44 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/rtld.c (dl_main): When started with --verify prevent
	any warning.  Just exit with an error.
	* elf/ldd.sh.in: Don't run given object directly.  This fails for
	libraries.  Instead use $RTLD again.

	* sysdeps/generic/sbrk.c (__sbrk):  Get kernel brk address
	always only if in static libc or if statically linked program
	uses libc.so.
1996-08-16 00:23:04 +00:00
root 5699edb407 Regenerated from ../sysdeps/gnu/errlist.awk ../manual/errno.texi 1996-08-15 23:44:33 +00:00
Ulrich Drepper 706074a5bb update from main archive 960814 1996-08-15 01:23:29 +00:00
Ulrich Drepper 046e3001f9 Update for manual changes.
Thu Aug 15 02:08:59 1996  Ulrich Drepper  <drepper@cygnus.com>

	* manual/nss.texi: New file.  Document NSS.
	* manual/nsswitch.texi: New file.  Example configuration.

	* manual/string.texi: Document stpncpy, strdupa, and strndupa.
	* manual/example/strdupa.c: New file.  Example for strdupa.
1996-08-15 00:14:23 +00:00
Ulrich Drepper df21c8581a Update.
Wed Aug 14 21:36:16 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/strtod.c (STRTOD): Correct assertion about size of
	wint_t and wchar_t.  Reported by David Mosberger-Tang.

Mon Aug 12 22:40:16 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf/dl-lookup.c (_dl_lookup_symbol): Remove fifth parameter
	RELOC_ADDR and make NOPLT a set of flags.  All callers
	changed.  Delete condition that checks for resolving to the
	location being filled in.  Add condition to skip the
	executable's symbols if requested.
	* elf/link.h: Change declaration of _dl_lookup_symbol
	accordingly.
	(DL_LOOKUP_NOEXEC, DL_LOOKUP_NOPLT): New definitions.
	* elf/dl-reloc.c (RESOLVE): Remove second parameter and rename
	NOPLT to FLAGS.
	* elf/dl-runtime.c (RESOLVE): Likewise.
	* elf/rtld.c (RESOLVE): Likewise.
	* sysdeps/m68k/dl-machine.h (elf_machine_rela): Pass
	DL_LOOKUP_NOEXEC as second argument to the RESOLVE macro if
	processing a copy reloc, DL_LOOKUP_NOPLT for a jump slot
	reloc, zero otherwise.
	* sysdeps/alpha/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise.
	* sysdeps/mips/dl-machine.h (elf_machine_rel): Likewise.

Wed Aug 14 17:57:08 1996  Ulrich Drepper  <drepper@cygnus.com>

	* MakeTAGS: Clean up use of --omit-header and -n for xgettext.
	* po/header.pot: Add empty line at end.

Sun Aug 11 13:45:33 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* MakeTAGS (all-pot): Remove $P/errlist.pot, all error messages
 	are now in $P/stdio-common.pot.
	(XGETTEXTFLAGS-errlist.pot): Variable removed.

Mon Aug 12 19:25:03 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules (do-ar, o-iterator-doit): Compute path to autolock
 	script at run time, not configure time.
	* config.make.in, configure.in: Undo previous change.

Wed Aug 14 13:20:02 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/i386/close.S: Push return value of thread
	on stack as argument for `_exit'.  Reported by Andreas Schwab.

Mon Aug 12 19:36:25 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/m68k/clone.S: New file.

Wed Aug 14 04:22:35 1996  Richard Henderson  <rth@tamu.edu>

	* elf/dl-load.c (_dl_map_object): Save name in malloced memory.
	(_dl_map_object_from_fd): Free name on error.

Wed Aug 14 13:00:09 1996  Ulrich Drepper  <drepper@cygnus.com>

	* string/strdup.c: Use result of memcpy to avoid reloading.

Tue Aug 13 00:55:03 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* shadow/sgetspent_r.c (__sgetspent_r): Copy string to buffer, not
	the other way round.

	* resolv/Makefile (libresolv-routines): Add base64, inet_net_ntop,
 	inet_net_pton, inet_net.
	* resolv/arpa/nameser.h (__BIND): Update version number.
Mon Aug 12 19:03:22 1996  Thomas Bushnell n/BSG  <thomas@psilocin.gnu.ai.mit.edu>

	* sysdeps/generic/gnu/types.h: Declare __fd_mask as `unsigned long'.

	* mach/Makefile (mach/mach_host.uh): Depend on
 	$(objpfx)/mach-syscalls.mk.
	($(objpfx)mach-shortcuts.h): Depend on $(objpfx)mach/mach_host.h.
	(This fixes a make loop; thanks to Marcus Daniels
 	<marcus@sysc.pdx.edu> for the patch.)
1996-08-14 21:45:21 +00:00
Ulrich Drepper 13d84ccd53 Updated.
Tue Aug 13 20:51:21 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/canonicalize.c (canonicalize): Add cast to prevent
 	warning.

	* Makerules (o-iterator-doit): Use autolock.sh when running ranlib.

Tue Aug 13 18:26:45 1996  Ulrich Drepper  <drepper@cygnus.com>

	* nss/nsswitch.c (__nss_configure_lookup): Use fact that list is
 	sorted.

	Update from bind-4.9.5-T1A.
	* resolv/Makefile (routines): Add inet_net_ntop, inet_net_pton,
 	inet_net.
	(libresolv-routines): Add base64.

	* resolv/gethnamaddr.c: Include <sys/types.h>.
	* resolv/getnetnamadr.c: Likewise.
	* resolv/herror.c: Likewise.
	* resolv/inet_addr.c: Likewise.
	* resolv/nsap_addr.c: Likewise.
	* resolv/res_comp.c: Likewise.
	* resolv/res_data.c: Likewise.
	* resolv/res_init.c: Likewise.
	* resolv/res_mkquery.c: Likewise.
	* resolv/res_query.c: Likewise.
	* resolv/res_send.c: Likewise.

	* resolv/gethnamaddr.c [! SPRINTF_CHAR] (SPRINTF): Cast return
 	value of sprintf.
	* resolv/inet_ntop.c: Likewise.

	* resolv/gethnamaddr.c [BSD]: Include <stdlib.h>.
	Remove prototype of gethostbyname_ipv4.

	* resolv/inet_ntop.c, resolv/inet_pton.c: Use ISO C `mem*'
 	functions instead of BSD `b*' functions.

	* resolv/nsap_addr.c: Add copyright message.

	* resolv/res_comp.c: Remove comment explaining label format.
	(res_mailok): Correct check.

	* resolv/res_debug: Include missing headers.
	(__fp_nquery): Handle `unused', `ad', and `cd' bits.
	(__p_fqnname): New function to print FQDN from compressed name.
	(__p_rr): Use __p_fqnname.  Correct printing of ".  Handle T_TXT
	correctly.  Add handling of T_KEY and T_SIG.
	Handle class and type names by using name arrays instead of
	explicit `switch'es.
	(__sym_ston, __sym_ntos, __sym_ntop): New functions to use arrays.
	(__dn_count_labels, __p_secstodate): New functions.

	* resolv/resolv.h (__RES): Update version number.
	(res_sym): New type.
	Add #defines for new functions.
	Declare sym_ntos, sym_ntop, b64_ntop, b64_pton, __p_fqnname,
	__p_secstodate, dn_count_labels.

	* resolv/arpa/nameser.h (__BIND): Update verison number.
	Add KEYFLAG_* and ALGORITHM_* symbols.
	(HEADER): Add `ad' and `cd' flags.

	* inet/ient.h: Add prototypes for inet_neta, inet_net_ntop,
	and inet_net_pton.

	* manual/maint.texi: Document that we use bind-4.9.5.
	* INSTALL: Ditto.

Mon Aug 12 16:41:52 1996  Thomas Bushnell n/BSG  <thomas@gnu.ai.mit.edu>

        * io/getwd.c (getwd) [! PATH_MAX]: Don't assume that the user's
        buffer is any longer than the amount necessary to hold the
        filename; the Hurd getcwd uses the *entire* contents of the
        buffer, however long it is specified to be.
1996-08-14 02:26:32 +00:00
Thomas Bushnell, BSG acba7f1984 *** empty log message *** 1996-08-12 23:22:12 +00:00
Ulrich Drepper 15a83d04bb Few last minute patches from main on 960811 1996-08-12 03:00:59 +00:00
Ulrich Drepper a8874eadae Last minute change.
Mon Aug 12 04:33:09 1996  Ulrich Drepper  <drepper@cygnus.com>

	* nss/nsswitch.c (__nss_database_lookup): Always release locks
 	before returning.  Reported by Miles Bader.

	(distributes): Add databases.def.
1996-08-12 02:44:03 +00:00
Ulrich Drepper a3e59be8d1 Update.
Mon Aug 12 03:31:58 1996  Ulrich Drepper  <drepper@cygnus.com>

	* nss/nsswitch.c (__nss_configure_lookup):  New function.
	Allows to specify services.
	* nss/XXX-lookup.h: Rename database variable and make global.
	* nss/databases.def: New file.  Real names of all databases.

	* nss/nss.h: New file.  Contains declaration useful for users
	and service developers.
	* nss/nsswitch.h: Move some declarations to nss/nss.h.
	* nss.h: New file.  Wrapper around nss/nss.h.

	* nss/Makefile (headers): Add nss.h.
	(distributes): Add databases.h.

Sun Aug 11 16:19:42 1996  Ulrich Drepper  <drepper@cygnus.com>

	Help the poor people with fast machines by making sure only
	one `ar' commands works on the library.
	* autolock.sh: New file.  Written by Tom Tromey.
	* Makerules (do-ar): Call autolock.sh shell script instead of
	directly using `ar'.
	* config.make.in: Make configuration variable AUTOLOCK which
	gets initialized by configure.
	* configure.in: Define variable AUTOLOCK to point to autolock.sh
	script and mark it to substitute.

	* string/Makefile: Add -fno-builtin for tst-strlen.c, too.

	* elf/dl-lookup.c (_dl_lookup_symbol): Allow self-referencing.
	Patch by David Mosberger-Tang.

Sun Aug 11 01:12:38 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/alpha/dl-machine.h (elf_alpha_fix_plt): Optimize LD_BIND_NOW
	startup by moving Icache flush from here ...
	(ELF_MACHINE_RUNTIME_TRAMPOLINE): ... to here.
	(ELF_MACHINE_USER_ADDRESS_MASK): Delete; it is unused.

	* sysdeps/alpha/divrem.h: Update comment to reflect the actual
	calling conventions.  The code is already correct.

Sun Aug 11 01:06:42 1996  Richard Henderson  <rth@tamu.edu>

	* string/Makefile: Compile tester with -fno-builtin as we want to
	test our implementations, not gcc's.
1996-08-12 01:42:37 +00:00
Ulrich Drepper 267ca16a67 Update to 960810.
Sat Aug 10 13:17:27 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* shadow.h: New file.

	* sysdeps/unix/sysv/linux/netinet/in.h: Move
 	__BEGIN_DECLS/__END_DECLS up so ntohl() et al are bracketed as
 	well.

	* socket/sys/socket.h [__cplusplus]: Use old-style __SOCKADDR_ARG.
	g++ 2.7.2 (and earlier) has no transparent unions support.

Fri Aug  9 18:50:06 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/ioperm.c (_bus_base_sparse): New
	function to determine the base address of sparse bus memory.
	(APECS_*): Rename to CIA_*.
	(APECS_SPARSE_MEM, CIA_SPARSE_MEM): New macros.
	(platform): Add sparse_bus_memory_base member and initialize.
	(sparse_bus_memory_base): New variable.

Tue Aug  6 10:23:18 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/posix/ttyname_r.c (ttyname_r),
	sysdeps/posix/ttyname.c (ttyname): Return -1/NULL if
	!__isatty(fd) (POSIX.1 says so.)

	* sysdeps/unix/getlogin.c (getlogin): Fix to check fd 0 only.
  	This is not a gross hack, after all---for compatibility,
 	getlogin() really should check fd 0 only and not try to base its
 	operation on the controlling tty.

Wed Jul 17 10:54:20 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/getlogin.c (getlogin): Add static variable NAME,
 	change utmp_data from static to auto.

Sun Aug 11 02:56:08 1996  Ulrich Drepper  <drepper@cygnus.com>

	* posix/unistd.h [__USE_MISC]: Add prototype for `nice'.
	Reported by David Mosberger-Tang.
1996-08-11 01:08:23 +00:00
Ulrich Drepper f2b5d40e87 One more update.
Sat Aug 10 02:05:28 1996  Richard Henderson  <richard@twiddle.tamu.edu>

	* sysdeps/libm-ieee754/s_isnan.c [NO_LONG_DOUBLE]: Add strong
	alias to `__isnanl'.
1996-08-10 00:08:49 +00:00
Ulrich Drepper a8922de8c7 Update for 960809.
Fri Aug  9 17:38:58 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/sys/timex.h: Include <sys/time.h> to
	get `struct timeval'.
	* sysdeps/unix/sysv/linux/sys/acct.h: Get time_t from <time.h>.
	* sysdeps/unix/sysv/linux/sys/module.h: Get size_t from <stddef.h>.
	* sysdeps/unix/sysv/linux/sys/io.h: Get definition of __P.
	* sysdeps/unix/sysv/linux/sys/klog.h: Likewise.
	* gmon/sys/gmon.h: Include <sys/types.h> to get u_long.
	* sysdeps/unix/sysv/linux/direntry.h: Complete types in
	<linux/dirent.h>.
	* io/fts.h: Include <sys/types.h> to get dev_t.
	Reported by Matthias Urlichs.

	* sysdeps/posix/tempname.c [USE_IN_LIBIO]: Don't clear
 	_IO_file_flags.  It's the same as _flags.
	Reported by Miquel van Smoorenburg <miquels@Q.cistron.nl>.

Wed Aug  7 19:38:47 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/m68k/resourcebits.h: Add RLIMIT_AS.
1996-08-10 00:00:16 +00:00
Ulrich Drepper a5113b141c Update.
Thu Aug  8 16:17:38 1996  Ulrich Drepper  <drepper@cygnus.com>

	* pwd/getpwent.c: Define BUFLEN from NSS_BUFLEN_PASSWD.
	* pwd/getpwent_r.c: Likewise.
	* pwd/getpwnam.c: Likewise.
	* pwd/getpwnam_r.c: Likewise.
	* pwd/getpwuid.c: Likewise.
	* pwd/getpwuid_r.c: Likewise.

	* grp/getgrent.c: Define BUFLEN from NSS_BUFLEN_GROUP.
	* grp/getgrent_r.c: Likewise.
	* grp/getgrgid.c: Likewise.
	* grp/getgrgid_r.c: Likewise.
	* grp/getgrnam.c: Likewise.

	* pwd/fgetpwent_r.c: New file.  Reentrant version of fgetpwent.
	* pwd/fgetpwent.c: Rewrite to use fgetpwent_r.
	* pwd/Makefile (routines): Add fgetpwent_r.
	* pwd/pwd.h: Add prototypes for __fgetpwent_r and fgetpwent_r.

	* grp/fgetgrent_r.c: New file.  Reentrant version of fgetgrent.
	* grp/fgetgrent.c: Rewrite to use fgetgrent_r.
	* grp/Makefile (routines): Add fgetgrent_r.
	* grp/grp.h: Add prototypes for __fgetgrent_r and fgetgrent_r.

	Implement shadow password lookup functions.  This is no complete
	shadow password suite.
	* shadow/Makefile: New file.
	* shadow/fgetspent.c: New file.
	* shadow/fgetspent_r.c: New file.
	* shadow/getspent.c: New file.
	* shadow/getspent_r.c: New file.
	* shadow/getspnam.c: New file.
	* shadow/getspnam_r.c: New file.
	* shadow/putspent.c: New file.
	* shadow/sgetspent.c: New file.
	* shadow/sgetspent_r.c: New file.
	* shadow/shadow.h: New file.
	* shadow/spwd-lookup.c: New file.
	* shadow/nss_files/files-spwd.c: New file.

Thu Aug  8 13:33:45 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/ftime.c: New file.  Available system
 	call is only a stub.
	Reported by Matthias Urlichs.

	* Makeconfig [!default_cflags]: Change default value from `-g'
	to `-g -O'.

	* configure.in: Recognize i686.
	* sysdeps/i386/i686/Implies: Default on i586 optimized code.

Thu Aug  8 12:40:20 1996  Matthias Urlichs  <smurf@smurf.noris.de>

	* Makeconfig [$(build-omitfp) == yes]: Add to CFLAGS-.so
	value of CFLAGS-.o, not CFLAGS-o.

	* sysdeps/unix/sysv/linux/init-first.c (init): Add volatile
	pointer to ourself.  Otherwise `gcc -O3' optimized init away.

	sure that all tables in binary file are word-aligned.
1996-08-09 02:46:09 +00:00
Ulrich Drepper 233963756b Update.
Thu Aug  8 01:41:43 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/Makefile: Undo change of Tue Aug  6 14:27:11 1996.
	* elf/dl-support: Add definition of `_dl_sysdep_read_whole_file'.

Thu Aug  8 01:15:59 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/i386/fpu_control.h (_FPU_DEFAULT, _FPU_IEEE): Set
	to 0x137f to allow long double operations.

Sun Aug  4 13:12:05 1996  Richard Henderson  <rth@tamu.edu>

	Bug Fixes:

	* nss/nsswitch.c (_res): Remove redundant variable definition.
	The real one is in resolve/res_init.c, and having both prevents
	using -fno-common when building the shared library.
	* sunrpc/rpc_prot.c (_null_auth): Same.  Original is in rpc_common.c.

	* sysdeps/unix/sysv/linux/alpha/brk.S: When PIC, define __curbrk as
	a .bss object not a COMMON symbol.

	* sysdeps/alpha/bsd-_setjmp.S, sysdeps/alpha/bsd-setjmp.S: Must load
	$gp before referencing __sigsetjmp symbol.  Retain LITUSE for same.

	Optimizations:

	* sysdeps/alpha/strlen.S: Rearrange first-word setup and thense the
	main loop for better dual-issue on EV5.  Rearrange binary search to
	pipeline better and trim one instruction.

	Cosmetic Changes:

	* time/localtime.c (localtime_r): Move lock declaration back next to
	the comment where it was before the 960724 change.

	* INSTALL, manual/maint.texi: alpha-gnu-linux -> alpha-ANYTHING-linux.
	The second word is supposed to be the hardware manufacturer.

	* sysdeps/alpha/_mcount.S: Retain LITUSE for __mcount.
	* sysdeps/alpha/setjmp.S: Retain LITUSE for __sigsetjmp_aux.

	* sysdeps/alpha/divrem.h: More local labels, retain LITUSE for _mcount.

	* sysdeps/alpha/alphaev5/add_n.S, sysdeps/alpha/alphaev5/lshift.S,
	sysdeps/alpha/alphaev5/rshift.S, sysdeps/alpha/alphaev5/sub_n.S:
	Same cleanups as with EV4 GMP stuff.

Tue Jul 25 03:30:56 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/unix/sysv/linux/Makefile [misc] (sysdep_routines): Add clone.
	* sysdeps/unix/sysv/linux/alpha/clone.S: New file.
	* sysdeps/unix/sysv/linux/i386/clone.S: New file.

Sun Aug  4 00:12:41 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/gnu/types.h: Declare __fd_mask as
	`unsigned long'.

	* misc/sys/select.h: Declare fd_mask as alias of __fd_mask.

Sat Aug  3 16:20:02 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/ioperm.c (platform): Add entry for
 	Mikasa.

	* socket/sys/socket.h (send, __send, sendto): Declare buffer
 	pointer as __const.

	* string/tester.c (main): Test stpncpy.

	* sysdeps/generic/stpncpy.c (__stpncpy): Fix so it works without
 	segfault when called with an N that is not a multiple of four and
 	src[N-1]=='\0'.

	* misc/syslog.c (LogType): New variable.
	(openlog): If connect() with SOCK_DGRAM fails with EPROTOTYPE,
 	try again with SOCK_STREAM (the Linux syslogd uses a socket of the
 	latter type).
	(vsyslog): When LogType==SOCK_STREAM, also send ASCII NUL
 	terminator as a record-delimiter.  If __send(LogFile) fails,
	call closelog() so logfile gets re-opened next time.

Wed Aug  7 15:15:14 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/dl-open (_dl_open): Add cast to avoid warning.

	* manual/memory.texi: Improve some examples to give readers better
	advice: Use `stpcpy' instead of `strcat' if possible.
	* manual/string.texi: Document `strtok_r' and `strtok'.

	* sunrpc/Makefile: Move `+gccwarn' definition before inclusion
	of Makeconfig.
	[$(cross-compiling)=no]: Change test before making librpcsvc
	to this from $(cross-compile).
	Reported by Andreas Schwab.

Tue Aug  6 14:27:11 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/Makefile (routines): Move dl-sysdep to here...
	(rtld-routines): ...from here.  This should make static linking
	work again.

	* locale/setlocale.c: Add local variable `lock' and add code to
	`setlocale' to avoid simultaneous changing of global data.

	* catgets/catgets.c (catopen): Use `__strdup' instead of `strdup'.
	* catgets/open_catalog (__open_catalog): Use `__stpcpy', `__open',
	`__fstat', `__read', `__mmap', `__munmap' and `__close' instead
	of unprotected names.
1996-08-07 23:50:59 +00:00
Ulrich Drepper 80776ab80d Another correction.
tcgetattr.  We have weak aliases now.
	* stdlib/stdlib.h [__OPTIMIZE__ && __GNUC__ >= 2]: Remove
	"optimizations" for random functions.
1996-08-06 00:29:58 +00:00
Ulrich Drepper 6946d44b05 Correction.
tcgetattr.  We have weak aliases now.
  	* stdlib/stdlib.h [__OPTIMIZE__ && __GNUC__ >= 2]: Remove
 	"optimizations" for random functions.
1996-08-06 00:28:41 +00:00
Ulrich Drepper 08a3c37600 Update.
Tue Aug  6 01:13:56 1996  Ulrich Drepper  <drepper@cygnus.com>

	Clean name space according to ISO C, ISO C/Amd 1, and POSIX.1.
	This requires to rename several functions to use __ protected
	names.
	* dirent/dirent.h: Add prototypes of __opendir, __closedir,
	and __readdir.
	* sysdeps/mach/hurd/closedir.c: Prepend function name with __
	and make old name a weak alias.
	* sysdeps/mach/hurd/getrlimit.c: Likewise.
	* sysdeps/mach/hurd/opendir.c: Likewise.
	* sysdeps/mach/hurd/readdir.c: Likewise.
	* sysdeps/stub/closedir.c: Likewise.
	* sysdeps/stub/opendir.c: Likewise.
	* sysdeps/stub/readdir.c: Likewise.
	* sysdeps/unix/closedir.c: Likewise.
	* sysdeps/unix/opendir.c: Likewise.
	* sysdeps/unix/readdir.c: Likewise.

	* sysdeps/unix/opendir.c: Call `__fcntl' instead `fcntl'.

	* sysdeps/posix/getcwd.c: Call `__opendir', `__readdir',
	`__closedir' instead of unprotected names.

	* libio/filedoalloc.c (_IO_file_doallocate): Call `__isatty'
	instead of `isatty' since later is not part of ISO C.
	* libio/fileops.c (_IO_file_fopen): Call `__open' instead of
	`open' since later is not part of ISO C.

	* login/endutent.c (endutent): Call `__endutent_r', not
	`endutent_r'.
	* login/endutent_r.c: Rename defined function to `__endutent_r',
	make `endutent_r' weak alias.
	* login/getutent.c (getutent): Call `__getutent_r', not
	`getutent_r'.
	* login/getutid.c (getutid): Call `__getutid_r', not `getutid_r'.
	* login/getutid_r.c: Rename defined function to `__getutent_r',
	make `getutent_r' weak alias.
	* login/getutline.c (getutline): Call `__getutline_r', not
 	`getutline_r'.
	* login/getutline_r.c: Rename defined function to `__getutline_r',
	make `getutline_r' weak alias.
	* login/pututline_r.c: Rename defined function to `__pututline_r',
	make `pututline_r' weak alias.
	* login/setutent.c (setutent): Call `__setutline_r', not
 	`setutline_r'.
	* login/setutent_r.c: Rename defined function to `__setutline_r',
	make `setutline_r' weak alias.
	Rename `utmpname' to `__utmpname' and make former weak alias.
	(__utmpname): Call `__strdup', not `strdup'.
	* login/utmp.h: Add prototypes for name space clean reentrant
	versions.
	* sysdeps/unix/getlogin.c: Call `__ttyname_r', `__setutent_r',
	and `__endutent_r' instead of unprotected names.

	* math/math.h: Add prototype for `__matherr'.
	* sysdeps/libm-ieee754/k_standard.c: Call `__matherr' instead
	of `matherr'.

	* nss/getXXbyYY.c: Call __ protected reentrant function.
	* nss/getXXent.c: Likewise.
	* nss/getXXbyYY_r.c: Define `get*' function with __ protected
	name.  Make usual name a weak alias.
	* nss/getXXent_r.c: Likewise.

	* posix/unistd.h: Add prototype for `__ttyname_r'.
	* sysdeps/posix/ttyname_r.c: Rename function to `__ttyname_r'
	and make `ttyname_r' a weak alias.

	* resource/sys/resource.h: Add prototype for `__getrlimit'.
	* sysdeps/stub/getrlimit.c: Prepend function name with __
	and make old name a weak alias.
	* sysdeps/unix/syscalls.list: Rename system call to `__getrlimit'
	and make `getrlimit' weak alias.

	* libc/stdio/stdio.h: Add prototype for `__vscanf'.
	* libc/stdio/vscanf.c: De-ANSI-fy.
	Rename function to `__vscanf' and make `vscanf' a weak alias.
	* stdio-common/scanf.c (scanf): Use _IO_vscanf/__vscanf instead
 	of `vscanf'.

	* stdio-common/reg-printf.c: De-ANSI-fy.
	Rename function to `__register_printf_function' and make
	`register_printf_function' weak alias.

	* stdio-common/vfprintf.c: Call `__wcsrtombs' instead of
	`wcsrtombs'.

	* stdlib/mbstowcs.c: Call `__mbsrtowcs' instead of `mbsrtowcs'.
	* stdlib/mbtowc.c: Call `__mbrtowc' instead of `mbrtowc'.
	* stdlib/wcstombs.c: Call `__wcsrtombs' instead of `wcsrtombs'.
	* stdlib/wctomb.c: Call `__wcrtomb' instead of `wcrtomb'.
	* wcsmbs/mbrtowc.c: Prepend function name with __ and make old
 	name a weak alias.
	* wcsmbs/mbsrtowcs.c: Likewise.
	* wcsmbs/wcrtomb.c: Likewise.
	* wcsmbs/wcsrtombs.c: Likewise.
	* wcsmbs/wchar.h: Add prototypes for __ protected versions.

	* sysdeps/posix/sigsetmask.c (__sigsetmask): Call `__sigprocmask'
	instead of `sigprocmask'.


	* grp/grp.h [__USE_REENTRANT]: Add prototypes for reentrant
	version getgrent_r, getgrgid_r, and getgrnam_r.
	* pwd/pwd.h [__USE_REENTRANT]: Add prototypes for reentrant
	version getpwent_r, getpwuid_r, getpwnam_r and __ protected
	names.
	* resolv/netdb.h: Complete rewrite.  No more BSD ugliness.


	* misc/error.c (private_strerror): Translate messages from table,
	too.

	* io/fcntl.h: Pretty printing.
	* misc/fstab.h: Likewise.
	* misc/ttyent.h: Likewise.
	* resource/sys/resource.h: Likewise.
	* string/argz.h: Likewise.
	* string/envz.h: Likewise.

	Add support for symbols from POSIX.1c (POSIX threads).
	* posix/getconf.c: Handle new sysconf symbols.
	* posix/posix1_lim.h: Define _POSIX_TTY_NAME_MAX and
	_POSIX_LOGIN_NAME_MAX with minimal maximal values.
	* sysdeps/generic/confname.h: Define new symbols.
	* sysdeps/posix/sysconf.c: Handle new symbols.
	* sysdeps/stub/sysconf.c: Ditto.
	* sysdeps/unix/sysv/linux/sysconf.c: Removed.  Generic version
	is ok now.

	* sunrpc/rpc/xdr.h: Move definition of type `xdrproc_t' to
	have real prototype.

	* sysdeps/generic/resourcebits.h: Add macro definition for
	RLIMIT_* values.  Some sources test using #ifdef whether specific
	limit is available.
	* sysdeps/unix/bsd/sun/sunos4/resourcebits.h: Ditto.
	* sysdeps/unix/sysv/linux/resourcebits.h: Removed.  We need
	separate files for the architectures.
	* sysdeps/unix/sysv/linux/alpha/resourcebits.h: New file.
	* sysdeps/unix/sysv/linux/i386/resourcebits.h: New file.
	* sysdeps/unix/sysv/linux/m68k/resourcebits.h: New file.
	* sysdeps/unix/sysv/linux/mips/resourcebits.h: New file.

	* sysdeps/posix/getdtsz.c: Rewrite to use `__getrlimit' function
	and only default on `OPEN_MAX'.
	* sysdeps/unix/sysv/sysv4/getdtsz.c: Removed.  Default is already
	the POSIX version.

	* time/Makefile (routines): Add ctime_r.
	* time/asctime.c: Add implementation of `asctime_r'.  Make
	`asctime' implementation based on reentrant version.
	* time/ctime_r.c: New file.
	* time/time.h [__USE_REENTRANT]: Add definition of `asctime_r'
	and `ctime_r'.

Sat Aug  3 18:41:36 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* locale/C-ctype.c (_nl_C_LC_CTYPE_toupper): Fix EOF entry.
	(_nl_C_LC_CTYPE): Fix ordering.
	* locale/categories.def (LC_CTYPE): Add missing ctype-class32; fix
 	typo.

Sat Aug  3 12:31:06 1996  Richard Henderson  <rth@tamu.edu>

	* csu/initfini.c: Discover the maximum alignment generated by the
	compiler when emitting a function.
	(_init): Make sure the end of the crti fragment is aligned.
	(_fini): Likewise.

Fri Aug  2 03:12:40 1996  Ulrich Drepper  <drepper@cygnus.com>

	* initfini.c: (__libc_is_static): New variable.  Will be
 	initialized in init-first.c.  Some actions in the libc work
 	different when libc is static or dynamic.

	* sysdeps/unix/sysv/linux/init-first.c (init): Use
 	`__libc_is_static' variable to determine whether call to
 	`personality' and `setfpucw' is necessary.  When done set variable
 	to +-1 depending on library type.

	* locale/setlocale.c (setlocale): Use global variable
 	`__libc_enable_secure' instead of calling `get{,e}{g,u}id()' to
 	determine whether it's a SET[UG]ID program.

Fri Aug  2 14:40:22 1996  Roland McGrath  <roland@fast.cs.utah.edu>

	* Version 1.93 test release.

	* manual/Makefile: Use -include for chapters-incl too.

	* Makeconfig (+link): Add back start.o, mistakenly removed in last
	change.

Fri Aug  2 01:04:02 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* nss/Makefile (generated): Add db-*.c.

	* sysdeps/i386/sysdep.h: Get generic/sysdep.h explicitly instead of
	using #include_next.

	* configure.in (--enable-add-ons): Quote m4 macro args.

	* elf/rtld.c (dl_main): For --verify, fail if no dynamic section.

Thu Aug  1 14:40:03 1996  Roland McGrath  <roland@fast.cs.utah.edu>

	* sunrpc/Makefile [$(cross-compile)=no]: Test before making librpcsvc.

	* Makerules (build-shlib): Add -B$(csu-objpfx) to find crt[in].o there.

	* Makeconfig (+preinit, +postinit): Prepend $(csu-objpfx) here.
	(+link): Not here.

	* stdio-common/_itoa.h (_itoa_word): Declare unused to suppress
	warning when inline function is elided.
	* sysdeps/i386/dl-machine.h (elf_machine_matches_host): Likewise.
	(elf_machine_runtime_setup): Likewise.
	* elf/dynamic-link.h (elf_get_dynamic_info): Likewise.
	* sysdeps/i386/dl-machine.h (elf_machine_got): Likewise.
	(elf_machine_load_address): Likewise.

	* catgets/gencat.c: Include <locale.h>.

	* sysdeps/unix/mk-local_lim.c (param): Add SYMLOOP_MAX/MAXSYMLINKS.

	* login/logwtmp.c (logwtmp): Call time, not __time.

	* sysdeps/gnu/utmpbits.h (_HAVE_UT_PID): New macro.
	* login/login.c (login): Test [_HAVE_UT_PID] to use ut_pid member.
	* login/logwtmp.c (logwtmp): Likewise.

	* sysdeps/generic/ioctl-types.h (sizeof): Define to 0 around #if
	comparing ioctl macro values.

	* sysdeps/i386/sysdep.h: Do `#include_next <sysdep.h>'.

	* manual/Makefile: Use -include for chapters to suppress warning.

	* sysdeps/stub/socket.c: Fix type of TYPE arg.
	* sysdeps/stub/socketpair.c: Likewise.

	* sysdeps/stub/_exit.c (_exit): Remove obsolete __NORETURN keyword.

	* sysdeps/generic/sysdep.h: New file, broken out of ...
	* sysdeps/unix/sysdep.h: ... here.
	(C_LABEL): Moved out.

	* Makeconfig (soversions.mk): Don't use newfangled ${x%%y} syntax;
	stick to sed.  Do `exit 0' at end because while returns nonzero.

	* sysdeps/i386/sysdep.h: New file, broken out of ...
	* sysdeps/unix/i386/sysdep.h: ... here.  Generic asm macros moved out.

	* sysdeps/stub/stdio_lim.h (L_ctermid, L_cuserid): Macros removed.
	They are defined unconditionally in libio/stdio.h.

	* elf/dl-runtime.c: Include <stddef.h> for `NULL' defn.
	* elf/dl-cache.c: Likewise.

Mon Jul 29 19:20:05 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/Makefile [$(subdir == misc]
	(sysdep_headers): Add sys/sysmacros.h.
	* sysdeps/unix/sysv/linux/sys/sysmacros.h: New file.

 	tcgetattr.  We have weak aliases now.  * stdlib/stdlib.h
 	[__OPTIMIZE__ && __GNUC__ >= 2]: Remove "optimizations" for random
 	functions.
1996-08-06 00:25:29 +00:00
Ulrich Drepper ba3f9540ed Corrected handling of add-ons. 1996-08-05 20:16:29 +00:00
Karl Berry f2fec269bf (\heading, \subheading, \subsubheading): Can no
* texinfo.tex (\heading, \subheading, \subsubheading): Can no  
longer call the nonexistent \*secheadingi series. Instead, call  
\plain*secheading. 
(\plainsubsecheading, \plainsubsubsecheading): New macros, by analogy 
with \plainsecheading. 
(\unnumberedsubseczzz, \unnumberedsubsubseczzz): Call them.
1996-08-05 18:01:12 +00:00
Karl Berry 793fde8adb (\HEADINGSdouble, \HEADINGSsingle, HEADINGSdoubleafter, \HEADINGSsingleafter, \CHAPPAGoff, \CHAPPAGon, \CHAPPAGodd): Set \contentsalignmacro, analogous to \pagealignmacro. (\startcontents): Call \contentsalignmacro instead of \pagealignmacro. 1996-08-03 18:59:17 +00:00
Roland McGrath 08e5142a5b Fri Aug 2 14:40:22 1996 Roland McGrath <roland@fast.cs.utah.edu>
* manual/Makefile: Use -include for chapters-incl too.
1996-08-02 20:56:23 +00:00
Roland McGrath 0569100ebe Fri Aug 2 01:04:02 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* nss/Makefile (generated): Add db-*.c.
1996-08-02 16:10:33 +00:00
Karl Berry 9a01894149 Restoring good RCS id. 1996-08-02 15:12:28 +00:00
Roland McGrath e75154a665 Remade for alpha-1.93 1996-08-02 05:27:50 +00:00
Roland McGrath 9ebb936d99 Wed Jul 31 14:21:36 1996 Ulrich Drepper <drepper@cygnus.com>
* termios/termios.h [__OPTIMIZE__]: Remove "optimization" for
	tcgetattr.  We have weak aliases now.
	* stdlib/stdlib.h [__OPTIMIZE__ && __GNUC__ >= 2]: Remove
	"optimizations" for random functions.
1996-08-01 00:08:31 +00:00
Roland McGrath 033badd4fa Mon Jul 29 20:33:42 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/netinet/in.h (ntohl, ntohs, htonl,
	htons) [__BIG_ENDIAN]: #undef them before defining to avoid
	redefinition warning.

Mon Jul 29 20:28:27 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* time/time.h: Don't optimize tzset() to __tzset() which bypasses
	the __tzset_lock.

Tue Jul 30 15:14:50 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sunrpc/rpc/pmap_clnt.h: Fix botched patch for multiple inclusion
	protection.

Tue Jul 30 02:48:28 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/loadlocale.c (_nl_load_locale): Change cast to `size_t'
	to be 64-bit clean.
	Reported by Richard Henderson <rth@tamu.edu>.

Tue Jul 30 15:04:50 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* locale/programs/ld-collate.c (collate_output): Fix typo reported by
	David Miller.

Tue Jul 30 13:23:13 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/setlocale.c (setlocale): Don't try to free C locale
	data.
	Reported by Matthias Urlichs.
1996-07-31 09:45:04 +00:00
Roland McGrath d0320d682a Mon Jul 29 20:28:27 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* time/time.h: Don't optimize tzset() to __tzset() which bypasses
	the __tzset_lock.
1996-07-31 09:39:37 +00:00
Miles Bader 1f0917b7d3 Tue Jul 30 14:35:17 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/dl-sysdep.c	(__open): Use open_file.
 	(open_file): New function, contents mostly from __open.
	(_dl_sysdep_read_whole_file): New function.
1996-07-30 19:23:39 +00:00
Miles Bader a01680aa29 (open_file): New function, contents mostly from __open. (__open): Use open_file. (_dl_sysdep_read_whole_file): New function. 1996-07-30 19:23:06 +00:00
Roland McGrath 55ad485cee Tue Jul 30 15:14:50 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sunrpc/rpc/pmap_clnt.h: Fix botched patch for multiple inclusion
	protection.
1996-07-30 19:15:53 +00:00
Roland McGrath d69b7ce7ee Tue Jul 30 13:23:13 1996 Ulrich Drepper <drepper@cygnus.com>
* locale/setlocale.c (setlocale): Don't try to free C locale
	data.
	Reported by Matthias Urlichs.
1996-07-30 19:02:29 +00:00
Miles Bader b98f370ce8 Sat Jul 27 11:23:59 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/Makefile ($(common-objpfx)errnos.d): Quote
	`..' dots in sed search string.
1996-07-30 16:58:05 +00:00
Karl Berry ea6631a23d (\indexfonts): Make leading be 12pt. Otherwise, it's too crammed. (\smalllispx): Remove \setleading{10pt}. That was too small. (\doprintindex): Do not call \tex ... \Etex. Index files are Texinfo source, not TeX source, except for using \ instead of @ as the escape character (for now). 1996-07-29 19:08:10 +00:00
Roland McGrath 6b3a222416 Mon Jul 29 01:27:07 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sunrpc/rpc/rpc_msg.h: Fix botched patch for multiple inclusion
	protection.

	* configure.in: Grok `--enable-add-ons=DIR1,DIR2,...', and configure
	in those directories.
	* config.make.in (add-ons): New varaible, set from @subdirs@.
	* Makefile (subdirs): Added $(add-ons) at the end.
1996-07-29 05:54:17 +00:00
Roland McGrath ce7a5ef4bc Sun Jul 28 23:46:14 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/strftime.c (strftime: do_number): Initialize PRINTED to
	MAXDIGITS in case P is null and so sprintf is never actually called.

Mon Jul 29 02:46:23 1996  Ulrich Drepper  <drepper@cygnus.com>

	Add support for the to-be-written internationalized regexp.
	This code must be able to use collation symbols and collation
	equivalent classes.
	* locale/C-collate.c (_nl_C_LC_COLLATE_symbol_hash,
	_nl_C_LC_COLLATE_symbol_strings, _nl_C_LC_COLLATE_symbol_classes):
	New global variables for collation classes.
	* locale/categories.def: Add new descriptions for collation symbols
	and collation classes.
	* locale/langinfo.h: Add constants for collation symbols and
	collation classes.
	* locale/lc-collate.c: Add new global variables for collation symbols
	and collation classes.
	(_nl_postload_collate): Initialize new variables.
	* locale/programs/ld-collate.c: Add code to emit tables for
	collation symbols and collation classes.
	* locale/programs/locales.h: Change prototype for `collate_output'.
	* locale/programs/locfile.c (write_all_categories): Call
	`collate_output' with new argument.
	* locale/localeinfo.h: Add declaration for new global vars.
	(union locale_data_value): New member wstr for `wchar_t' strings.
	* locale/programs/locale-spec.c: Handle `collate-classes'
	keyword and print information about available collation classes.
	* locale/strlen-hash.h: New file.  Simple hashing function which
	takes a string with known length.
	* locale/Makefile (distribute): Add strlen-hash.h.
	(locale-modules): New var.  Additional files for `locale' program.

	* locale/C-ctype.c: Rewrite to avoid using string for giving values
	which are of type `u_int32_t'.
	Correct entry for EOF in toupper and tolower tables.

	* locale/loadlocale.c (_nl_load_locale):  Add cast to prevent
	warning.

	* locale/programs/ld-ctype.c (ctype_output): Add code to make
	sure that all tables in binary file are words aligned.

	* locale/programs/locfile.c (write_locale_data): Correct handling
	of LC_MESSAGES locale.  Create directory if necessary.

	* locale/setlocale.c (setlocale): Add cast to avoid warning.

	* string/string.h: Add prototype for `__strndup'.

Wed Jul 24 19:10:00 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* wcsmbs/mbrtowc.c: Remove unused variable.

Sun Jul 28 22:40:25 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/configure.in (LIBC_LINUX_VERSION): Update to
	2.0.10; some problems were reported with an earlier version, and this
	one is known to work.

	* sysdeps/generic/dl-sysdep.c (__libc_enable_secure): New variable.
	* sysdeps/mach/hurd/dl-sysdep.c: Likewise.
1996-07-29 03:49:00 +00:00
Roland McGrath cddcfecfd1 Sat Jul 27 13:02:09 1996 Ulrich Drepper <drepper@cygnus.com>
* elf/rtld.c (dl_main): Ignore arguments when environment variable
 	LD_TRACE_LOADED_OBJECTS is set.

Sun Jul 28 19:42:51 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Initialize
	__libc_enable_secure instead of _dl_secure.
	* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start): Likewise.
	* elf/dl-load.c (_dl_map_object): Check __libc_enable_secure instead
	of _dl_secure.
	* elf/Makefile (routines): Add enbl-secure.
	(elide-routines.so): Here too.
	* sysdeps/generic/enbl-secure.c: New file.
	* posix/unistd.h [__USE_GNU]: Declare `__libc_enable_secure' flag.
	* elf/dl-support.c (_dl_secure): Variable removed.
	* elf/rtld.c: Likewise.  Replace all uses with __libc_enable_secure.

Sun Jul 28 19:26:40 1996  David S. Miller  <dm@neteng.engr.sgi.com>

	* sysdeps/mips/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE):
	Declare _dl_runtime_resolve with __attribute__ ((unused)) so the
	compiler doesn't elide it.
	(elf_machine_rel): Follow Jul 14 change in sysdeps/i386/dl-machine.h.
1996-07-29 00:18:42 +00:00
Roland McGrath 40fa2c8c2f Sun Jul 28 19:26:40 1996 David S. Miller <dm@neteng.engr.sgi.com>
* sysdeps/mips/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE):
	Declare _dl_runtime_resolve with __attribute__ ((unused)) so the
	compiler doesn't elide it.
	(elf_machine_rel): Follow Jul 14 change in sysdeps/i386/dl-machine.h.
1996-07-28 23:43:36 +00:00
Karl Berry cd4e176cbf (paragraphindent): Move to more reasonable place in the source file. (chapfonts, secfonts, subsecfonts, indexfonts): Call \setleading. (\chfplain, \secheading, \plainsecheading, \subsecheading, \subsubheading): Rewrite to properly \hangindent the title. (\sectionheading): New generic macro to print section titles. 1996-07-28 20:57:40 +00:00
Karl Berry 9e9f9cc23f Initial revision 1996-07-28 20:55:30 +00:00
Miles Bader 5f6a519f47 ($(common-objpfx)errnos.d): Quote `..' dots in sed search string. 1996-07-27 16:49:26 +00:00
Roland McGrath 6f25696828 Sat Jul 27 04:37:34 1996 Ulrich Drepper <drepper@cygnus.com>
* string/string.h (strndupa): Change to use return value of
	`memcpy' for more performance.
	* string/strndup.c: Likewise.
1996-07-27 09:36:38 +00:00
Roland McGrath 61965e9b17 Sat Jul 27 02:58:49 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/rtld.c (dl_main): Take new option --verify when run directly.
	In verify mode, exit with status zero iff the argument object's
	PT_INTERP matches argv[0].
	* elf/ldd.sh.in: Use ${RTLD} --verify and only run the program if it
	exits with zero status.  This makes `ldd' secure again.

Fri Jul 26 22:49:58 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/rtld.c (dl_main): Implement LD_TRACE_LOADED_OBJECTS
	environment variable handling.  This makes the dynamic linker
	only print loaded libraries and quit.

	* elf/ldd.sh.in: Don't use `rtld --list' but instead
	LD_TRACE_LOADED_OBJECTS environment variable to print needed
	objects.

Sat Jul 27 02:03:26 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* db/makedb.c (main): Print version on stdout, not stderr.  Don't exit
	after printing version until after doing usage for --help.
	(long_options, main, usage): Rename -l/--lowercase option to
	-f/--fold-case (-f matches sort).

Sat Jul 27 04:32:31 1996  Ulrich Drepper  <drepper@cygnus.com>

	* db/makedb.c: New file.  Implement program to create simple <db.h>
	database from textual input.  This will be used for nss_db.

Sat Jul 27 01:24:05 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sunrpc/rpc/auth_unix.h: Fix misapplied patches in last changes.
	* sunrpc/rpc/pmap_clnt.h: Likewise.
	* sunrpc/rpc/auth.h: Likewise.
	* sunrpc/rpc/pmap_rmt.h: Likewise.
	* sunrpc/rpc/rpc_msg.h: Likewise.

Sat Jul 27 04:37:34 1996  Ulrich Drepper  <drepper@cygnus.com>

	* string/string.h (strndupa): Change to use return value of
	`memcpy' for more performance.
	* string/strndup.c: Likewise.

	* string/string.h (strdupa): Don't call __builtin_alloca in argument.
	This might lead to problems.
	(strndupa): Likewise.
1996-07-27 07:29:13 +00:00
Roland McGrath fc933e284e Fri Jul 26 15:24:25 1996 Ulrich Drepper <drepper@cygnus.com>
* sunrpc/rpc/auth.h: Add protection against multiple inclusion
	and change K&R prototypes to ANSI prototypes.
	* sunrpc/rpc/auth_unix.h: Ditto.
	* sunrpc/rpc/clnt.h: Ditto.
	* sunrpc/rpc/pmap_clnt.h: Ditto.
	* sunrpc/rpc/pmap_prot.h: Ditto.
	* sunrpc/rpc/pmap_rmt.h: Ditto.
	* sunrpc/rpc/rpc_msg.h: Ditto.
	* sunrpc/rpc/svc.h: Ditto.
	* sunrpc/rpc/svc_auth.h: Ditto.
	* sunrpc/rpc/xdr.h: Ditto.

Fri Jul 26 18:06:58 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sunrpc/rpc/auth.h: Add __BEGIN_DECLS and __END_DECLS.
	* sunrpc/rpc/auth_unix.h: Likewise.
	* sunrpc/rpc/clnt.h: Likewise.
	* sunrpc/rpc/netdb.h: Likewise.
	* sunrpc/rpc/pmap_clnt.h: Likewise.
	* sunrpc/rpc/pmap_prot.h: Likewise.
	* sunrpc/rpc/rpc_msg.h: Likewise.
	* sunrpc/rpc/svc.h: Likewise.
	* sunrpc/rpc/svc_auth.h: Likewise.
	* sunrpc/rpc/xdr.h: Likewise.

	* sunrpc/rpc/pmap_clnt.h: Move definition of type `resultproc_t'
	to here from...
	* sunrpc/pmap_rmt.c: ...here.
1996-07-27 02:04:33 +00:00
Roland McGrath 7443a5a8a4 Fri Jul 26 20:39:42 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* ctype/test_ctype.c: Test EOF too.
1996-07-27 00:40:06 +00:00
Roland McGrath 4f2a1df0d2 Fri Jul 26 00:36:50 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* ctype/test_ctype.c: Test EOF too.
1996-07-27 00:32:20 +00:00
Miles Bader 4627647c99 Fri Jul 26 16:10:43 1996 Miles Bader <miles@gnu.ai.mit.edu>
* login/pututline_r.c (pututline_r): Only call getutid_r if ID has a
	valid ut_id field.
	* login/getutid_r.c (getutid_r): Mark UTMP_DATA->loc_utmp invalid
	if a search fails.
1996-07-26 21:03:47 +00:00
Miles Bader d4eaba51e7 (getutid_r): Mark UTMP_DATA->loc_utmp invalid if a search fails. 1996-07-26 21:01:48 +00:00
Roland McGrath fa8463e5ed Fri Jul 26 00:36:50 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mips/dl-machine.h: New file, contributed by Kazumoto Kojima
	<kkojima@info.kanagawa-u.ac.jp>.
1996-07-26 04:37:35 +00:00
Roland McGrath 036cc82fbc Fri Jul 26 04:41:28 1996 Ulrich Drepper <drepper@cygnus.com>
* intl/libintl.h: Define optimizing macros if __OPTIMIZE__ is
	defined, not __OPTIMIZED.
	(_nl_msg_cat_cntr): Move declaration outside macro definition
	to prevent "nested extern" warning.
	(dcgettext): Rename local variable `result' to `__result'.

Thu Jul 25 22:46:30 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* locale/programs/localedef.c (__progname): Remove decl.
	(main): Use program_invocation_short_name instead of __progname.
	(usage): Use program_invocation_name instead of __progname.

Fri Jul 26 03:46:08 1996  Ulrich Drepper  <drepper@cygnus.com>

	* catgets/gencat.c: Use "libc" instead of PACKAGE.
	* locale/localedef.c: Ditto.
	* locale/locale.c: Ditto.

	* locale/findlocale.c (_nl_find_locale): Little optimization.
	Use new function `strndup'.

	* locale/loadlocale.c: Little optimization.  Use constant value
	from `_nl_category_num_items' instead of byte-order dependend
	value from file.

	* locale/programs/ld-time.c (time_add): Correct string constant.

	* locale/programs/locale-spec.c: New file.
	* locale/programs/locale.c: Call `locale_special' function if
	no other field matches.

	* locale/programs/localedef.c: No need to define `program_name'.
	Use global variable `__progname'.

	* locale/programs/locfile.c (write_locale_data): Always write
	LC_MESSAGES data in LC_MESSAGES/SYS_LC_MESSAGES file.  This is
	necessary since message catalogs are also installed in the
	LC_MESSAGES/ directory.

	* locale/programs/stringtrans.c (ADDC): Correctly use `encode_char'
	function instead of writing single bytes.
	(encode_char): Also handle little endian.

	* locale/setlocale.c (new_composite_name): Little optimization.
	Use return value of `memcpy'.

	* misc/ttyent.h: Pretty print prototypes, add missing parameter
	names, prepend parameter names with __  and use `__const' instead
	of `const'.
	* posix/unistd.h: Ditto.
	* stdlib/stdlib.h: Ditto.
	* string/string.h: Ditto.

	* posix/getconf.c: De-ASNI-fy.  Recognize POSIX.2 constant names.
	Use `error' function instead of doing it by hand.
	* sysdeps/posix/sysconf.c: De-ANSI-fy.
	Handle _SC_COLL_WEIGHTS_MAX.
	* sysdeps/stub/sysconf.c: Handle _SC_CHARCLASS_NAME_MAX,
	_SC_COLL_WEIGHTS_MAX, _SC_EQUIV_CLASS_MAX, _SC_2_LOCALEDEF
	since these do depend on the platform.
	Add POSIX.4 symbols.

	* posix/posix2_lim.h: Add missing definition of
	_POSIX2_COLL_WEIGHTS_MAX.
	Change _POSIX2_EQUIV_CLASS_MAX and _POSIX2_CHARCLASS_NAME_MAX
	to high values since we have no fixed limit.

	* sysdeps/generic/confname.h: Add _SC_PAGE_SIZE as alias for
	_SC_PAGESIZE for buggy systems (= HP UX) out there.

	* wcsmbs/Makefile (routines): Add mbsnrtowcs and wcsnrtombs.
	* wcsmbs/mbsnrtowcs.c: New file.  Non-standard implementation.
	* wcsmbs/wcsnrtombs.c: Ditto.
	* wcsmbs/wchar.h [__USE_GNU]: Add prototypes for mbsnrtowcs and
	wcsnrtombs.

Thu Jul 25 00:25:54  Richard Henderson  <rth@tamu.edu>

	* nss/nss_db/db-XXX.c: Kill trailing ; from lock defn as a matter of
	course.
	* nss/getXXent_r.c: Likewise.
	* nss/nsswitch.c: Likewise.
	* nss/nss_files/files-XXX.c: Likewise.
	* sysdeps/mach/hurd/dirstream.h (struct __dirstream): Likewise.
	* sysdeps/unix/bsd/telldir.c (struct record): Likewise.
	* sysdeps/unix/dirstream.h (struct __dirstream): Likewise.
1996-07-26 04:35:31 +00:00
Roland McGrath 1e16111cf1 Regenerated
Sat Jul 20 21:55:31 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	Win32 hacks from <Rob_Tulloh@tivoli.com>.
	* posix/glob.c [WIN32]: Don't include <pwd.h>; don't use d_ino;
	use void * for my_realloc; include <malloc.h> for alloca.
	(glob) [WIN32]: Use "c:/users/default" for ~ if no HOME variable.
	* posix/fnmatch.h [WIN32]: Use prototypes even if [!__STDC__].
	* posix/glob.h: Likewise.

Fri Jul 19 16:56:41 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* posix/glob.h [!_AMIGA && !VMS]: Check this instead of just [!_AMIGA]
	for `struct stat;' forward decl.
1996-07-26 00:34:28 +00:00
Roland McGrath 4311b2a60c Thu Jul 25 00:53:06 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/configure.in (LIBC_LINUX_VERSION): New
	macro, now put the needed Linux version just once, here; update to
	needing linux-2.0.3 headers.
	(libc_cv_linuxVER): New macro derived from that.
	(kernel header check): Use those macros and some m4 magic to replace
	hard-coded `201' and `2.0.1' in several places.

	* Makerules ($(libdir)/libc.so): Fix typos in generated comment.

Wed Jul 24 17:02:30 1996  Ulrich Drepper  <drepper@cygnus.com>

	* time/localtime.c: Move lock variable declaration to end of
	variable declarations since if is a dummy macro the ; at the
	end terminates the variable section of the function.

	* time/tzset.c: Undefine `tzset' before function declaration.
	Use `weak_function' macro instead of `weak_symbol'.

Wed Jul 24 18:57:33 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/strtouq.c: Additional weak alias is `strtoull', not
	`strotull'.

Wed Jul 24 18:26:23 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/C-ctype.c: Increment number of fields after change
	from Wed Jun 19 03:24:58 1996.
1996-07-25 22:41:27 +00:00
Roland McGrath c7fd2f4783 Tue Jul 23 18:13:37 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/Makefile (rpcuserlibs): New variable.
	($(common-objpfx)libc.so): Move deps into that, use it.
	[$(subdir) = elf] ($(objpfx)librtld.so): Depend on
	$(rpcuserlibs:.so=_pic.a).
	* elf/Makefile ($(objpfx)librtld.so): Just depend on libc_pic.a; don't
	use $(LDLIBS-c.so).

Thu Jul 18 21:41:25 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/generic/stpncpy.c: Fix semantics to make `stpncpy (d, s,
 	n)' equivalent to `strncpy (d, s, n), d += strnlen (d, n)'.
1996-07-23 22:18:45 +00:00
Roland McGrath b24be05f19 Tue Jul 23 02:49:58 1996 Ulrich Drepper <drepper@cygnus.com>
* locale/iso-4217.def: Add India to comment for symbol "INR ".
	Reported by Raja R Harinath  <harinath@cs.umn.edu>.

Sat Jul 20 14:03:45 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/dl-machine.h (elf_machine_rela): Remove bogus
	#undef RESOLVE.

	* time/tzset.c: Include <libc-lock.h>.
	(__tzset_lock): New lock variable.
	(tzset): New function (weak defn), no longer weak alias for __tzset.
	Call __tzset while holding __tzset_lock.
	* time/localtime.c: Include <libc-lock.h>.
	(__localtime_r): Hold __tzset_lock while doing the work.
1996-07-23 21:40:11 +00:00
Roland McGrath e3047adb46 Sun Jul 21 06:48:38 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/generic/setenv.c (__environ): Change conditional for #define
	from [!HAVE_GNU_LD] to [!_LIBC].
	[_LIBC]: Include <libc-lock.h> and define a lock.
	(LOCK, UNLOCK): New macros, no-ops for [! _LIBC].
	(setenv, unsetenv): Use them.

Sat Jul 20 21:55:31 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	Win32 hacks from <Rob_Tulloh@tivoli.com>.
	* posix/glob.c [WIN32]: Don't include <pwd.h>; don't use d_ino;
	use void * for my_realloc; include <malloc.h> for alloca.
	(glob) [WIN32]: Use "c:/users/default" for ~ if no HOME variable.
	* posix/fnmatch.h [WIN32]: Use prototypes even if [!__STDC__].
	* posix/glob.h: Likewise.
1996-07-21 11:09:58 +00:00
Roland McGrath 9e0f40723e Sun Jul 21 06:48:38 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/generic/setenv.c (__environ): Change conditional for #define
	from [!HAVE_GNU_LD] to [!_LIBC].
	[_LIBC]: Include <libc-lock.h> and define a lock.
	(LOCK, UNLOCK): New macros, no-ops for [! _LIBC].
	(setenv, unsetenv): Use them.
1996-07-21 11:09:45 +00:00
Miles Bader c199a24feb Sun Jul 21 01:44:39 1996 Miles Bader <miles@gnu.ai.mit.edu>
* locale/programs/locfile.c (write_locale_data): Deal with missing
	UIO_MAXIOV.

	* sysdeps/mach/hurd/socket.c (socket): Make TYPE an int.
	* sysdeps/mach/hurd/socketpair.c (socketpair): Likewise.
1996-07-21 06:52:29 +00:00
Miles Bader 6f9561ed06 <unistd.h>: New include. 1996-07-21 02:57:09 +00:00
Miles Bader 710bf4f9f8 * sysdeps/mach/hurd/uname.c (uname): Deref UNAME to get nodename. 1996-07-21 02:33:51 +00:00
Miles Bader e894c64677 (uname): Deref UNAME to get nodename. 1996-07-21 02:33:13 +00:00
Roland McGrath ed30638ace Sat Jul 20 21:55:31 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
Win32 hacks from <Rob_Tulloh@tivoli.com>.
	* posix/glob.c [WIN32]: Don't include <pwd.h>; don't use d_ino;
	use void * for my_realloc; include <malloc.h> for alloca.
	(glob) [WIN32]: Use "c:/users/default" for ~ if no HOME variable.
	* posix/fnmatch.h [WIN32]: Use prototypes even if [!__STDC__].
	* posix/glob.h: Likewise.
1996-07-21 01:55:51 +00:00
Miles Bader 5764121c46 * sysdeps/mach/libc-lock.h (__libc_lock_define): Backslashify
continuation line.
1996-07-21 01:34:17 +00:00
Miles Bader 0e33ca7b05 Sat Jul 20 13:28:52 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/select.c (__select): Don't poll on the last
	call __io_select unless there's only a single descriptor, as each
	descriptor now has its own reply port.
	If there is only a single descriptor, just use its reply port for
	everything and don't bother creating the port set.
1996-07-20 17:34:39 +00:00
Miles Bader cbd96c3385 (__select): Don't poll on the last call __io_select unless there's only a single descriptor, as each descriptor now has its own reply port. If there is only a single descriptor, just use its reply port for everything and don't bother creating the port set. 1996-07-20 17:33:17 +00:00
Roland McGrath f0097fa0df Thu Jul 18 12:33:57 1996 Roland McGrath <roland@baalperazim.frob.com>
* Rules (dummy.o, empty.o): Targets removed.
	(dummy.c, empty.c): New targets replace them.

See ChangeLog.5 for earlier changes.
1996-07-20 12:06:21 +00:00
Roland McGrath 73f7f68ba3 Fri Jul 19 15:45:20 1996 Ulrich Drepper <drepper@cygnus.com>
* locale/C-messages.c (_nl_C_LC_MESSAGES): Add missing Kleene
	operator to yesexpr and noexpr string.
1996-07-20 11:53:52 +00:00
Roland McGrath 22f87e0fa8 Sat Jul 20 07:15:33 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* crypt/Makefile, crypt/nocrypt.c: Removed.  It is illegal to export
 	from the USA any software that even makes it easy to drop in an
 	encryption module of foreign origin.
	* Makerules (cryptobjdir): Variable removed.
	($(libdir)/libc.so): Remove dep on libcrypt.so$(libcrypt.so-version).
	* Makefile (subdirs): Remove crypt.

Fri Jul 19 15:10:37 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sunrpc/xdr_mem.c (xdrmem_putlong): Don't cast LP to int32 (the
 	old code would have failed on a big-endian 64-bit architecture).
	* sunrpc/xdr_stdio.c (xdrstdio_putlong): Ditto.

	* sunrpc/xdr.c (xdr_int): Handle XDR_FREE case.
	(xdr_u_long): Use switch instead of chain of if-statements.
  	Remove gratitous parentheses around return expressions.
	(xdr_enum): Open code case where INT_MAX<LONG_MAX.

	* sunrpc/svc.c (svc_getreqset): Increment SOCK by 32, not NFDBITS.

	* sunrpc/portmap.c (reg_service): Declare ANS and PORT as long,
 	not int.

Fri Jul 19 16:56:41 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* dlfcn.h, db.h: New wrapper headers.

	* posix/glob.h [!_AMIGA && !VMS]: Check this instead of just [!_AMIGA]
	for `struct stat;' forward decl.

Fri Jul 19 22:25:19 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/iso-4217.def: Add some more standardized currency
	symbols.
1996-07-20 11:26:09 +00:00
Roland McGrath cf725107f3 Fri Jul 19 13:18:02 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* hurd/report-wait.c (describe_number): Use unsigned long int for J.

	(subdir): Fix name.
1996-07-19 17:18:51 +00:00
Roland McGrath 87e4c1ba63 Thu Jul 18 11:42:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* crypt/Makefile (lib-noranlib): Depend on
	$(objpfx)libcrypt.so$(libcrypt.so-version).

	* sysdeps/stub/ustat.c: Ditto.
	* sysdeps/unix/sysv/linux/alpha/start.S: Move to ...
	* sysdeps/alpha/elf/start.S: here.
1996-07-18 15:46:04 +00:00
Roland McGrath 49b9862700 Thu Jul 18 04:33:21 1996 Roland McGrath <roland@baalperazim.frob.com>
* sysdeps/mach/hurd/errnos.awk: Move EWOULDBLOCK check before errno==0
	check.  mib's clueless hacking broke it.

Thu Jul 18 04:27:21 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Makerules ($(libdir)/libc.so): Add missing / after $(cryptobjdir).

Wed Jul 17 10:54:20 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/start.S: Move to ...
	* sysdeps/alpha/elf/start.S: here.

	* misc/sys/ustat.h: New file.
	* misc/ustat.h: Ditto.
	* sysdeps/generic/ustatbits.h: Ditto.
	* libc-orig/sysdeps/stub/ustat.c: Ditto.
	* sysdeps/unix/sysv/linux/ustatbits.h: Ditto.
	* misc/Makefile (headers): Mention ustat.h, sys/ustat.h, and
 	ustatbits.h.
	(routines): Mention ustat.

	* sysdeps/unix/sysv/linux/syscalls.list: Mention klogctl in
 	alphabetically correct place.  Mention ustat.

	* sysdeps/unix/alpha/sysdep.S: Make errno a bss symbol, not a
	common symbol (makes errno accessible from gdb).

	* login/pututline_r.c (pututline_r): Test ut_id in repositioning
	test, not ut_type.

	* login/logwtmp.c (logwtmp): Reimplemented.  Must ensure that a
 	record always gets appended at end of file (wtmp is a log file,
 	after all).  Set ut_type to DEAD_PROCESS if name is empty.

	* login/getutid_r.c (getutid_r): Handle search for UT_TYPE in
	separate loop from search for UT_ID.  Fix code so it is in
	sync with Unix man page.

	* login/getutline_r.c (getutline_r): Stop searching only if
 	ut_line matches and type is either USER_PROCESS or LOGIN_PROCESS.

Tue Jul 16 15:06:18 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/netinet/in.h: Base on <linux/in.h> to
 	avoid duplicate declarations.

Sun Jul 14 19:08:55 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* manual/maint.texi (Supported Configurations): Add alpha-gnu-linux
	and alpha-gnu-linuxecoff targets.

Fri Jul 12 16:58:44 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/netinet/in.h: Declare bindresvport().

Sat Jun 22 23:30:07 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* resolv/res_send.c (res_send): Declare FROMLEN as size_t instead
	of int.

	* resolv/res_comp.c (res_hnok): Use empty statement in place
	of NULL (which generates a "useless expression" warning in
	gcc).
1996-07-18 08:43:26 +00:00
Roland McGrath d7bca0d30b Wed Jul 17 23:56:35 1996 Roland McGrath <roland@baalperazim.frob.com>
* sysdeps/mach/hurd/Makefile ($(common-objpfx)errnos.d): Replace ../
	with $(..) in output.
1996-07-18 04:18:05 +00:00
Roland McGrath f18edac3a3 Wed Jul 17 21:53:45 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/Makefile (dl-routines): Add dl-cache.
	* elf/dl-cache.c: New file.
	* elf/dl-load.c (_dl_map_object): Check cache before default path.
1996-07-17 23:09:43 +00:00
Roland McGrath 3867ee645c Wed Jul 17 20:41:30 1996 Ulrich Drepper <drepper@cygnus.com>
* stdio-common/vfscanf.c: Major change.  Now read character
	from stream only if needed.  Before it was read after the
	previous character was used.
	Bug reported by Martin Goik <goma0002@FH-Karlsruhe.DE>

	* stdio-common/tstscanf.c: Change test program so that return
	value is != 0 if one test failed.

	* sysdeps/m68k/Makefile (crypt): Variable removed.
	* sysdeps/sparc/Makefile: Likewise.
1996-07-17 19:32:22 +00:00
Roland McGrath ec2ac6d530 Wed Jul 17 17:08:48 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* version.h (VERSION): Update to 1.93.

	* Makerules ($(libdir)/libc.so): Depend on
	$(common-objpfx)libcrypt.so$(libcrypt.so-version).

	* crypt/nocrypt.c: New file.
	* Makefile (subdirs): Add crypt.
	* crypt/Makefile: New file.

	* Makerules (soversions.mk): Move this target, include of it, and
	include of version.mk to ...
	* Makeconfig: ... here.
	(soversions.mk): Depend on Makeconfig instead of Makerules.

	* shlib-versions (*-*-*): Set libcrypt=0.

Wed Jul 17 02:43:28 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* shlib-versions (*-*-gnu*): Set libc=0.0

Tue Jul 16 01:52:42 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/dl-machine.h: Follow Jul 14 change in
	sysdeps/i386/dl-machine.h.

Tue Jul 16 00:14:07 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/inet/syscalls.list (connect, send): Add underscores
	to the strong name, not the file name.

	* csu/initfini.c: More magic.  Detect if .end is produced and put it
	in the output iff the compiler does.
1996-07-17 19:01:35 +00:00
Roland McGrath 4de1d5977c Wed Jul 17 17:08:48 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (soversions.mk): Move this target, include of it, and
	include of version.mk to ...
	* Makeconfig: ... here.
	(soversions.mk): Depend on Makeconfig instead of Makerules.
1996-07-17 18:59:42 +00:00
Miles Bader 8a5776e6fe Merge linewrap changes
Wed Jul 17 11:29:26 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* stdio/linewrap.c (lwupdate): Fix boundary condition where a
 	word extends right up to rmargin.

	* stdio/linewrap.c (lwupdate): When we've done a word wrap and
	output the wrap margin, set point_col to wmargin.
	Use negative point_col to deal with a wmargin of 0.
	(line_wrap_point): Return 0 for a negative point_col.
	(line_wrap_stream): Make wmargin ssize_t.
	* stdio/linewrap.h (struct line_wrap_data): Make wmargin &
 	point_col ssize_t.
	(line_wrap_stream): Make wmargin ssize_t.
	(line_wrap_point): Return 0 for a negative point_col.

Tue Jul 16 00:18:19 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* stdio/linewrap.c (__line_wrap_update): Add hackery from flshfp
 	to fiddle __put_limit in conjunction with __linebuf_active.
1996-07-17 18:46:54 +00:00
Miles Bader e964b97666 (lwupdate): Fix boundary condition where a word extends right up to rmargin. When we've done a word wrap and output the wrap margin, set point_col to wmargin. Use negative point_col to deal with a wmargin of 0. (line_wrap_point): Return 0 for a negative point_col. 1996-07-17 18:37:00 +00:00
Roland McGrath 96e1bff251 Updated from ../gpl2lgpl.sed 1996-07-17 18:00:33 +00:00
Roland McGrath 184b7b466a * elf/dl-lookup.c (_dl_lookup_symbol): Avoid sizeof dynamic auto array
because that is broken on alpha.
1996-07-17 03:34:06 +00:00
Roland McGrath f36f8dcf1c Tue Jul 16 16:43:58 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/mmap.c: Use same inheritance arg in second vm_map
	call as in first.

	* Makerules (make-link): Install the new link with atomic mv -f in
	case ln itself requires the library being installed.
1996-07-16 21:19:13 +00:00
Roland McGrath ec42724d69 Tue Jul 16 00:31:31 1996 Richard Henderson <rth@tamu.edu>
* sysdeps/alpha/dl-machine.h: Mirror Roland's changes to
	i386/dl-machine.h of 960713.

	* sysdeps/generic/dl-sysdep.c:  Include <sys/mman.h>.
	(_dl_sysdep_read_whole_file): Fix result variable declaration.

Tue Jul 16 00:53:57 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/mach/hurd/uname.c: Call __gethostname to fill in the
	`nodename' member.

Mon Jul 15 17:23:53 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdio-common/vfprintf.c (vfprintf): Call parse_one_spec
	with pointer to local variable instead of NULL.

1996-07-15  Paul Eggert  <eggert@twinsun.com>

	* time/strftime.c (strftime): Don't pass empty macro argument to `add'.

Sat Jul 13 09:53:39 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove names
	that are already added by other means.

	* sysdeps/unix/sysv/linux/syscalls.list: Add more EXTRA's in the
	caller column to get those syscalls added automagically.

	* elf/rtld.c (dl_main) [ELF_MACHINE_DEBUG_SETUP]: Use this macro
	instead of setting the DT_DEBUG pointer.

	* csu/initfini.c (_init, _fini): Generate .end directives after
	standalone prologues and filter them out from epilogues.
1996-07-16 06:38:54 +00:00
Roland McGrath ed36809a9c Sat Jul 13 09:53:39 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list: Add more EXTRA's in the
	caller column to get those syscalls added automagically.
1996-07-16 06:10:19 +00:00
Karl Heuer 3270607468 Fix previous change. Use sed's y command instead. 1996-07-16 04:47:46 +00:00
Karl Heuer 749702b2d4 Use portable tr syntax. 1996-07-16 03:53:55 +00:00
Linda A. Walsh 08e722939f * config.guess (HP 9000/811): Recognize this as a PA1.1 machine. 1996-07-15 17:20:52 +00:00
Miles Bader 05a6a9d64b Mon Jul 15 12:24:54 1996 Miles Bader <miles@gnu.ai.mit.edu>
* login/logout.c (logout): Initialize DATA to a state that will
	make setutent_r happy.
1996-07-15 16:30:04 +00:00
Miles Bader 405e5e339e (logout): Initialize DATA to a state that will make setutent_r happy. 1996-07-15 16:25:44 +00:00
Roland McGrath 391763e755 * Makeconfig (rtld-installed-name): Set to ld.so.1.
* sysdeps/unix/sysv/linux/Makefile (rtld-installed-name): Variable
	removed.

	* manual/Makefile (glibc-targets): Remove subdir_ from elts.

	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_read_whole_file): New fn.
1996-07-15 00:11:11 +00:00
Roland McGrath 2d3bbb8c67 Sun Jul 14 01:51:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_read_whole_file): New fn.
1996-07-15 00:05:56 +00:00
Torbjorn Granlund 939d5646d1 Generalize C90 alternative to all x90 machines. 1996-07-14 18:09:15 +00:00
Roland McGrath a78b0f1827 * MakeTAGS (extract): Pass --add-comments=TRANS.
* sysdeps/gnu/errlist.awk: Write comments into the output with the
	descriptive paragraphs from the manual preceded by TRANS.
1996-07-14 17:48:00 +00:00
Roland McGrath b1dbbaa48c * elf/rtld.c (RESOLVE): Use the dl's load address, not a constant zero!
(_dl_start): Move RESOLVE defn inside this function and #include
	"dynamic-link.h" a second time there.
	[RTLD_START]: Move use of this after _dl_start function.
1996-07-14 13:20:46 +00:00
Roland McGrath f51d1dfd35 * elf/dl-reloc.c: Include "dynamic-link.h" at file scope.
* elf/rtld.c: Include <string.h>.

	* elf/dynamic-link.h (ELF_DYNAMIC_DO_REL, ELF_DYNAMIC_DO_RELA,
	ELF_DYNAMIC_RELOCATE): No longer take RESOLVE argument.
	Conditionalize defns on [RESOLVE].
	* elf/do-rel.h (elf_dynamic_do_rel): Likewise.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise.
	Instead use RESOLVE macro with same args.
	(elf_machine_rel): Conditionalize defn on [RESOLVE].
	* elf/dl-reloc.c (RESOLVE): New macro, define before including
	"dynamic-link.h".  It replaces `resolve' local function.
	* elf/dl-runtime.c: Likewise.
	* elf/rtld.c: Likewise.
1996-07-14 11:39:25 +00:00
Roland McGrath c928de7902 * elf/dl-deps.c (_dl_map_object_deps): Start TAILP at last preload.
* elf/dl-open.c (_dl_open): Force an indirect call for
	_dl_relocate_object so there is no chance a PLT fixup will be done
	and clobber _dl_global_scope before our call happens.

	* sysdeps/i386/fpu/__math.h (tan): Correct output constraint from =u
	to =t; must operate on top of fp reg stack, not second from top.
	Correct input constraint to 0 from t; must be explicit when input and
	output are the same register.
	(floor): Use __volatile instead of volatile.
	(ceil): Likewise.

	* manual/Makefile ($(objpfx)stamp%-$(subdir)): Separate rule from
	other targets.
1996-07-14 10:04:21 +00:00
Roland McGrath 2064087b5f Sun Jul 14 01:51:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (glibc-targets): Variable and targets removed.

Sat Jul 13 23:50:17 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* manual/Makefile (lib): New phony target.  Depend on stamp files.
	($(objpfx)stamp%-$(subdir)): New rule to create them when necessary.

1996-07-13  Paul Eggert  <eggert@twinsun.com>

	* time/strftime.c (strftime): Use space padding for %e, %k, %l,
	to match Emacs format-time-string specification.
	(DO_NUMBER_SPACEPAD): Renamed from DO_NUMBER_NOPAD.

Sat Jul 13 20:17:38 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* elf/dl-deps.c (_dl_map_object_deps): Take new args PRELOADS and
	NPRELOADS, vector of `struct link_map *'s; add them to the searchlist
	between MAP and its deps.
	* elf/link.h: Fix decl.
	* elf/rtld.c (dl_main): If not secure, parse LD_PRELOAD for
	colon-separated list of names, map those and pass vector of ptrs as
	PRELOADS list to _dl_map_object_deps.
	* elf/dl-runtime.c (_dl_object_relocation_scope): Pass new args to
	_dl_map_object_deps with empty preload list.
	* elf/dl-open.c (_dl_open): Likewise.

	* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_open_zero_fill): Function
	removed.
	(__mmap): Pass MACH_PORT_NULL for memobj port when (flags & MAP_ANON).
	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill):
	Conditionalize defn on [! MAP_ANON].
	* elf/dl-minimal.c (malloc): Conditionalize use of _dl_zerofd
	on [! MAP_ANON].
	* elf/rtld.c (dl_main): Likewise.
	* elf/dl-load.c (_dl_zerofd): Conditionalize defn on [! MAP_ANON].
	(_dl_map_object_from_fd): Conditionalize initialization of _dl_zerofd.

	* elf/dl-fini.c (_dl_fini): Skip finalizer for executable itself.

Sat Jul 13 02:47:53 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* stdlib/random.c (__random): Declare as int32_t to be in sync
	with declaration.

	* socket/Makefile (headers): Add socketbits.h.

	* misc/mntent.c (endmntent): Allow for NULL stream.  SunOS does
	it that way.

	* grp/initgroups.c (initgroups): Add groups that user is a member
 	of, not the ones he is _not_ a member of.

	* nss/nsswitch.c (known_compare): Make known_compare() a static
 	instead of a local function.  The latter are difficult to debug
 	and slow to execute on certain platforms.

	* sysdeps/posix/ttyname_r.c (ttyname_r): Use sizeof (dev) - 1 in
 	place of sizeof (dev).  The size of a literal string includes the
 	NUL byte.

	* sysdeps/unix/getlogin.c (getlogin): Initialize ut_fd with -1.

Thu Jul 11 16:59:10 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* misc/mntent.c (addmntent): Seek to end of file before writing
 	entry.  Return 1 on error, not -1.

Tue Jul  9 19:08:05 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/syscalls.list: Mark bdflush as EXTRA
	syscall.

Fri Jul  5 18:44:55 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/ioperm.c (port_to_cpu_addr): Size
 	shift amount for Jensen must be 5 not 4.

Sat Jul 13 20:04:28 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* socket/sys/socket.h (struct osockaddr): New type.

Sat Jul 13 03:50:53 1996  Ulrich Drepper  <drepper@cygnus.com>

	* misc/Makefile (routines): Add qefgcvt and qefgcvt_r.
	* misc/efgcvt.c, misc/efgcvt_r.c: Change code so that the `double'
	and `long double' versions can be generated.
	* misc/qefgcvt.c, misc/qefgcvt_r.c: New files.  Define macros
	so that included efgcvt{,_r}.c file generate `long double'
	versions.
	* stdlib/stdlib.h: Add prototypes for q[efg]cvt() and q[ef]cvt_r()
	functions.

	* manual/startup.texi: Document new getsubopt function.
	* manual/examples/subopt.c: New example program for documenting
	getsubopt function.

Fri Jul 12 23:58:37 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/Makefile (routines): Add getsubopt.
	* stdlib/stdlib.h: Add prototype for getsubopt.
	* stdlib/getsubopt.c: New file.  Implement getsubopt function
	to handle suboption parsing.
1996-07-14 06:04:09 +00:00
Roland McGrath 842907c6f8 * inet/getnetent_r.c: Define NEED_H_ERRNO.
* inet/getnetbynm_r.c: Likewise.
	* inet/getnetent.c: Likewise.
	* inet/getnetbyad_r.c: Likewise.
	* inet/getnetbyad.c: Likewise.
	* inet/getnetbynm.c: Likewise.

	* sysdeps/generic/pselect.c: Include <sys/time.h>.

	* misc/sys/select.h: Include <time.h> instead of <sys/time.h> for
	`struct timespec'.
1996-07-12 02:01:17 +00:00
Roland McGrath e6c9a67a0b * math/Makefile (calls): Add s_frexp, s_ldexp.
(routines): Remove them and &f from here.

	* sys/socket.h: New file, wrapper for socket/sys/socket.h.

Thu Jul 11 00:22:40 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-ieee754/s_frexpl.c: New file.  `long double'
	implementation of frexp() function.
	* sysdeps/libm-ieee754/s_ldexpl.c: New file.  `long double'
	implementation of ldexp() function.

	* sysdeps/libm-i387/s_isnanl.c (isnanl): Mask explicit one
	out before or'ing.
1996-07-12 00:43:28 +00:00
Roland McGrath adc6ff7f81 Thu Jul 11 20:09:55 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* nss/nss_files/files-service.c (getservbyname): Take second arg PROTO
	and check it.

	* nss/nss_files/files-XXX.c: Comment fix.

Fri Jul 12 01:28:35 1996  Ulrich Drepper  <drepper@cygnus.com>

	* nss/getXXent_r.c (GETFUNC_NAME_STRING): Define with name
	of reentrant function.
	(setup): Pass additional argument with function name we are
	looking for.
	(SETFUNC_NAME, ENDFUNC_NAME, GETFUNC_NAME): Call setup with
	new argument {SET,END,GET}FUNC_NAME_STRING.

	* nss/getXXent.c (GETFUNC_NAME): RESULT must be static because
	we return a pointer.

Thu Jul 11 18:20:44 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* nss/nss_files/files-parse.c: Add comment about things to #define.

	* nss/nss_files/files-hosts.c (NEED_H_ERRNO): Define it.

	* nss/nss_files/files-parse.c (STRING_FIELD): Don't flag NUL before
	terminator char as an error.

	* nss/getXXbyYY_r.c (REENTRANT_NAME): Set *H_ERRNOP, not h_errno.

Thu Jul 11 03:21:10 1996  Ulrich Drepper  <drepper@cygnus.com>

	* catgets/gencat.c (write_out): Move code to determine new
	best size out of inner loop.

Wed Jul 10 05:24:40 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* misc/mntent.c: Include <sys/types.h>.
	(endmntent): Return 1 one success, 0 on failure.
	(getmntent): Chop newline and ignore empty lines.

Mon Jul  8 21:18:40 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/dl-machine.h (RESOLVE): New macro, defined
	differently based on [RTLD_BOOTSTRAP].
	(elf_machine_rela): Use it instead of the fn ptr arg directly.
1996-07-12 00:20:03 +00:00
Roland McGrath ddc6fb0c8e Thu Jul 12 01:28:35 1996 Ulrich Drepper <drepper@cygnus.com>
* nss/getXXent_r.c (GETFUNC_NAME_STRING): Define with name
	of reentrant function.
	(setup): Pass additional argument with function name we are
	looking for.
	(SETFUNC_NAME, ENDFUNC_NAME, GETFUNC_NAME): Call setup with
	new argument {SET,END,GET}FUNC_NAME_STRING.
1996-07-11 23:42:52 +00:00
David MacKenzie 6f6f2bbe52 Add MIT copyright notice. From gordoni@cygnus.com. 1996-07-11 21:02:19 +00:00
Roland McGrath 63d9ce12c1 Mon Jul 8 21:18:40 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/dl-machine.h (RESOLVE): New macro, defined
	differently based on [RTLD_BOOTSTRAP].
	(elf_machine_rela): Use it instead of the fn ptr arg directly.
1996-07-10 14:42:15 +00:00
Roland McGrath 07a4742f9e * posix/glob.h (__glob_opendir_hook, __glob_readdir_hook,
__glob_closedir_hook): Remove decls.

	* sysdeps/generic/machine-gmon.h: Declare mcount_internal.

	* sysdeps/unix/inet/syscalls.list: Define __ names with weak aliases
 	for send and connect syscalls.

	* socket/sys/socket.h: New file, taken from non-sysdep parts of
	linux/sys/socket.h; break sysdeps parts out into socketbits.h.
	Declare __ names for send and connect.
	* sysdeps/generic/socketbits.h: New file.
	* sysdeps/unix/sysv/linux/socketbits.h: New file.
	* sysdeps/unix/sysv/linux/sys/socket.h: File removed.
	* sysdeps/generic/sys/socket.h: File removed.

	* sysdeps/mach/hurd/connect.c: Define __ name and weak alias.
	* sysdeps/mach/hurd/send.c: Likewise.
1996-07-09 23:17:59 +00:00
Roland McGrath c150923988 Tue Jul 9 09:37:55 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/libc-lock.h: New file.
	* sysdeps/unix/readdir.c: Do locking.
	* sysdeps/unix/seekdir.c: Likewise.
	* sysdeps/unix/rewinddir.c:  Likewise.
	* sysdeps/unix/closedir.c: Likewise.
	* sysdeps/unix/bsd/telldir.c: Likewise.
	* sysdeps/mach/hurd/seekdir.c: Likewise.
	* sysdeps/mach/hurd/readdir.c: Likewise.
	* sysdeps/mach/hurd/closedir.c: Likewise.
	* sysdeps/mach/hurd/opendir.c: Initialize the lock.
	* sysdeps/unix/opendir.c: Likewise.
	* sysdeps/mach/hurd/dirstream.h: Include <libc-lock.h>.
	(struct __dirstream): Add lock member using __libc_lock_define.
	* sysdeps/unix/dirstream.h: Likewise.

	* sysdeps/stub/libc-lock.h (__libc_lock_fini): New macro.

	* stdlib/mbstowcs.c: Pass address of pointer to mbsrtowcs.

	* stdlib/wcstombs.c: Use wcsrtombs instead of mbsrtowcs.

Thu Jul  4 01:34:04 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/programs/stringtrans.c: Fix typo in copyright.

	* stdio-common/printf-prs.c: Add casts to prevent
        signed<->unsigned warnings.

	* stdio-common/printf-parse.h: Initialize state variable before
	calling mbrlen.
	* stdio-common/printf-prs.c: Don't initialize state variable here.
	* stdio-common/vfprintf.c: Don't initialize state variable.
	(vfprintf): While determining length of multibyte string don't
	try to be clever in determining characters to use for first
	call.

	Add real implementation of multibyte<->wide char conversion
	functions.  The functions always convert between the fixed wide
	char format (ISO 10646 in UCS4) and the UTF8 representation of
	this character set.  Conversion between the currently used
	8bit character set and ISO 10646 will not take place.  This is
	what iconv() is for.
	* wcsmbs/wchar.h (mbstate_t): Define as structure to replace
	dummy definition.
	Add optimized version of `mbrlen' function.
	* wcsmbs/btowc.c (btowc): Restrict range of legal characters
	to 0...0x7f.
	* wcsmbs/wctob.c (wctob): Restrict range of legal characters
	to 0..0x7f.
	* wcsmbs/mbrlen.c: Make mbrlen a weak alias of __mbrlen.
	This is needed in the wchar.h header.
	* wcsmbs/mbrtowc.c: Replace dummy implementation.  Convert UTF8
	encoded character to UCS4.
	* wcsmbs/mbsinit.c: Replace dummy implementation.  Test COUNT
	element of `mbstate_t' for initial state.
	* wcsmbs/mbsrtowcs.c: Replace dummy implementation.  Convert UTF8
	encoded string to UCS4 string.
	* wcsmbs/wcrtomb.c: Replace dummy implementation.  Convert UCS4
	character to UTF8 encoded form.
	* wcsmbs/wcsrtombs.c: Replace dummy implementation.  Convert UCS4
	encoded string to UTF8 encoded form.
1996-07-09 14:49:13 +00:00
Roland McGrath 089b2b8ad8 * sysdeps/unix/sysv/linux/configure.in: Use version number in cache
variable name, so new a libc with new requirements won't fail to
 	notice an insufficient Linux version.
1996-07-09 12:22:26 +00:00
Roland McGrath 99c5795100 * sysdeps/unix/sysv/linux/direntry.h: New file from David Mosberger.
* sysdeps/unix/sysv/linux/configure.in: Check for Linux 2.0.1 headers,
	instead of 2.0 headers.
1996-07-09 12:18:13 +00:00
Roland McGrath 20121a6ac2 * sysdeps/mach/hurd/Makefile (stamp-errnos): Uncomment CVS commit cmds.
* sysdeps/gnu/errlist.awk: Undo mib's bogus changes.  The
	sysdeps/mach/hurd/errnos.awk bug fix was the only correct change.
1996-07-09 11:21:20 +00:00
Roland McGrath 3dbe15814d Tue Jul 9 06:19:29 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/generic/machine-gmon.h [NO_UNDERSCORES]: Declare _mcount
	before using it in lhs of weak_alias.

	* nss/getXXent_r.c (setup): New function, broken out of SETFUNC_NAME.
	Call __nss_lookup when not setting STARTP.
	(SETFUNC_NAME, ENDFUNC_NAME, REENTRANT_GETNAME): Call it to set up for
	function-calling loop.
1996-07-09 11:09:08 +00:00
Roland McGrath d33f2ad4ab error is 0. The "placeholder" entries recently added to
* sysdeps/stub/setdomain.c (setdomainname): Declare NAME parm
1996-07-09 09:39:41 +00:00
Thomas Bushnell, BSG 565764017b Regenerated from ../sysdeps/gnu/errlist.awk ../manual/errno.texi 1996-07-09 06:13:23 +00:00
Thomas Bushnell, BSG 18c75117c2 *** empty log message ***
Tue Jul  9 00:14:52 1996  Michael I. Bushnell p/BSG  <mib@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/ioctls.h (MDMBUF, ECHO, TOSTOP, FLUSHO,
 	PENDIN, NOFLSH): Undefine these at start if they are already
 	defined to avoid collision with termbits.h.
	* sysdeps/generic/termbits.h (ECHO, TOSTOP, NOFLSH): Likewise.
	(MDMBUF, FLUSHO, PENDIN) [__USE_BSD]: Likewise.


Mon Jul  8 13:10:50 1996  Michael I. Bushnell p/BSG  <mib@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/errnos.awk: Skip entries where the
 	error is 0.  The "placeholder" entries recently added to 
	errno.texi convert to zero since `???/' is at the front of them.
	* sysdeps/gnu/errlist.awk (errnoh): Likewise.

	* sysdeps/stub/setdomain.c (setdomainname): Declare NAME parm 
	__const to conform with unistd.h.

	* posix/regex.c (re_comp, re_exec): Use weak_function as
	keyword in function defns instead of weak_symbol (NAME) after
	the defn.

	* stdlib/stdlib.h (random): Declare return type to be int32_t.
1996-07-09 05:02:06 +00:00
Thomas Bushnell, BSG f8fc0dd649 * stdlib/stdlib.h (random): Declare return type to be int32_t. 1996-07-09 02:47:42 +00:00
Roland McGrath 999493cb4a Mon Jul 8 13:37:40 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* math/math.h (_Mfloat_, _Mlong_double_): New macros, defined iff not
	already defined to float, long double.  Use those macros for _Mdouble_
	defns when including mathcalls.h.
	* math/Makefile [$(long-double-fcts) != yes] (CPPFLAGS): Append
	-D_Mlong_double_=double.

	Add more -lm functions to -lc because ldexp uses them.
	* math/Makefile (calls): Add s_finite, s_copysign, s_scalbn, s_modf.
	(routines): Remove s_modf, add s_frexpf, s_ldexpf; all but frexp and
	ldexp have both f and l code, and those have f though not l code.

 	memcpy for possibly overlapping strings.
1996-07-08 17:45:03 +00:00
Roland McGrath f5cb4a5cba Mon Jul 8 02:14:25 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* math/math.h (_Mfloat_, _Mlong_double_): New macros, defined iff not
	already defined to float, long double.  Use those macros for _Mdouble_
	defns when including mathcalls.h.
	* math/Makefile [$(long-double-fcts) != yes] (CPPFLAGS): Append
	-D_Mlong_double_=double.
	Add more -lm functions to -lc because ldexp uses them.
	* math/Makefile (calls): Add s_finite, s_copysign, s_scalbn, s_modf.
	(routines): Remove s_modf, add s_frexpf, s_ldexpf; all but frexp and
	ldexp have both f and l code, and those have f though not l code.
1996-07-08 17:35:27 +00:00
Thomas Bushnell, BSG 53163ad0cb *** empty log message ***
Mon Jul  8 13:10:50 1996  Michael I. Bushnell p/BSG  <mib@psilocin.gnu.ai.mit.edu>

	* string/argz-delete.c (argz_delete): Use memmove instead of
 	memcpy for possbly overlapping strings.
1996-07-08 17:13:20 +00:00
Thomas Bushnell, BSG 00e125db5a string/argz-delete.c (argz_delete): Use memmove instead of memcpy for possbly overlapping strings. 1996-07-08 17:12:04 +00:00
Miles Bader 3ee8457d47 Regenerated: autoconf sysdeps/generic/configure.in 1996-07-08 15:26:36 +00:00
Miles Bader 17f92c2dfc Regenerated: autoconf sysdeps/unix/common/configure.in 1996-07-08 15:26:18 +00:00
Roland McGrath 7702f9b5a9 * stdlib/strtod.c: Likewise. 1996-07-08 10:21:07 +00:00
Roland McGrath af5b3bc33b Mon Jul 8 02:14:25 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* libc-symbols.h [GCC >= 2.7] (strong_alias, weak_alias): Use extern
	storage class.  GCC gives an error for non-extern data defns with the
	alias attribute.

Mon Jul  8 00:11:15 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* libc-symbols.h (weak_function): New macro.
	For GCC 2.7+ define as __attribute__ ((weak)).
	* elf/dl-minimal.c: Use weak_function as keyword in function defns
 	instead of weak_symbol (NAME) after the defn.
	* stdlib/strtol.c: Likewise.
	* sysdeps/mach/hurd/dl-sysdep.c: Likewise.

	* sysdeps/alpha/dl-machine.h (elf_machine_rela) [RTLD_BOOTSTRAP]:
	If this is defined, don't declare _dl_rtld_map as weak, and
	don't check for MAP pointing to it.  RESOLVE is always null in this
	case, so test with #ifdef instead of if.

	* libc-symbols.h (symbol_set_declare): Use weak_extern instead of
	weak_symbol.
	* csu/initfini.c (_init): Likewise.
	* locale/setlocale.c (DEFINE_CATEGORY): Likewise.
	* misc/efgcvt_r.c: Likewise.
	* sysdeps/alpha/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise.

	* libc-symbols.h [ASSEMBLER] (weak_symbol): Macro removed.
	It was not used in any assembler code.
	(weak_symbol_asm): Renamed to weak_extern_asm.
	(weak_extern): New macro replaces weak_symbol for weak extern refs;
	define to weak_extern_asm for [!ASSEMBLER].

	* libc-symbols.h [! ASSEMBLER] [HAVE_WEAK_SYMBOLS] (weak_symbol_asm,
	weak_alias_asm): New macros, renamed from weak_symbol/weak_alias;
	define those now as aliases.
	Change conditional to use __attribute__ syntax for GCC 2.7+, not 2.8+
	[GCC >= 2.7] [HAVE_WEAK_SYMBOLS] (weak_symbol): Do weak_symbol_asm
	after GCC weak attribute decl.
1996-07-08 06:18:25 +00:00
Roland McGrath 0676b5fdca Mon Jul 8 00:11:15 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* libc-symbols.h (symbol_set_declare): Use weak_extern instead of
	weak_symbol.
	* csu/initfini.c (_init): Likewise.
	* locale/setlocale.c (DEFINE_CATEGORY): Likewise.
	* misc/efgcvt_r.c: Likewise.
	* sysdeps/alpha/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise.
1996-07-08 06:17:09 +00:00
Thomas Bushnell, BSG 467ab24791 *** empty log message ***
Mon Jul  8 01:37:34 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* string/argz-insert.c (__argz_insert): (__argz_insert): Use
	memmove instead of memcpy for possible overlapping strings.


	POINT_COL. Add POINT_OFFS field.
1996-07-08 05:52:04 +00:00
Thomas Bushnell, BSG 18e8dd4dbf (__argz_insert): Use memmove instead of memcpy for possible overlapping strings. 1996-07-08 05:37:55 +00:00
Roland McGrath 28160ffb1c * sysdeps/gnu/errlist.awk (BEGIN): Initialize associative array ALIAS,
map EWOULDBLOCK->EAGAIN, EDEADLOCK->EDEADLK.
	(element printer): Check for elt in ALIAS, instead of special case
	for EWOULDBLOCK.
1996-07-07 23:55:24 +00:00
Roland McGrath faf85e08bc * io/Makefile (headers): Add sys/vfs.h.
* io/sys/vfs.h: New file.
1996-07-07 23:23:51 +00:00
Roland McGrath e851d072c2 * stdio/linewrap.c (lwupdate): New function, mostly was
__line_wrap_update.  Use POINT_COL field instead of POINT.
	* stdio/linewrap.h (struct line_wrap_data): Rename POINT field to
	POINT_COL.  Add POINT_OFFS field.
1996-07-07 22:49:48 +00:00
Roland McGrath edb8e1d98c Sun Jul 7 18:42:06 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/jmp-unwind.c (_longjmp_unwind): Don't unlock the
	critical section lock before unlinking dying active resources.
	The unlock just before return is right (i.e. old code unlocked twice).

	* stdio/linewrap.c (lwupdate): Update D->point_offs when done.
1996-07-07 22:46:26 +00:00
Roland McGrath e5adb313f5 Sun Jul 7 18:42:06 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/jmp-unwind.c (_longjmp_unwind): Don't unlock the
	critical section lock before unlinking dying active resources.
	The unlock just before return is right (i.e. old code unlocked twice).
1996-07-07 22:45:05 +00:00
Doug Evans 850fe75ee9 Recognize rtems as an o/s. 1996-07-07 17:26:50 +00:00
Miles Bader 99ed3e3909 Sun Jun 2 22:28:43 1996 Miles Bader <miles@gnu.ai.mit.edu>
* linewrap.c (lwupdate): Update D->point_offs when done.
	Use memmove instead of memcpy where overlap is possible (not
 	necessary using current implementation of memcpy, but...).
	(__line_wrap_update): Don't update D->point_offs (lwupdate does it).

Fri May 31 11:48:46 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* linewrap.c (lwupdate): New function, mostly was __line_wrap_update.
	Use POINT_COL field instead of POINT.
	(__line_wrap_output): Use lwupdate.
	(__line_wrap_update): New function.
	(ensure_unwrapped, ensure_wrapped): New functions.
	(line_wrap_set_lmargin, line_wrap_set_rmargin,
	line_wrap_set_wmargin, line_wrap_point): Use __line_wrap_update.

	* linewrap.h (struct line_wrap_data): Rename POINT field to POINT_COL.
	Add POINT_OFFS field.
	(__line_wrap_update): New decl.
	(line_wrap_set_lmargin, line_wrap_set_rmargin,
	line_wrap_set_wmargin, line_wrap_point): Use __line_wrap_update.
1996-07-07 16:54:03 +00:00
Miles Bader dd411cc7bc (lwupdate): New function, mostly was __line_wrap_update. Use POINT_COL field instead of POINT. Update D->point_offs when done. Use memmove instead of memcpy where overlap is possible (not necessary using current implementation of memcpy, but...). (__line_wrap_output): Use lwupdate. (__line_wrap_update): New function. (line_wrap_set_lmargin, line_wrap_set_rmargin, line_wrap_set_wmargin, line_wrap_point): Use __line_wrap_update. (ensure_unwrapped, ensure_wrapped): New functions. 1996-07-07 16:49:06 +00:00
Roland McGrath 4c3e8a9e89 Fri Jul 5 12:22:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> 1996-07-06 11:19:21 +00:00
Roland McGrath 66219c0794 Fri Jul 5 12:22:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> 1996-07-06 11:01:20 +00:00
Roland McGrath a0da2d51da Fri Jul 5 12:22:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* math/Makefile (routines): Move s_ldexp, s_frexp, s_modf here from
	calls, since the f and l versions are not all there yet.
1996-07-06 10:54:55 +00:00
Miles Bader 2549e7587d Fri Jul 5 17:34:47 1996 Miles Bader <miles@gnu.ai.mit.edu>
* login/logout.c (logout): Do nothing if getutline_r returns ESRCH.

	* login/pututline_r.c (pututline_r): Since we assign RESULT from
	lseek now, check that it's >= 0, not == 0.

Wed Jul  3 13:28:04 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* login/login.c (login): Make a copy of *UT, fill in various
	fields that we supply (ut_line, ut_type, ut_pid), and use the copy
	in place of UT.

	* login/getutline_r.c (getutline_r): When we return ESRCH, mark
	UTMP_DATA->ubuf invalid (by setting UTMP_DATA->loc_utmp to 0).
1996-07-06 03:57:56 +00:00
Miles Bader 36abf0d831 (pututline_r): Since we assign RESULT from lseek now, check that it's >= 0, not == 0. 1996-07-06 00:03:07 +00:00
Roland McGrath 61c7fd70ca Fri Jul 5 12:22:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* math/Makefile (calls): Add s_ldexp, s_frexp, s_modf.
	These functions are traditionally duplicated in libc and libm.
	Go with the flow.
1996-07-05 23:55:36 +00:00
Roland McGrath 7f4e960822 * hurd/hurdsig.c (_hurd_internal_post_signal): In case of handled
signal during critical section doing interruptible RPC, if
	_hurdsig_abort_rpcs wants to change thread state, do thread_set_state
	before thread_resume.  If in critical section, pass 0 for SIGNO to
	_hurdsig_abort_rpcs so rpc is interrupted regardless of SA_RESTART.

	* extra-lib.mk: Fix typo in $(extra-libs-others) conditional.
1996-07-05 23:51:10 +00:00
Miles Bader eb6c848027 (getutline_r): When we return ESRCH, mark UTMP_DATA->ubuf invalid (by setting UTMP_DATA->loc_utmp to 0). 1996-07-05 23:48:41 +00:00
Roland McGrath e33b438a84 Fri Jul 5 12:22:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* hurd/hurdsig.c (_hurd_internal_post_signal): In case of handled
	signal during critical section doing interruptible RPC, if
	_hurdsig_abort_rpcs wants to change thread state, do thread_set_state
	before thread_resume.  If in critical section, pass 0 for SIGNO to
	_hurdsig_abort_rpcs so rpc is interrupted regardless of SA_RESTART.
1996-07-05 23:47:08 +00:00
Roland McGrath 39d690795a * sysdeps/unix/sysv/linux/sys/user.h: New file.
* sysdeps/unix/sysv/linux/Dist: Add it.
	* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add sys/user.h.
1996-07-05 20:02:58 +00:00
Roland McGrath dbe31b9a73 * nss/nss_files/files-parse.c (parse_list): Set EOL from LINE if it
points within DATA->linebuffer; otherwise use all of DATA->linebuffer
	itself, no need to skip past a NUL.

	* nss/nsswitch.h (known_function): Comment fix.
	* nss/nsswitch.c (nss_lookup_function): Rewritten using __tsearch
	directly.  Do the lookup and insertion with a single call, and fill in
	the tree node afterwards if new.
	(known_compare, nss_find_entry, nss_insert_entry): Functions removed.

	* misc/sys/select.h: #define __need_timespec before <sys/time.h> incl.
	(struct timeval): Add bodiless decl for scope.

	* time/time.h (struct timespec): Rename members from `ts_*' to `tv_*'.
  	Move struct timespec defn outside [_TIME_H] so it can be got with
 	#define __need_timespec.

	* time/sys/time.h (TIMEVAL_TO_TIMESPEC): Use `tv_*' instead of `ts_*'
	for `struct timespec' member names.
	(TIMESPEC_TO_TIMEVAL): Likewise.

	* nss/Makefile (extra-libs-others): New variable.

	* extra-lib.mk: Don't test for $($(lib)-no-lib-dep).  Instead match
	$(lib) in $(extra-libs-others).
	* sunrpc/Makefile (extra-libs-others): New variable.
	(librpcsvc-no-lib-dep): Variable removed.

Thu Jul  4 05:21:59 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* login/utmp.h: Fix typos.

	* misc/syslog.c (vsyslog): Use __send instead of send and
 	__connect instead of connect to avoid name-space collisions (e.g.,
 	with psgetty).
1996-07-05 19:18:13 +00:00
Roland McGrath f5348425d0 Fri Jul 5 12:22:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/rtld.c: Define RTLD_BOOTSTRAP before #include "dynamic-link.h".
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Remove weak decl for
	_dl_rtld_map.
	(RESOLVE): New macro, defined differently based on [RTLD_BOOTSTRAP].
	(elf_machine_rel): Use it instead of testing fn ptr arg at runtime.
	(elf_machine_rel: case R_386_32) [! RTLD_BOOTSTRAP]: Declare
	_dl_rtld_map weak only here.

	* posix/unistd.h [__USE_BSD]: Declare getdomainname, setdomainname.
1996-07-05 17:05:14 +00:00
Roland McGrath 503054c0dd Wed Jul 3 16:29:41 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* nss/getXXbyYY_r.c (REENTRANT_NAME): Cast FCT in __nss_next call.

	* sysdeps/generic/sbrk.c: Always call __brk (0) to update __curbrk.

	* malloc/malloc-size.c (malloc_usable_size): Renamed from
	malloc_object_allocation_size.
	* malloc/malloc.h: Fix decl.

	* sys/select.h: New file, wrapper header.

	* posix/sys/types.h [__USE_BSD]: Include <sys/select.h>; remove
	fd_set, associated macros, and select decl.

	* sysdeps/posix/isfdtype.c: New file.

Tue Jul  2 23:45:14 1996  Ulrich Drepper  <drepper@cygnus.com>

	The latest Japanese proposal for POSIX locales renames the
	CHARMAP keyword in locale definition files to CHARCONV.
	* locale/programs/ld-ctype.c, locale/programs/locales.h: Rename
        function ctype_is_charmap to ctype_is_charconv.
	* locale/programs/locfile-kw.gperf: Replace charmap keyword with
        charconv.
	* locale/programs/locfile-token.h: Add definition of token
        charconv.
	* locale/programs/locfile.c: Recognize charconv keyword.  Rename
        lables according to this.

	* locale/weight.h (get_weight): Cast constants to prevent
        warnings.

	* stdlib/strtod.c, stdlib/strtol.c, string/strcoll.c,
	string/strxfrm.c: Add some more casts to prevent signed<->unsigned
	warnings.

	New stuff described in P1003.1g.
	* misc/Makefile (headers): Add sys/select.h.
	(routines): Add pselect.
	* misc/sys/select.h: New file.  Declare select functions and
	needed data types and macros.
	* sysdeps/generic/pselect.c: New file.  Add generic implementation
	of pselect() function which uses select().

	* posix/getconf.c: Recognize new variables from P1003.1g.
	* posix/posix1_lim.h: Define _POSIX_FD_SETSIZE, _POSIX_QLIMIT,
	_POSIX_HIWAT, and _POSIX_UIO_MAXIOV.
	* posix/unistd.h: Add description of the P1003.1g variables.
	* sysdeps/generic/confname.h: Define _SC_* values for new
	variables.
	* sysdeps/posix/fpathconf.c (fpathconf): Add handling of
	_PC_SOCK_MAXBUF.
	* sysdeps/stub/fpathconf.c (fpathconf): Ditto.
	* sysdeps/posix/sysconf.c (sysconf): Add handling of new
	P1003.1g variables.
	* sysdeps/stub/sysconf.c (sysconf): Ditto.
	* sysdeps/unix/sysv/linux/posix_opt.h: Define _POSIX_POLL and
	_POSIX_SELECT since Linux has this.

	* socket/Makefile (routines): Add isfdtype.
	* sysdeps/generic/sys/socket.h: Add prototype for isfdtype.
	* sysdeps/stub/isfdtype.c: New file.  Stub implementation of
	isfdtype.

	* wcsmbs/wcrtomb.c (wcrtomb): Fix typo.
1996-07-04 00:07:18 +00:00
Roland McGrath 175b633d81 * elf/Makefile (LDFLAGS-dl.so): New variable.
(libdl.so): Depend on eval.so.
	(distribute): Add eval.c.
	* elf/eval.c: New file.
1996-07-03 19:07:09 +00:00
Roland McGrath 8a594e3cb7 Wed Jul 3 11:26:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/strftime.c (strftime: do_number): Adjust P and I after sprintf
	in case it wrote fewer than MAXDIGITS chars.

	* stdio/fwrite.c (fwrite: fill_buffer): Separate flushing for last
	newline from flushing full buffer in loop, fix test so no fflush is
	done when last byte written exactly fills the buffer.

	* nss/Makefile ($(services:%=$(objpfx)libnss_%.so)): Depend on libc.so.

	* sysdeps/mach/hurd/Makefile (LDLIBS-c.so): Variable removed.
	(libc.so): Instead, give this deps on lib{mach,hurd}user.so.

	* elf/dl-debug.c (_dl_debug_initialize): Use LDBASE arg instead of
	extracting _dl_rtld_map.l_addr.

	* sysdeps/i386/dl-machine.h (elf_machine_rel): Declare _dl_rtld_map as
	weak.
	* sysdeps/alpha/dl-machine.h (elf_machine_rela): Likewise.

	* shlib-versions (*-*-*): Set libnss_db=1.

	* elf/rtld.c (dl_main): Set _dl_rtld_map's DT_DEBUG location too.
1996-07-03 18:51:10 +00:00
Roland McGrath f0585c83b2 Wed Jul 3 11:26:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* shlib-versions (*-*-*): Set libnss_db=1.
1996-07-03 18:50:39 +00:00
Miles Bader 74e1a5ff22 (login): Only Frob OLD->ut_type if getutline_r actually found any entry. 1996-07-03 05:22:21 +00:00
Roland McGrath d746b89c44 Tue Jul 2 10:44:37 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/rtld.c (dl_main): Set _dl_rtld_map's DT_DEBUG location too.
1996-07-02 22:18:48 +00:00
Roland McGrath 66da789f8d * rpm/template (%build): Use @prefix@ instead of always /usr.
Set up configparms only if @prefix@ is in fact /usr.
	* rpm/Makefile ($(config)): Substitute $(prefix) for @prefix@.
1996-07-02 21:57:31 +00:00
Roland McGrath f49bc43fc0 * elf/Makefile: Add missing endif. 1996-07-02 21:53:43 +00:00
Roland McGrath 54955962d2 * nss/nss_files/files-ethers.c (ntohost): Fix db key. 1996-07-02 19:42:29 +00:00
Roland McGrath 96bda0ea44 * nss/nss_files/files-network.c: Pass empty for new DB_LOOKUP args.
(DATABASE): Define this instead of DATAFILE.
	* nss/nss_files/files-hosts.c: Likewise.
	(hostbyname): Use LOOKUP_NAME macro.

	* nss/nss_db/db-XXX.c: New file.
	* nss/Makefile (services): Add db.
	(libnss_db-inhibit-o): New variable.
	(libnss_db-routines): New variable.
	(distribute): Append db-XXX.c.
	(libnss_db.so): Depend on libdb.so and libnss_files.so.
	($(libnss_db-routines:%=$(objpfx)%.c)): New static pattern rule.

	* nss/nss_files/files-XXX.c (DB_LOOKUP): Add KEYSIZE and KEYPATTERN
	args, ignored.
	(DATAFILE): New macro.
	* nss/nss_files/files-parse.c (GENERIC): If undefined, define to
	"files-XXX.c".
	* nss/nss_files/files-rpc.c: Include GENERIC instead of "files-XXX.c".
	Pass db key args to DB_LOOKUP.
	(DATAFILE): Macro removed.
	(DATABASE): New macro replaces it, lacks "/etc/" prefix.
	* nss/nss_files/files-service.c: Likewise.
	* nss/nss_files/files-pwd.c: Likewise.
	* nss/nss_files/files-proto.c: Likewise.
	* nss/nss_files/files-grp.c: Likewise.
	* nss/nss_files/files-ethers.c: Likewise.

	* elf/linux-compat.c: File removed.
	* elf/Makefile (distribute): Remove linux-compat.c.
	(ld-linux.so.1): Remove target and associated variables.

	* sunrpc/xdr.c: Remove malloc decl.
	* sunrpc/portmap.c: Likewise.

	* sunrpc/svc_tcp.c (abort): Don't declare.  Instead define as macro
	casting abort to fn returning bool_t.

	* nss/nss_files/files-parse.c [EXTERN_PARSER]: Do an extern decl of
	the parser function.
	[EXTERN_PARSER] (LINE_PARSER): Define to empty.
	* nss/nss_files/files-pwd.c (EXTERN_PARSER): Define it.
	* nss/nss_files/files-grp.c: Likewise.

	* Makeconfig (BUILD_CC): If undefined, define to $(CC).

	* sunrpc/rpc/types.h: Include stdlib.h instead of declaring malloc.

	* Makeconfig (built-program-cmd): Use $(rtld-installed-name) in place
	of ld.so so lookups for that soname find it.

	* nss/Makefile (libnss_dns.so): Depend on libresolv.so.
	(resobjdir, LDLIBS-nss_dns.so): Variables removed.
1996-07-02 19:35:40 +00:00
Roland McGrath ffee131630 Tue Jul 2 10:44:37 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* pwd/fgetpwent.c: Don't include ../nss/nss_files/files-parse.c to
	define parse_line function.
	(parse_line): #define to _nss_files_parse_pwent and
	add extern decl for that.

	* nss/nss_files/files-XXX.c (internal_getent): Return
	NSS_STATUS_TRYAGAIN for ERANGE error.

	* sysdeps/i386/strtok.S (LreturnNULL): Save current state ptr instead
	of null, so next round returns null again instead of bombing.  Fix
	from drepper.

	* nss/nss_files/files-parse.c (LINE_PARSER): Take new first arg EOLSET.
	Remove ; after `ENTDATA_DECL (data)'.
	Truncate line at strpbrk (line, EOLSET "\n").
	(ENTDATA_DECL): Put ; at end.
	(MIDLINE_COMMENTS): Macro removed.
	* nss/nss_files/files-ethers.c: Pass new argument.
	* nss/nss_files/files-hosts.c: Likewise.
	* nss/nss_files/files-network.c: Likewise.
	* nss/nss_files/files-parse.c: Likewise.
	* nss/nss_files/files-proto.c: Likewise.
	* nss/nss_files/files-rpc.c: Likewise.
	* nss/nss_files/files-service.c: Likewise.
	* grp/fgetgrent.c: Likewise.
	* pwd/fgetpwent.c: Likewise.
	* nss/nss_files/files-pwd.c: Get parse_line with extern decl, since
	fgetpwent.c already defines it.
	* nss/nss_files/files-grp.c: Likewise.

	* elf/dl-load.c (_dl_map_object): Use any object with matching l_name
	as well as any matching with l_libname.  Fix DT_SONAME lookup to use
	string table properly.

	* elf/rtld.c (dl_main): Set _dl_rtld_map.l_name from _dl_argv[0] when
	invoked directly, and l_libname from that if PT_INTERP missing.
	Set l_name from l_libname only if not set from argv.

	* time/europe, time/northamerica: Updated from ADO 96i.

	* stdio-common/tst-ungetc.c: Include unistd.h.
1996-07-02 17:43:35 +00:00
Roland McGrath eb48c9632e Mon Jul 1 15:44:34 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* inet/Makefile (routines): Change getnetbypt to getnetbyad.

Mon Jul  1 12:29:50 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* nss/Makefile (databases): Change host to hosts.
	* nss/host-lookup.c: Renamed to nss/hosts-lookup.c.

	* nss/nsswitch.c (nss_parse_service_list): Use const for NAME.

	* nss/nss_files/files-parse.c (parse_list): Correct alignment fixup.

	* string/string.h (strndupa): Pass missing arg to strnlen.

	* inet/getnetbypt_r.c: Renamed to ...
	* inet/getnetbyad_r.c: this; fixed function name.
	* inet/getnetbypt.c: Renamed to ...
	* inet/getnetbyad.c: this; fixed function name.

Sat Jun 29 01:08:35 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* grp/getgrgid_r.c (LOOKUP_TYPE): Define to struct group, not
	struct passwd.

Fri Jun 28 16:53:01 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* resolv/res_hconf.c (strndup): Remove function.

	* nss/nsswitch.c (nss_lookup_function): Declare loadbase and ref
	using ElfW() instead of Elf32_*.

	* sysdeps/unix/sysv/linux/alpha/init-first.h,
 	sysdeps/unix/sysv/linux/m68k/init-first.h,
 	sysdeps/unix/sysv/linux/i386/init-first.h: New files.
	* sysdeps/unix/sysv/linux/init-first.c: Use platform-dependent
 	init-first.h to make abstract machine dependent parts of
	initialization.

	* sysdeps/unix/alpha/sysdep.h: Undo PIC-optimization of syscall
	error handling.  It's safer that way.

	* sysdeps/unix/alpha/sysdep.S: Make ldgp part of the prologue.
	Fix by Richard Henderson.

	* sysdeps/alpha/dl-machine.h (elf_alpha_fix_plt): Fix
 	typo/extraneous whitespace.

	* sunrpc/xdr.c (xdr_int, xdr_u_int): Use <limits.h> to test
	determine what integer sizes we're dealing with.

	* hurd/hurdsig.c (_hurd_internal_post_signal): In pending signal
	check for signal zero, repair logical sense of test by
	parenthesizing correctly.

Thu Jun 27 04:04:27 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* configure.in (config_machine): Make ELF the default even for
	Linux/Alpha unless a configuration of the form *-*-linux*ecoff
	is specified.

	* nss/nss_files/files-hosts.c (ENTDATA): Define it.
	* nss/nss_files/files-parse.c (struct parser_data): Define entdata
	member only #ifdef ENTDATA.
	(ENTDATA_DECL): New macro.
	(LINE_PARSER): Use it for entdata decl.
	(parse_list): Find the space for LIST from DATA->linebuffer instead of
	from the input LINE, which might not be writable buffer space.
	(LINE_PARSER): Use `parser_stclass' in place of `static inline'.
	[ENTDATA] (parser_stclass): #define to `static inline'.
	[!ENDATA] (parser_stclass): #define to empty.
	[!ENTDATA] (parse_line): #define to _nss_files_parse_ENTNAME; the
	function is exported to -lnss_files users.

	* string/strndup.c: Add missing arg.

	* string/strndup.c (strndup): Always terminate the string.
1996-07-01 23:04:49 +00:00
Roland McGrath 21206990e4 Add *.mo 1996-07-01 23:03:12 +00:00
Miles Bader 25f329f7f5 * hurd/report-wait.c (describe_number): Make I unsigned long. 1996-07-01 22:37:26 +00:00
Miles Bader f61f67b1a4 (describe_number): Make I unsigned long. 1996-07-01 22:35:18 +00:00
Roland McGrath 3776d592f1 Mon Jul 1 12:29:50 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* nss/Makefile (databases): Change host to hosts.
	* nss/host-lookup.c: Renamed to nss/hosts-lookup.c.
1996-07-01 22:16:41 +00:00
Roland McGrath 7cbc698400 Mon Jul 1 12:29:50 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* inet/Makefile (routines): Change getnetbypt to getnetbyad.
	* inet/getnetbypt_r.c: Renamed to ...
	* inet/getnetbyad_r.c: this; fixed function name.
	* inet/getnetbypt.c: Renamed to ...
	* inet/getnetbyad.c: this; fixed function name.
1996-07-01 22:16:08 +00:00
Miles Bader 6ce16797cd Mon Jul 1 13:32:42 1996 Miles Bader <miles@gnu.ai.mit.edu>
* login/login.c (login): Only Frob OLD->ut_type if getutline_r
	actually found any entry.

	* login/pututline_r.c (pututline_r): If not located after any
	entry don't use UTMP_DATA->ubuf, and seek to the end before adding.
	Lock the file before stating.
1996-07-01 19:33:30 +00:00
Miles Bader e81bd562d5 (pututline_r): If not located after any entry don't use UTMP_DATA->ubuf, and seek to the end before adding. Lock the file before stating. 1996-07-01 19:19:08 +00:00
Roland McGrath 4bbb963eb4 Fri Jun 28 15:46:02 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* hurd/hurdsig.c (_hurd_internal_post_signal): In pending signal
	check for signal zero, repair logical sense of test by
	parenthesizing correctly.
1996-07-01 18:10:03 +00:00
Roland McGrath d7126ae623 Fri Jun 28 15:46:02 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* hurd/hurdsig.c (_hurd_internal_post_signal): In
 	check-for-pending signals code, release _hurd_siglock before
 	jumping to deliver_pending.

	* hurd/hurdsig.c (_hurd_internal_post_signal): In pending signal
	check for signal zero, repair logical sense of test by
	parethisizing correctly.
1996-07-01 18:00:14 +00:00
Roland McGrath 635eb0b5f5 Sat Jun 29 00:02:11 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* string/strndup.c (strndup): Properly terminate the new
	string; add missing second argument to strnlen.
	* string/string.h (strndupa): Likewise.
1996-07-01 16:32:03 +00:00
Miles Bader 2baf7c31ad Fri Jun 28 23:25:35 1996 Miles Bader <miles@gnu.ai.mit.edu>
* login/login.c (login): Initialize DATA so that setutent_r will
 	actually do something.
1996-06-29 03:40:40 +00:00
Miles Bader 3e72eb7096 (login): Initialize DATA so that setutent_r will actually do something. 1996-06-29 03:37:49 +00:00
Thomas Bushnell, BSG 6a60a93757 (_hurd_internal_post_signal): In check-for-pending signals code, release _hurd_siglock before jumping to deliver_pending. 1996-06-28 20:29:45 +00:00
Thomas Bushnell, BSG 1a6a8198a6 (_hurd_internal_post_signal): In pending signal check for signal zero, repair logical sense of test by parethisizing correctly. 1996-06-28 19:44:50 +00:00
Richard Kenner 6032698991 (mips:*:*:UMIPS): Fix typo in last change. 1996-06-28 17:28:58 +00:00
Roland McGrath de6b062321 Fri Jun 28 07:27:10 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* string/strndup.c (strndup): Always terminate the string.
	* string/string.h (strndupa): Likewise.

Thu Jun 27 14:22:31 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* stdio/Makefile (routines): Add vscanf.
	* stdio-common/Makefile (routines): Remove vscanf.
	* stdio-common/vscanf.c: Move to ...
	* stdio/vscanf.c: here.

	* rpm/Makefile (headers, install-lib, install-lib.so,
	versioned, install-bin, install-sbin, install-data,
	install-others): Add $(-VARIABLE).
1996-06-28 11:42:05 +00:00
Roland McGrath 6dbe283756 Fri Jun 28 02:41:08 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* nss/Makefile (databases): New variable.
	(routines, libnss_files-routines): Use it.
	(subdir-dirs): Compute from $(services).

	* sysdeps/unix/sysv/linux/syscalls.list (create_module, delete_module,
	init_module, klogctl): Use EXTRA in the "caller" column so these get
	added to unix-extra-syscalls and thus compiled in misc.

	* string/Makefile (routines): Add strndup.
	* string/strndup.c: New file.
	* string/string.h: Declare strndup.
	(strndupa): New macro.

	* string/string.h: Declare __strdup.
	* string/strdup.c: Deansideclized.  Define __ name and weak alias.

	* string/string.h: Don't define memccpy as macro for [__OPTIMIZE__].

Thu Jun 27 23:43:22 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/alpha/dl-machine.h (elf_machine_rela):  The Alpha's
	address-of operation and plt format conspire to require all
	dynamic relocs to be resolved to actual symbols not plt entries.

Thu Jun 27 02:49:28 1996  Ulrich Drepper  <drepper@cygnus.com>

	* catgets/gencat.c: Add casts to avoid signed<->unsigned warnings.

	* grp/initgroups.c (initgroups): De-ansi-fy.
	Move declaration of NGROUPS and GROUPS outside #if so that
	the code compiles for NGROUPS_MAX != 0.

	* inet/Makefile (headers): Add netinet/ether.h and netinet/if_ether.h.
	(routines): Add ether_aton, ether_aton_r, ether_hton, ether_line,
	ether_ntoa, ether_ntoa_r, and ether_ntoh.
	* inet/ether_aton.c, inet/ether_aton_r.c, inet/ether_hton.c,
	inet/ether_line.c, inet/ether_ntoa.c, inet/ether_ntoa_r.c,
	inet/ether_ntoh.c: New files.  Implementation of functions to
	handle Ethernet address to host mapping.
	* inet/netinet/ether.h: New file.  Declare ether_* functions.
	* netinet/ether.h: Wrapper around inet/netinet/ether.h for glibc
	compilation.
	* nss/ethers-lookup.c: New file.  Lookup function for ethers database.
	* nss/Makefile (routines): Add ethers-lookup.
	(libnss_files-routines): Add files-ethers.

	* nss/getXXent_r.c: Don't define set*ent and end*ent function
	with _r suffix.

	* nss/nss_files/files-XXX.c (internal_endent): Don't reset
	KEEP_STREAM every time called.
	(_nss_files_end): Reset KEEP_STREAM here instead.
	(internal_getent): If STREAM == NULL try to open instead of
	signalling error.
	Use cast to prevent warning.
	Terminate read line in case the buffer is too small.

	* nss/nss_files/files-ethers.c: New file.  Implementation of
	Ethernet adress<->hostname lookup through files interface.

	* stdlib/mbstowcs.c: Define based on mbsrtowcs().
	* stdlib/mbtowc.c: Define based on mbrtowc().
	* stdlib/wcstombs.c: Define based on wcsrtombs().
	* stdlib/wctomb.c: Define based on wcrtomb().

	* sunrpc/xdr.c (xdr_u_int): Avoid bogus call to
	unexpected_sizes_in_xdr_u_int.

	* sysdeps/generic/netinet/if_ether.h: New file.  Generic declaration
	of `struct ether_addr'.
	* sysdeps/unix/sysv/linux/netinet/if_ether.h: New file.  Linux specific
	declaration of `struct ether_addr'.

	* wcsmbs/mbrtowc.c: Handle case where argument PS is NULL.
	* wcsmbs/mbsrtowcs.c: Ditto.
	* wcsmbs/wcrtomb.c: Ditto.
	* wcsmbs/wcsrtombs.c: Ditto.

	* wcsmbs/mbsinit.c: Prepare for PS being NULL.
1996-06-28 08:56:59 +00:00
Roland McGrath 47ce6a308c Thu Jun 27 23:43:22 1996 Richard Henderson <rth@tamu.edu>
* sysdeps/alpha/dl-machine.h (elf_machine_rela):  The Alpha's
	address-of operation and plt format conspire to require all
	dynamic relocs to be resolved to actual symbols not plt entries.
1996-06-28 06:39:22 +00:00
Miles Bader a5d96b254c * hurd/get-host.c <fcntl.h>: New include.
* hurd/set-host.c <fcntl.h>: New include.
	(_hurd_set_host_config): Include NEW in args to dir_link.
	Return NWROTE, not NREAD.
1996-06-26 21:07:21 +00:00
Miles Bader f34e0ae3b0 Wed Jun 26 13:19:35 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/getcwd.c
	(_hurd_canonicalize_directory_name_internal): Don't deallocate
	DOTID & DOTDEVID until we're finished with them (we need to keep
	them at least until we've fetched the next level of id ports, so
	that mach will be able to use the same name if they're the same).
	Add inner_errlose: label, which deallocates DOTID & DOTDEVID and
	jumps to errlose, for those places where such cleanup is needed.
1996-06-26 17:46:38 +00:00
Miles Bader aeb0816f97 (_hurd_canonicalize_directory_name_internal): Don't deallocate DOTID & DOTDEVID until we're finished with them (we need to keep them at least until we've fetched the next level of id ports, so that mach will be able to use the same name if they're the same). Add inner_errlose: label, which deallocates DOTID & DOTDEVID and jumps to errlose, for those places where such cleanup is needed. 1996-06-26 17:44:44 +00:00
Roland McGrath bba7bb78f3 Wed Jun 26 01:58:49 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* nss/nss_files/files-parse.c (parse_list): Count null in EOL calc.

	Move DB code into separate -ldb library.
	* db/Makefile (extra-libs): New variable, list libdb.
	(routines): Renamed to libdb-routines.
	* shlib-versions: Add libdb=2.

	* nss/network-lookup.c (DEFAULT_CONFIG): New macro.
	* nss/host-lookup.c (DEFAULT_CONFIG): New macro.

	* nss/nsswitch.c (nss_parse_service_list): Use __strncasecmp instead
	of strncasecmp.  Extend syntax to grok [!foo=bar].

	* sysdeps/generic/strncase.c: Define __strncasecmp with strncasecmp as
	weak alias.
	* string/string.h: Declare __strncasecmp.

	* nss/nsswitch.c (nss_parse_file): Call __getline, not getline.
	(service_alias): Variable removed.
	(nss_parse_service_list): New function, broken out of nss_getline.
	Remove alias conversion; we will just use symlinks.
	(__nss_database_lookup): Take new string arg DEFCONFIG.
	If no entry exists, make one with service list parsed from that.
	* nss/nsswitch.h: Update protocol for __nss_database_lookup.
	* nss/XXX-lookup.c (DEFAULT_CONFIG): New macro, set to 0 if undefined.
	(DB_LOOKUP_FCT): Pass it to _nss_database_lookup.

	* grp/initgroups.c: Rewritten using getgrent.  Handle unlimited group
	list size.

	* sunrpc/xdr.c (xdr_int): #if 0 out unresolved references in dead code.

Wed Jun 26 01:56:50 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/programs/locale.c (long_options): Short form of
	--version option is `-V'.
	(main): Recognize `-V' as option, not `-v'.
	Call `usage' instead of printing error message for illegal
	option.
	(usage): Document `-V'.
1996-06-26 15:46:01 +00:00
Roland McGrath be64fe6d86 Wed Jun 26 01:58:49 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sunrpc/xdr.c (xdr_int): #if 0 out unresolved references in dead code.
1996-06-26 06:13:37 +00:00
Miles Bader 23586dcc72 Tue Jun 25 17:22:55 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/getcwd.c
	(_hurd_canonicalize_directory_name_internal): Initialize PARENT to
	THISDIR, and don't ever deallocate PARENT unless it's != THISDIR.
1996-06-25 21:50:49 +00:00
Miles Bader 315289fbb8 (_hurd_canonicalize_directory_name_internal): Initialize PARENT to THISDIR, and don't ever deallocate PARENT unless it != THISDIR. 1996-06-25 21:48:49 +00:00
Roland McGrath 622586fbe0 Tue Jun 25 10:58:23 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* inet/getrpcent.c: Fix macros.
	* inet/getrpcent_r.c: Fix macros.

	* elf/dlsym.c (dlsym): Search the global scope if HANDLE is null.

	* elf/dl-load.c (_dl_map_object_from_fd): Initialize L.
1996-06-25 18:22:06 +00:00
Roland McGrath a4242e25dc Tue Jun 25 09:55:47 1996 David Mosberger-Tang <davidm@AZStarNet.com>
* catgets/gencat.c (write_out): Use %Zu to print variables of type
 	size_t.
	* resolv/res_debug.c (__p_rr): Print size_t variable as %lu and
	cast it to (unsigned long) to make it work both on 32 and 64
	bit architectures.

Sat Jun 22 13:05:25 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* locale/Makefile (distribute): Add `programs/' prefix to all
	files in that directory.

	* Makerules (distinfo-vars): Assign subdir directly so that `ifdef
	subdir' works.

	* MakeTAGS (sources, headers): Make them simply expanded variables
	so that all-dist is expanded before it is changed.
1996-06-25 13:56:54 +00:00
Roland McGrath 5325738ce4 * Make-dist (dist): Don't depend on crypt tar file. Remove that rule. 1996-06-25 13:49:53 +00:00
Roland McGrath 748050b386 * Makefile (subdirs): Remove crypt.
* crypt: Directory removed.  It will be made an independent library
	distribution.

	* Makefile (distribute): Add rpm/{Makefile,teplate,rpmrc}.
1996-06-25 13:46:05 +00:00
Roland McGrath ad8da79bd5 * inet/getrpcent_r.c (DATABASE_NAME): New macro. 1996-06-25 13:40:47 +00:00
Roland McGrath dcea62dd4e * inet/getrpcbynumber.c (BUFLEN): New macro.
* configure.in (--no-whole-archive check): Remove backslashes in cmd.
1996-06-25 12:13:01 +00:00
Roland McGrath 3d3ac840ea * Makefile (headers): Add libc-lock.h.
* sysdeps/stub/libc-lock.h: New file.

	* inet/getrpcbynumber.c: Remove _r typo.

	* elf/dl-load.c (_dl_map_object): Fix typo in last change.
1996-06-25 11:59:42 +00:00
Roland McGrath 282d87435c * resolv/Makefile (distribute): Remove res_hconf.h; add mapv4v6addr.h
and mapv4v6hostent.h.
	(routines): Move res* and gethnamaddr into libresolv-routines.
	(libresolv-routines): New variable, put them there.
	(extra-libs): New variable, list libresolv.
	(CPPFLAGS): Add -D for get*by* to res_get*by*.
1996-06-25 10:52:53 +00:00
Roland McGrath c66273aae5 * nss/nss_files/files-parse.c (parse_list): Reset ELT for elements
after the first!

	* nss/nsswitch.c (__nss_database_lookup): If nsswitch.conf is missing
	or doesn't mention DATABASE, use an internal default equivalent to
	"DATABASE: compat [NOTFOUND=return] dns [NOTFOUND=return] files".
	(nss_lookup_function): Call nss_new_service as needed.
	(nss_parse_file): Don't bother calling nss_new_service here.

	* grp/fgetgrent.c (LINE_PARSER): Pass zero SWALLOW arg for fields.
	* pwd/fgetpwent.c: Likewise.
1996-06-25 10:20:09 +00:00
Roland McGrath 5f0e6fc702 Tue Jun 25 02:59:11 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* malloc/malloc.h: Declare malloc_object_allocated_size, malloc_walk.
	* malloc/Makefile (dist-routines): Add malloc-size, malloc-walk.
	* malloc/malloc-size.c: New file.
	* malloc/malloc-walk.c: New file.

	* malloc/malloc-find.c (malloc_find_object_address): Return null if
	PTR is outside the heap.

	* elf/dl-load.c (_dl_map_object): If the requested name matches the
 	soname of a loaded object, use that object.

Mon Jun 24 19:57:01 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Makefile (subdirs): Add nss.

	* inet/Makefile (routines): Add getrpcent, getrpcbyname,
	getrpcbynumber, getrpcent_r, getrpcbyname_r, getrpcbynumber_r.
	* inet/getrpcbynumber_r.c: New file.
	* inet/getrpcbynumber.c: New file.
	* inet/getrpcbyname.c: New file.
	* inet/getrpcbyname_r.c: New file.
	* inet/getrpcent_r.c: New file.
	* inet/getrpcent.c: New file.
	* nss/rpc-lookup.c: New file.
	* nss/nss_files/files-rpc.c: New file.
	* nss/Makefile (routines): Add rpc-lookup.
	(libnss_files-routines): Add files-rpc.
	* sunrpc/Makefile (routines): Remove getrpcent.
	* sunrpc/getrpcent.c: File removed.

	* nss/getXXent_r.c (REENTRANT_GETNAME): Clear NO_MORE when NIP is
	non-null on entry.

	* Makeconfig (rpath-link): Add $(nssobjdir).
	(nssobjdir): New variable.

	* Makerules: Move shared library building before objects rules, so
	versions are known before extra-lib.mk gets included.
	* extra-lib.mk (lib-noranlib): Depend on the shared object too.

	* pwd/getpwuid.c: Rewritten using nss.
	* pwd/getpwnam.c: Likewise.
	* pwd/getpwent.c: Likewise.
	* grp/getgrnam.c: Likewise.
	* grp/getgrgid.c: Likewise.
	* grp/getgrent.c: Likewise.
	* pwd/Makefile (routines): Add getpwent_r, getpwnam_r, getpwuid_r.
	* pwd/getpwent_r.c: New file.
	* pwd/getpwnam_r.c: New file.
	* pwd/getpwuid_r.c: New file.
	* grp/Makefile (routines): Add getgrent_r, getgrgid_r, getgrnam_r.
	* grp/getgrnam_r.c: New file.
	* grp/getgrgid_r.c: New file.
	* grp/getgrent_r.c: New file.
	* grp/Makefile (routines): Remove grpopen, grpread.
	* pwd/Makefile (routines): Remove pwdopen, pwdread.
	* grp/grpopen.c, grp/grpread.c, pwd/pwdopen.c, pwd/pwdread.c: Removed.

	* pwd/fgetpwent.c: Rewritten using files-parse.c.
	* grp/fgetgrent.c: Likewise.

	* nss/Makefile (routines): Add grp-lookup and pwd-lookup.
	* nss/pwd-lookup.c, nss/grp-lookup.c: New files.
	* nss/nss_files/files-grp.c: New file.
	* nss/nss_files/files-pwd.c: New file.

	* nss/Makefile (subdir-dirs): New variable; use it in vpath.

	* nss/nss_files/files-parse.c: New file.
	* nss/nss_files/files-XXX.c: New file.
	* nss/nss_files/files-hosts.c, nss/nss_files/files-proto.c,
	nss/nss_files/files-service.c, nss/nss_files/files-network.c:
	Rewritten using them.

	* nss/Makefile (libnss_files-routines): Remove files-host.
	Add files-hosts, files-grp, files-pwd.

	* nss/nss_dns/dns-network.c: Don't include <pthread.h>.

Mon Jun 24 22:39:12 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/alpha/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE):
	A .plt entry now loads the .rela.plt offset directly rather
	than making us calculate it.

Sun Jun 23 15:24:05 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* time/Makefile ($(installed-localtime-file) rule): Do
	$(make-target-directory) first.

	* resolv.h: Fix wrapper for resolv/resolv.h.

	* configure.in (ld --no-whole-archive check): Use AC_TRY_COMMAND.
	Compile dummy file and pass -nostdlib -nostartfiles so as not to
	require installed libraries.

	* shlib-versions (*-*-*): Set libresolv=2, libnss_files=1,
	libnss_dns=1.

Sun Jun 23 19:42:05 1996  Ulrich Drepper  <drepper@cygnus.com>

	* resolv/netdb.h (_PATH_NSSWITCH_CONF): New macro.

	* inet/herrno.c: New file.

	* resolv/res_init.c: Remove res_hconf calls.

	* nss/Makefile, nss/XXX-lookup.c, nss/file-lookup.c,
	nss/getXXbyYY.c, nss/getXXbyYY_r.c, nss/getXXent.c,
	nss/getXXent_r.c, nss/host-lookup.c, nss/network-lookup.c,
	nss/nsswitch.c, nss/nsswitch.h, nss/proto-lookup.c,
	nss/service-lookup.c: New files.  Implementation of name
	service switch, following the approach in Solaris.
	Interface specification and general structure inspired by Peter
	Eriksson <pen@lysator.liu.se>.
	* nss/nss_files/files-host.c, nss/nss_files/files-network.c,
	nss/nss_files/files-proto.c, nss/nss_files/files-service.c:
	Implementation of libnss_files.so module for file based databases
	in NSS service.
	* nss/nss_dns/dns-host.c, nss/nss_dns/dns-network.c: Implementation
        if libnss_dns.so module for DNS name lookup in NSS service.

	* inet/getproto.c, inet/getprtent.c, inet/getprtname.c,
	inet/getservent.c, inet/getsrvbynm.c, inet/getsrvbypt.c:
	Changed to serve as interface to NSS.
	* inet/gethstbyad.c, inet/gethstbyad_r.c, inet/gethstbynm.c,
	inet/gethstbynm2.c, inet/gethstbynm2_r.c, inet/gethstbynm_r.c,
	inet/gethstent.c, inet/gethstent_r.c, inet/getnetbynm.c,
	inet/getnetbynm_r.c, inet/getnetbypt.c, inet/getnetbypt_r.c,
	inet/getnetent.c, inet/getnetent_r.c, inet/getproto_r.c,
	inet/getprtent_r.c, inet/getprtname_r.c, inet/getservent_r.c,
	inet/getsrvbynm_r.c, inet/getsrvbypt_r.c: New files.  Implement
	interfaces to NSS, including reentrant functions.

	* resolv/getnetbyaddr.c, resolv/getnetbyname.c, resolv/getnetent.c,
	resolv/sethostent.c: Removed:  Obsoleted by NSS.

	* resolv/mapv4v6addr.h, resolv/mapv4v6hostent.h: Extracted from
	gethnamaddr.c.  These private functions are now used in more
	than one file.

	* resolv/inet_pton.c, resolv/gethnamaddr.c: Updated to bind-4.9.4-T5B.

Sat Jun 22 16:49:47 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* rpm/Makefile ($(config)): Make sure the word list in the for
	loop is syntactically non-empty.
1996-06-25 08:56:57 +00:00
Roland McGrath 7f8116797f Sat Jun 22 21:29:52 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Version 1.92 test release.

Sat Jun 22 23:30:07 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/syscalls.list (ksyslog_ctl): Rename
	to klogctl to match prototype in sys/klog.h.

	* sysdeps/posix/libc_fatal.c: Add include of <string.h>.
	* sysdeps/unix/sysv/linux/gethostid.c: Ditto.

	* sysdeps/posix/getcwd.c (__canonicalize_directory_name_internal):
	Remove.  Code is now part of __getcwd again.  The old function
	never really worked for anything but THISDIR==".".

	* sysdeps/alpha/Makefile (CFLAGS-rtld.c): Add -mbuild-constants
	only when building ELF version of library.

	* libio/libioP.h (_IO_vscanf): Add prototype.

	* posix/unistd.h (syscall): Change sysno arg and return value
	to int long.

	* version.h (VERSION): Updated to 1.92.
1996-06-23 01:31:00 +00:00
Roland McGrath 072ebcefb2 * version.h (VERSION): Version 1.92 test release.
* misc/Makefile (headers): Add ar.h.
	* misc/ar.h: New file.

	* config.make.in (BUILD_CC): New variable.
	* configure.in: Check for BUILD_CC if $host != $build.

	* posix/glob.c: Include <alloca.h> only [HAVE_ALLOCA_H], not [sparc].

	* Makerules [! objects] (subdir_lib): Depend on the stamp$o files.
	(stamp$o files): New targets, create them empty, no deps.

	Update from bind-4.9.4-T3B.
1996-06-22 22:06:08 +00:00
Roland McGrath 40a4b79f21 Regenerated
Sat Jun 22 10:44:09 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* posix/glob.c: Include <alloca.h> only [HAVE_ALLOCA_H], not [sparc].

Fri Jun 21 00:27:51 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* posix/fnmatch.c (fnmatch): Fix \*[*?]+ case to increment name ptr
 	only for ?s, not for *s.  Fix from Chet Ramey.

Wed May 22 17:22:14 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* posix/glob.c [VMS]: Don't include <pwd.h>.
	[HAVE_VMSDIR_H]: Include "vmsdir.h".
	(glob) [VMS]: Don't grok ~.

	* posix/glob.h [_AMIGA]: Remove `struct stat;' forward decl.
1996-06-22 21:14:17 +00:00
Roland McGrath 78b5ba3eb7 Sat Jun 22 10:44:09 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* rpm/template (Source): New field.
	(%prep, %build, %install): New sections.
	(%files): Add %doc FAQ NEWS NOTES README.
	* rpm/rpmrc (builddir): Removed.
1996-06-22 15:00:08 +00:00
Roland McGrath 0d3726c3fb * elf/dl-load.c (_dl_map_object_from_fd): Fix mapping and l_phdr
guessing to not assume p_vaddr of first load cmd is zero.
1996-06-21 21:37:08 +00:00
Roland McGrath 4f54cdb1dd * sysdeps/sparc/elf/start.S: New file.
* sysdeps/sparc/dl-machine.h: New file.

	* posix/fnmatch.c (fnmatch): Fix \*[*?]+ case to increment name ptr
 	only for ?s, not for *s.  Fix from Chet Ramey.

	Fixes thanks to Raja R Harinath <harinath@cs.umn.edu>:
	* sysdeps/unix/sysv/utmpbits.h: Define _HAVE_UT_{TYPE,ID,TV,HOST}.
	Use __{BEGIN,END}_DECLS.
	(_PATH_WTMP, _PATH_UTMP, _PATH_LASTLOG): New macros.
	* login/utmp.h (UTMP_FILE, UTMP_FILENAME, WTMP_FILE, WTMP_FILENAME):
	New macros, moved here from sysdeps/gnu/utmpbits.h.
	* sysdeps/generic/utmpbits.h (_HAVE_UT_HOST): Define it.
	* sysdeps/gnu/utmpbits.h (_HAVE_UT_HOST): Likewise.
	* login/logout.c: Use ut_host only #if _HAVE_UT_HOST.
	Use sizeof instead of UT_*SIZE.
	* login/logwtmp.c: Likewise.

	* misc/tsearch.c (tdelete): Define as weak alias to __tdelete.

	* version.c (banner): Add trailing newline.
1996-06-21 21:01:27 +00:00
Roland McGrath 51fbd1f60a Fri Jun 21 00:27:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* login/utmp.h: Declare login_tty.

Thu Jun 20 21:19:07 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/alpha/dl-machine.h (elf_alpha_fix_plt):
	Changed to a 12-byte PLT entry to remove dependency on $gp.
	Take a new got_addr parameter.
	(elf_machine_rela): Pass the new parameter.
	(ELF_MACHINE_RUNTIME_TRAMPOLINE): Do arithmetic for 12-byte PLT.
	(RTLD_START): Do normal linkage with program entry.

	__hurd_file_name_lookup, __hurd_file_name_split): Add & use LOOKUP
	argument.
	__hurd_file_name_lookup_retry, hurd_file_name_lookup_retry:
1996-06-21 04:33:09 +00:00
Roland McGrath 7b5092a79d Thu Jun 20 21:19:07 1996 Richard Henderson <rth@tamu.edu>
* sysdeps/alpha/dl-machine.h (elf_alpha_fix_plt):
	Changed to a 12-byte PLT entry to remove dependency on $gp.
	Take a new got_addr parameter.
	(elf_machine_rela): Pass the new parameter.
	(ELF_MACHINE_RUNTIME_TRAMPOLINE): Do arithmetic for 12-byte PLT.
	(RTLD_START): Do normal linkage with program entry.
1996-06-21 04:30:50 +00:00
Miles Bader 51ec5cb28a Thu Jun 20 12:18:21 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/brk.c (_hurd_brk): Initialize to 0.

	* hurd/getuids.c (getuids): New weak link to __getuids.
1996-06-20 21:32:45 +00:00
Miles Bader ae6095ca6f (___brk_addr): Now a variable, initialized to 0, instead of a weak link to _hurd_brk. 1996-06-20 17:34:37 +00:00
Michael Meissner ff2ac34c1f Add support for PowerPC Linux 1996-06-20 16:20:05 +00:00
Miles Bader ca591d426e (getuids): New weak link to __getuids. 1996-06-20 16:18:45 +00:00
Miles Bader bf0f472003 *** empty log message ***
Wed Jun 19 10:21:24 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/hurdlookup.c (__hurd_file_name_lookup_retry,
	__hurd_file_name_lookup, __hurd_file_name_split): Add & use LOOKUP argument. 
	Rename nested function lookup to lookup_op.
	(__file_name_lookup, __file_name_lookup_under):
	Pass 0 for lookup arg to __hurd_file_name_lookup.
	(__file_name_split): Likewise for __hurd_file_name_split.
	* hurd/path-lookup.c (hurd_file_name_path_lookup): Add LOOKUP argument.
	Rename nested function lookup to scan_lookup.
	(file_name_path_lookup): Pass 0 for lookup arg to
	hurd_file_name_path_lookup.
	* hurd/hurd/lookup.h (__hurd_file_name_lookup, hurd_file_name_lookup,
	__hurd_file_name_lookup_retry, hurd_file_name_lookup_retry: 
	__hurd_file_name_split, hurd_file_name_split, hurd_file_name_lookup):
	Add LOOKUP argument.
	* sysdeps/mach/hurd/access.c (__access): Pass 0 lookup arg to
	__hurd_file_name_lookup.
1996-06-19 22:38:55 +00:00
Miles Bader 92ea4fece7 (__hurd_file_name_lookup_retry, __hurd_file_name_lookup, __hurd_file_name_split): Add & use LOOKUP argument. Rename nested function lookup to lookup_op. (__file_name_lookup, __file_name_lookup_under): Pass 0 for lookup arg to __hurd_file_name_lookup. (__file_name_split): Likewise for __hurd_file_name_split. 1996-06-19 20:11:26 +00:00
Roland McGrath 959c367445 Regenerated: autoconf configure.in 1996-06-19 15:06:55 +00:00
Roland McGrath e50ec9f91d Mon Jun 17 19:09:49 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Make-dist (+sysdeps): Move wildcard inside loop to avoid consing
	up a huge list just to discard most of it.

	* configure.in (sysnames): Avoid fgrep by using the case shell
	builtin.

	* Makeconfig (config.status): Fix dependency on Implies files.
1996-06-19 14:52:21 +00:00
Roland McGrath a1470b6f83 Thu Jun 13 17:25:11 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/generic/memcmp.c: Add prototype decls for internal fns.

	* locale/programs/locale.c: Include string.h.

	* sunrpc/xdr_stdio.c (xdrstdio_getlong), sunrpc/xdr_rec.c
 	(xdrrec_getlong), sunrpc/xdr_mem.c (xdrmem_getlong): Make sure
 	appropriate sign-extension is performed on machines with
 	sizeof(long) > 4.

	* sunrpc/xdr.c (xdr_int, xdr_u_int): If sizeof(long)==8 and
 	sizeof(int)<sizeof(long), we need to go through a temporary
 	variable.

	* locale/programs/ld-numeric.c: Include <alloca.h>

	* libio/stdio.h (__libc_fatal): Add prototype.

	* libio/cleanup.c: Use __P() to declare prototype when __STDC__ is
 	in efect.

	* libio/iopopen.c (read_or_write, parent_end, child_end): Declare
 	volatile to avoid "might get clobbered by longjmp" warning.

	* features.h (__KERNEL_STRICT_NAMES): Define __KERNEL_STRICT_NAMES
 	unless _LOOSE_KERNEL_NAMES is in effect (which, with high
 	probability is a sure loser).
	* sysdeps/unix/sysv/linux/gnu/types.h (__KERNEL_STRICT_NAMES): Remove.

	* sysdeps/unix/bsd/osf/alpha/start.S (errno): Removed.
	* sysdeps/unix/sysv/linux/alpha/start.S: Ditto.

	* misc/paths.h (_PATH_MAN): Change from /usr/share/man to /usr/man
	to be Linux FSSTND compliant.

Mon Jun 10 17:50:31 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/pipe.S: Use PSEUDO.

	* sysdeps/unix/sysv/linux/alpha/sysdep.S,
 	sysdeps/unix/sysv/linux/alpha/brk.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/llseek.S,
 	sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
 	sysdeps/unix/sysv/linux/alpha/syscall.S: Rename syscall_error to
 	__syscall_error to avoid intruding application name space.

	* sysdeps/unix/sysv/linux/alpha/sysdep.h: Rename __NR_get?id
	to SYS_get?id so that syscall stubs in sysdeps/unix define
	these syscalls in terms of getxpid/getxuid/getxgid.

	* sysdeps/unix/_exit.S, sysdeps/unix/getegid.S,
 	sysdeps/unix/geteuid.S, sysdeps/unix/getppid.S,
 	sysdeps/unix/execve.S, sysdeps/unix/fork.S,
 	sysdeps/unix/syscall.S: Terminate syscall with PSEUDO_END.

	* sysdeps/unix/make-syscalls.sh, sysdeps/unix/sysdep.h
 	(PSEUDO_END): Rename END() to PSEUDO_END().

	* sysdeps/unix/alpha/sysdep.h: Move error-handling code in PSEUDO
 	to PSEUDO_END to improve branch-prediction.  Include .frame
 	directive to make syscalls debugabble.
	(PSEUDO_END): New macro.

	* sysdeps/unix/alpha/sysdep.h, sysdeps/alpha/bb_init_func.S,
 	sysdeps/unix/sysv/linux/alpha/brk.S: Use ldiq instead of ldi since
 	latter is illegal under DEC Unix.

	* sysdeps/unix/alpha/sysdep.S: Renamed from
	sysdeps/unix/sysv/linux/alpha/sysdep.S.  This file works for OSF/1
 	as well.
	* sysdeps/unix/bsd/osf/alpha/sysdep.S: Remove (note that the
 	EWOULDBLOCK -> EAGAIN mapping was unnecessary since
 	EWOULDBLOCK==EAGAIN under DEC Unix and Linux/Alpha).

	* sysdeps/alpha/divrem.h: Use retaddr instead of ra as the return
 	address register in the .frame directive.

	* sysdeps/alpha/copysign.c: Remove.

	* sunrpc/rpc/types.h: Include <sys/param.h> and <netinet/in.h> to
 	avoid RPC definitions of INADDR_LOOPBACK and/or MAXHOSTNAMELEN.

	* errno.h: Move __END_DECLS to correct place to make file
 	compilable under c++.

	* dirent/dirent.h: Document _DIRENT_HAVE_D_OFF macro.  Define
	d_ino only if <direntry.h> hasn't defined d_fileno.

	* configure.in (HAVE_ASM_WEAKEXT_DIRECTIVE): Reverse order of
	arguments to weakext to make .weakext detection work on ECOFF systems.

	* FAQ: Add Linux/Alpha to list of supported platforms.  Mention
	that _validuser() has been replaced by __ivaliduser().

Thu Jun  6 21:39:38 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/bsd/sun/sunos4/tcsetattr.c (tcsetattr): Declare cmd
 	as unsigned long, not as int (to avoid incorrect int->long
 	promotion).
1996-06-19 06:54:12 +00:00
Roland McGrath 6990326c21 Wed Jun 19 01:27:57 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* math/Makefile (distribute): Add ieee-math.c.

Wed Jun 19 03:24:58 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/codeset_name.c: New file.  Provide function for information
 	about currently used character set.
	* locale/Makefile (routines): Add codeset_name.
	* locale/langinfo.h (_NL_CTYPE_CODESET_NAME): Add new constant.
	* locale/localeinfo.h: Change magic number because of incompatible
	change.
	* locale/C-ctype.c: Add initializer for new field `codeset_name'.
	* locale/programs/ld-ctype.c: Implement handling of `codeset_name'.

	* locale/programs/locfile.c: Don't depend in pre-2.0 Linux specific
 	name `MAX_IOVEC'.  Instead use standard name `UIO_MAXIOV'.

	* locale/setlocale.c (setlocale): Initialize local variables to
	prevent warnings.
1996-06-19 05:38:55 +00:00
Roland McGrath bd1be8ec88 * Version 1.91 test release. 1996-06-18 22:27:43 +00:00
Roland McGrath 36dbcbc98d * Makerules ($(common-objpfx)distinfo-$(subdir)): Change target from
distinfo to this.
	(distinfo): Make phony target depending on that.
	(TAGS, po/%.pot, dist): Change deps.
	(common-clean): Remove that file.
	* rpm/Makefile (distinfo): Change names.
1996-06-18 22:23:37 +00:00
Roland McGrath 96383fc79d Tue Jun 18 17:56:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* rpm/Makefile (clean): New target.

	* stdlib/test-canon.c: New test program contributed by David Mosberger.
	* stdlib/Makefile (tests): Add test-canon.
	* stdlib/canonicalize.c: Rewritten by David Mosberger.

	* mach/Machrules (%_server.c %_server.h rule): Remove gratuitous
	mention of $< in mig cmd.  Thanks to Shantanu Goel.
1996-06-18 22:01:43 +00:00
Roland McGrath 394f4f179e Tue Jun 18 17:56:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdlib/test-canon.c: New test program contributed by David Mosberger.
	* stdlib/Makefile (tests): Add test-canon.
	* stdlib/canonicalize.c: Rewritten by David Mosberger.
1996-06-18 22:01:27 +00:00
Ian 1c719dd82c Recognize -openvms. 1996-06-18 18:23:57 +00:00
Roland McGrath 8882a2dad5 Sun Jun 16 03:22:49 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Make-dist (subdir): Make empty value really empty.
1996-06-18 02:41:29 +00:00
Roland McGrath 2cc7dc4d7f Mon Jun 17 17:53:21 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/brk.c (___brk_addr): Define as weak alias for
	_hurd_brk.

	* libio/stdio.h [__USE_SVID]: Declare tempnam.

Fri Jun 14 19:28:33 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/syscalls.list: Add swapon with two
	parameters.

Wed Jun 12 20:40:51 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/dl-machine.h (RTLD_START): Fix access to
	_dl_default_scope.

	* sysdeps/stub/elfclass.h: New file.
1996-06-17 22:41:47 +00:00
Roland McGrath 61ee476c44 * Make-dist (subdir): Make empty value really empty. 1996-06-16 10:14:04 +00:00
Roland McGrath 4c904bd459 * version.h (VERSION): Update to 1.91. 1996-06-16 10:06:22 +00:00
Roland McGrath 26da047f37 * hurd/hurdinit.c (map0): Remove [!PIC] conditional.
* shlib-versions (*-*-*): Add libutil=1.

	* rpm/Makefile (install-lib): Add libc.a et al.
	(install-others): Only add libc.so if $(build-shared) is yes.

	* math/Makefile (install-lib): New variable, list libieee.a.
	(non-lib.a): Likewise.
	(extra-objs): Likewise, and ieee-math.o.
	($(objpfx)libieee.a): New target, link to ieee-math.o.
	* math/ieee-math.c: New file.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir)=math]: Remove setfpucw
	and libieee.a stuff.
	* sysdeps/unix/sysv/linux/ieee-fpucw.c: File removed.
	* sysdeps/unix/sysv/linux/i386/ieee_fpu.c: File removed.
1996-06-16 09:31:23 +00:00
Roland McGrath 3433189e8a Sun Jun 16 03:22:49 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/Makefile (sysdep_headers): Make append of termio.h
	and rule for it conditional on termio.h not already being in
	sysdep_headers.

	* rpm/Makefile (install-others) [libc.so-version]: Get libc.so from
	$(libdir), only the versioned named from $(slibdir).
	(instfiles): New variable.
	(glibc-$(version).$(config).rpm): New target.  Run rpm -bb.
	* rpm/rpmrc: New file.  A third of the options controlling rpm can
	only be given here (another third is on the command line, and a third
	cannot be specified in any way shape or form).
1996-06-16 08:46:47 +00:00
Roland McGrath 6a44147171 Sun Jun 16 02:44:22 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* rpm/template: New file.
	* rpm/Makefile: New file.

	* Makeconfig (sysdep-configures): Remove empty variable.

	* Makerules (distinfo-vars): Write defns for $(install-lib.so) and
	$(versioned).

	* manual/Makefile (subdir_%): Add new rule with no deps, secondary to
	to rule w/dep on %, with no-op commands.

	* Makerules (subdir_distinfo): New phony target; depend on distinfo.
	* Makefile (rpm/%): New rule.
	(+subdir_targets): Add subdir_distinfo.

	* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Don't add
 	fpu_control.h here.
1996-06-16 06:52:32 +00:00
Roland McGrath a3b5844025 Sun Jun 16 00:40:20 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/Makefile ($(installed-localtime-file)): If target exists, do
	nothing but print a message; if not, make it an absolute symlink.

	* time/tzset.c (__tzset): After stripping leading :, call
	__tzfile_read on TZ even if it's empty or null.
	* time/tzfile.c (__tzfile_read): Use "Universal" if passed "".
1996-06-16 04:52:54 +00:00
Roland McGrath 5fbef18864 * hurd/Makefile (routines): Add get-host, set-host.
(distribute): Add hurdhost.h.
	* hurd/hurdhost.h: New file.
	* sysdeps/mach/hurd/gethostname.c: Use _hurd_get_host_config.
	* sysdeps/mach/hurd/gethostid.c: Likewise.
	* sysdeps/mach/hurd/sethostname.c: Use _hurd_set_host_config.
	* sysdeps/mach/hurd/sethostid.c: Likewise.
	* hurd/get-host.c: New file.
	* hurd/set-host.c: New file.

	* math/Makefile (headers): Add fpu_control.h.
	(aux): New variable, list fpu_control and setfpucw.
	* sysdeps/generic/fpu_control.c: New file.
	* sysdeps/stub/fpu_control.h: New file.
	* sysdeps/unix/sysv/linux/m68k/fpu_control.h: Moved to ...
	* sysdeps/m68k/fpu_control.h: here.
	* sysdeps/unix/sysv/linux/i386/fpu_control.h: Moved to ...
	* sysdeps/i386/fpu_control.h: here.
	* sysdeps/unix/sysv/linux/alpha/fpu_control.h: Moved to ...
	* sysdeps/alpha/fpu/fpu_control.h: here.  Fixed copyright.
	* sysdeps/unix/sysv/linux/alpha/Makefile (sysdep_routines): Remove
	setfpucw, fpu_control.
	* sysdeps/unix/sysv/linux/alpha/fpu_control.c: File removed.
	* sysdeps/unix/sysv/linux/setfpucw.c: Moved to ...
	* sysdeps/generic/setfpucw.c: here.
	(__fpu_control): Variable removed.
	(__setfpucw): Use SET even if zero.
1996-06-16 03:49:40 +00:00
Roland McGrath f9496a7b54 * elf/dl-deps.c (_dl_map_object_deps): Set MAP's mark bit before loop.
Set mark bits of deps as opened, instead of as scanned.

	* elf/rtld.c (dl_main): Remove _dl_rtld_map from chain unconditionally.
	Then if it has a nonzero l_opencount, add it back in search order.

	* elf/dl-load.c (_dl_map_object): Don't use _dl_loaded's DT_RPATH if
 	it ain't got one!
1996-06-16 02:18:58 +00:00
Roland McGrath a23db8e4af Sat Jun 15 18:13:43 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/Dist: Add sys/klog.h.

	* elf/dl-open.c (_dl_open): Remove PARENT argument, pass null.
	* elf/link.h: Update prototype.
	* elf/dl-load.c (_dl_map_object): If dependents' DT_RPATHs don't find
	NAME, try the DT_RPATH of the executable itself if dynamic.
	* elf/dlopen.c (dlopen): Don't pass first arg to _dl_open.

	* elf/dl-load.c (_dl_map_object): Exit DT_RPATH checking loop when an
	open succeeds.

	* Makerules (build-shlib): Give -L opts for each elt of $(rpath-link).

	* sysdeps/mach/hurd/Makefile (sysdep-LDFLAGS): Variable removed.
	(rpath-link): Append to this instead.
1996-06-16 01:27:54 +00:00
Roland McGrath f332db0256 Fri Jun 14 01:51:47 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* version.c (banner): New static const variable, complete version
	banner text.
	(__libc_print_version): Use it, and use __write instead of printf.

	* configure.in (sysnames): Don't cache the value, because it
 	depends only on libc sources.  Merge uniquifying third pass into
	Implies/parent expansion second pass.  Report each unique name as
	it is added in partial report string, terminated when finished.

	* Makeconfig (sysdep_dir): Move defn before config.status rule that
	expands it.
	(sysdep-configures): Variable removed.
	(config.status): Use its contents directly, tighten up a bit, and
	include Implies files.

	* elf/dl-open.c (_dl_open) [PIC]: Set PARENT to _dl_loaded if null.

	* elf/Makefile ($(objpfx)$(rtld-installed-name)): Make a symlink.

	* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_open_zero_fill):
	Add comment.

	* elf/rtld.c (dl_main): Close _dl_zerofd after mapping deps.

	* sysdeps/generic/machine-gmon.h [NO_UNDERSCORES]: Define mcount as
	weak alias for _mcount.
	* sysdeps/alpha/_mcount.S (mcount): Define as weak alias.
1996-06-14 12:05:04 +00:00
Roland McGrath 9f70e81bca Thu Jun 13 00:02:25 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/generic/machine-gmon.h [NO_UNDERSCORES]: Define mcount as
	weak alias for _mcount.
	* sysdeps/alpha/_mcount.S (mcount): Define as weak alias.
1996-06-13 22:49:37 +00:00
Miles Bader 5c5ae36fd8 *** empty log message ***
Thu Jun 13 14:29:56 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/hurdsig.c (_hurd_internal_post_signal): Rename `deliver:'
	label to `deliver_pending:' to match goto.
1996-06-13 20:50:55 +00:00
Miles Bader 6172aaa35c (_hurd_internal_post_signal): Rename deliver:' label to deliver_pending:' to match goto. 1996-06-13 20:44:10 +00:00
Roland McGrath 8ab1a68d05 Thu Jun 13 00:02:25 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dl-lookup.c (_dl_lookup_symbol): If no value and *REF is
	null, consider it a strong reference and give the error.
1996-06-13 06:50:11 +00:00
Roland McGrath 4d6acc61fa Thu Jun 13 00:02:25 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dl-lookup.c (_dl_lookup_symbol): If no value and *REF is
	null, consider it a strong reference and give the error.

Wed Jun 12 15:52:46 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* elf/dl-open.c (_dl_open): Correctly terminate relocating loop
 	after relocating NEW when it's the only new object.

	* elf/dl-init.c (_dl_init_next): When out of initializers, set
 	_r_debug.r_state to RT_CONSISTENT and call _dl_debug_state just
 	before return.

	* elf/rtld.c (dl_main): Move _dl_debug_initialize call after
 	relocation.  Call it unconditionally and only fill in DT_DEBUG
 	if it's present.  Then call _dl_debug_state with r_state RT_ADD
 	before running initializers.

	* elf/dl-open.c (_dl_open): Call _dl_debug_initialize and then call
 	_dl_debug_state with r_state RT_ADD before running initializers
	* elf/dl-close.c (_dl_close): Call _dl_debug_state with r_state
 	RT_DELETE before running finalizers and with RT_CONSISTENT just
 	before return.

	* elf/Makefile (dl-routines): Add dl-debug.
	* elf/dl-debug.c: New file.
	* elf/rtld.c (_dl_r_debug): Rename to _r_debug and move to dl-debug.c.
	(_dl_r_debug_state): Rename to _dl_debug_state and likewise move.
	(dl_main): Use _dl_debug_initialize.
	* elf/link.h: Fix name to _dl_debug_state in decl.
	(_dl_debug_initialize): Declare new function from dl-debug.c.
	(_r_debug): Declare it.

	* Makerules (distinfo-vars): Add install-{lib,data,bin,sbin,others}.
	In distinfo set $(subdir)-VAR and then set VAR to $($(subdir)-VAR).

	* Makeconfig (rpath-link): New variable; add $(elfobjdir).
	(default-rpath): Use it.
	(built-program-cmd): Use it in LD_LIBRARY_PATH.

	* Makeconfig (sysdep-configures): Prepend $(sysdep_dir) to names tried.

	* sysdeps/unix/Dist: Add make-syscalls.sh.

	* misc/Makefile (headers): Add sys/swap.h.
	* posix/unistd.h: Remove decls for swapon, swapoff.
	* sysdeps/generic/sys/swap.h: New file.
	* sysdeps/unix/sysv/linux/sys/swap.h: New file.

	* sysdeps/unix/sysv/linux/gnu/types.h: Remove temporary hack #define
	of __kernel_fsid_t.  It is correctly defines in <linux/types.h> now.
1996-06-13 04:06:45 +00:00
Roland McGrath 4d5da9a654 * sysdeps/alpha/dl-machine.h: New file. 1996-06-12 04:51:48 +00:00
Roland McGrath 463e148b75 Tue Jun 11 23:23:30 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (LDFLAGS-c.so): Use __libc_main instead of
	__libc_print_version as entry point for shared object.
	* version.c [HAVE_ELF] (__libc_main): New function.

	* elf/dl-load.c (_dl_map_object_from_fd): Relocate l_entry with the
	load address.
1996-06-12 04:00:32 +00:00
Roland McGrath 8d6468d0c8 Tue Jun 11 19:13:04 1996 Richard Henderson <rth@tamu.edu>
* elf/dl-close.c: Include <string.h> for memcpy.
	* elf/dl-lookup.c: Same.

	* elf/elf.h: Add Elfxx_Symndx for symbol indices.
	* elf/dl-lookup.c (_dl_lookup_symbol): Use it.
	(_dl_setup_hash): Use it.
	* elf/link.h (struct link_map): Use it.

	* elf/rtld.c (_dl_start): Don't rely on pointer-to-first-arg hack
	for getting the argc/argv/envp block.  Instead, make it the argument.
	sysdeps/i386/dl-machine.h (RTLD_START): Do that.
	sysdeps/m68k/dl-machine.h (RTLD_START): Same.

	* shlib-versions: Add version numbers for alpha-linux.  To avoid
	user confusion, make them the same as i386-linux.

	* sysdeps/alpha/Makefile [subdir elf]: Add -mno-fp-regs to
	sysdep-CFLAGS so that _dl_runtime_resolve doesn't have to save them.
	Add -mbuild-constants to CFLAGS-rtld.c to that we can bootstrap
	without using literal data.

	* sysdeps/generic/dl-sysdep.c: Include <string.h> for memcpy.
	Finish Elf32 -> ElfW migration.
1996-06-12 01:54:21 +00:00
Roland McGrath 6e86a7c21b * Makerules (elfobjdir): Use $(objdir) if set, even in elf subdir.
* elf/Makefile (routines): Remove init-first.
	* csu/Makefile (routines): New variable; put it here instead.

	* config.make.in (CFLAGS): New variable.

	* io/sys/stat.h (S_ISLNK, S_ISSOCK): Make conditional on __USE_BSD,
	not __USE_GNU.
	* string/string.h (strncasecmp): Likewise.
1996-06-12 01:34:32 +00:00
Roland McGrath a89d30d444 * elf/Makefile (lib-noranlib): Move rule adding deps for ld.so et al
to after `include ../Rules', so $(rtld-installed-name) is defined.
1996-06-11 21:41:42 +00:00
Roland McGrath d8c7ef98c1 * string/basename.c (basename): Cast FILENAME to char * for return.
* Makerules ($(libdir)/libc.so): Put $(rtld-installed) name between
	libc.so and libc.a in the deps.
1996-06-11 21:33:17 +00:00
Roland McGrath 852fc4b91e * elf/Makefile ($(objpfx)$(rtld-installed-name)): New target to make
link to ld.so if that is not the installed name.
	(lib-noranlib): Depend on the installed name in the build directory
	instead of on ld.so.

	* Makeconfig (link-libc): Include $(elfobjdir)/$(rtld-installed-name)
	between libc.so and libc.a, because with libc.so's DT_NEEDED for ld.so
	ld searches libc.a before ld.so (is that an ld bug?).
	Add $(elfobjdir) to -rpath-link.

	* Makerules (elfobjdir): Define as . when $(subdir) is elf.

	* sysdeps/i386/dl-machine.h (elf_machine_rel): In R_386_32 case when
	relocating _dl_rtld_map, subtract SYM's value from final reloc value,
	but don't change *RELOC_ADDR before calling *RESOLVE, because it might
	call the function we are relocating!
1996-06-11 21:07:00 +00:00
Roland McGrath 6ba3531662 Tue Jun 11 15:09:15 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* string/basename.c: New file.
	* string/Makefile (routines): Add basename.
1996-06-11 19:18:38 +00:00
Roland McGrath ba79d61b44 * Makerules ($(common-objpfx)libc.so): Depend on $(elfobjdir)/ld.so.
* elf/dl-close.c: New file.
	* elf/link.h: Declare _dl_close.
	* elf/Makefile (routines): Add dl-close.
	* elf/dlclose.c (dlclose): Use _dl_close.

	* elf/Makefile ($(objpfx)librtld.so): Remove libelf from deps.

	* elf/dl-runtime.c (_dl_global_scope): New variable.
	(_dl_object_relocation_scope): New function.
	(fixup): Use it.
	* elf/rtld.c (dl_main): Use it.
	* elf/dl-open.c (_dl_open): Use it.  If (MODE & RTLD_GLOBAL), set the
	l_global bit and append the new map to _dl_global_scope.
	* elf/link.h: Declare _dl_global_scope, _dl_global_scope_alloc,
	and _dl_object_relocation_scope.

	* elf/link.h (struct link_map): Add l_loader member.
	Remove _dl_map_object_from_fd decl.
	* elf/dl-load.c (_dl_map_object): Pass LOADER to ...
	(_dl_map_object_from_fd): Take new arg LOADER and set l_loader member.
	(_dl_map_object): Try DT_RPATH from all loaders up the chain.

	* elf/dl-object.c (_dl_loaded): Variable removed.
	(_dl_default_scope): New variable replaces it.
	* elf/link.h (_dl_loaded): Remove variable decl; instead define as
	macro for _dl_default_scope[2].
	(_dl_default_scope): Declare it.
	* sysdeps/i386/dl-machine.h (RTLD_START): Use _dl_default_scope[2]
	instead of _dl_loaded.
	* sysdeps/m68k/dl-machine.h (RTLD_START): Likewise.
	* elf/rtld.c (dl_main): Use _dl_default_scope for symbol lookups.

	* elf/dl-reloc.c (_dl_relocate_object): Remove check for _dl_rtld_map.
	* elf/rtld.c (dl_main): Pass 0 for LAZY flag when re-relocating self.

	* elf/link.h (struct link_map.l_type): Remove lt_interpreter.
 	(struct link_map): Add new flag member l_global.

	* elf/dl-reloc.c (_dl_relocate_object): Check for _dl_rtld_map
	directly instead of looking for lt_interpreter.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise.
	* elf/rtld.c (_dl_start): Don't bother setting BOOTSTRAP_MAP.l_type.
	(dl_main): Set _dl_rtld_map.l_type to lt_library.

	* elf/dl-deps.c (_dl_map_object_deps): Propagate MAP->l_type to
	dependencies loaded, downgrading lt_executable -> lt_library.

	* elf/dl-load.c (_dl_map_object_from_fd): Take new arg TYPE and set
	l_type from that, translating lt_library->lt_executable based on the
	file's ELF type.
	(_dl_map_object): Likewise.
	* elf/link.h: Update prototypes.
	* elf/dl-open.c: Pass type lt_loaded.
	* elf/rtld.c: Pass type lt_library.

	* elf/dl-load.c (_dl_map_object_from_fd): Handle null return from
	_dl_new_object.
	(_dl_map_object_from_fd: lose): Unchain and free L if it's not null.
	Free REALNAME, and just use NAME in error message.
	* elf/dl-object.c (_dl_new_object): If malloc fails, return null
	instead of calling _dl_signal_error.

	* elf/dl-load.c (_dl_map_object_from_fd): Close FD before signalling
	error for _dl_zerofd setup failure.

	* elf/dl-object.c (_dl_startup_loaded): Variable removed.
	* elf/link.h: Remove its decl.

	* elf/dl-reloc.c (_dl_relocate_object): Take new SCOPE arg and pass it
	through to _dl_lookup_symbol.
	* elf/link.h (_dl_relocate_object): Update comment and prototype.
	* elf/rtld.c (dl_main): Pass scope vector to _dl_relocate_object.

	* elf/dl-lookup.c (_dl_lookup_symbol): Arg SYMBOL_SCOPE is now a
	null-terminated vector of pointers, no longer a vector of exactly two.
	* elf/link.h (_dl_lookup_symbol): Update comment and prototype.

	* elf/dl-runtime.c (fixup): Set up scope for symbol lookup properly as
	done in _dl_relocate_object.

	* elf/dlopen.c: Pass "" to _dl_open when FILE is null.
1996-06-10 20:19:39 +00:00
Roland McGrath 567c63af19 * elf/link.h: Include elfclass.h to define __ELF_NATIVE_CLASS.
(ElfW, ELFW): Use it.
	* elf/Makefile (headers): Add elfclass.h.
	* sysdeps/wordsize-32/elfclass.h: New file.
	* sysdeps/wordsize-64/elfclass.h: New file.
	* sysdeps/alpha/Implies: Add wordsize-64.
	* sysdeps/i386/Implies: Add wordsize-32.
	* sysdeps/m68k/Implies: Add wordsize-32.
	* sysdeps/mips/Implies: Add wordsize-32.
	* sysdeps/sparc/Implies: Add wordsize-32.
1996-06-10 13:03:12 +00:00
Roland McGrath 266180eb98 Mon Jun 10 06:14:03 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/dl-sysdep.c (__open): Define this instead of open.
	(__close, __mmap): Likewise define with __ names now.

Mon Jun 10 05:13:18 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* elf/dl-support.c: New file.
	* elf/Makefile (CFLAGS-dl-support.c): New variable.
	(routines, elide-routines.so): Add dl-support.

	* elf/dl-minimal.c (_dl_pagesize): Remove common defn.
	* elf/dl-load.c (_dl_pagesize): Define it here.
	(_dl_map_object_from_fd): Initialize it if zero.
	* elf/link.h (_dl_pagesize): Remove const.

Sun Jun  9 04:04:26 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* elf/Makefile (routines): Add dl-symbol.
	* elf/dl-lookup.c (_dl_symbol_value): Moved to ...
	* elf/dl-symbol.c: New file.

	* elf/elf.h (Elf32_Xword, Elf32_Sxword): New types.
	(Elf32_Section, Elf64_Section): New types, 16 bits.
	(Elf32_Sym, Elf64_Sym): Use it.

	* elf/dl-deps.c (_dl_open): Moved to ...
	* elf/dl-open.c: New file.
	* Makefile (routines): Add dl-open.

	* elf/Makefile (dl-routines): New variable.
	(routines): Add $(dl-routines).
	(elide-routines.so): New variable, set to $(dl-routines).
	(libdl-inhibit-o): Variable removed; build all flavors of -ldl.
	(rtld-routines): All but rtld, dl-sysdep, and dl-minimal moved to
 	$(dl-routines).

	* elf/dl-lookup.c (_dl_lookup_symbol): Remove magic symbol grokage.

	* elf/dladdr.c: Use ELFW(ST_BIND) in place of ELF32_ST_BIND.

	* elf/dl-load.c (open_path): Use __ names for open and close.  Avoid
	using strdup.
	(_dl_map_object): Likewise.
	(_dl_map_object_from_fd): Use __ names for mmap, munmap, and mprotect.
	* elf/dl-minimal.c (malloc): Likewise.
	* elf/dl-reloc.c (_dl_relocate_object): Likewise.

	* elf/dl-minimal.c (_dl_pagesize): New variable.
	(malloc): Use that instead of a static variable.
	* elf/dl-reloc.c (_dl_relocate_object): Use _dl_pagesize instead of
	calling getpagesize.
	* elf/dl-load.c (_dl_map_object_from_fd): Likewise.
	* elf/link.h: Declare _dl_pagesize.

	* elf/rtld.c (dl_r_debug): Renamed to _dl_r_debug.

	* elf/link.h (struct link_map): Use Half for l_phnum instead of Word.
  	* elf/rtld.c (dl_main): Use Half for phdr count arg.
	(_dl_sysdep_start): Update prototype of DL_MAIN function ptr arg.

	* elf/dl-load.c (_dl_map_object_from_fd): Use explicit Elf32_Word to
 	extract 4-byte magic number, not ElfW(Word).  Match EI_CLASS against
 	native wordsize, either 32 or 64.

	* elf/elf.h (Elf64_Byte, Elf64_Section): Typedefs removed.  In C a
 	char is always a byte, no need for a typedef.  Section indices are
	16-bit quantities in elf64, which already have a typedef Elf64_Half.

	Remove partial -lelf implementation.  There is now a
	separately-distributed `libelf' package that implements it.
	* elf/dl-lookup.c: Don't #include <libelf.h> any more.
	(_dl_elf_hash): New function, moved from
	libelf.h:elf_hash.
	(_dl_lookup_symbol): Use it instead of elf_hash.
	* elf/libelf.h: File removed.
	* elf/elf_hash.c: File removed.
	* elf/Makefile (headers): Remove libelf.h.
	(extra-libs): Remove libelf.
	(libelf-routines): Variable removed.

	* elf/Makefile (libdl.so): Remove commands from this target.  The
 	implicit rule commands are correct, this explicit rule just serves to
 	add some dependencies.

	* elf/dl-lookup.c (_dl_lookup_symbol): Use ELFW(ST_TYPE) in place of
 	ELF32_ST_TYPE.  Likewise ST_BIND.
	* elf/do-rel.h (elf_dynamic_do_rel): Likewise R_SYM.

	* elf/link.h (ElfW): New macro for wordsize-independent ElfXX_* type
	naming.
	(ELFW): New macro, likewise for ELFXX_* macro naming.
	(_ElfW, _ElfW_1): New macros, subroutines of ElfW and ELF.

Sat Jun  8 20:52:38 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* elf/link.h, elf/do-rel.h, elf/dynamic-link.h, elf/dl-deps.c,
 	elf/dl-init.c, elf/dl-load.c, elf/dl-lookup.c, elf/dl-reloc.c,
 	elf/dl-runtime.c, elf/dladdr.c, elf/dlclose.c, elf/dlsym.c,
 	elf/linux-compat.c, elf/rtld.c: Change all uses of `Elf32_XXX' to
 	`ElfW(XXX)' for wordsize-independence.

Sat Jun  8 20:50:42 1996  Richard Henderson  <rth@tamu.edu>

	* elf/elf.h: Move Elf64_* types in parity with Elf32 counterparts.
	(Elf64_auxv_t): New type.
	(EM_ALPHA, R_ALPHA_*): New macros for elf64-alpha format.
1996-06-10 10:18:47 +00:00
Roland McGrath 564210fe2f Mon Jun 10 02:22:24 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/configure.in: New file, start with configure.
	Add check for installed <linux/version.h> being v2.0 or later.

	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill): Call __open
	instead of open.
	(_dl_sysdep_fatal): Call __write instead of write.
	(_dl_sysdep_message): Likewise.

Sun Jun  9 20:40:00 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/e_acosl.c: New file.

	* Makerules (o-objects): New variable.  Use it in place of
	$(objects:.o=$o); it filters out $(elide-routines$o).
	Use o-iterator for ar and ranlib rules so they use the per-type object
	list.

	* sysdeps/unix/bsd/ultrix4/sys/mman.h: Likewise.
1996-06-10 09:41:16 +00:00
Roland McGrath 6d9756c910 * elf/dl-load.c (_dl_map_object_from_fd): Close FD before return.
* sysdeps/mach/mprotect.c: Define with __ name and weak alias.
	* sysdeps/stub/mprotect.c: Likewise.
	* sysdeps/unix/mman/syscalls.list (mprotect): Likewise.
	* sysdeps/generic/sys/mman.h: Declare __mprotect.
	* sysdeps/unix/sysv/irix4/sys/mman.h: Likewise.
	* sysdeps/unix/sysv/linux/sys/mman.h: Likewise.
	* sysdeps/unix/bsd/sun/sunos4/sys/mman.h: Likewise.
	* sysdeps/unix/bsd/osf/sys/mman.h: Likewise.
1996-06-09 22:02:59 +00:00
Roland McGrath 9dd2fc5d87 * Make-dist ($(tardir).tar): Use sed to check for file names longer
than 14 chars, instead of doschk which checks for other things we
	don't care about.
1996-06-09 07:55:33 +00:00
Roland McGrath 780b91d932 * Version 1.90 test release. 1996-06-09 06:59:45 +00:00
Roland McGrath dcfb26a705 Sun Jun 9 01:11:49 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (make-target-directory): Use ./mkinstalldirs so we do not
	assume . is in PATH.

Sat Jun  8 22:05:03 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* math/Makefile (distribute): Comment out addition of
	$(long-m-routines) sources until they are all written.

	* math/Makefile (distribute): Append long double source names to this
	instead of using elided-routines.

Sat Jun  8 15:15:07 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* mach/mach_shortcuts.c: Obsolete file removed.
	* mach/mach_syscalls.h: Likewise.

	* hurd/Makefile (distribute): Consolidate defns into one.

	* time/Makefile (tzfiles): Add solar87 solar88 solar89.
1996-06-09 05:25:25 +00:00
Roland McGrath 5481bb895e Sat Jun 8 15:15:07 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/Makefile (tzfiles): Add solar87 solar88 solar89.
1996-06-08 15:21:40 +00:00
Per Bothner e3ca0de5cb * config.guess (i?86-ncr-sysv*): Emit minor release numbers. Recognize the NCR 4850 machine and NCR Pentium-based platforms. 1996-06-08 01:25:20 +00:00
Miles Bader 9646d93462 *** empty log message ***
* sysdeps/mach/hurd/getpriority.c (getpriority): Use new interface
	to __proc_getprocinfo.
1996-06-07 21:50:31 +00:00
Miles Bader 061c6526bf (getpriority): Use new interface to __proc_getprocinfo. 1996-06-07 21:49:06 +00:00
Roland McGrath bf668fc8f0 Fri Jun 7 16:48:13 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/i386/Dist: New file, list sys/perm.h and
	sys/vm86.h.

	Removed old math code no longer used since the fdlibm integration.
	* sysdeps/stub/acos.c: File removed.
	* sysdeps/stub/asin.c: File removed.
	* sysdeps/stub/atan2.c: File removed.
	* sysdeps/stub/cosh.c: File removed.
	* sysdeps/stub/exp.c: File removed.
	* sysdeps/stub/fmod.c: File removed.
	* sysdeps/stub/frexp.c: File removed.
	* sysdeps/stub/log.c: File removed.
	* sysdeps/stub/log10.c: File removed.
	* sysdeps/stub/sinh.c: File removed.
	* sysdeps/stub/tan.c: File removed.
	* sysdeps/stub/tanh.c: File removed.
	* sysdeps/generic/acos.c: File removed.
	* sysdeps/generic/acosh.c: File removed.
	* sysdeps/generic/asin.c: File removed.
	* sysdeps/generic/asinh.c: File removed.
	* sysdeps/generic/atan.c: File removed.
	* sysdeps/generic/atan2.c: File removed.
	* sysdeps/generic/atanh.c: File removed.
	* sysdeps/generic/cabs.c: File removed.
	* sysdeps/generic/ceil.c: File removed.
	* sysdeps/generic/copysign.c: File removed.
	* sysdeps/generic/cosh.c: File removed.
	* sysdeps/generic/exp.c: File removed.
	* sysdeps/generic/expm1.c: File removed.
	* sysdeps/generic/fabs.c: File removed.
	* sysdeps/generic/floor.c: File removed.
	* sysdeps/generic/fmod.c: File removed.
	* sysdeps/generic/frexp.c: File removed.
	* sysdeps/generic/hypot.c: File removed.
	* sysdeps/generic/infnan.c: File removed.
	* sysdeps/generic/isnan.c: File removed.
	* sysdeps/generic/ldexp.c: File removed.
	* sysdeps/generic/log.c: File removed.
	* sysdeps/generic/log10.c: File removed.
	* sysdeps/generic/log1p.c: File removed.
	* sysdeps/generic/modf.c: File removed.
	* sysdeps/generic/pow.c: File removed.
	* sysdeps/generic/rint.c: File removed.
	* sysdeps/generic/sinh.c: File removed.
	* sysdeps/generic/tan.c: File removed.
	* sysdeps/generic/tanh.c: File removed.
	* sysdeps/ieee754/cabs.c: File removed.
	* sysdeps/ieee754/copysign.c: File removed.
	* sysdeps/ieee754/frexp.c: File removed.
	* sysdeps/ieee754/hypot.c: File removed.
	* sysdeps/ieee754/infnan.c: File removed.
	* sysdeps/ieee754/ldexp.c: File removed.
	* sysdeps/ieee754/log10.c: File removed.

	* posix/Makefile (headers): Add schedbits.h.

	* math/Makefile (elided-routines): Add long double routines.

Fri Jun  7 09:11:17 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/Dist: Add sys/sysinfo.h, sys/mount.h,
	sys/kdaemon.h, sys/io.h, sys/mount.h, sysctl.c.

	* gmon/Makefile (distribute): Add profil-counter.h.

	* sysdeps/unix/sysv/linux/alpha/Dist: New file.

	* sysdeps/unix/Dist: Add s-proto.S.

	* sysdeps/unix/common/mk-local_lim.c: Obsolete file removed.

	* Make-dist (+sysdep-tsrcs): Get all syscalls.list files too.

	* csu/Makefile (distribute): Add start.c.

	* elf/Makefile (distribute): Add dl-machine.h.

	* sysdeps/alpha/Dist: Add _mcount.S.

	* sysdeps/alpha/Makefile (sysdep_routines): Append instead of
	resetting; don't add bb_init_func.

	* string/Makefile (routines): Add strerror_r.
	* string/string.h (strerror_r): Use int for BUFLEN arg.

	* Makefile (distribute): Add shlib-versions.

	* po/Makefile (distribute): Add SYS_libc.pot.

	* misc/Makefile (routines): Add lsearch.

	* manual/lang.texi (Consistency Checking): Merge in assert_perror defn
	and other changes inadvertently made to the obsolete assert.texi.
	* manual/assert.texi: File removed.

	* mach/mach_syscalls.c: Obsolete file removed.
	* mach/mach_syscalls.h: Likewise.
	* mach/mach_traps.S: Likewise.
	* mach/msg_destroy.c: Likewise.
	* mach/vm_page_size.c: Likewise.

	* locale/Makefile (distribute): Add weight.h, charset.h.

	* Makefile (distribute): Add version.h.

	* hurd/Makefile (headers): Add hurd/ioctl.h.
	(distribute): Add intr-rpc.d, intr-rpc.h, faultexc.defs.

	* csu/Makefile (distribute): Add gmon-start.c.

	* Makefile (distribute): Add config.h.in.

	sysdeps/m68k/fpu/e_atanhl.c, sysdeps/m68k/fpu/e_coshl.c: New files.
1996-06-07 21:18:34 +00:00
Roland McGrath 6f3e22dc48 Tue Jun 4 22:03:02 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/fpu/__math.h: Define long double versions of
	the inline functions.
	* sysdeps/m68k/fpu/e_asinl.c, sysdeps/m68k/fpu/e_atanl.c,
	sysdeps/m68k/fpu/e_acosl.c, sysdeps/m68k/fpu/e_expl.c,
	sysdeps/m68k/fpu/e_fmodl.c, sysdeps/m68k/fpu/e_log10l.c,
	sysdeps/m68k/fpu/e_logl.c, sysdeps/m68k/fpu/e_powl.c,
	sysdeps/m68k/fpu/e_remainderl.c, sysdeps/m68k/fpu/e_scalbl.c,
	sysdeps/m68k/fpu/e_sinhl.c, sysdeps/m68k/fpu/e_sqrtl.c,
	sysdeps/m68k/fpu/k_cosl.c, sysdeps/m68k/fpu/k_sinl.c,
	sysdeps/m68k/fpu/k_tanl.c, sysdeps/m68k/fpu/s_atanl.c,
	sysdeps/m68k/fpu/s_ceill.c, sysdeps/m68k/fpu/s_cosl.c,
	sysdeps/m68k/fpu/s_expm1l.c, sysdeps/m68k/fpu/s_fabsl.c,
	sysdeps/m68k/fpu/s_finitel.c, sysdeps/m68k/fpu/s_floorl.c,
	sysdeps/m68k/fpu/s_frexpl.c, sysdeps/m68k/fpu/s_ilogbl.c,
	sysdeps/m68k/fpu/s_isinfl.c, sysdeps/m68k/fpu/s_isnanl.c,
	sysdeps/m68k/fpu/s_ldexpl.c, sysdeps/m68k/fpu/s_log1pl.c,
	sysdeps/m68k/fpu/s_logbl.c, sysdeps/m68k/fpu/s_modfl.c,
	sysdeps/m68k/fpu/s_rintl.c, sysdeps/m68k/fpu/s_scalbnl.c,
	sysdeps/m68k/fpu/s_significandl.c, sysdeps/m68k/fpu/s_sinl.c,
	sysdeps/m68k/fpu/e_atanhl.c, sysdeps/m68k/fpu/e_coshl.c: New files.
1996-06-07 21:00:20 +00:00
Miles Bader 268eb64290 *** empty log message ***
Fri Jun  7 11:02:22 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* login/login.c (tty_name): New function.
	(login): Use it.
	(PATH_MAX): MACRO removed.
	<stdlib.h>: New include.
1996-06-07 20:38:21 +00:00
Roland McGrath 9f447fb32c Fri Jun 7 09:11:17 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* mach/mach_syscalls.c: Obsolete file removed.
	* mach/mach_syscalls.h: Likewise.
	* mach/mach_traps.S: Likewise.
	* mach/msg_destroy.c: Likewise.
	* mach/vm_page_size.c: Likewise.
1996-06-07 20:37:41 +00:00
Roland McGrath bd5fa7727c Fri Jun 7 09:11:17 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/Dist: Add sys/sysinfo.h, sys/mount.h,
	sys/kdaemon.h, sys/io.h, sys/mount.h, sysctl.c.
1996-06-07 20:36:16 +00:00
Miles Bader 500590c767 (tty_name): New function. (login): Use it. (PATH_MAX): MACRO removed. <stdlib.h>: New include. 1996-06-07 20:32:20 +00:00
Roland McGrath 64a921419d obsolete 1996-06-07 13:21:41 +00:00
Roland McGrath 1c2f546be8 Wed Jun 5 22:06:21 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/dl-machine.h (elf_machine_rela): Fix type of reloc
	argument.
	[case R_68K_32]: Check for resolve being null.
	(RTLD_START): Add missing label.
1996-06-07 13:07:15 +00:00
Roland McGrath 1be6ec3033 Fri Jun 7 1996 05:29:32 Ulrich Drepper <drepper@cygnus.com>
* misc/lsearch.c: New file.  Implementation of lfind and
	lsearch functions.

	* misc/search.h: Add prototype for functions from tsearch
	family with __ prefix.
	Correct prototype for lsearch: BASE parameter must not be
	const.

	* misc/tsearch.c: prepend all global function names with __
	and make normal names weak aliases.

Fri Jun  7 00:15:24 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Make-dist (sysdep_dirs): Skip CVS dirs.
1996-06-07 04:36:10 +00:00
Roland McGrath c035afc960 * malloc/Makefile (distribute): Change malloc/gmalloc-head.c to
gmalloc-head.c.
	(malloc/gmalloc.c): Depend on malloc/gmalloc-head.c.
	(malloc/Makefile): Do $(make-target-directory) first.
	* malloc/gmalloc-head.c: New file.

	* po/Makefile (linguas.mo): Don't commit .mo files to cvs.
1996-06-06 23:55:17 +00:00
Roland McGrath 4d02a5b18a Thu Jun 6 16:12:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* hurd/hurdsig.c (_hurd_internal_post_signal): For SIGNO==0 pending
	check, deliver a pending blocked signal if its action might be to
	ignore.
	* sysdeps/mach/hurd/sigaction.c: If new action is SIG_IGN or SIG_DFL
	and SIG is pending, wake up signal thread to check us.

	* hurd/hurdsig.c (_hurd_internal_post_signal): Don't mark a signal
	pending while blocked or stopped when the action is to ignore it.

	* hurd/hurdsig.c (_hurd_internal_post_signal: resume): Only set
	SS_SUSPENDED when the thread is really suspended.

	* elf/rtld.c (dl_main): Don't dereference _dl_rtld_map.l_next if null.
1996-06-06 20:49:22 +00:00
Roland McGrath e60062b769 Thu Jun 6 12:56:03 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (headers): Move append of $(sysdep_headers) after include
	of sysdep makefiles.

	* sysdeps/mach/hurd/errlist.c: File removed.
1996-06-06 17:02:44 +00:00
Roland McGrath 3ed8c0596e Thu Jun 6 12:56:03 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/errlist.c: File removed.
1996-06-06 17:02:26 +00:00
Miles Bader 02eec64431 *** empty log message ***
Thu Jun  6 07:32:14 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* resolv/gethnamaddr.c (struct hstorage): Make NAME field a pointer.
	(_gethtbyname2): Remove ALIAS variable.
	Initialize NAME field of SELF and TARGET to 0.
	Add SELF_NAME_SIZE static variable.
	Add loop to call gethostname until the space we allocated is enough.
	Use malloced strings instead of fixed size buffers.
	<stdlib.h>, <unistd.h>: New includes.
	* sysdeps/generic/sys/socket.h (PF_INET6, AF_INET6): New macros.

	* sysdeps/mach/hurd/errlist.c (_sys_errlist): Add EILSEQ.
	(_sys_nerr): Initialize to 107.
	Update _HURD_ERRNOS consistency check.

	* stdlib/canonicalize.c (canonicalize): Use pathconf for PATH_MAX,
	not sysconf.

	* login/login.c [!PATH_MAX] (PATH_MAX): Define to be 1024 if not
	already defined.

	* sysdeps/mach/hurd/setitimer.c (timer_thread): Supply SIGCODE
	argument to __msg_sig_post_request.

	* hurd/hurdmalloc.c: Changes to bring in line with the hurd
	libthreads/malloc.c:
	(more_memory): Use assert_perror instead of MACH_CALL.
	"cthread_internals.h": Include removed.
	(realloc): Use LOG2_MIN_SIZE.
	(LOG2_MIN_SIZE): New macro.
	(realloc): Don't bother allocating a new block if the
 	new size request fits in the old one and doesn't waste any space.
  	Only free the old block if we successfully got a new one.
	[MCHECK] (struct header): New type.
	(union header): Only define if !MCHECK.
	(HEADER_SIZE, HEADER_NEXT, HEADER_FREE, HEADER_CHECK): New macros.
	[MCHECK] (MIN_SIZE): Add correct definition for this case.
	(more_memory, malloc, free, realloc): Use above macros, and add
	appropiate checks & frobs in MCHECK case.
1996-06-06 15:29:59 +00:00
Miles Bader e550852065 (PF_INET6, AF_INET6): New macros. 1996-06-06 15:10:29 +00:00
Roland McGrath 92f3773b4c Thu Jun 6 02:00:42 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (distinfo-vars): Don't write constant line to frob sources.
	* Make-dist (sources): Append $(elided-routines) and $(extra-libs)
	routines.
1996-06-06 06:05:11 +00:00
Roland McGrath 8f30ca23f7 Tue Jun 4 22:03:02 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/fpu/__math.h: Define long double versions of
	the inline functions.

	* sysdeps/m68k/fpu/e_asinl.c, sysdeps/m68k/fpu/e_atanl.c,
	sysdeps/m68k/fpu/e_acosl.c, sysdeps/m68k/fpu/e_expl.c,
	sysdeps/m68k/fpu/e_fmodl.c, sysdeps/m68k/fpu/e_log10l.c,
	sysdeps/m68k/fpu/e_logl.c, sysdeps/m68k/fpu/e_powl.c,
	sysdeps/m68k/fpu/e_remainderl.c, sysdeps/m68k/fpu/e_scalbl.c,
	sysdeps/m68k/fpu/e_sinhl.c, sysdeps/m68k/fpu/e_sqrtl.c,
	sysdeps/m68k/fpu/k_cosl.c, sysdeps/m68k/fpu/k_sinl.c,
	sysdeps/m68k/fpu/k_tanl.c, sysdeps/m68k/fpu/s_atanl.c,
	sysdeps/m68k/fpu/s_ceill.c, sysdeps/m68k/fpu/s_cosl.c,
	sysdeps/m68k/fpu/s_expm1l.c, sysdeps/m68k/fpu/s_fabsl.c,
	sysdeps/m68k/fpu/s_finitel.c, sysdeps/m68k/fpu/s_floorl.c,
	sysdeps/m68k/fpu/s_frexpl.c, sysdeps/m68k/fpu/s_ilogbl.c,
	sysdeps/m68k/fpu/s_isinfl.c, sysdeps/m68k/fpu/s_isnanl.c,
	sysdeps/m68k/fpu/s_ldexpl.c, sysdeps/m68k/fpu/s_log1pl.c,
	sysdeps/m68k/fpu/s_logbl.c, sysdeps/m68k/fpu/s_modfl.c,
	sysdeps/m68k/fpu/s_rintl.c, sysdeps/m68k/fpu/s_scalbnl.c,
	sysdeps/m68k/fpu/s_significandl.c, sysdeps/m68k/fpu/s_sinl.c,
	sysdeps/m68k/fpu/s_tanhl.c, sysdeps/m68k/fpu/s_tanl.c: New files.

	* sysdeps/m68k/fpu/e_acos.c, sysdeps/m68k/fpu/e_fmod.c,
 	sysdeps/m68k/fpu/k_cos.c, sysdeps/m68k/fpu/k_sin.c,
 	sysdeps/m68k/fpu/k_tan.c, sysdeps/m68k/fpu/s_atan.c,
 	sysdeps/m68k/fpu/s_frexp.c, sysdeps/m68k/fpu/s_ilogb.c,
 	sysdeps/m68k/fpu/s_isinf.c, sysdeps/m68k/fpu/s_ldexp.c,
 	sysdeps/m68k/fpu/s_modf.c: Define generic functions using FUNC and
 	float_type with appropriate defaults.

	* sysdeps/m68k/fpu/e_acosf.c, sysdeps/m68k/fpu/e_fmodf.c,
	sysdeps/m68k/fpu/k_cosf.c, sysdeps/m68k/fpu/k_sinf.c,
	sysdeps/m68k/fpu/k_tanf.c, sysdeps/m68k/fpu/s_atanf.c,
	sysdeps/m68k/fpu/s_frexpf.c, sysdeps/m68k/fpu/s_ilogbf.c,
	sysdeps/m68k/fpu/s_isinff.c, sysdeps/m68k/fpu/s_ldexpf.c,
	sysdeps/m68k/fpu/s_modff.c: Include the corresponding double
	versions with appropriate definitions to get float functions,
	instead of defining them directly.

	* sysdeps/m68k/fpu/acos.c: File removed.
	* sysdeps/m68k/fpu/asin.c: File removed.
	* sysdeps/m68k/fpu/atan.c: File removed.
	* sysdeps/m68k/fpu/atan2.c: File removed.
	* sysdeps/m68k/fpu/atanh.c: File removed.
	* sysdeps/m68k/fpu/ceil.c: File removed.
	* sysdeps/m68k/fpu/cos.c: File removed.
	* sysdeps/m68k/fpu/cosh.c: File removed.
	* sysdeps/m68k/fpu/drem.c: File removed.
	* sysdeps/m68k/fpu/exp.c: File removed.
	* sysdeps/m68k/fpu/expm1.c: File removed.
	* sysdeps/m68k/fpu/fabs.c: File removed.
	* sysdeps/m68k/fpu/fl.h: File removed.
	* sysdeps/m68k/fpu/floor.c: File removed.
	* sysdeps/m68k/fpu/fmod.c: File removed.
	* sysdeps/m68k/fpu/frexp.c: File removed.
	* sysdeps/m68k/fpu/isinf.c: File removed.
	* sysdeps/m68k/fpu/isinfl.c: File removed.
	* sysdeps/m68k/fpu/isnan.c: File removed.
	* sysdeps/m68k/fpu/isnanl.c: File removed.
	* sysdeps/m68k/fpu/ldexp.c: File removed.
	* sysdeps/m68k/fpu/log.c: File removed.
	* sysdeps/m68k/fpu/log10.c: File removed.
	* sysdeps/m68k/fpu/log1p.c: File removed.
	* sysdeps/m68k/fpu/logb.c: File removed.
	* sysdeps/m68k/fpu/pow.c: File removed.
	* sysdeps/m68k/fpu/rint.c: File removed.
	* sysdeps/m68k/fpu/sin.c: File removed.
	* sysdeps/m68k/fpu/sinh.c: File removed.
	* sysdeps/m68k/fpu/sqrt.c: File removed.
	* sysdeps/m68k/fpu/tan.c: File removed.
	* sysdeps/m68k/fpu/tanh.c: File removed.

	* sysdeps/unix/sysv/linux/syscalls.list: Add select (the syscall name
	is _newselect).
	* sysdeps/unix/sysv/linux/select.S: File removed.

	* sysdeps/unix/sysv/linux/m68k/select.S: File removed; obsolete with
	current kernels, generic linux version is fine.
1996-06-06 05:23:42 +00:00
Roland McGrath f127cd28b5 Thu Jun 6 00:02:15 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* locale/Makefile: Add vpath for %.gperf to programs.

	* Make-dist (+tsrcs): Variable removed.
	(dist): Process $^ here instead of using $(+tsrcs).

	* sysdeps/unix/sysv/linux/Makefile (install-others): Don't set.
	($(includedir)/sys/syscall.h): Target removed.
	(sysdep_headers): Add syscall-list.h.
	($(objpfx)syscall-%.[dh]): New rule to build syscall-list.[dh].
	(generated): Add those.
	* sysdeps/unix/sysv/linux/syscall.h: Include <syscall-list.h>.

	* misc/sys/syscall.h: New file.
	* misc/Makefile (headers): Add sys/syscall.h.

	* sysdeps/unix/sysv/linux/i386/Makefile: Likewise.
1996-06-06 04:54:33 +00:00
Roland McGrath dfe1754a55 * time/tzfile.h, time/private.h, time/zdump.c, time/zic.c,
time/africa, time/asia, time/australasia, time/europe,
 	time/northamerica, time/southamerica: Updated from ADO 96h.

	* Make-dist (all-headers): Filter $(sysdep_headers) out of $(headers).
	(try-sysdeps, +sysdep-names): Check sysdeps/libm-ieee754 too.

	* Makerules (distinfo-vars): Add sysdep_headers.
	* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Append to
	this instead of $(headers).
	* sysdeps/unix/sysv/linux/alpha/Makefile: Likewise.

	* Make-dist [subdirs-dirs]: Don't prefix $(subdir-dirs) with
	$(subdir); we are already there.

	* sysdeps/unix/sysv/sysv4/solaris2/sparc/Dist: Removed.
1996-06-05 23:25:04 +00:00
Roland McGrath 92702b9197 Wed Jun 5 15:57:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* mach/Machrules: Undo last change.
	(mach-generated): List .uh and .__h files only for $(user-interfaces),
	not for each .h in $(interface-headers); server-interfaces have no .uh
	or .__h files.


	* mach/Makefile (mach/mach_interface.defs): Renamed from
	mach_interface.defs.
Wed Jun  5 15:10:58 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Make-dist [subdir-dirs]: Set vpath for %, not just %.c.

	* locale/Makefile (subdir-dirs): New variable.

Wed Jun  5 00:01:19 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
1996-06-05 20:08:20 +00:00
Roland McGrath 63b129ed59 Wed Jun 5 15:57:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* mach/Machrules: Undo last change.
	(mach-generated): List .uh and .__h files only for $(user-interfaces),
	not for each .h in $(interface-headers); server-interfaces have no .uh
	or .__h files.
1996-06-05 20:07:42 +00:00
Miles Bader c2bf8a5a23 (mach/mach_interface.defs): Renamed from mach_interface.defs. (mach/memory_object_user.defs): New variable. 1996-06-05 19:52:56 +00:00
Miles Bader b13aa0b866 *** empty log message ***
Wed Jun  5 15:42:51 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* mach/Machrules (%_server.uh, %_server.__h): New rules, so that the
	corrsponding .defs file with without the `_server' will be used.
	
	* mach/Makefile (mach/mach_interface.defs): Renamed from mach_interface.defs.
	(mach/memory_object_user.defs): New variable.
1996-06-05 19:51:36 +00:00
Roland McGrath df7c0d2312 Wed Jun 5 15:10:58 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Make-dist [subdir-dirs]: Set vpath for %, not just %.c.
1996-06-05 19:22:44 +00:00
Roland McGrath aa592a63f9 * Makerules (distinfo-vars): Add sysdep_routines.
* mach/Machrules (include-%.defs): New canned sequence.
	Change all uses of `#include <$*.defs>' in cmds to use it.
	* mach/Makefile (mach_interface.defs): New variable, set to mach.defs.

	* sysdeps/i386/dl-machine.h (elf_machine_rel): Handle RESOLVE being
	null in all cases but R_386_COPY.
	(elf_machine_rel):

	* sysdeps/unix/bsd/ultrix4/mips/Dist: Updated.
	* sysdeps/unix/bsd/ultrix4/Dist: Removed.
	* sysdeps/unix/sysv/sysv4/Dist: Updated.
	* sysdeps/unix/sysv/sco3.2.4/Dist: Removed.
	* sysdeps/unix/sysv/irix4/Dist: Updated.
	* sysdeps/unix/sysv/linux/i386/Dist: Removed.
	* sysdeps/unix/sysv/Dist: Updated.
	* sysdeps/unix/bsd/sun/sunos4/Dist: Removed.
	* sysdeps/unix/bsd/sony/newsos4/Dist: Removed.
	* sysdeps/gnu/Dist: New file.
	* sysdeps/alpha/Dist: Updated.
	* sysdeps/mach/hurd/Dist: Updated.

	* Make-dist [subdir-dirs]: Set a vpath for %.c.

	* Make-dist (README): Fix typo in cvs cmd.
1996-06-05 19:07:37 +00:00
Roland McGrath 198046e105 Regenerated: autoconf sysdeps/mach/hurd/configure.in 1996-06-05 05:09:56 +00:00
Per Bothner caa9e37aab * config.guess: Combine mips-mips-riscos cases, and use cpp to distinguish sysv/svr4/bsd variants. 1996-06-05 04:12:46 +00:00
Roland McGrath 1c384dcd5f Wed Jun 5 00:01:19 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dl-lookup.c (_dl_lookup_symbol): Fix typos in last change.
	Comment out ref to nonexistent _dl_close.
1996-06-05 04:03:34 +00:00
Roland McGrath 58e071515a * math/Makefile (libm-support, libm-calls): New variables.
(libm-routines): Construct this from those.
	(calls): New variable.
	(routines): Construct this from it.

	* resolv/res_debug.c: Add missing #include <ctype.h>.

	* sysdeps/unix/getlogin.c: Must pass struct utmp ptr to getutline_r.
	* sysdeps/unix/getlogin_r.c: Likewise.

	* sysdeps/libm-ieee754/w_hypotl.c: Fix typo.

	* sysdeps/libm-ieee754/w_cabsl.c: __cabsl_complex -> __cabs_complexl

	* math/Makefile (long-m-routines): Define recursive variable as
	$(long-m-$(long-double-fcts)).
	(long-m-yes): Put list of routines here.
	(long-c-routines, long-c-yes): Likewise.

	* sysdeps/unix/sysv/linux/schedbits.h: File removed.

	* sysdeps/i386/Makefile (long-double-fcts): New variable, set to yes.
	* sysdeps/m68k/Makefile: Likewise.

	* math/Makefile [$(long-double-fcts)!=yes] (CPPFLAGS): Append
 	-DNO_LONG_DOUBLE.
1996-06-05 03:29:45 +00:00
Roland McGrath ee188d555b Tue Jun 4 21:01:20 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/getlogin_r.c: New file.

Wed Jun  5 02:11:30 1996  Ulrich Drepper  <drepper@cygnus.com>

	* io/Makefile (routines): Add ttyname_r.

	* resolv/res_debug.c, resolv/resolv.h: Update from bind-4.3.4-T4A.

	* sysdeps/libm-i387/e_asinl.S, sysdeps/libm-i387/e_atan2l.S,
	sysdeps/libm-i387/e_expl.S, sysdeps/libm-i387/e_fmodl.S,
	sysdeps/libm-i387/e_log10l.S, sysdeps/libm-i387/e_logl.S,
	sysdeps/libm-i387/e_remainderl.S, sysdeps/libm-i387/e_scalbl.S,
	sysdeps/libm-i387/e_sqrtl.S, sysdeps/libm-i387/s_atanl.S,
	sysdeps/libm-i387/s_cosl.S, sysdeps/libm-i387/s_ilogbl.S,
	sysdeps/libm-i387/s_log1pl.S, sysdeps/libm-i387/s_logbl.S,
	sysdeps/libm-i387/s_scalbnl.S, sysdeps/libm-i387/s_sinl.S,
	sysdeps/libm-i387/s_tanl.S: New files.  i387 assembler versions
	of `long double' math functions.

	* sysdeps/libm-ieee754/k_standard.c: Add handling for errors
	in long double functions.

	* sysdeps/libm-ieee754/s_ilogbl.c, sysdeps/libm-ieee754/s_logbl.c,
	sysdeps/libm-ieee754/s_modfl.c:  New files.  Generic versions
	of `long double' math functions.

	* sysdeps/libm-ieee754/s_isinf.c [NO_LONG_DOUBLE]: Add string
        alias for __isinfl.

	* sysdeps/libm-ieee754/w_acoshl.c, sysdeps/libm-ieee754/w_acosl.c,
	sysdeps/libm-ieee754/w_asinl.c, sysdeps/libm-ieee754/w_atan2l.c,
	sysdeps/libm-ieee754/w_atanhl.c, sysdeps/libm-ieee754/w_cabsl.c,
	sysdeps/libm-ieee754/w_coshl.c, sysdeps/libm-ieee754/w_dreml.c,
	sysdeps/libm-ieee754/w_expl.c, sysdeps/libm-ieee754/w_fmodl.c,
	sysdeps/libm-ieee754/w_gammal.c, sysdeps/libm-ieee754/w_gammal_r.c,
	sysdeps/libm-ieee754/w_hypotl.c, sysdeps/libm-ieee754/w_j0l.c,
	sysdeps/libm-ieee754/w_j1l.c, sysdeps/libm-ieee754/w_jnl.c,
	sysdeps/libm-ieee754/w_lgammal.c, sysdeps/libm-ieee754/w_lgammal_r.c,
	sysdeps/libm-ieee754/w_log10l.c, sysdeps/libm-ieee754/w_logl.c,
	sysdeps/libm-ieee754/w_powl.c, sysdeps/libm-ieee754/w_remainderl.c,
	sysdeps/libm-ieee754/w_scalbl.c, sysdeps/libm-ieee754/w_sinhl.c,
	sysdeps/libm-ieee754/w_sqrtl.c: New files.  Wrapper functions
	around long double function implementations.

	* sysdeps/posix/ttyname_r.c (ttyname_r): Use _D_EXACT_NAMLEN
	to determine length of directory entry name.

	* posix/Makefile (routines): Add getlogin_r.
	* posix/unistd.h: Add prototype for getlogin_r.
	* sysdeps/stub/getlogin_r.c: New file.  Reentrant version of
	getlogin function, specified in P1003.1c/D6.  Stub version.
	* sysdeps/unix/getlogin.c (getlogin): Use ttyname_r instead of
	ttyname.  This avoids saving and restoring the old content.
	Also use setutent_r, getutline_r and endutent_r instead of
	accing UTMP file directly.
	* sysdeps/unix/getlogin_r.c: New file.  Reentrant version of
	getlogin function, specified in P1003.1c/D6.

Tue Jun  4 20:10:09 1996  J.T. Conklin  <jtc@cygnus.com>

	* sysdeps/libm-i387/s_finitef.S: Fix mask for exponent.

	* elf/dl-lookup.c (_dl_lookup_symbol): Grok magical undefined symbols
	_GNU_libc_dl_{open,close,symbol} and resolve them to dl functions.

	* elf/rtld.c (rtld_map): Renamed to _dl_rtld_map, made global.
	* elf/link.h: Declare _dl_rtld_map.

	* elf/dl-lookup.c (_dl_symbol_value): New function.
	* elf/link.h: Declare it.

	stdio-common/vfscanf.c: Prepare for reentrant libio.
	Used in reentrant libio.
1996-06-05 01:07:21 +00:00
Roland McGrath f68b86cc7b Tue Jun 4 18:57:57 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dladdr.c: Remove #include <setjmp.h>, we don't use it.

	* shlib-versions: Set libdl=2.

	* elf/dl-deps.c (_dl_map_object_deps): Use a linked list of alloca'd
 	elements and then scan it to fill the single malloc'd array, instead
 	of using realloc to grow the array in the first pass.  _dl_map_object
	may do some mallocs that break our stream of reallocs, and the minimal
	realloc can't handle that.

	* elf/dl-init.c (_dl_init_next): Take argument, link_map whose
 	searchlist describes the piece of the DT_NEEDED graph to be
 	initialized.
	* elf/link.h: Update prototype.
	* sysdeps/i386/dl-machine.h (RTLD_START): Pass _dl_loaded as argument
	to _dl_init_next.
	* sysdeps/m68k/dl-machine.h: Likewise.
	* elf/dl-deps.c (_dl_open): Pass new object as arg to _dl_init_next.

	* elf/link.h (struct link_map): Add `l_reserved' member, soaking up
	extra bits in last byte.
	* elf/dl-deps.c (_dl_map_object_deps): Use that for mark bit to avoid
	putting dup elts in search list.

	* elf/dlclose.c: Use MAP->l_searchlist to find deps to close.

	* elf/dlsym.c: Don't tweak linked list.  Scope array given to
	_dl_lookup_symbol does the right thing.
Tue Jun  4 02:25:44 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
1996-06-04 23:06:02 +00:00
Roland McGrath 14d898aef6 * elf/Makefile (subdir_lib): Change this target to lib-noranlib.
(lib-noranlib): Depend on on $(extra-objs).

	* errno.h: Move __END_DECLS out of #ifdef's so it matches
	__BEGIN_DECLS.
1996-06-04 20:14:46 +00:00
Roland McGrath a2b934be25 * stdio-common/vfprintf.c [USE_IN_LIBIO] (size_t): Don't define as
macro.  _IO_size_t is just an alias for the real size_t anyway.

	* elf/Makefile (libdl-routines): Add dladdr.
	* elf/dladdr.c: New file.
	* elf/dlfcn.h (Dl_info): New typedef.
	(dladdr): Declare it.
1996-06-04 09:29:39 +00:00
Roland McGrath 55f3aaff8c * sysdeps/libm-i387/s_finite.S: Use setne' instead of setnel'. 1996-06-04 06:56:47 +00:00
Roland McGrath fa00327fbf * sysdeps/libm-i387/s_finite.S: Use %eax instead of %al in setnel insn.
* intl/l10nflist.c: Fix conditional on #include <argz.h>.

	* libio/stdio.h (FOPEN_MAX, FILENAME_MAX, TMP_MAX, L_tmpnam): Macros
	removed.  Instead, include <stdio_lim.h>.

	* libio/_G_config.h: New file.
	* libio/Makefile (headers): Add _G_config.h.

	* MakeTAGS (po/errlist.pot): Extract from sysdeps/gnu/errlist.c.
1996-06-04 06:48:18 +00:00
Roland McGrath bf18dbd7fa * sysdeps/unix/sysv/linux/gnu/types.h (__KERNEL_STRICT_NAMES): Define
this macro too; current Linux kernels test that instead of
	_LINUX_TYPES_DONT_EXPORT.
1996-06-04 05:33:32 +00:00
Roland McGrath efec1d0c47 Tue Jun 4 02:25:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/linux-compat.c (_init): Pass reloc_addr arg to _dl_lookup_symbol.

	* elf/dl-lookup.c (_dl_lookup_symbol): Use l_searchlist.

	* elf/dl-deps.c: New file.
	* elf/Makefile (rtld-routines): Add dl-deps.
	* elf/link.h: Declare _dl_map_object_deps, _dl_open.
	* elf/rtld.c (dl_main): Use _dl_map_object_deps.
	* elf/dlopen.c: Use _dl_open.

	* elf/rtld.c (dl_main): Remove BEFORE_RTLD variable and list
	frobnication based on its value.  Detach RTLD_MAP from the chain if
	its l_opencount is zero after loading deps.

	* elf/dlfcn.h (RTLD_BINDING_MASK): New macro.

	* elf/link.h (struct link_map): Replace l_deps_loaded flag member with
	`struct link_map **l_searchlist' and `unsigned int l_nsearchlist'.
	* elf/dl-lookup.c (_dl_lookup_symbol): Make SYMBOL_SCOPE arg an array
	of two link_map ptrs.  Search the maps in the l_searchlist of each
	elt that is not null.
	* elf/dl-reloc.c (_dl_relocate_object): Pass proper SCOPE array.
	* elf/dl-runtime.c: Likewise.
	* elf/dlsym.c: Likewise.
	* elf/rtld.c (dl_main): Likewise.

	* elf/dl-minimal.c (realloc): Support realloc of the block most
	recently returned by the minimal malloc.

	* intl/localealias.c, intl/dcgettext.c [_LIBC]: Define HAVE_ALLOCA.
1996-06-04 05:18:15 +00:00
Roland McGrath b25ae9c6a4 Tue Jun 4 00:16:03 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/gnu/errlist.awk: Produce N_("..."), not _N("...").

	* intl: Updated from gettext-0.10.13.
	* intl/localealias.c intl/dcgettext.c [_LIBC]: Define HAVE_ALLOCA.

	* signal/siggetmask.c: New file.  Wrapper around sigblock with
	link_warning about obsolescence.
	* signal/Makefile (routines): Add siggetmask.

	* sysdeps/gnu/errlist.awk: New file, adapted from ...
	* sysdeps/mach/hurd/errlist.awk: File removed, above file replaces it.
	* sysdeps/mach/hurd/Makefile (errlist.c): Target removed.
	* sysdeps/gnu/Makefile: New file.
	(sysdeps/gnu/errlist.c): Make the errlist.c generation rule into this.

	* manual/errno.texi (Error Codes): Add placeholder items for missing
	Linux/i386 errno codes, with perror text but no documentation.
	Some existing perror texts changed.
1996-06-04 01:41:11 +00:00
Roland McGrath 5f2eab4263 Mon Jun 3 21:03:54 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* malloc/mcheck.c (freehook, reallochook): Handle null pointer args.

	* hurd/hurdsig.c (_hurd_internal_post_signal): When setting ACT to
	`ignore, resume the thread if SS_SUSPENDED, regardless of old action.

Sun Jun  2 20:14:30 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* locale/programs/linereader.c (lr_open): Don't pass NULL to
	xstrdup; fix memory leak.
	(lr_close): Fix memory leak.

	* hurd/hurdsig.c (_hurd_internal_post_signal): When turning the action
Mon Jun  3 01:29:53 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* elf/link.h (struct link_map): Replace l_deps_loaded flag member with
	`struct link_map **l_searchlist'.
	* elf/dl-lookup.c (_dl_lookup_symbol): Make SYMBOL_SCOPE arg an array
	of two link_map ptrs.  Search the maps in the l_searchlist of each
	of the two elts that is non-null.
	* elf/dl-reloc.c (_dl_relocate_object): Pass proper SCOPE array.
	* elf/dl-runtime.c: Likewise.
	* elf/dlsym.c: Likewise.
	* elf/rtld.c (dl_main): Likewise.
1996-06-03 22:46:17 +00:00
Roland McGrath 20328c3962 Sun Jun 2 20:14:30 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* locale/programs/linereader.c (lr_open): Don't pass NULL to
	xstrdup; fix memory leak.
	(lr_close): Fix memory leak.
1996-06-03 21:00:49 +00:00
Thomas Bushnell, BSG 9f195df2d7 *** empty log message ***
Mon Jun  3 15:58:22 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* hurdsig.c (_hurd_internal_post_signal): When turning the action
 	for a HANDLE signal to IGNORE because the signal is blocked, clean
 	up any pending suspension left over from a call to resume.
1996-06-03 19:59:45 +00:00
Thomas Bushnell, BSG ec737e4210 (_hurd_internal_post_signal): When turning the action for a HANDLE signal to IGNORE because the signal is blocked, clean up any pending suspension left over from a call to resume. 1996-06-03 19:57:01 +00:00
Karl Heuer b687dfbdca (*:Linux:*:*): Add guess for sparc-unknown-linux. 1996-06-03 12:51:33 +00:00
Roland McGrath 710f7bab59 Mon Jun 3 00:30:35 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dl-lookup.c (_dl_lookup_symbol): Take new arg RELOC_ADDR and
	don't allow a defn resolving to that address.
	* elf/link.h: Update prototype and comment.
	* elf/dl-runtime.c (fixup): Define local `resolve' function and pass
	it to elf_machine_relplt.
	* elf/dl-reloc.c (_dl_relocate_object: resolve): Take new arg
	RELOC_ADDR and pass it through to _dl_lookup_symbol.
	* elf/do-rel.h (elf_dynamic_do_rel): Pass RESOLVE to elf_machine_rel
	instead of calling it ourselves and passing its results.
	(elf_dynamic_do_rel): RESOLVE fn takes new arg RELOC_ADDR.
	* elf/rtld.c (dl_main): Pass 0 for RELOC_ADDR to _dl_lookup_symbol.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Remove SYM_LOADADDR
	arg.  Add RESOLVE function ptr arg.  Call *RESOLVE as necessary.
	* sysdeps/m68k/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/stub/dl-machine.h: Likewise.

	* csu/initfini.c (_fini): Add extern decl for i_am_not_a_leaf.

	* elf/dlfcn.h (dl_open_mode): Enumerated type removed.
	(RTLD_LAZY, RTLD_NOW): Define these as macros instead.
	(RTLD_GLOBAL): New macro.
	(dlopen): Take arg of type int instead of dl_open_mode.
	* elf/dlopen.c: Likewise.

	* math/math.h (_Mldbl): New macro, either produces L suffix or not.
	(M_*): Use it for these constants.
1996-06-03 04:46:40 +00:00
Roland McGrath 6c03c2cf27 * elf/dl-lookup.c (_dl_lookup_symbol): Arg NOSELF renamed to NOPLT.
Reject SHN_UNDEF defns iff NOPLT is nonzero.
	* elf/link.h (_dl_lookup_symbol): Update prototype and comment.
	* elf/dl-runtime.c (fixup): Pass 1 to _dl_lookup_symbol for NOPLT.
	* elf/dlsym.c (dlsym): Pass 0.
	* elf/rtld.c (dl_main): Likewise.
	* elf/dl-reloc.c (_dl_relocate_object: resolve): Second arg R_OFFSET
	replaced with NOPLT flag.  Pass it through to _dl_lookup_symbol.
	* elf/do-rel.h (elf_dynamic_do_rel): Update prototype of RESOLVE arg.
	Pass `elf_machine_pltrel_p (R->r_type)' result as NOPLT flag value.
	* sysdeps/i386/dl-machine.h (elf_machine_pltrel_p): New macro.
	* sysdeps/m68k/dl-machine.h (elf_machine_pltrel_p): Likewise.
	* sysdeps/stub/dl-machine.h (elf_machine_pltrel_p): Likewise.
1996-06-02 21:35:43 +00:00
Roland McGrath 9004bc202e Sun Jun 2 14:56:49 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* login/pututline_r.c: Fix typo in sizeof for DATA_TMP alloca.

	* sysdeps/generic/gnu/types.h (__clock_t): New type.

	* sysdeps/unix/sysv/linux/gnu/types.h (__clock_t, __fsid_t): Define
	using kernel types.
	* time/time.h (clock_t): Include <gnu/types.h> and define using
	__clock_t.
1996-06-02 19:47:36 +00:00
Roland McGrath 847242451c Wed May 29 00:57:37 1996 David Mosberger-Tang <davidm@azstarnet.com>
* time/Makefile (tests): Add test-tz.

	* time/test-tz.c: New test.

	* time/clocktest.c: Rewrite to test more meaningfully.

	* sysdeps/unix/sysv/linux/syscalls.list: Add bdflush,
 	create_module, delete_module, get_kernel_syms, init_module,
 	klogctl.

	* sysdeps/unix/sysv/linux/sys/param.h (MAXSYMLINKS): Define as 5
	instead of SYMLOOP_MAX, which is nowhere to be found.

	* sysdeps/unix/sysv/linux/sys/msq_buf.h,
 	sysdeps/unix/sysv/linux/sys/sem_buf.h,
 	sysdeps/unix/sysv/linux/sys/shm_buf.h [__USE_MISC]: Add more
 	control ops and datastructures.

	* sysdeps/unix/sysv/linux/sys/io.h: New file declaring low-level
 	I/O related functions.

	* sysdeps/unix/sysv/linux/sys/kdaemon.h: New file declaring kernel
	daemon related functions/operations.

	* sysdeps/unix/sysv/linux/sys/klog.h: New file declaring kernel
	logging related functions/operations.

	* sysdeps/unix/sysv/linux/sys/module.h: New file declaring kernel
	module related functions/operations.

	* sysdeps/unix/sysv/linux/speed.c: Only do "mention this twice" hack
	for non-Alpha based Linux systems.

	* sysdeps/unix/sysv/linux/alpha/speed.c: Remove.

	* sysdeps/unix/sysv/linux/Makefile (headers): Add sys/module.h,
	sys/io.h, sys/klog.h, and sys/kdaemon.h.

	* sysdeps/unix/sysdep.h (END): Define empty END macro for
 	platforms that don't need some sort of end directive at the
	end of functions.

	* sysdeps/unix/make-syscalls.sh: Emit END($strong) at end of
 	syscall wrapper to allow correct generation of debugging
 	information.

	* sysdeps/unix/alpha/sysdep.h (END): Redefine to use .end
 	directive for both ELF and ECOFF.
	(ret): Delete macro.  It was a dangerous macro and unnecessary
 	since the Alpha assemblers recognizes "ret" as a macro themselves.

	* sysdeps/gnu/utmpbits.h (struct utmp): Move ut_tv behind
 	ut_session to guarantee long alignment.  This is important for
 	Linux/Alpha since ut_tv.tv_sec is 32 bits and time_t is 64 bits.
  	This will all get cleaned up as programs start to use ut_tv
 	instead ut_time.

	* sysdeps/alpha/divrem.h: Include <sysdep.h> instead of <*/regdef.h>.

	* sysdeps/alpha/bsd-_setjmp.S (setjmp): Renamed entry point to
	_setjmp.

	* sysdeps/alpha/_mcount.S, sysdeps/alpha/bb_init_func.S,
 	sysdeps/alpha/bsd-_setjmp.S, sysdeps/alpha/bsd-setjmp.S,
 	sysdeps/alpha/copysign.S, sysdeps/alpha/divrem.h,
 	sysdeps/alpha/fabs.S, sysdeps/alpha/ffs.S, sysdeps/alpha/htonl.S,
 	sysdeps/alpha/htons.S, sysdeps/alpha/memchr.S,
 	sysdeps/alpha/setjmp.S, sysdeps/alpha/strlen.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/llseek.S,
 	sysdeps/unix/sysv/linux/alpha/pipe.S,
 	sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
 	sysdeps/unix/sysv/linux/alpha/sysdep.S: Use END macro instead of
 	.end directive.

	* csu/initfini.c (_fini): Tell gcc that _fini is not a leaf
 	function by having it contain a dummy function call.

	* configure.in (config_machine): Don't make ELF the default for
 	Linux/Alpha just yet (use --with-elf instead).
	(.init/.fini check): Generate .text to ensure function start and
 	end are in same section.

	* sysdeps/unix/bsd/osf/alpha/brk.S,
 	sysdeps/unix/sysv/linux/alpha/brk.S (__curbrk): Store the entire
 	break value, not just the low 32 bits to accomodate large
 	memories.

Tue May 28 10:46:04 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/unix/sysv/linux/alpha/brk.S: Rather than attempt to
	dynamically resolve _end for initializing __curbrk, support the
	brk(0) query idiom.

	* sysdeps/alpha/bb_init_func.S: Don't make `init' an external symbol.

	* sysdeps/alpha/bsd-_setjmp.S: The function is _setjmp not setjmp.

Sun May 26 22:17:38 1996  Richard Henderson  <rth@tamu.edu>

	* stdlib/lcong48_r.c, stdlib/seed48_r.c, stdlib/strtod.c,
	stdlib/strtol.c: Include <string.h> for mem* and str* fns used.

Thu May 23 02:15:56 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/Makefile (headers): Add sys/io.h,
 	sys/klog.h, and sys/kdaemon.h.

	* sysdeps/unix/sysv/linux/sys/io.h: New file.
	* sysdeps/unix/sysv/linux/sys/klog.h: Ditto.
	* sysdeps/unix/sysv/linux/sys/kdaemon.h: Ditto.

	* sysdeps/unix/alpha/sysdep.h (ret): Remove macro.  It is
 	dangerous and unnecessary since both OSF/1 as and gas define "ret"
 	as a pseudo-instruction.

Sat Jun  1 17:18:21 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* time/tzset.c (__tzset): Clear tz_rules name pointers after freeing
	them.  Bug found by David Mosberger-Tang.

	* sysdeps/posix/tempname.c (__stdio_gen_tempname): Use __ptr_t instead
	of PTR.

	* extra-lib.mk (extra-objs): Use patsubst intead of $(A:=B) syntax
	to work around Make bug when A contains var ref.

Fri May 31 18:27:52 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* string/string.h [__USE_MISC]: Declare basename; OSF/1 puts it here.

	* sysdeps/unix/sysv/linux/syscalls.list (getpgid, setpgid): Define __
	strong names and [gs]etpgid as weak aliases.

	* math/math_private.h (GET_LDOUBLE_EXP): Add missing backslash.
1996-06-02 18:50:07 +00:00
Roland McGrath 76060ec0b8 Thu May 30 11:24:05 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* po/header.pot: Replace with exact boilerplate pinard dictates.

	* sysdeps/i386/strtok.S (Lillegal_argument): Remove this code to set
	errno and the check that jumped to it.

	* sysdeps/mach/hurd/Makefile (errnos.d): Use $(sed-remove-objpfx).

Thu May 30 03:21:57 1996  Ulrich Drepper  <drepper@cygnus.com>

	* FAQ: Document need of gperf program for developers.

	* elf/elf.h: Fix typos in comments.

	* libio/stdio.h [!__STRICT_ANSI__ || _POSIX_SOURCE]: Add
        prototypes for `ctermid' and `cuserid'.

	* locale/programs/locale.c: Switch to user selected locale
	before printing variables.

	* math/Makefile [$(long-double-fcts)==yes]: Define long-m-routines
        and long-c-routines.  Only if the `long double' data type is
        available we need to compile the functions.
	(libm-routines): Add $(long-m-routines).
	(routines): Remove isinfl, isnanl.  Use new file s_isinfl and
	s_isnanl instead if `long double' is available.

	* math/math.h: Include <mathcalls.h> again to define `long double'
        functions.

	* math/math_private.h: Define data types, prototypes and access
        macros for `long double'.

	* stdlib/stdlib.h: Add prototypes for `strtoll' and `strtoull'.
	[GCC2 && OPTIMIZE]: Define strto{,u}ll as inline function which
	calls __strto{,u}q_internal.

	* stdlib/strfmon.c: Replace PTR by `void *'.

	* stdlib/strtoq.c: Define strtoll as weak alias.
	* stdlib/strtouq.c: Define strtoull as weak alias.

	* string/tester.c: Correct `strsep' test.

	* sysdeps/generic/strsep.c: Make compatible with BSD version.
        Trailing characters of skip set are not skipped.  In this case
        empty tokens are returned.

	* sysdeps/i386/isinfl.c, sysdeps/i386/isnanl.c,
        sysdeps/ieee754/isinf.c, sysdeps/ieee754/isinfl.c,
        sysdeps/ieee754/isnan.c, sysdeps/ieee754/isnanl.c: Removed.  We
        now use the versions part of libm.

	* sysdeps/i386/strsep.S: Removed.  Generic C version is of
	similar speed.
	* sysdeps/i386/strtok.S: Remove support for `strsep'.

	* sysdeps/libm-i387/e_acosl.S, sysdeps/libm-i387/s_ceill.S,
        sysdeps/libm-i387/s_copysignl.S, sysdeps/libm-i387/s_finitel.S,
        sysdeps/libm-i387/s_floorl.S, sysdeps/libm-i387/s_isinfl.c,
        sysdeps/libm-i387/s_isnanl.c, sysdeps/libm-i387/s_nextafterl.c,
        sysdeps/libm-i387/s_rintl.S, sysdeps/libm-i387/s_significandl.S:
        New i387 specific math functions implementing `long double'
        versions.

	* sysdeps/libm-ieee754/s_ceill.c,
        sysdeps/libm-ieee754/s_copysignl.c,
        sysdeps/libm-ieee754/s_fabsl.c, sysdeps/libm-ieee754/s_finitel.c,
        sysdeps/libm-ieee754/s_floorl.c, sysdeps/libm-ieee754/s_isinfl.c,
        sysdeps/libm-ieee754/s_isnanl.c,
        sysdeps/libm-ieee754/s_nextafterl.c,
        sysdeps/libm-ieee754/s_rintl.c, sysdeps/libm-ieee754/s_scalbnl.c,
        sysdeps/libm-ieee754/s_significandl.c: New generic `long double'
        versions of libm functions.

	* sysdeps/libm-i387/e_exp.S: Add a few comments to explain the
        Intel FPU nonsense.

	* sysdeps/libm-i387/s_ceil.S, sysdeps/libm-i387/s_ceilf.S,
        sysdeps/libm-i387/s_floor.S, sysdeps/libm-i387/s_floorf.S: Correct
        handling of local variables.  The old version created a stack
        frame but stored the values outside.

	* sysdeps/libm-ieee754/s_isinf.c, sysdeps/libm-ieee754/s_isnan.c
        [!NO_LONG_DOUBLE]: Define alias with `long double' versions name.

	* login/pututline_r.c: Include sys/stat.h.  Fix typos.

        according to currently used locale for category LC_CTYPE by
	inet_nsap_ntoa.  Now in <arpa/inet.h>.
        _IO_dup2 to contain complete parameter list.
1996-05-30 16:12:42 +00:00
Roland McGrath c3352e6233 Wed May 29 12:53:10 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* version.h (VERSION): Set to 1.90.

	* Makerules (distinfo-vars): Write extra-libs and *-routines for each
	of its elts.
	* MakeTAGS (sources): Add those sources.

	* MakeTAGS (all-sources): Add $(others:=.c) and $(tests:=.c).

Wed May 29 08:53:08 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/report-wait.c (_S_msg_report_wait): Return `itimer' for the
	itimer thread.

	* hurd/hurdinit.c (_hurd_init): Set _HURDSIG_TRACED before calling
	_hurd_proc_init.

	* string/tester.c (main): Fix strsep tests 6, 7, 20 to expect null
 	token instead of it being implicitly skipped.
1996-05-29 17:50:37 +00:00
Roland McGrath 8d6108c3db Regenerated from source files 1996-05-29 17:04:16 +00:00
zippy 7f8b77039d Copied from /com/share/ftp/gnu/po/maint/glibc 1996-05-29 16:40:45 +00:00
Miles Bader d545ee47a2 (_hurd_init): Set _HURDSIG_TRACED before calling _hurd_proc_init. 1996-05-29 14:05:50 +00:00
Roland McGrath 77aae36646 * sysdeps/i386/fpu/__math.h (logb): Correct contraint from =u to =t.
Must operate on top of fp reg stack, not second from top.
1996-05-29 05:12:55 +00:00
Roland McGrath d06b536dc1 Wed May 29 00:52:20 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* extra-lib.mk (alltypes-$(lib)): Don't append $(objpfx)$(lib).so.
	(others): Instead, make this depend on it.
1996-05-29 05:09:31 +00:00
Roland McGrath 0200214b28 Tue May 28 04:38:10 1996 Ulrich Drepper <drepper@cygnus.com>
* limits.h: Change MB_LEN_MAX to 6.  A 31-bit ISO 10646
	character in UTF-8 encoding has that many bytes.

	* locale/langinfo.h: New element _NL_CTYPE_MB_CUR_MAX.
	* locale/categories.def: Add description of field _NL_CTYPE_MB_CUR_MAX.
	* locale/Makefile (routines): Add mb_cur_max.
	* locale/mb_cur_max.c: New file.  This function gets called
	when the macro MB_CUR_MAX is used.
	* locale/C-ctype.c: Initialize new mb_cur_max field.
	* locale/localeinfo.h: Change magic value because of incompatible
        change.
	* locale/programs/ld-ctype.c: Determine value of mb_cur_max
        according to current character set and write it out with the rest.
	* stdlib/stdlib.h (MB_CUR_MAX): Not constant anymore.  Get value
        according to currently used locale for catefory LC_CTYPE by
        calling the function __ctype_get_mb_cur_max.

Tue May 28 03:27:46 1996  Ulrich Drepper  <drepper@cygnus.com>

	* FAQ:  Fix some typos.
	Tell that for Linux the kernel header files are necessary.

	* PROJECTS: New file.  List of open jobs for glibc.
	* Makefile (distribute): Add PROJECTS.

	* crypt/GNUmakefile (headers): New variable.  Mention crypt.h.
	* crypt/crypt.h: Header for crypt functions.

	* elf/elf.h: Add some new constants from recent Cygnus ELF
	header files.

	* login/getutid_r.c: Test for correct type.
	Don't depend on ut_type and ut_id unless _HAVE_UT_TYPE and
	_HAVE_UT_ID resp. are defined.
	Make really compliant with specification.

	* login/getutline_r.c, login/pututline_r.c: Don't depend on
	ut_type and ut_id unless _HAVE_UT_TYPE and _HAVE_UT_ID resp. are
	defined.
	Make really compliant with specification.

	* login/setutent_r.c: Don't depend on ut_type and ut_id unless
	_HAVE_UT_TYPE and _HAVE_UT_ID resp. are defined.

	* login/login.c, login/logout.c, login/logwtmp.c: Complete
	rewrite.  Now based on getut*/setut* functions.

	* stdlib/strtol.c: Undo changes of Wed May 22 01:48:54 1996.
	This prevented using this file in other GNU packages.

	* sysdeps/gnu/utmpbits.h: Define _HAVE_UT_TYPE, _HAVE_UT_ID,
	and _HAVE_UT_TV because struct utmp has these members.

	* sysdeps/libm-i387/e_exp.S: Correct exp(+-Inf) case.

	* utmp.h: New file.  Wrapper around login/utmp.h.

	* elf/dl-error.c (struct catch): New type.
	(catch): New static variable, struct catch *.
	(catch_env, signalled_errstring, signalled_objname): Variables removed.
	(_dl_signal_error): If CATCH is non-null, set its errstring and
	objname members and jump to CATCH->env.  If it is null, call
	_dl_sysdep_fatal with a standard message.
	* elf/rtld.c (dl_main): Explode `doit' function into dl_main's body.
	No longer use _dl_catch_error.
1996-05-29 04:48:04 +00:00
Roland McGrath 215dbbb150 Tue May 28 13:11:19 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (sed-remove-objpfx): Avoid extra space in regexp due to
	continuation line.

	* sysdeps/unix/sysv/linux/i386/socket.S: Fix off-by-one error in
	setting %ecx to 2nd syscall arg: we have pushed nothing, so function
	args are found at 4(%esp), not 8(%esp).
1996-05-28 17:54:52 +00:00
Roland McGrath 13a0be8823 * Makefile ($(includedir)/stubs.h): Add missing backslash. 1996-05-28 00:10:40 +00:00
Roland McGrath 2a4dcf76ca * sysdeps/unix/sysv/linux/i386/brk.c (__curbrk): Initialize it so it
can be aliased.
1996-05-27 20:43:56 +00:00
Roland McGrath 807912915b * sysdeps/unix/sysv/linux/Makefile [$(subdir)=termios] (headers):
Append termio.h.

	* Makefile ($(includedir)/stubs.h): Print a msg if we do nothing.

	* misc/sgtty.h: Add forward decl of struct sgttyb in case it is never
	defined.

	* sysdeps/unix/sysv/linux/termio.h: New file.
	* sysdeps/unix/sysv/linux/Dist: Add it.

	* sysdeps/unix/sysv/linux/ioctl-types.h: New file, wrapper around
	kernel header <asm/termios.h>.

	* misc/Makefile (headers): Add ioctl-types.h.
	* sysdeps/generic/ioctl-types.h: New file.
	* misc/sys/ioctl.h: Include <ioctl-types.h>.
	(struct tchars, struct ltchars, struct sgttyb, struct winsize,
	struct ttysize): Types moved there.
1996-05-27 20:16:19 +00:00
Roland McGrath d36e769230 * Makefile ($(includedir)/stubs.h): Don't touch target if new one is
identical.
1996-05-27 19:19:29 +00:00
Roland McGrath 4e395306e8 Mon May 27 10:10:00 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/Makefile (z.% rule): Generate generic zone%/ rule after
	zone%/right/ and zone%/posix/ rules so they match first.
1996-05-27 14:11:05 +00:00
Roland McGrath 5f160cde27 * features.h [_GNU_SOURCE] (_BSD_SOURCE, _SVID_SOURCE,
_POSIX_SOURCE, _POSIX_C_SOURCE): Define these.
1996-05-27 02:18:37 +00:00
Roland McGrath e463fcfba1 * features.h [_GNU_SOURCE || _BSD_SOURCE || _SVID_SOURCE ||
_POSIX_SOURCE || _POSIX_C_SOURCE]: #undef __STRICT_ANSI__.
1996-05-26 22:58:11 +00:00
Roland McGrath 71a40c7471 * time/Makefile (tzcompile): Add missing backslash.
* wctype/wctype.h (__need_wint_t): Define this and include stddef.h.
	[! _WINT_T] (wint_t): Conditionalize typedef on this in case pre-2.7.3
	stddef.h doesn't define it.
	* wcsmbs/wchar.h: Likewise.
	* stdlib/strtod.c: Likewise.

	* wcsmbs/wcstok.c: Fix argument name typo.
1996-05-26 22:09:13 +00:00
Roland McGrath 59dd864187 Sun May 26 15:15:08 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdlib/ldiv.c: Deansideclized.

Sun May 26 19:39:53 1996  Ulrich Drepper  <drepper@cygnus.com>

	* intl/loadmsgcat.c (_nl_load_domain): Test correct variable
	after malloc.

	* string/Makefile (tester-ENV): New variable to suppress message
 	translation in test.

	* string/tester.c: Add tests for strtok_r and strsep.

	* sysdeps/i386/i486/strcat.S: Correct some more 8bit operation
	<-> 32 bit operand conflicts.

	* sysdeps/i386/strsep.S: Wrapper around <sysdeps/i386/strtok.S>
	to produce strsep function.
	* sysdeps/i386/strtok.S: Optimized implementation of strtok
	function.
	* sysdeps/i386/strtok_r.S: Wrapper around <sysdeps/i386/strtok.S>
	to produce strtok_r function.

	* sysdeps/generic/strtok.c: Moved here from string/strtok.c.
	Corrected example in comment.

	* string/Makefile (routines): Add strtok_r.
	* sysdeps/generic/strtok_r.c: New file.  Implement reentrant version
	of strtok_r.
	* string/string.h: Add prototype for strtok_r.
	* wcsmbs/wcstok.c: Handle illegal SAVE_PTR argument the same
	as in strtok_r.

Sun May 26 13:28:23 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* time/tzset.c (__tzset): Ignore leading : in $TZ; always try tzfile
	first and fall back to 1003.1 syntax only if it fails.

	* time/Makefile (install-others): Also install posix/ZONE and
	right/ZONE for each ZONE in $(zonenames).
	(z.% rule): Generate rules for right/ZONE and posix/ZONE targets too,
	the difference begin leapseconds vs /dev/null as 3rd dep.  For
	original ZONE targets use $(leapseconds), to be set in Makeconfig.
	(target-zone-flavor): New variable.
	(tzcompile): Use it to get the right -d for posix/ and right/ flavors.
	* Makeconfig (leapseconds): New variable.

	* mach/Machrules (%.udeps rule): Depend on Machrules.
	Emit deps for .uh and .__h files.
	(%.uh, %.__h rules): Don't depend on %.defs; use #include <$*.defs>
	instead.

Sun May 26 01:06:47 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/Makefile (routines): Add llabs, lldiv.
	* stdlib/llabs.c: New file.  Implementation of return
	absolute value of long long argument.
	* stdlib/lldiv.c: New file.  Implementation of division with remainder
	of long long argument.
	* stdlib/stdlib.h [__USE_GNU] (lldiv_t): New type for lldiv
	function.
	Define prototypes for lldiv and llabs functions.

	* locale/C-collate.c: Initialize _NL_COLLATE_NRULES element.

	* stdlib/strtod.c: Replace wchar_t with wint_t.  The later is
	really the type for a single wide character.

	* string/strxfrm.c (print_val): Define separate version for
	use as wcsxfrm.  Here we don't need UTF8 encoding.

	* wcsmbs/wchar.h:  gcc-2.7.2-960517 finally introduces wint_t
	in <stddef.h>.  Use this value and only for older gcc version
	define in place.
	(uwchar_t): Remove definition.

	* wcsmbs/wcscmp.c, wcsmbs/wcscoll.c, wcsmbs/wcsncmp.c,
	wcsmbs/wcsxfrm.c, wcsmbs/wmemcmp.c: : Don't use uwchar_t as unsigned
	type.  wint_t is intended for this.

Sat May 25 14:10:19 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/unix/bsd/direntry.h: Use [1] instead of [0] for d_name to
	quiet -ansi -pedantic.
	* sysdeps/unix/common/direntry.h: Likewise.

	* login/Makefile (headers): Add lastlog.h.
	* login/lastlog.h: New file.

	* login/Makefile (CFLAGS): Don't append -D_THREAD_SAFE.
	* login/utmp.h [_REENTRANT || _THREAD_SAFE]: Replace this conditional
	with #ifdef __USE_REENTRANT.

	* features.h (__GNU_LIBRARY__): Set to 6.
	[_GNU_SOURCE] (_POSIX_SOURCE, _POSIX_C_SOURCE, _BSD_SOURCE,
	_SVID_SOURCE): Make sure they are all defined.

	* sysdeps/unix/sysv/linux/gnu/types.h: Instead of including
	<linux/posix_types.h>, define _LINUX_TYPES_DONT_EXPORT and then
	include <linux/types.h>.

	* resource/sys/resource.h: Remove trailing commas from enums.

	* sysdeps/generic/netinet/in.h: Remove trailing commas from enums.
	* sysdeps/unix/sysv/linux/netinet/in.h: Likewise.
1996-05-26 19:19:51 +00:00
Roland McGrath 27a110706b * login/getutline_r.c: Include string.h. 1996-05-24 22:08:15 +00:00
Roland McGrath 5790c439f9 * Rules (static-only-routines): Restore the rule to make these .so's
empty objects.
1996-05-24 21:51:25 +00:00
Roland McGrath 41f27456ac Fri May 24 17:30:50 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* login/pututline_r.c: Use struct assignment instead of memcpy.

	* login/getutline_r.c: Use strncmp instead of comparing two pointers
	that will only be equal if you are overwriting the data and screwing
	yourself anyway.
1996-05-24 21:42:06 +00:00
Roland McGrath 613a76ff52 Fri May 24 02:31:36 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/speed.c: Add new speed value 460800.

Thu May 23 23:09:33 1996  Ulrich Drepper  <drepper@cygnus.com>

	* FAQ: Add answer for 100% source code compatibility to Linux
	libc by David Mosberger-Tang.

	Update from bind-4.3.4-T3B.
	* inet/arpa/inet.h: Add prototypes for inet_pton, inet_ntop,
	inet_nsap_addr, and inet_nsap_ntoa.
	* resolv/gethnamaddr.c: Correct compatibility problems (sprintf),
	remove fourth argument to inet_pton and correct handling of
	host_addr passing.
	* resolv/inet_ntop.c: Correct compatibility problems (sprintf).
	* resolv/inet_pton.c: Remove fourth argument.
	* resolv/resolv.h: Remove prototypes for inet_nsap_addr and
	inet_nsap_ntoa.  Now on <arpa/inet.h>.

	* stdlib/gmp-impl.h: Add prototypes for internal functions.

Thu May 23 22:49:15 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Rules (subdir_install): Remove dep on sor-$(subdir).
	(static-only-routines): Removed variable and associated rules.

	* sysdeps/unix/sysv/linux/alpha/Makefile (headers): Add
 	sysdeps/alpha/bsd-_setjmp.S, sysdeps/alpha/ffs.S,
 	sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
 	sysdeps/unix/sysv/linux/alpha/start.S,
1996-05-24 20:16:39 +00:00
Roland McGrath 510ca033d6 Wed May 22 00:40:50 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/alpha/speed.c (speeds): Add entry for
 	460800 baud.

	* sysdeps/unix/sysv/linux/alpha/statbuf.h: New file.

	* sysdeps/unix/sysv/linux/Makefile (headers): Add
 	alpha/ptrace.h.
	* sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h: New file.

	* sysdeps/libm-ieee754/s_scalbnf.c: Call __scalbnf instead of
 	scalbnf.

	* sysdeps/generic/sigset.h (__sigismember, __sigaddset,
 	__sigdelset): Add declaration to keep ANSI compilers quiet.

	* sysdeps/alpha/__math.h (cabs): Remove underscores from struct
 	__cabs_complex member names in call to __hypot().

	* sysdeps/alpha/copysign.S, sysdeps/alpha/fabs.S: New files.

	* sysdeps/alpha/divrem.h: Renamed from sysdeps/alpha/divrem.S to avoid
 	name collision with math library.

	* sysdeps/alpha/divl.S, sysdeps/alpha/divlu.S, sysdeps/alpha/divq.S,
	sysdeps/alpha/divqu.S, sysdeps/alpha/reml.S, sysdeps/alpha/remlu.S,
	sysdeps/alpha/remq.S, sysdeps/alpha/remqu.S: Include divrem.h instead
	of divrem.S.

	* sysdeps/unix/alpha/sysdep.h: Include regdef.h.  Define LEAF macro
	to simplify declaration of leaf functions.

	* sysdeps/alpha/_mcount.S, sysdeps/alpha/bb_init_func.S,
 	sysdeps/alpha/bsd-setjmp.S, sysdeps/alpha/ffs.S,
 	sysdeps/alpha/htonl.S, sysdeps/alpha/htons.S, sysdeps/alpha/memchr.S,
 	sysdeps/alpha/setjmp.S, sysdeps/alpha/strlen.S,
 	sysdeps/alpha/udiv_qrnnd.S, sysdeps/unix/sysv/linux/alpha/brk.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/pipe.S,
 	sysdeps/unix/sysv/linux/sigsuspend.S,
 	sysdeps/unix/sysv/linux/alpha/syscall.S,
 	sysdeps/unix/sysv/linux/alpha/sysdep.S: Remove include of regdef.h.
  	sysdep.h includes it now. Replace ENTRY by LEAF with appropriate
 	framesize declaration.  Replace "lda pv,sym/jsr pv" by "jsr sym".

	* sysdeps/unix/sysv/linux/alpha/sysdep.h (NO_UNDERSCORES): Don't
	define.

	* sysdeps/unix/sysv/linux/alpha/syscalls.list: Added getsockopt,
	ptrace, and sysctl.

	* sysdeps/unix/sysv/linux/alpha/profil-counter.h: File removed.

	* sysdeps/unix/sysv/linux/alpha/ioperm.c: Modify to support
 	dynamic recognition of platform type.
	(_bus_base): New function.

	* sysdeps/unix/sysv/linux/alpha/llseek.S: New file.

	* sunrpc/rpc/rpc.h, sunrpc/rpc/svc.h: Avoid nested comments since
 	they produce ugly warnings by gcc.

	* posix/sys/types.h [__USE_MISC]: Add typedef for ulong.

Wed Mar 27 10:26:21 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/alpha/setjmp.S: Must establish global pointer before
 	address of __sigsetjmp_aux can be loaded.
1996-05-23 05:33:49 +00:00
Roland McGrath fa0bc87c32 Wed May 22 22:10:01 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdlib/canonicalize.c: New file.
	* stdlib/stdlib.h: Declare canonicalize_file_name, realpath.
	* stdlib/Makefile (routines): Add canonicalize.

	* posix/unistd.h: Declare __canonicalize_directory_name_internal.

Thu May 23 00:01:10 1996  Ulrich Drepper  <drepper@cygnus.com>

	* db/recno/rec_seq.c: Prevent `sccsid' definition by using the
	same #if condition as in the other db files.

	* intl/Makefile: Add -Wno-unused CFLAGS for compilation of
	bindtextdom.c, finddomain.c, and localealias.c.

	* intl/dcgettext.c: Don't define prototype for getcwd() when
	compiling in glibc.

	* libio/cleanup.c: Add prototype for _IO_register_cleanup.

	* libio/filedoalloc.c, libio/fileops.c, libio/iopopen.c: Don't
        define _POSIX_SOURCE unconditionally.

	* libio/filedoalloc.c, libio/iopopen.c: Include <unistd.h> if
        compiling in glibc.

	* libio/fileops.c (_IO_file_close_it): Don't sync file, call
	flush instead.  This relaxes the rules from POSIX.1 about
	changing the active handle a bit.

	* libio/iofopncook.c (struct _IO_cookie_file): Move definition
	into <libio.h>.
	Add prototypes for local functions to prevent warnings.

	* libio/iopopen.c: Change prototypes for _IO_fork, _IO_pipe, and
        _IO_DUP2 to contain complete parameter list.

	* libio/libio.h: Add definition of struct _IO_cookie_file.

	* libio/libioP.h: Add prototypes for _IO_vasprintf, _IO_vdprintf,
        and _IO_vsnprintf.

	* libio/memstream.c: Include <stdio.h>.

	* libio/stdio.h: Add prototypes for fopencookie,
        __stdio_gen_tempname, __vfscanf, __vsscanf, and __vsnprintf.

	* libio/strops.c: Avoid useless expression in `for' initializer.

	* locale/findlocale.c: Add some casts to prevent warnings.

	* locale/programs/locfile.c (write_locale_data): Don't use
	double `/' in locale binary file.

	* posix/unistd.h: Remove prototype for `reboot'.

	Update from bind-4.9.4-T1A.
	* resolv/Makefile (routines): Add inet_ntop and inet_pton.
	* resolv/arpa/nameser.h: Add definition of IN6ADDRSZ.
	* resolv/gethnamaddr.c, resolv/getnetnamadr.c, resolv/res_comp.c,
	resolv/res_debug.c, resolv/res_init.c

	* resolv/inet_ntop.c, resolv/inet_pton.c: New files.

	* resolv/resolv.h: Add RES_USE_INET6 flag.
	(__dn_isvalid): Renamed to __res_dnok.
	Add prototypes for __res_ownok and __res_mailok.

	* stdio-common/Makefile: Add -Wno-unused to CFLAGS for _itoa.c.

	* stdio-common/getline.c, stdio-common/vfscanf.c,
        sysdeps/posix/tempname.c: Don't use <ansidecl.h> anymore.

	* sysdeps/unix/sysv/linux/Makefile [$subdir == misc]
        (sysdep_routines): Add s_reboot.
	(install-others): Add $(includedir)/sys/syscall.h.
	New rule for $(includedir)/sys/syscall.h to produce from
	<asm/unistd.h>.

	* sysdeps/unix/sysv/linux/reboot.c: New file.  Make single
        argument function call 3 argument system call.

	* sysdeps/unix/sysv/linux/sys/reboot.h: New file.  Linux specific
	definition for reboot function.

	* sysdeps/unix/sysv/linux/syscall.h: Remove old and obsolete
        comment.

	* sysdeps/unix/sysv/linux/syscalls.list: Rename function for
	reboot syscall to __syscall_reboot.

	* wcsmbs/wchar.h: Protect prototypes for wcstof and wcstold by
	__USE_GNU, not USE_GNU.

Tue May 21 21:55:49 1996  David Mosberger-Tang  <davidm@AZStarNet.com>

	* locale/programs/charset.c, locale/programs/ld-collate.c:
	Add casts to prevent warnings on 64-bit machines.

	* locale/programs/ld-monetary.c: Don't do unnecessary tests for
	int_frac_digits and frac_digits which only produce warnings.

Mon May 13 23:45:29 1996  David Mosberger-Tang  <davidm@AZStarNet.com>

	* inet/arpa/inet.h: Backup return type of inet_addr to u_long.
	* resolv/inet_addr.c: Likewise.

	* resolv/Makefile (distribute): Add res_hconf.h
	(routines): Add res_hconf.

	* resolv/gethnamaddr.c: Add support for /etc/host.conf.

	* resolv/res_init.c: Initialize /etc/host.conf reader.

	* resolv/res_hconf.c, resolv/res_hconf.h: New files.
        Implementation of reading /etc/host.conf.

Wed May 22 21:21:15 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Rules (%.out rules): Prepend $($*-ENV) to the command.

	* sysdeps/unix/sysv/linux/i386/brk.c (___brk_addr): Define as weak
	alias for __curbrk.

Wed May 22 19:37:27 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/hurdexec.c (_hurd_exec): Pass INIT_TRACEMASK.
	* hurd/hurdmsg.c (set_int): Support INIT_TRACEMASK.

Wed May 22 18:47:31 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/mach/hurd/getcwd.c
	(_hurd_canonicalize_directory_name_internal): New function, broken out
	of __getcwd.
	(__getcwd): Use it.
	(__canonicalize_directory_name_internal): New function using it.

	* sysdeps/posix/getcwd.c (__canonicalize_directory_name_internal): New
	function, broken out of __getcwd.
	(__getcwd): Use it.

Wed May 22 18:14:05 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* string/argz-create.c (__argz_create): Correctly calculate length.

	* string/argz-extract.c (__argz_extract): Add terminating 0 entry.
	* hurd/hurdstartup.c (_hurd_startup): ... and don't so here.

	[HAVE_VMSDIR_H]: Include "vmsdir.h".
	(glob) [VMS]: Don't grok ~.
1996-05-23 03:15:42 +00:00
Roland McGrath e685238c90 Wed May 22 21:21:15 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/i386/brk.c (___brk_addr): Define as weak
	alias for __curbrk.
1996-05-23 01:34:23 +00:00
Miles Bader fe4d0ab794 (set_int): Support INIT_TRACEMASK. 1996-05-23 00:08:54 +00:00
Miles Bader d55dc14f28 (_hurd_startup): Don't bother terminating arg vectors, argz_extract does it now. 1996-05-22 22:23:31 +00:00
Roland McGrath 12fb2990d4 Updated from ../gpl2lgpl.sed /home/gd/gnu/lib/getopt.c 1996-05-22 22:23:17 +00:00
Miles Bader a0777f5163 (__argz_extract): Add terminating 0 entry. 1996-05-22 22:21:46 +00:00
Miles Bader de3bf9b1a5 (__argz_create): Correctly calculate length. 1996-05-22 22:20:51 +00:00
Roland McGrath 0efef8fcee Wed May 22 17:22:14 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* posix/glob.c [VMS]: Don't include <pwd.h>.
	[HAVE_VMSDIR_H]: Include "vmsdir.h".
	(glob) [VMS]: Don't grok ~.
1996-05-22 21:28:03 +00:00
Roland McGrath 0b0fc9d3a0 Wed May 22 17:22:14 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* posix/glob.c [VMS]: Don't include <pwd.h>.

	* hurd/hurdstartup.c (_hurd_startup): Terminate the vectors we get
	back from argz_extract.
1996-05-22 21:22:56 +00:00
Roland McGrath f202bbb213 Wed May 22 17:22:14 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* posix/glob.c [VMS]: Don't include <pwd.h>.
1996-05-22 21:22:40 +00:00
Miles Bader 395565f0c8 (_hurd_startup): Whoops, length args to argz_extract were correct before. 1996-05-22 21:21:27 +00:00
Roland McGrath a8fd3594fb Wed May 22 14:46:53 1996 Miles Bader <miles@gnu.ai.mit.edu>
* hurd/hurdstartup.c (_hurd_startup): Pass the correct counts to
	argz_extract, and terminate the resulting vectors.

Wed May 22 13:56:42 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* configure.in: Remove checks for objdump, objcopy, and awk.
	* config.make.in (OBJDUMP, OBJCOPY, AWK): Variables removed.
	* Makefile (distribute): Remove extract-dynsym.
	* extract-dynsym: File removed.

Tue May 21 22:17:45 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* termios/cfmakeraw.c: Set MIN to 1 and TIME to 0.
1996-05-22 20:02:18 +00:00
Miles Bader 0405b04dde (_hurd_startup): Pass the correct counts to argz_extract, and terminate the resulting vectors. 1996-05-22 19:55:28 +00:00
Roland McGrath dc9972317e Regenerated: autoconf configure.in 1996-05-22 18:02:38 +00:00
Roland McGrath b8fe19fa80 Wed May 22 01:48:54 1996 Ulrich Drepper <drepper@cygnus.com>
* stdlib/strtol.c [!QUAD] (ULONG_MAX, LONG_MAX): Define these
	macros if they are not available.
	(WEAKNAME): New macro to declare argument as weak.
	Define function with __ prefix and add normal name as weak alias.

	* sysdeps/posix/euidaccess.c (S_IROTH, S_IWOTH, S_IXOTH): Defines
	these macros if not already available based on R_OK, W_OK, and
	X_OK.

Tue May 21 18:48:46 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* misc/sys/syslog.h (__need___va_list): Define this instead of
	__need_va_list before including <stdarg.h>.

	* Makerules (o-iterator): Use $(object-suffixes-left) instead
	of $(object-suffixes) to produce repetitions; this is used for other
	lists than just that one.
	[versioned]: Use $(o-iterator) properly.

	* sysdeps/unix/sysv/linux/Implies: Include `gnu'.
	* sysdeps/mach/hurd/Implies: Likewise.

Sat May 18 02:57:46 1996  Ulrich Drepper  <drepper@cygnus.com>

	* login/Makefile: New file.  This directory contains functions
	for user administration.
	* Makefile (subdirs): Add login.

	* misc/Makefile (headers): Remove utmp.h.  Now in login/utmp.h.
	(extra-libs, libutil-routines): Ditto.
	* misc/login.c, misc/login_tty.c, misc/logout.c, misc/logwtmp.c,
	misc/utmp.h: Moved to misc/.
	* login/login.c, login/login_tty.c, login/logout.c,
        login/logwtmp.c, login/utmp.h: Moved to here from misc/.

	* login/utmp.h: Split file.  Definitions of data structures
	and constants are now in the system dependent utmpbits.h file.

	* login/setutent_r.c, login/setutent.c, login/endutent_r.c,
	login/endutent.c, login/getutent_r.c, login/getutent.c,
	login/getutid_r.c, login/getutid.c, login/getutline_r.c,
	login/getutline.c, login/pututline_r.c, login/pututline.c:
	New files.  Routines to handle utmp-style files.

	* sysdeps/gnu/utmpbits.h: New file.  Contains GNU/Linux
	specific definitions of utmp data structures and constants.

	* sysdeps/unix/sysv/utmpbits.h: Renamed from sysdeps/unix/sysv/utmp.h.

	* sysdeps/generic/utmpbits.h: New file.  Generic (BSDish) version of
	definitions of utmp data structures and constants.

Fri May 17 00:01:31 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/C-monetary.c: Default value for mon_decimal_point should be
        '.'.

	* stdio-common/printf.h: Remove Linux libc compatibility stuff.
	Add `extra' flag.  Currently used in __printf_fp.

	* stdio-common/printf_fp.c (__guess_grouping): Renamed from
        `guess_grouping' and extend visibility to extern.  This function
        is now used in `strfmon'.
	(__printf_fp): Recognize new bit flag in info struct.  This
	triggers to use the grouping information and decimal point from
	the LC_MONETARY category instead of the LC_NUMERIC category.

	* stdio-common/vfprintf.c (process_arg): Correct major bug.  In
	`complicated' loop we must not use the varargs because the args
	are already available in the ARGS_VALUE array.

	* stdlib/Makefile (headers): Add monetary.h.
	(routines): Add strfmon.
	* stdlib/monetary.h: New file.  Header for strfmon function.
	* stdlib/strfmon.c: New file.  Implement strfmon function to print
	monetary amounts according to current locale's rules.

	* sysdeps/unix/sysv/linux/i386/sys/vm86.h: The kernel header is
	now (>= Linux-1.3.100) called <asm/vm86.h>.
1996-05-22 02:11:55 +00:00
Roland McGrath 1b82a4a8ca (Long Options): getopt_long in getopt.h 1996-05-21 21:35:56 +00:00
Linda A. Walsh ee263689e0 * config.sub: Recognize -proelf as a basic system type. 1996-05-20 16:02:45 +00:00
Roland McGrath 20c811896c Thu May 16 00:31:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules [versioned]: Make symlinks in the build directory, because
 	the versioned names might be referenced by a DT_NEEDED in another
 	library.
1996-05-16 04:32:47 +00:00
Roland McGrath 46d9215f3b Wed May 15 18:59:38 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/examples/longopt.c: Include stdlib.h and getopt.h.
1996-05-15 23:05:44 +00:00
Roland McGrath 0adc881c60 Tue May 14 03:36:21 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/Makefile [$subdir == misc] (headers):
	Add sys/acct.h and sys/sysctl.h.
1996-05-15 21:43:59 +00:00
Roland McGrath f8adc70c3f Tue May 14 19:42:04 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/generic/strrchr.c: Deansideclized.

	* elf/Makefile (ldd): Depend on Makefile.
	Find ld.so in $(slibdir) instead of $(libdir).

	* sysdeps/i386/strrchr.S: Use `testl $3, %esi' instead of `testb $3,
	%esi'; gas misassembles the latter into `testb $3, %dh'.

	* mach/Machrules (%.udeps rule): Do $(make-target-directory) first.

Tue May 14 16:38:44 1996  David Mosberger-Tang <davidm@AZStarNet.com>

	* sunrpc/getrpcent.c (interpret): Declare args.  Rewrite parsing using
	strpbrk.

Tue May 14 20:18:38 1996  Ulrich Drepper  <drepper@cygnus.com>

	* time/Makefile (routines): Add strptime.
	* time/time.h: Add prototype for strptime.
	* time/strptime.c: New file.  Implementation according to XPG4.
1996-05-15 15:49:26 +00:00
Roland McGrath 64166d9834 Tue May 14 14:07:10 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* libc-symbols.h (lint): Macro removed.  The sunrpc code does some
	really stupid things #ifdef lint.

	* sysdeps/unix/sysv/linux/i386/profil-counter.h (profil_counter): Fix
	struct member name: sc_eip -> eip.
1996-05-14 20:30:25 +00:00
Roland McGrath 7cdef09812 * Makerules (stub-$(subdir)): Put cmds including cd inside (...) with
output redirect outside it.
1996-05-14 02:30:23 +00:00
Roland McGrath c4cc693de7 Mon May 13 19:52:33 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (stub-$(subdir)): Put cmds including cd inside (...) with
	output redirect outside it.
1996-05-14 02:28:12 +00:00
Miles Bader 8ab41b4bab Updated from ../gpl2lgpl.sed /home/gd/gnu/lib/regex.c 1996-05-14 00:16:50 +00:00
Roland McGrath 1796d83f0f Mon May 13 19:52:33 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/Makefile (subdir_lib): Depend on ld.so.
1996-05-13 23:54:12 +00:00
Roland McGrath 70c7151893 Sun May 12 22:52:22 1996 Bruce Elliott <belliott@accessone.com>
* stdio-common/vfprintf.c: Correct handling of unsigned short
	values.

	* extra-lib.mk (alltype-$(lib)): Put libs in $(objpfx) instead of
	$(common-objpfx).
	* Makerules [install-lib.a]: Find them there.
1996-05-13 23:50:14 +00:00
Roland McGrath dfc34677ea Regenerated
Mon May 13 12:03:03 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* posix/glob.c [_AMIGA]: Don't include <pwd.h>.
	(glob): Remove bogus & in call to globfree.
	[_AMIGA]: Use AmigaDOS file name conventions.
1996-05-13 23:16:15 +00:00
Roland McGrath 7f0d69dbf4 * sysdeps/unix/sysv/linux/i386/profil-counter.h: New file. 1996-05-13 23:11:29 +00:00
Roland McGrath 01dbca86d1 * sysdeps/unix/bsd/telldir.c (seekdir, telldir): Use new struct member
names without __.
1996-05-13 22:15:05 +00:00
Roland McGrath a13dab1c0f * extra-lib.mk: Skip the hair if $(object-suffixes-$(lib)) is empty.
* posix/glob.h [_AMIGA]: Remove `struct stat;' forward decl.
1996-05-13 22:11:28 +00:00
Roland McGrath a5b7bf0e62 * configure.in (--with-fp): Note in help string that it's the default.
* locale/programs/ld-ctype.c (struct locale_ctype_t): Use u_int32_t
	instead of unsigned int for map_collection_max and map_collection_act.

	* stdio-common/vfprintf.c [USE_IN_LIBIO] (flockfile, funlockfile):
	Macros removed; they are in <stdio.h>.
	* stdio-common/vfscanf.c: Likewise.

	`-include' to not complain before they exist.
1996-05-13 22:01:00 +00:00
Roland McGrath 95a108f0ba Regenerated
Thu May  9 09:17:46 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* posix/glob/SMakefile, posix/glob/SCOPTIONS, posix/glob/Makefile.ami:
	New files, AmigaDOS support from Aaron Digulla.
	* posix/Makefile (glob.tar): Add AmigaDOS support files.
1996-05-13 20:29:10 +00:00
Roland McGrath 9fb16eeae8 * posix/glob.c [_AMIGA]: Don't include <pwd.h>.
(glob): Remove bogus & in call to globfree.
	[_AMIGA]: Use AmigaDOS file name conventions.
1996-05-13 20:27:12 +00:00
Roland McGrath 45086082a0 * time/Makefile (zonenames): Target removed.
(extra-objs): Remove it from here.
	Include the z.* files directly instead of including zonenames; use
	`-include' to not complain befre they exist.

	* sysdeps/unix/Makefile: Find sysd-syscalls and s-proto.d with
	$(common-objpfx) instead of $(objpfx).
1996-05-13 20:18:37 +00:00
Roland McGrath d929664ab5 * Makerules [install-lib-non.a]: Find these things with $(objpfx)
instead of $(common-objpfx).
1996-05-13 18:10:51 +00:00
Roland McGrath 7da3079b42 Mon May 13 12:03:03 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makeconfig (sysdep-configures): New variable.
	(config.status): Depend on $(sysdep-configures).

Fri May 10 20:07:52 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/profil.c: New file.

Fri May 10 19:59:50 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/Makefile (CFLAGS-setjmp.c): New variable.

Fri May 10 19:55:42 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* shlib-versions: Use libm=6 and libc=6 for m68k-linux.

	* string/envz.c: Fix uses of unsigned to size_t.
1996-05-13 17:30:42 +00:00
Roland McGrath 0f90ef9650 * Makerules ($(libdir)/libc.so): Make the file an ld script.
* sysdeps/mach/hurd/configure.in: Don't grok --with-hurd option.

	* sysdeps/mach/configure.in: File removed.
	* sysdeps/mach/configure: File removed.
1996-05-12 22:15:01 +00:00
Roland McGrath aa1075ea2f Sun May 12 11:16:58 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* mach/Machrules (%.udeps rule): Write deps for %_server.[ch] too.
	(%_server.[ch] rule): Don't depend on %.defs; use #include to get
	installed .defs file.

	* stdio-common/vfprintf.c (flockfile, funlockfile): Define to
	nothing for stdio.  Fix fUNlockfile -> funlockfile for libio.
	* stdio-common/vfscanf.c: Likewise.

Sat May 11 13:43:41 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* hurd/hurdfault.c: Include faultexc_server.h instead of faultexc.h.

	* mach/Machrules (%.ir rule): Don't produce deps for imports.

	* elf/dl-fini.c (_dl_fini): Clear L->l_init_called after calling fn.

	* Makerules (install): Depend on $(slibdir)/libc.so$(libc.so-version).
	[!subdir] ($(libdir)/libc.so, $(common-objpfx)/libc-syms.so): Protect
	these targets and install dep on $(libdir)/libc.so with this.

	* hurd/Makefile: Removed all rules and defns for using code from Hurd
	sources and installing headers from there.

	* sysdeps/mach/hurd/errnos.awk: Set in_mach_errors to FILENAME when we
 	set it.  In Mach error matching clause, only match if FILENAME is
 	still the same value.

	* sysdeps/mach/hurd/Makefile: Don't include sysdeps/mach/Makefile;
	$(mach-srcdir) no longer exists.
	(hurd-srcdir): Variable removed.
	(includes): Don't append -I$(hurd-srcdir).
	(last-includes): Variable removed.
	Remove vpath specs using $(hurd-srcdir).
	(mach-errno-h): New canned sequence.
	($(common-objpfx)errnos.d): New target, generated included makefile
	to determine absolute file names of Mach headers to search for error
	codes and set variable mach-errnos-deps.
	($(common-objpfx)stamp-errnos): Depend on $(mach-errnos-deps) instead
	of prior explicit list.
	(generated): Add errnos.d, stamp-errnos.

	* mach/Machrules (some-if-rtn): New variable and target; compute deps
	of some if routine and make all if routines depend on that .d file
	instead of static list of .h files.

	* mach/Makefile (mach/mach_interface.defs,
	mach/memory_object_user.defs): Targets removed.
	($(objpfx)mach-syscalls.mk): Tweak this kludge so it doesn't depend
	directly on Mach sources.

	* sysdeps/mach/Makefile (mach-srcdir): Variable removed.
	(includes): Don't append -I$(mach-srcdir).
	Remove vpath specs using $(mach-srcdir).

	* hurd/Makefile (server-interfaces): Add faultexc.
	(sig): Remove it from here.
	(fault%.[ch]): Rule removed.
	(MIGFLAGS-faultexc): New variable.

	* hurd/faultexc.defs: New file.

	* mach/Machrules (%.ustamp rule): Pass $(MIGFLAGS-$*) to mig.
	(%_server.[ch] rule): Likewise.

	* mach/Makefile: Removed all rules and defns for using code from Mach
	sources and installing headers from there.

	* Makeconfig [$(build-shared)=yes] (link-libc): Append
	$(libc.so-version) to libc.so.

	* mach/Machrules (%.ustamp rule): Don't depend on %.defs.
	(%.udeps): New rule parallel to that one, generating included
	makefiles with -M output from `#include <%.defs>'.

	* Makerules (sed-remove-objpfx): Remove space before \ at eol.
1996-05-12 16:38:08 +00:00
Roland McGrath d617ac4ee5 * Makefile (distribute): Add FAQ. 1996-05-10 23:04:39 +00:00
Roland McGrath f8cac037ee Fri May 10 18:36:14 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* FAQ: New file contributed by drepper.

	* time/Makefile (headers): Add timebits.h.
	* sysdeps/unix/sysv/linux/timebits.h: New file.
	* sysdeps/stub/timebits.h: New file.
	* time/time.h (CLK_TCK): Define to CLOCKS_PER_SEC.
	(CLOCKS_PER_SEC): Remove this macro.  Instead #include <timebits.h>.
1996-05-10 22:55:26 +00:00
Roland McGrath 7cfb2d8be3 Thu May 9 09:17:46 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* aclocal.m4 (AC_FD_MSG, AC_FD_CC): Fix these for autoconf weirdness.
1996-05-10 22:06:47 +00:00
Thomas Bushnell, BSG 9635799df3 *** empty log message ***
* string/envz.c (envz_get): Don't declare ENTRY const.
1996-05-10 21:33:50 +00:00
Thomas Bushnell, BSG 6e85aaf798 Fix up collisions.
* aclocal.m4 (AC_FD_MSG, AC_FD_CC): Fix these for autoconf weirdness.
1996-05-10 20:59:04 +00:00
Thomas Bushnell, BSG 4d4b48753c *** empty log message ***
Fri May 10 16:22:44 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* string/argz-create.c (__argz_create): Restore const keyword to
 	ARGV parm.
	* string/argz.h (__argz_create, argz_create): Restore const
 	keyword.

Fri May 10 11:48:03 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* string/argz.h (argz_create): Fix param type.
	* string/argz-create.c (__argz_create): Remove const from param type.
	* string/envz.c (envz_get): Remove const from return type.
1996-05-10 20:26:39 +00:00
Thomas Bushnell, BSG a7d25a1157 (__argz_create, argz_create): Restore const keyword. 1996-05-10 20:22:00 +00:00
Miles Bader 4392fd309a (envz_get): Remove const from return type. 1996-05-10 15:57:48 +00:00
Miles Bader e91ce32f3c (argz_create): Fix param type. 1996-05-10 15:48:34 +00:00
Thomas Bushnell, BSG 349e97bda6 *** empty log message ***
* string/envz.h (envz_get): Omit const from declaration of return
	type.
1996-05-10 13:52:21 +00:00
Thomas Bushnell, BSG 7cf6f3e0e8 *** empty log message ***
Fri May 10 09:41:54 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* string/argz.h (__argz_create, argz_create): Omit const keyword
	from declaration of ARGV.
1996-05-10 13:44:04 +00:00
Thomas Bushnell, BSG b5cc7a65af (__argz_create, argz_create): Omit const keyword from declaration of ARGV. 1996-05-10 13:43:03 +00:00
Roland McGrath f55814ff6c Regenerated: autoconf sysdeps/unix/configure.in 1996-05-09 23:13:21 +00:00
Roland McGrath c28fb3c893 Cleanups in sunrpc code from NIIBE Yutaka <gniibe@mri.co.jp>.
* sunrpc/clnt_tcp.c (clnttcp_create): Don't close *SOCKP if it's -1.
	* sunrpc/clnt_simp.c (callrpc): Don't close CRP->socket if it's
	RPC_ANYSOCK.
	* sunrpc/pmap_clnt.c (pmap_set): Don't close SOCKET, since
	CLNT_DESTROY already has.
	(pmap_unset): Likewise.
	* sunrpc/pm_getmaps.c (pmap_getmaps): Likewise.
	* sunrpc/pm_getport.c (pmap_getport): Likewise.
	* sunrpc/pmap_rmt.c (pmap_rmtcall): Likewise.
	* sunrpc/portmap.c (callit): Likewise.
1996-05-09 21:50:42 +00:00
Roland McGrath 05d4c98219 * Makerules (versioned): Strip whitespace.
* Rules (static-only-routines rule): Remove spurious space in dep.

	* misc/getusershell.c: Undo changes of 7 May 96 (rev 1.6).
	Cast string constants to char *.

	* posix/glob/SMakefile, posix/glob/SCOPTIONS, posix/glob/Makefile.ami:
	New files, AmigaDOS support from Aaron Digulla.
	* posix/Makefile (glob.tar): Add AmigaDOS support files.
1996-05-09 19:30:57 +00:00
Roland McGrath 3e2632b62d Regenerated
Tue Apr  2 21:27:01 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* posix/glob.c (glob_pattern_p): Avoid scanning past eos if
	the pattern ends with a backslash and quoting is enabled.
	* posix/fnmatch.c (fnmatch): Likewise; return FNM_NOMATCH for such
 	patterns.
1996-05-09 18:06:34 +00:00
Roland McGrath 8942a07afc * sysdeps/unix/sysv/linux/net/if.h: New file.
* sysdeps/unix/sysv/linux/Dist: Add it.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir)=socket] (headers): Add
	net/if.h.

	* Makeconfig (link-libc): Add libc.a after libc.so in link.

	* Rules (static-only-routines rule): Use empty.o instead of dummy.o.
	(empty.o): New target.
	(generated): Add empty.c, empty.o.
1996-05-09 16:50:03 +00:00
Roland McGrath 5570726557 * resolv: Code updated from BIND-4.9.3P2C3. 1996-05-09 15:59:18 +00:00
Roland McGrath 782e865067 Thu May 9 09:17:46 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Rules (static-only-routines rule): Use dummy.o, not dummy.so.
1996-05-09 13:18:18 +00:00
Roland McGrath 03d0a7e2aa * extract-dynsym: New file.
* Makefile (distribute): Add it.
1996-05-09 00:53:12 +00:00
Roland McGrath 7c713e287e Wed May 8 20:04:29 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Rules (subdir_install): Depend on $(common-objpfx)sor-$(subdir).
	[! libc.so-version]: Clear static-only-routines.
	($(common-objpfx)sor-$(subdir)): New target.
	[static-only-routines]: New static pattern rule for these .so's.
	* Makerules [libc.so-version] ($(slibdir)/libc.so): Target removed.
	[libc.so-version] ($(libdir)/libc.so, $(common-objpfx)libc-syms.so):
	New targets replace it.
	(install) [libc.so-version]: Depend on $(libdir)/libc.so instead of
	$(slibdir)/libc.so.
	* io/Makefile (static-only-routines): New variable.
	* configure.in: Check for tools objdump and objcopy, and for awk.
	* config.make.in (OBJDUMP, OBJCOPY, AWK): New variables.

Thu May  9 01:24:00 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/programs/config.h: Remove definition of wint_t.

	* locale/programs/ld-collate.c: Include <wchar.h> instead of
	<wcstr.h>.

	* manual/time.texi: Add some more description for %U and %W
	format of strftime.  Describe new format %V of strftime.

	* resolv/gethnamaddr.c: Prevent warning by preventing variable
	definition.
	* stdio-common/_itoa.c: Ditto.

Tue May  7 23:43:07 1996  Ulrich Drepper  <drepper@cygnus.com>

	* libio/clearerr.c, libio/feof.c, libio/ferror.c, libio/fgetc.c,
	libio/fileno.c, libio/fputc.c, libio/freopen.c, libio/fseek.c,
	libio/genops.c, libio/getc.c, libio/getchar.c, libio/iofclose.c,
	libio/iofflush.c, libio/iofgetpos.c, libio/iofgets.c,
	libio/iofputs.c, libio/iofread.c, libio/iofsetpos.c,
	libio/ioftell.c, libio/iofwrite.c, libio/iogetdelim.c,
	libio/iogets.c, libio/ioputs.c, libio/iosetbuffer.c,
	libio/iosetvbuf.c, libio/ioungetc.c, libio/iovsprintf.c,
	libio/libio.h, libio/putc.c, libio/putchar.c, libio/rewind.c,
	libio/stdio.h, stdio-common/printf_fp.c, stdio-common/vfprintf.c,
	stdio-common/vfscanf.c: Prepare for reentrent libio.

	* libio/clearerr_u.c, libio/feof_u.c, libio/ferror_u.c,
	libio/fputc_u.c, libio/getc_u.c, libio/getchar_u.c,
	libio/iofflush_u.c, libio/putc_u.c, libio/putchar_u.c: New files.
	Used in reentrent libio.

	* misc/getusershell.c: Prevent warnings.
1996-05-09 00:37:21 +00:00
Roland McGrath f0523145cc * Makerules (install-lib.so rules): Undouble $s in target and dep
parts of o-iterator-doit defns.
	(unversioned libraries install rule): Fix pattern.

	* mach/Makefile (mach-src-headers): Use $(base-machine) instead of
	$(config-machine).
	($(includedir)/machine): Likewise.

	* config.make.in (base-machine): New variable.
	* configure.in (machine): Move case stmt to set $machine out of sysdep
	dirs AC_CACHE_CHECK.
	(base_machine): New variable, set in that switch and AC_SUBST'd.

	* Makerules (stub-$(subdir)): Use file name in directory as output,
	since cmd is cd'd.
1996-05-08 22:40:39 +00:00
Roland McGrath c17097f152 Wed May 8 12:08:35 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* configure.in (MSGFMT): Use : if none found.

	* po/Makefile: Include ../Rules instead of ../Makerules.
1996-05-08 16:18:27 +00:00
Roland McGrath ce4d8b661a Tue May 7 23:18:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* po/Makefile: New file.
	* Makefile (subdirs): Add po.

	* configure.in: Check for msgfmt.
	* config.make.in (MSGFMT): New variable.

Sun May  5 23:49:10 1996  Ulrich Drepper  <drepper@cygnus.com>

	* misc/Makefile (routines): Add swapoff.

	* sysdeps/unix/sysv/linux/Dist: Add sys/quota.h.

	* sysdeps/unix/sysv/linux/sys/quota.h: New file.  Wrapper around
	kernel header file.
1996-05-08 03:31:04 +00:00
Roland McGrath 0e3426bbcf Tue May 7 19:00:01 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* string/argz-extract.c: Remove const from decl.
	* string/argz.h: Here too.

	* Makeconfig (version.mk): Fix regexp in sed cmd.
	Depend on $(..)Makeconfig.

	* GMP code updated from gmp-2.0 release.
	* stdlib/Makefile (mpn-routines): Removed add_1, added inlines.
	* sysdeps/generic/add_1.c: File removed.
	* stdlib/strtod.c: mp_limb is now mp_limb_t.
	* stdlib/fpioconst.c, stdlib/fpioconst.h: Likewise.
	* stdio-common/_itoa.c: Likewise.
	* stdio-common/printf_fp.c: Likewise.
	Don't include ansidecl.h.

	* sysdeps/mach/hurd/getcwd.c: Use io_identity instead of io_stat.

	* shlib-versions: New file.
	* Makerules (soversions.mk): New target, include file generated from
	shlib-versions.  Moved shared library rules before installation rules.
	Rewrote shared library installation rules for versioned libraries.
	* math/Makefile (libm.so-version): Variable removed.

	* sysdeps/mach/hurd/i386/exc2signal.c: Use struct hurd_signal_detail.

	* hurd/report-wait.c (_S_msg_describe_ports): New function.

	* configure.in: Add AC_PROG_LN_S check.
	* config.make.in (LN_S): New variable.

Sun May  5 03:10:44 1996  Ulrich Drepper  <drepper@cygnus.com>

	* misc/efgcvt_r.c (ecvt_r): Work aroung gcc bug.  gcc does
	not know about weak aliases now and optimizes necessary `if'
	statement away.

	* posix/unistd.h: Add swapoff prototype.

	* sysdeps/generic/confname.h: Add even more POSIX.4 symbols.

	* sysdeps/posix/fpathconf.c (__fpathconf): Get information
	for _PC_PATH_MAX from fstatfs function if available.

	* sysdeps/posix/sysconf.c: Add code to handle _SC_AIO_LISTIO_MAX,
	_SC_AIO_MAX, _SC_AIO_PRIO_DELTA_MAX, _SC_DELAYTIMER_MAX,
	_SC_MQ_OPEN_MAX, _SC_MQ_PRIO_MAX, _SC_RTSIG_MAX,
	_SC_SEM_NSEMS_MAX, _SC_SEM_VALUE_MAX, _SC_SIGQUEUE_MAX, and
	_SC_TIMER_MAX.
	* sysdeps/unix/sysv/sysv4/sysconf.c: Ditto.

	* sysdeps/stub/swapoff.c: New file.  Stub version for swapoff
	function.

	* sysdeps/unix/syscalls.list:  Add swapoff.

	* sysdeps/unix/sysv/linux/Dist: Add sys/acct.h.

	* sysdeps/unix/sysv/linux/Makefile [$(subdir) == misc]
	(sysdep_routines): Add mount, umount, llseek, setfsgid, setfsuid,
	sysinfo, and uselib.
	(headers): Add sys/sysinfo.h.

	* sysdeps/unix/sysv/linux/gethostid.c: Prevent warning.

	* sysdeps/unix/sysv/linux/i386/Makefile [$(subdir) == misc]
	(sysdep_routines): Add ioperm, iopl, and vm86.
	(headers): Add sys/perm.h and sys/vm86.h.

	* sysdeps/unix/sysv/linux/i386/sys/perm.h: New file.  Contains
	prototypes for iopl and ioperm.

	* sysdeps/unix/sysv/linux/i386/sys/vm86.h:  New file.  Contains
	prototype for vm86.

	* sysdeps/unix/sysv/linux/i386/syscalls.list: New file.  Add
	vm86 system call.

	* sysdeps/unix/sysv/linux/sys/acct.h: New file.  Contains
	prototypes for acct function.

	* sysdeps/unix/sysv/linux/sys/socket.h: Provide real header
	file with prototypes.

	* sysdeps/unix/sysv/linux/sys/sysinfo.h: New file.  Contains
	prototype for sysinfo function.

	* sysdeps/unix/sysv/linux/syscalls.list: Add flock, ioperm, iopl,
	llseek, setfsgid, setfsuid, sysinfo, and uselib.

	* sysdeps/unix/sysv/linux/sysconf.c: Instead of duplicating
	posix/sysconf.c now only handle cases different to that
	implementation.

Tue May  7 15:08:19 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* stdio/linewrap.c (__line_wrap_output): Renamed from lwoutput
	(all references changed).  Now exported.

	* stdio/linewrap.c (struct data): Type deleted (moved to linewrap.h).
	(wrap_stream, unwrap_stream, lwclose, lwfileno, lwoutput,
	line_wrap_stream, line_unwrap_stream): Use struct line_wrap_data
	instead of struct data.
	(lwoutput, line_wrap_stream, line_unwrap_stream): Rename various
	occurences of `wrap' and `wrapmargin' to `wmargin'.
	(line_wrapped, line_wrap_lmargin, line_wrap_set_lmargin,
	line_wrap_rmargin, line_wrap_set_rmargin, line_wrap_wmargin,
	line_wrap_set_wmargin, line_wrap_point): New functions.
	* stdio/linewrap.h: New file.
	* stdio/Makefile (headers): Add linewrap.h.

Tue May  7 14:19:12 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/i386/Makefile: File removed.

	* stdio/stdio.h: Remove line_wrap_stream, line_unwap_stream decls.

	* sysdeps/unix/sysv/linux/schedbits.h: New file.

Tue May  7 13:47:02 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* stdio/linewrap.c (struct data): Make margin fields not-pointers.
	(lwoutput): Adjust uses acordingly.

	* sysdeps/mach/hurd/fdatasync.c: New file.
	* sysdeps/mach/hurd/fsync.c: Pass new flag to file_sync.

	* sysdeps/mach/hurd/xmknod.c: Pass new flag to dir_link.
	* sysdeps/mach/hurd/symlink.c: Likewise.
	* sysdeps/mach/hurd/link.c: Likewise.
	* sysdeps/mach/hurd/bind.c: Likewise.
	* hurd/hurdsig.c (write_corefile): Likewise.

	* hurd/hurdsig.c (write_corefile): Pass cttyid port to crash server.

	* sysdeps/mach/hurd/fpathconf.c: RPC takes int pointer, not long int.

	* sysdeps/mach/hurd/_exit.c (_hurd_exit): Pass sigcode arg to
	proc_mark_exit.
	* sysdeps/mach/hurd/dl-sysdep.c (_exit): Likewise.

	* sysdeps/mach/hurd/wait4.c: Pass sigcode arg to proc_wait.

	* sysdeps/mach/hurd/rename.c: Pass new flag to dir_rename.

	* hurd/hurdfault.c (_hurdsig_fault_catch_exception_raise): Use struct
	hurd_signal_detail.
	* hurd/catch-exc.c (_S_catch_exception_raise): Likewise.
	* hurd/hurd-raise.c (_hurd_raise_signal): Likewise.
	* sysdeps/mach/hurd/i386/trampoline.c (_hurd_setup_sighandler):
	Likewise.
	* sysdeps/mach/hurd/setitimer.c (restart_itimer): Likewise.

	* hurd/hurd/signal.h: Fix _hurd_exception2signal prototype.

	* hurd/hurdsig.c (write_corefile): Take const struct
	hurd_signal_detail * arg.  Pass all details to crash_dump_task.
	(_hurd_internal_post_signal): Pass DETAIL to write_corefile.
	(_hurd_internal_post_signal: suspend): Pass code and error to
	proc_mark_stop.

	* hurd/hurdprio.c (_hurd_priority_which_map): Pass flags arg to
	proc_getprocinfo by reference.
1996-05-08 02:07:47 +00:00
Roland McGrath b928942eaa Updated from /src/gmp-2.0 1996-05-07 21:04:52 +00:00
Miles Bader fc38dc5be9 (headers): Add linewrap.h. 1996-05-07 19:27:44 +00:00
Roland McGrath ad41463d4e Regenerated: autoconf configure.in 1996-05-07 19:19:14 +00:00
Roland McGrath 93a470c71a Tue May 7 10:51:52 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* wcsmbs/wcwidth.c, wcsmbs/wcswidth.c: Fixed typos.

	* sysdeps/unix/sysv/linux/sys/mman.h: Fixed typo.

	* sysdeps/stub/sched_getp.c: Add missing #include <sys/types.h>.
	* sysdeps/stub/sched_sets.c: Likewise.
	* sysdeps/stub/sched_setp.c: Likewise.
	* sysdeps/stub/sched_rr_gi.c: Likewise.
	* sysdeps/stub/sched_gets.c: Likewise.

	* hurd/hurdsig.c: Use struct hurd_signal_detail.
	* hurd/hurd/fd.h (_hurd_fd_error): Likewise.
	* sysdeps/mach/hurd/sysd-stdio.c (fd_fail): Likewise.
1996-05-07 14:57:38 +00:00
Roland McGrath 4ddc1f9dd6 Mon May 6 09:51:05 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdio/linewrap.c: New file.
	* stdio/Makefile (routines): Add linewrap.
	* stdio/stdio.h [__USE_GNU]: Declare line_wrap_stream,
	line_unwrap_stream.

Mon May  6 14:53:26 1996  Ulrich Drepper  <drepper@cygnus.com>

	* time/strftime.c (week): Add third parameter telling how
	many days must be in new year so that it is called week 1.
	(Following ISO 8601).
	Correct computation for %U and %V formats when day was first
	day of the week.
	(strftime): Implement %V format according to Spec1170.

	* hurd/hurd/sigpreempt.h (struct hurd_signal_preempter): Change
	prototype of `preempter' elt to use struct hurd_signal_detail.

	* hurd/hurd/signal.h (struct hurd_signal_detail): New type.
	(struct hurd_sigstate): Make `pending_data' member an array of that.
	Use the new type in several decls.
1996-05-07 14:49:30 +00:00
Roland McGrath 28ca945828 Mon May 6 09:51:05 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdio/linewrap.c: New file.
	* stdio/Makefile (routines): Add linewrap.
	* stdio/stdio.h [__USE_GNU]: Declare line_wrap_stream,
	line_unwrap_stream.
1996-05-07 14:49:12 +00:00
Thomas Bushnell, BSG cee8df033b *** empty log message ***
Mon May  6 17:01:09 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* hurd/hurd/signal.h (_hurd_intr_rpc_mach_msg): New declaration.
1996-05-06 21:02:30 +00:00
Thomas Bushnell, BSG 3d46e1cd0a (_hurd_intr_rpc_mach_msg): New declaration. 1996-05-06 21:00:43 +00:00
Roland McGrath 339841f985 Mon May 6 14:53:26 1996 Ulrich Drepper <drepper@cygnus.com>
* time/strftime.c (week): Add third parameter telling how
	many days must be in new year so that it is called week 1.
	(Following ISO 8601).
	Correct computation for %U and %V formats when day was first
	day of the week.
	(strftime): Implement %V format according to Spec1170.
1996-05-06 14:31:45 +00:00
Roland McGrath db2286f6d9 * locale/setlocale.c (_nl_C_name): Variable removed.
* locale/C_name.c: New file.
	(_nl_C_name): Put it here instead.
	* locale/Makefile (aux): Add C_name.

	* sysdeps/mach/hurd/dl-sysdep.c (open): Don't pass io port in
	auth_user_authenticate rpc.
	(open): Avoid using strtol in digit conversion for "fd/N" magic.
	(_dl_sysdep_start): Likewise for memobj name in magic switches.

	* elf/Makefile (reloc-link): New variable.
	(dl-allobjs.so): New target, link together $(rtld-routines).
	(librtld.so): Depend on that instead of the rtld components.
	(generated): Add dl-allobjs.so.
1996-05-04 13:57:05 +00:00
Roland McGrath 8f0c527e13 Sat May 4 05:44:25 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* hurd/hurd-raise.c (_hurd_raise_signal): Pass sigcode in msg_sig_post
	rpc.

	* hurd/hurdmsg.c (_S_msg_set_environment): Use argz.h functions
	instead of _hurd_split_args.
	(_S_msg_*_exec_flags): Functions removed.
	(_S_msg_startup_dosync): Stub removed.

Sat May  4 02:11:55 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/mach/hurd/ptrace.c: Set _hurdsig_traced instead of
	EXEC_TRACED bit in _hurd_exec_flags.
	Pass sigcode arg in msg_sig_post_untraced rpc.

	* sysdeps/mach/hurd/access.c: Don't pass io port in
	auth_user_authenticate rpc.

	* posix/sched.h: Fix typos.

	* sysdeps/mach/hurd/fork.c: Use new critical section lock.
	Clear _hurdsig_traced instead of EXEC_TRACED.

	* sysdeps/stub/nanosleep.c (nanosleep): Fix typo.

	* wcsmbs/wcstol.c: Find strtol.c in ../stdlib.
	* wcsmbs/wcstof.c: Find strtod.c in ../stdlib.
	* wcsmbs/wcstod.c: Likewise.
	* wcsmbs/wcstold.c: Likewise.

	* wcsmbs/wcwidth.h: Find cname-lookup.h in ../wctype.

	* string/envz.c (envz_entry): Use const.
	(envz_get, envz_remove): Likewise.
	(envz_entry): Return char *, not const char *.

	* string/envz.h: Fix decl.

	* string/argz-create.c: Use const in prototype.
	* string/argz-next.c: Likewise.

	* sysdeps/mach/hurd/sigprocmask.c: Pass sigcode arg to msg_sig_post.
	* sysdeps/mach/hurd/i386/sigreturn.c: Likewise.
	* sysdeps/mach/hurd/sigsuspend.c: Likewise.
	* sysdeps/mach/hurd/kill.c: Likewise.

	* hurd/hurdexec.c (_hurd_exec): Use new critical section lock.
	* hurd/catch-exc.c (_S_catch_exception_raise): Likewise.
	* hurd/sigunwind.c (_hurdsig_longjmp_from_handler): Likewise.
	* hurd/thread-cancel.c (hurd_thread_cancel, hurd_check_cancel):
	Likewise.
	* sysdeps/mach/hurd/jmp-unwind.c (_longjmp_unwind): Likewise.
	* sysdeps/mach/hurd/sigaction.c: Likewise.

	* sysdeps/mach/hurd/errnos.awk: Don't use ARGV in comment; it can
	change meaninglessly.

	* hurd/hurd/signal.h (struct hurd_sigstate): Replace critical section
 	flag with a spin lock.
	(_hurd_critical_section_lock): Use spin_try_lock on that to see if we
 	get it.  No need to take SS->lock at all.
	(_hurd_critical_section_unlock): Unlock SS->critical_section_lock
	instead of clearing the old flag member.
	* hurd/hurdsig.c (_hurd_internal_post_signal): Use spin_lock_locked to
	test the critical section state.

	* hurd/hurdinit.c (_hurd_init): Set _hurdsig_traced from the intarray.

	* hurd/hurdkill.c (_hurd_sig_post): Pass 0 sigcode in msg_sig_post.

	* hurd/hurdsig.c (_hurd_internal_post_signal): Test _hurdsig_traced
 	instead of testing (_hurd_exec_flags & EXEC_TRACED).
	(_S_msg_sig_post): Take sigcode arg and pass it through.
	(_S_msg_sig_post_untraced): Likewise.
	(reauth_proc): Don't pass proc port in auth_user_authenticate.

	* hurd/setauth.c (_hurd_setauth): Don't pass object ports in
	auth_user_authenticate RPCs, just the one-off rendezvous port.
	* hurd/dtable.c (reauth_dtable): Likewise.
	* hurd/hurdlookup.c (__hurd_file_name_lookup_retry): Likewise.

	* hurd/hurdexec.c (_hurd_exec): Pass 0 flags to file_exec.
	Pass sigcode arg to msg_sig_post.

	* string/argz.h (argz_create): Use const in prototype.

	* hurd/hurdinit.c (_hurd_proc_init): Test _hurdsig_traced instead of
	testing (_hurd_exec_flags & EXEC_TRACED).
	Pass sigcode arg to msg_sig_post.

	* hurd/hurd.h: Declare _hurdsig_traced.

	* string/argz.h (__argz_next): Cast ENTRY before returning it.

	* hurd/hurd/signal.h (_hurd_critical_section_unlock): Pass sigcode arg
	to msg_sig_post.

	* hurd/path-lookup.c: New file.
	* hurd/Makefile (routines): Add path-lookup.
	* hurd/hurd/lookup.h: Declare file_name_path_scan,
	hurd_file_name_path_lookup.
	* hurd/hurd.h: Declare file_name_path_lookup.

	* sysdeps/mach/hurd/select.c: The io_select rpc no longer has a TAG_ID
	argument.  Instead, use a separate reply port for each RPC and put them
	all in a port set to wait for slow replies.
1996-05-04 09:46:57 +00:00
Roland McGrath 7a12c6bba7 Fri May 3 13:32:08 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* intl/Makefile (CPPFLAGS): Change $(nlsdir) to $(i18ndir) in
	LOCALE_ALIAS_PATH.

Fri May  3 03:14:02 1996  Ulrich Drepper  <drepper@cygnus.com>

	* intl/Makefile (routines): Add l10nflist and explodename.
	(distribute): Add loadinfo.h and locale.alias.
	(install-others): New variable to install locale.alias.

	* intl/dcgettext.c, intl/finddomain.c, intl/gettextP.h,
	intl/loadmsgcat.c: Adapt for upcoming gettext-0.10.13.  Some code
	is now shared with the locale implementation.

	* intl/explodename.c, intl/l10nflist.c, intl/loadinfo.h: New file.
        Extracted from finddomain.c.  This is also used in the locale
        implementation.

	* intl/locale.alias: New file.  Locale alias database compatible
        with X Window System's locale alias file.  Can now be used in
        locale and gettext code.

	* libio/stdio.h: Add prototypes for asprint and vasprintf.

	* locale/C-collate.c, locale/C-ctype.c, locale/C-messages.c,
	locale/C-monetary.c, locale/C-numeric.c, locale/C-time.c: Add new
	field in structure with name of locale ("C" in this case).

	* locale/Makefile (routines): Add findlocale.

	* locale/findlocale.c: New file.  Instead of trying to load the
        directly described file we now try to be much smarter when this
        fails.  Use the same code as gettext does.

	* locale/loadlocale.c, locale/setlocale.c: Rewrite to know about
        new loading scheme.

	* locale/localeinfo.h: Adapt prototypes and declarations for new
	setlocale implementation.  Remove definition of u32_t type.  We
	now use u_int32_t from <sys/types.h>.

	* locale/programs/charset.h (ILLEGAL_CHAR_VALUE): Provide type
        with constant.

	* locale/programs/config.h, locale/lc-collate.c,
        locale/localeinfo.h, locale/programs/ld-collate.c,
        locale/programs/ld-ctype.c, locale/programs/ld-messages.c,
        locale/programs/ld-monetary.c, locale/programs/ld-numeric.c,
        locale/programs/ld-time.c, locale/weight.h, string/strcoll.c:
        Change to use u_int32_t and u_int16_t.

	* locale/programs/localedef.c (construct_output_path): Change name
        of output locale to contain normalized form of the character set
        portion.

	* string/Makefile (routines): Add agrz-ctsep and argz-next.
	(tests): Add tst-strlen.

	* string/argz-ctsep.c: New file.  Implement reverse operation
	from argz-stringify.

	* string/argz-next.c: Non-inline version of function from argz.h.

	* string/argz.h, string/envz.h: Make usable as global header file.

	* string/envz.c: Fix declarations to use size_t where prototypes
	say so.

	* string/tst-strlen.c: New file.  Another test for critical
        situation in strlen implementations.

	* sysdeps/i386/i586/strlen.S: Fix bug with highest byte in word
        being zero.

	* wctype/test_wctype.c: Fix controlling comparison after change to
        32 bit character class array.

Fri May  3 12:53:12 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/sys/socket.h: Remove spurious doubled line.

Thu May  2 22:50:52 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/getpriority.c: New file.
	* sysdeps/unix/sysv/linux/syscalls.list: Add s_getpriority.

Thu May  2 22:41:31 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/m68k/fpu_control.h (_FPU_DEFAULT):
	Disable all exceptions.

Thu May  2 22:33:14 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/e_acos.c, sysdeps/m68k/fpu/e_acosf.c,
	sysdeps/m68k/fpu/e_fmod.c, sysdeps/m68k/fpu/e_fmodf.c,
	sysdeps/m68k/fpu/isinfl.c, sysdeps/m68k/fpu/isnanl.c,
	sysdeps/m68k/fpu/s_atan.c, sysdeps/m68k/fpu/s_atanf.c,
	sysdeps/m68k/fpu/s_frexp.c, sysdeps/m68k/fpu/s_frexpf.c,
	sysdeps/m68k/fpu/s_ilogb.c, sysdeps/m68k/fpu/s_ilogbf.c,
	sysdeps/m68k/fpu/s_isinf.c, sysdeps/m68k/fpu/s_isinff.c,
	sysdeps/m68k/fpu/s_ldexp.c, sysdeps/m68k/fpu/s_ldexpf.c,
	sysdeps/m68k/fpu/s_modf.c, sysdeps/m68k/fpu/s_modff.c: Don't
	define __NO_MATH_INLINES, which is already defined on command
	line.

Thu May  2 22:18:28 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/libm-ieee754/e_j0f.c (__ieee754_j0f, __ieee754_y0f):
	Replace 0x80000000 by 0x48000000.
	* sysdeps/libm-ieee754/e_j1f.c (__ieee754_j1f): Likewise.

Thu May  2 21:30:33 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sunrpc/svc_simple.c: Make global variable pl local to
	registerrpc.

Thu May  2 00:24:04 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* time/Makefile (tz-cflags): New variable.
	(CFLAGS-tzfile.c): New variable.
	(CFLAGS-zic.c): Add $(tz-cflags).
	(tz-cc): Remove variable.
	($(objpfx)tzfile.o, $(objpfx)zic.o): Remove targets.

	* sysdeps/mach/hurd/getcwd.c: Jump out of both loops when we find a
	name, instead of checking for reaching end of buffer, which happens
	when the match is the last entry in the buffer.
1996-05-03 17:44:31 +00:00
Roland McGrath 9e72046871 Thu May 2 00:24:04 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* time/Makefile (tz-cflags): New variable.
	(CFLAGS-tzfile.c): New variable.
	(CFLAGS-zic.c): Add $(tz-cflags).
	(tz-cc): Remove variable.
	($(objpfx)tzfile.o, $(objpfx)zic.o): Remove targets.
1996-05-03 16:46:40 +00:00
Noah Friedman 8962ae8d6b Don't report an error if mkdir fails because a directory was created by another process. 1996-05-03 07:37:52 +00:00
Roland McGrath f5936b69da Wed May 1 09:10:04 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/getcwd.c: Jump out of both loops when we find a
	name, instead of checking for reaching end of buffer, which happens
	when the match is the last entry in the buffer.
1996-05-02 00:26:56 +00:00
Roland McGrath 75cd5204dd Wed May 1 09:10:04 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/strftime.c: Use canonical autoconf nugget for time.h+sys/time.h
	include.

Mon Apr 29 02:48:26 1996  Ulrich Drepper  <drepper@cygnus.com>

	* ctype/ctype-info.c: (__ctype_width): New variable.
	(__ctype_names): Initialize correctly without offset.

	* locale/C-collate.c, locale/C-ctype.c,
	locale/C-messages.c, locale/C-monetary.c,
	locale/C-numeric.c, locale/C-time.c: Change copyright.

	* locale/C-ctype.c (_nl_C_LC_CTYPE_class32): Correct
	endianess for initialization value.

	* locale/lc-ctype.c (current): Add parameter for offset.
	(__ctype32_b, __ctype_width): Add initialization for these
	variables.

	* locale/programs/charmap.c: Finish support for WIDTH information.
	(new_width): New function.

	* locale/programs/charset.h (width_rule): new data structure.
	(charset_t): Add elements for width information.

	* locale/programs/ld-ctype.c (locale_ctype_t): Add element
	for width information.
	(allocate_arrays): Add new argument for charset.
	(ctype_finish): Make sure all characters named in charset
	width table are known to name table.
	(ctype_output): Correct handling of class and map name
	information and write out width information.
	(find_idx): Prepare for being called with NULL pointer as
	TABLE argument.  This means only allocate name entry.
	(allocate_arrays): Correct handling of array element -1.
	Because EOF == -1 the value of element 127 must *not* be
	mirrored here.
	Fill width information from charset tables.

	* locale/programs/localedef.c (main): Correct loop over all
	categories after change of order from Thu Mar 28 14:22:51 1996.
	Add new charset argument to call of `write_all_categories'.

	* locale/programs/locales.h (ctype_finish, ctype_output): New
	charset argument.

	* locale/programs/locfile.c (write_all_categories): Call
	`ctype_output' with additional argument charset.

	* posix/getconf.c (vars): Add _POSIX_SYNC_IO, _POSIX_ASYNC_IO,
	and _POSIX_PRIO_IO definitions.

	* posix/posix2_lim.h: Add definition of _POSIX2_CHARCLASS_NAME_MAX
	and CHARCLASS_NAME_MAX.

	* posix/unistd.h: Document _POSIX_SYNC_IO, _POSIX_ASYNC_IO,
	and _POSIX_PRIO_IO.

	* stdlib/grouping.h: Prepare for use in wide string functions.

	* stdlib/stdlib.h: Correct prototypes for __strto*_internal
	functions.

	* stdlib/strtod.c: Extend for use as `wcsto{f,d,ld}'.

	* stdlib/strtol.c: Extend for use as `wcsto{l,ul,q,uq}'.

	* string/strcoll.c: Extend for use as `wcscoll'.

	* string/strxfrm.c: Extend for use as `wcsxfrm'.

	* sysdeps/generic/confname.h: Add definition of _PC_SYNC_IO,
	_PC_ASYNC_IO, _PC_PRIO_IO and _SC_CHARCLASS_NAME_MAX.

	* sysdeps/generic/stpncpy.c: Correct return value.

	* sysdeps/posix/fpathconf.c: Add handling of _PC_SYNC_IO,
	_PC_ASYNC_IO, and _PC_PRIO_IO.

	* sysdeps/posix/sysconf.c: Add handling of _SC_REALTIME_SIGNALS,
	_SC_PRIORITY_SCHEDULING, _SC_TIMERS, _SC_ASYNCHRONOUS_IO,
	_SC_PRIORITIZED_IO, _SC_SYNCHRONIZED_IO, _SC_FSYNC,
	_SC_MAPPED_FILES, _SC_MEMLOCK, _SC_MEMLOCK_RANGE,
	_SC_MEMORY_PROTECTION, _SC_MESSAGE_PASSING, _SC_SEMAPHORES,
	_SC_SHARED_MEMORY_OBJECTS, and _SC_CHARCLASS_NAME_MAX.
	* sysdeps/stub/sysconf.c: Ditto.
	* sysdeps/unix/sysv/sysv4/sysconf.c: Ditto.

	* sysdeps/unix/sysv/linux/Dist: Add sys/sysctl.h.

	* sysdeps/unix/sysv/linux/Makefile [subdir == misc]
	(sysdep_routines): Add s_sysctl and sysctl.

	* sysdeps/unix/sysv/linux/sys/mman.h: Add declaration of mremap.

	* sysdeps/unix/sysv/linux/sys/socket.h: New file.  Wrapper
	around kernel header.

	* sysdeps/unix/sysv/linux/sys/sysctl.h: New file.  Define
	interface to `sysctl' function.

	* sysdeps/unix/sysv/linux/syscalls.list: Add mremap and _sysctl.

	* sysdeps/unix/sysv/linux/sysconf.c: Add handling of
	_SC_CHARCLASS_NAME_MAX.

	* sysdeps/unix/sysv/linux/sysctl.c: new file.  Implement caller
	of _sysctl system call.

	* sysvipc/Makefile (routines): Add ftok.

	* sysvipc/ftok.c: use variable `proj_id' not `id'.  Patch by
	David Mosberger-Tang.

	* wcsmbs/Makefile (routines): Add wcpcpy, wcpncpy, wcstol,
        wcstoul, wcstoq, wcstouq, wcstod, wcstold, wcstof, wcscoll,
        wcsxfrm, wcwidth, and wcswidth.

	* wcsmbs/wchar.h: Add declarations for wcpcpy, wcpncpy, wcstol,
        wcstoul, wcstoq, wcstouq, wcstod, wcstold, wcstof, wcscoll,
        wcsxfrm, wcwidth, and wcswidth.
	Declare internal interfaces for wcsto* functions.
	[OPTIMIZE]: Define inline functions for wcsto* functions to
	call internal interface functions.

	* wcsmbs/wcpcpy.c, wcsmbs/wcpncpy.c: New files.  Implement non-
	standard function equivalent to stpcpy/stpncpy.

	* wcsmbs/wcscoll.c: Implement `wcscoll' function by using
        `strcoll' implementation.

	* wcsmbs/wcscpy.c, wcsmbs/wcsncpy.c: Use wint_t instead of
        wchar_t.

	* wcsmbs/wcstod.c: Implement `wcstod' function by using `strtod'
        implementation.
	* wcsmbs/wcstof.c: Same for `wcstof'.
	* wcsmbs/wcstold.c: Same for `strtold'.

	* wcsmbs/wcstol.c: Implement `wcstol' function by using `strtol'
        implementation.
	* wcsmbs/wcstoq.c: Same for `wcstoq'.
	* wcsmbs/wcstoul.c: Same for `wcstoul'.
	* wcsmbs/wcstouq.c: Same for `wcstouq'.

	* wcsmbs/wcswidth.c: Implement `wcswidth' function from X/Open
        CAE.
	* wcsmbs/wcwidth.c: Ditto for `wcwidth'.
	* wcsmbs/wcwidth.h: Common function for definitions of above two
	functions.

	* wcsmbs/wcsxfrm.c: Implement `wcsxfrm function by using
        `strxfrm implementation.

	* wctype/wctype.c: Remove case for `wctype_t' being 16 bit type.

	* wctype/wctype.h (wint_t): Protect against multiple definition.
	(wctype_t): Always define as `unsigned long int'.

	* wctype.h: New file.  Wrapper around wctype/wctype.h.

	* hurd/hurdstartup.c (_hurd_split_args): Function removed.
	(_hurd_startup): Use argz functions.

	* hurd/hurdexec.c: Use argz functions.
1996-05-01 13:55:18 +00:00
Roland McGrath 5bd4495594 Tue Apr 30 17:30:46 1996 Miles Bader <miles@gnu.ai.mit.edu>
* hurd/hurdsig.c (_hurdsig_abort_rpcs): Add timeout argument to
	interrupt_operation call.
	(_hurdsig_interrupt_timeout): New variable.

	* hurd/report-wait.c (describe_number): Correctly allocate space
	in DESCRIPTION for the digits in I.
1996-05-01 09:03:01 +00:00
Miles Bader d3dc731b47 (describe_number): Correctly allocate space in DESCRIPTION for the digits in I. 1996-05-01 01:01:48 +00:00
Miles Bader 06f82985cb Regenerated from ../sysdeps/mach/hurd/errnos.awk ../manual/errno.texi ../../mach/mach/message.h ../../mach/mach/kern_return.h ../../mach/mach/mig_errors.h ../../mach/device/device_types.h 1996-04-30 21:33:05 +00:00
Roland McGrath c508104668 Regenerated from ../sysdeps/mach/hurd/errnos.awk ../manual/errno.texi /gd4/gnu/mach/mach/message.h /gd4/gnu/mach/mach/kern_return.h /gd4/gnu/mach/mach/mig_errors.h /gd4/gnu/mach/device/device_types.h 1996-04-29 06:49:03 +00:00
Roland McGrath 392d7920cd Mon Apr 29 00:11:59 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* errno.h [!__error_t_defined] (error_t): New type.
	* sysdeps/mach/hurd/errnos.awk: #define __error_t_defined after the
	typedef in errnos.h.

	* string/envz.c, string/envz.h: New files.
	* string/argz.h, string/argz-append.c, string/argz-count.c,
	string/argz-create.c, string/argz-delete.c, string/argz-extract.c,
	string/argz-insert.c, string/argz-stringify.c: New files.
	* string/Makefile (routines): Add envz, argz-*.
	(headers): Add argz.h, envz.h.
1996-04-29 05:21:53 +00:00
Roland McGrath 7b3547eb0f Sun Apr 28 14:14:35 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/i386/Makefile: New file.

Wed Apr 24 17:35:30  Ulrich Drepper  <drepper@cygnus.com>

	* inet/netinet/in.h, socket/sys/socket.h: Move to
	sysdeps/generic/netinet/in.h, sysdeps/generic/sys/socket.h.
	* netinet/in.h, sys/socket.h: Remove file.

	* misc/Makefile (routines): Add fdatasync.

	* posix/Makefile (headers): Add sched.h.
	(routines): Add nanosleep, sched_setp, sched_getp, sched_sets,
	sched_gets, sched_yield, sched_primax, sched_primin, sched_rr_gi.

	* posix/getconf.c (vars): Add entries for _POSIX_REALTIME_SIGNALS,
	_POSIX_PRIORITY_SCHEDULING, _POSIX_TIMERS, _POSIX_ASYNCHRONOUS_IO,
	_POSIX_PRIORITIZED_IO, _POSIX_SYNCHRONIZED_IO, _POSIX_FSYNC,
	_POSIX_MAPPED_FILES, _POSIX_MEMLOCK, _POSIX_MEMLOCK_RANGE,
	_POSIX_MEMORY_PROTECTION, _POSIX_MESSAGE_PASSING,
	_POSIX_SEMAPHORES, _POSIX_SHARED_MEMORY_OBJECTS.

	* posix/sched.h: New file.  Header for POSIX scheduling interface.

	* posix/unistd.h: Describe options from POSIX.4.
	Add declaration of fdatasync.

	* sysdeps/generic/confname.h: Add definition for
	 _SC_REALTIME_SIGNALS, _SC_PRIORITY_SCHEDULING, _SC_TIMERS,
	_SC_ASYNCHRONOUS_IO, _SC_PRIORITIZED_IO, _SC_SYNCHRONIZED_IO,
	_SC_FSYNC, _SC_MAPPED_FILES, _SC_MEMLOCK, _SC_MEMLOCK_RANGE,
	_SC_MEMORY_PROTECTION, _SC_MESSAGE_PASSING,
	_SC_SEMAPHORES, _SC_SHARED_MEMORY_OBJECTS.

	* sysdeps/generic/fdatasync.c: New file.  Default implementation
	simply uses fsync.

	* sysdeps/generic/netinit/in.h: Moved to here from inet/netinet/in.h.

	* sysdeps/generic/schedbits.h: New file.  System dependent
	defintion for POSIX.4 scheduling interface.

	* sysdeps/generic/sys/socket.h: Moved to here from socket/sys/socket.h.

	* sysdeps/stub/nanosleep.c, sysdeps/stub/sched_getp.c,
	sysdeps/stub/sched_gets.c, sysdeps/stub/sched_primax.c,
	sysdeps/stub/sched_primin.c, sysdeps/stub/sched_rr_gi.c,
	sysdeps/stub/sched_setp.c, sysdeps/stub/sched_sets.c,
	sysdeps/stub/sched_yield.c: New file:  Stub implementation
	for systems missing these POSIX.4 system calls.

	* sysdeps/unix/sysv/linux/gnu/types.h,
	sysdeps/unix/sysv/linux/ioctls.h: Use kernel header for
	data type definitions.

	* sysdeps/unix/sysv/linux/netinet/in.h: New file.  Linux
	specific version.

	* sysdeps/unix/sysv/linux/posix_opt.h: New file.  Define POSIX
	options applicable for Linux.

	* sysdeps/unix/sysv/linux/syscalls.list: Add definitions for
	fdatasync, nanosleep, sched_setparam, sched_getparam,
	sched_setscheduler, sched_getscheduler, sched_yield,
	sched_get_priority_max, sched_get_priority_min, and
	sched_rr_get_interval.

	* sysdeps/unix/sysv/linux/sysconf.c: Add handling of POSIX.4
	options.

	* sysdeps/unix/sysv/linux/termbits.h: Use kernel headers.

	* time/sys/time.h: Remove definition of `struct timespec'.

	* time/time.h (struct timespec): Move definition to here.

 	variable, LUCKY, to use instead of setting D to -1 (which fouls
1996-04-28 18:25:22 +00:00
Roland McGrath b1794a285f Thu Apr 25 15:49:57 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/getcwd.c (__getcwd): When we find a match in
	the scan for a name, avoid doing another readdir (which overwrites
	NENTRIES, and was resulting in a bogus ENOENT).

	* sysdeps/mach/hurd/fcntl.c (__fcntl): Add missing break after F_SETFL.
1996-04-26 06:03:18 +00:00
Roland McGrath b2c8be1fdf Fri Apr 26 01:55:07 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* malloc/mcheck.c (mabort): Use __libc_fatal only #ifdef _LIBC.

Wed Apr 24 00:22:42 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* stdio/internals.c (seek_to_target): Set errno if seek function
	returns the wrong offset.

	* wcsmbs/wcsrtombs.c [! EILSEQ] (EILSEQ): Define to EINVAL.
	* wcsmbs/wcrtomb.c: Likewise.

	* stdio-common/vfprintf.c: Include errno.h.
1996-04-26 05:57:35 +00:00
Roland McGrath 8555e89e37 Added trailing blank line. 1996-04-26 05:55:41 +00:00
Miles Bader 072d114510 (__getcwd): When we find a match in the scan for a name, avoid doing another readdir (which overwrites NENTRIES, and was resulting in a bogus ENOENT). 1996-04-25 21:37:46 +00:00
Miles Bader 8ec2f30995 (__fcntl): Add missing break after F_SETFL. 1996-04-25 20:21:20 +00:00
Roland McGrath 7f77e07b00 Wed Apr 24 00:22:42 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdio/internals.c (seek_to_target): Set errno if seek function
	returns the wrong offset.
1996-04-25 18:13:38 +00:00
Roland McGrath 66aeca9cfb Tue Apr 23 21:09:14 1996 Miles Bader <miles@gnu.ai.mit.edu>
* hurd/hurdsig.c (signal_allowed): For SIGIO/SIGURG, add a new
 	variable, LUCKY, to use instead of setting D to -1 (which fucks
 	things up).
1996-04-24 09:03:11 +00:00
Roland McGrath 80bcb41041 Wed Apr 24 00:22:42 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* wcsmbs/wcsrtombs.c [! EILSEQ] (EILSEQ): Define to EINVAL.
	* wcsmbs/wcrtomb.c: Likewise.
1996-04-24 05:28:34 +00:00
Miles Bader e0637da1c7 (signal_allowed): For SIGIO/SIGURG, add a new variable, LUCKY, to use instead of setting D to -1 (which fucks things up). 1996-04-24 03:28:51 +00:00
Roland McGrath 9a8c0d4f41 Tue Apr 23 15:56:56 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* config.h.in (HAVE_REGEX): New macro.

	* sysdeps/unix/syscalls.list: Add statfs, fstatfs.
	* io/Makefile (headers): Add sys/statfs.h, statfsbuf.h.
	(routines): Add statfs, fstatfs.
	* sysdeps/mach/hurd/statfs.c: New file.
	* sysdeps/mach/hurd/fstatfs.c: New file.
	* sysdeps/stub/fstatfs.c: New file.
	* sysdeps/stub/statfs.c: New file.
	* io/sys/statfs.h: New file.
	* sysdeps/generic/statfsbuf.h: New file.
	* sysdeps/unix/sysv/linux/statfsbuf.h: New file.

Tue Apr 23 00:06:47 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* malloc/Makefile (gmalloc-routines): Add valloc back here.
	(dist-routines): Remove it here.
	* malloc/valloc.c [_MALLOC_INTERNAL && GMALLOC_INHIBIT_VALLOC]
	(ELIDE_VALLOC): Define it.
	[! ELIDE_VALLOC]: Make whole file conditional on this.
	* malloc/malloc.h (valloc): Make decl conditional on
	[!GMALLOC_INHIBIT_VALLOC] instead of [!emacs].

Mon Apr 22 00:02:19 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* MakeTAGS: Include version.mk.
	(po/SYS_libc.pot): Add missing / in sed s cmd.
1996-04-24 00:58:47 +00:00
Roland McGrath b0d20a87b5 Sat Apr 20 18:13:00 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (no-whole-archive): Test $(have-no-whole-archive), not
	$(libc_cv_ld_no_whole_archive).

Sat Apr 20 17:07:17 1996  Ulrich Drepper  <drepper@cygnus.com>

	* assert/assert.h, ctype/ctype.h, dirent/dirent.h, errno.h,
	grp/grp.h, io/fcntl.h, io/sys/stat.h, io/utime.h, locale/locale.h,
	math/math.h, misc/nlist.h, misc/sgtty.h, misc/sys/file.h,
	misc/sys/ioctl.h, misc/sys/uio.h, posix/sys/times.h,
	posix/sys/types.h, posix/sys/utsname.h, posix/sys/wait.h,
	posix/tar.h, posix/wordexp.h, pwd/pwd.h, resource/sys/vlimit.h,
	resource/sys/vtimes.h, setjmp/setjmp.h, signal/signal.h,
	stdio-common/printf.h, stdlib/alloca.h, stdlib/stdlib.h,
	string/string.h, sysdeps/generic/sigaction.h,
	sysdeps/generic/sigset.h, sysdeps/generic/sys/ptrace.h,
	sysdeps/generic/sys/ptrace.h, sysdeps/unix/bsd/osf/sigaction.h,
	sysdeps/unix/sysv/linux/sys/ptrace.h,
	sysdeps/unix/sysv/minix/sigaction.h,
	sysdeps/unix/sysv/sco3.2.4/sigaction.h,
	sysdeps/unix/sysv/sysv4/sigaction.h,
	sysdeps/unix/sysv/sysv4/sigset.h, termios/termios.h,
	time/sys/time.h, time/time.h: Fix copyright comment.

	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): If uids and gids are
	not given in stack aux vector, fetch them with syscalls.
1996-04-21 00:27:19 +00:00
Roland McGrath a641835acd Fri Apr 19 00:49:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdlib/rpmatch.c (rpmatch: try): Take new arg NOMATCH, return value
 	for nonmatching nonerror (instead of !MATCH).
	(rpmatch): Use it, so we return -1 when NOEXPR doesn't match either.

	* resolv/getnetnamadr.c (getnetbyaddr): Use u_int32_t instead of
	unsigned long for variable NET2.

	* time/etcetera, time/europe, time/solar89: Updated from ADO's 96e.

Tue Apr  9 14:37:31 1996  Ulrich Drepper  <drepper@cygnus.com>

	* catgets/Makefile, catgets/catgets.c, catgets/catgetsinfo.h,
	catgets/config.h, catgets/gencat.c, catgets/nl_types.h,
	catgets/open_catalog.c: New files.  Implementation of XPG4
	compliant catgets() function and needed tools.
	* Makefile (subdirs): Add catgets.

Thu Apr 18 23:36:11 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* math/Makefile (CPPFLAGS): Append -D__NO_MATH_INLINES.

Wed Apr 10 20:48:43 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdio-common/vfprintf.c: Correct some typos.

	* sysdeps/libm-ieee754/w_gammaf.c, sysdeps/libm-ieee754/w_lgamma.c,
	sysdeps/libm-ieee754/w_lgammaf.c: Reference signgam instead of
	__signgam.

Thu Apr 18 21:07:27 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Makerules (no-whole-archive): New variable.
	(build-shlib): Use it.
	* elf/Makefile (libdl.so): Use it.
	* configure.in (libc_cv_ld_no_whole_archive): New check for
	--no-whole-archive.
	* config.make.in (have-no-whole-archive): New variable.

	* stdio-common/printf_fp.c: Increase fudge factor for BIGNUM_SIZE calc
	from 3 to 4.

	* Make-dist: Include version.mk.
	(version, release): Variables removed.
	* Makeconfig (version.mk): New target.

Fri Apr 19 01:42:18 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/Makefile (headers): Add langinfo.h.
	(CPPFLAGS): Remove -Iliblib.
1996-04-20 00:05:25 +00:00
Roland McGrath f24f4dc82d Mon Apr 15 16:49:04 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* malloc/memalign.c, malloc/malloc.h [__DJGPP__ == 1]: Elide memalign
	function and its declaration.
1996-04-16 01:18:23 +00:00
Per Bothner 147e600987 * config.guess: Combine two OSF1 rules. Also recognize field test versions. From mjr@zk3.dec.com. * config.guess (dgux): Use /usr/bin/uname rather than uname, because GNU uname does not support -p. From pmr@pajato.com. 1996-04-13 00:06:54 +00:00
Miles Bader e2a501ab7c *** empty log message ***
Wed Apr 10 14:13:45 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/sigunwind.c (_hurdsig_longjmp_from_handler): Store
 	MACH_PORT_DEAD in the thread reply-port variable before destroying
 	the signal handler's reply port, to avoid infinite recursion.
1996-04-10 18:36:39 +00:00
Miles Bader 574ce5e4e4 (_hurdsig_longjmp_from_handler): Store MACH_PORT_DEAD in the thread reply-port variable before destroying the signal handler's reply port, to avoid infinite recursion. 1996-04-10 18:36:02 +00:00
Roland McGrath b84095feb4 Mon Apr 8 18:27:17 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/gettimeofday.c (__gettimeofday): Don't fail if the
	user passes in TZ, just zero it (emacs passes in a dummy variable,
	and rms says the hurd should be the one to change).
1996-04-09 09:02:55 +00:00
Miles Bader a1a5fa67c6 (__gettimeofday): Don't fail if the user passes in TZ, just zero it (emacs passes in a dummy variable, and rms says the hurd should be the one to change). 1996-04-08 23:35:57 +00:00
Michael Meissner 2e6878f7b1 Add Solaris on PowerPC support 1996-04-08 20:19:10 +00:00
Roland McGrath 3125073e10 Sun Apr 7 10:37:30 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* sysdeps/mach/hurd/fork.c: Don't leak send rights to the child's proc
 	port in the parent.
Fri Apr  5 17:43:41 1996  Miles Bader  <miles@gnu.ai.mit.edu>
1996-04-07 17:44:31 +00:00
Roland McGrath d70576891e * sysdeps/mach/hurd/fork.c (__fork): Don't leak send-rights to the
child's proc port in the parent.
1996-04-06 10:03:22 +00:00
Miles Bader 786db2208e *** empty log message ***
Fri Apr  5 17:43:41 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/i386/sigreturn.c (__sigreturn): Store
	MACH_PORT_DEAD in the thread reply-port variable before destroying
	the signal handler's reply port to avoid infinite recursion.
	* sysdeps/mach/hurd/mig-reply.c (__mig_dealloc_reply_port): Only
	attempt to destroy PORT if it's a valid port name.
1996-04-06 01:51:07 +00:00
Miles Bader aa0e1b599c (__mig_dealloc_reply_port): Only attempt to destroy PORT if it's a valid port name. 1996-04-06 01:49:21 +00:00
Roland McGrath 2e516341fa Wed Apr 3 17:10:44 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* extra-lib.mk: Put libs in $(common-objpfx) instead of $(objpfx).
	* Makerules ($(install-lib) rules): Find libs with $(common-objpfx)
	instead of $(objpfx).
1996-04-04 01:18:10 +00:00
Roland McGrath 299a95b9f0 Tue Apr 2 21:27:01 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* posix/glob.c (glob_pattern_p): Avoid scanning past eos if
	the pattern ends with a backslash and quoting is enabled.
	* posix/fnmatch.c (fnmatch): Likewise; return FNM_NOMATCH for such
 	patterns.
1996-04-03 16:31:49 +00:00
Roland McGrath 30de3b18a5 Mon Apr 1 13:34:55 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* stdio-common/tst-printf.c (main): Add new test case.

	* sysdeps/generic/setenv.c (unsetenv): Use old-style definition.

Mon Apr  1 11:39:10  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* stdlib/strtod.c (STRTOD): Fix handling of American style FP
	numbers.

	* stdio-common/vfprintf.c (vfprintf): Don't increment format
	string pointer twice after seeing `*'.

Sun Mar 31 17:31:54 1996  Roland McGrath  <roland@whiz-bang.gnu.ai.mit.edu>

	* MakeTAGS (po/SYS_libc.pot): Prepend header processed from
 	po/header.pot.

Sun Mar 31 18:07:32 1996  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* locale/Makefile (others, install-bin): Compiling locale works
        again.
	(locale-modules): locale has no --dump option anymore.  Remove
	ctypedump.

	* locale/programs/config.h: Don't declare euidaccess.
	Use #include_next to get libc's config.h.

	* locale/programs/ctypedump.c: Not needed anymore.  Dump option
	of locale is removed.

	* locale/programs/locale.c: Adapt for new locale implementation.

	* stdio-common/_itoa.h (_itoa_word): Define as inline function.
	* stdio-common/_itoa.c (_itoa_lower_digits, _itoa_upper_digits):
	Don't declare static because used in _itoa_word inline function.

	* stdio-common/printf-parse.h: Prepare for use in wide-char
	stdio implementation.
	(find_spec): Take additional argument to work with mbrlen instead
	of mblen.
	(parse_one_spec): Ditto.

	* stdio-common/printf-prs.c: Prepare for use in wide-char
	stdio implementation.

	* stdio-common/printf.h: Mark change for wide-char handling.
	Changing it now would result in incompatibilities.

	* stdio-common/vfprintf.c: New and fast implementation.

	* wcsmbs/Makefile (routines): Remove pre-ISO C multibyte functions
	mbsadvance, mbscat, mbschr, mbscmp, mbscpy, mbsdup, mbslen,
	mbsncat, mbsncmp, mbsncpy, mbsrchr, mbstomb.
	Change wcswcs to wcsstr.
	Add wmemchr, wmemcmp, wmemcpy, wmemmove, wmemset, btowc, wctob,
	mbsinit, mbrlen, mbrtowc, wcrtomb, mbsrtowcs, wcsrtombs.

	* wcsmbs/btowc.c, wcsmbs/mbrlen.c, wcsmbs/mbrtowc.c,
        wcsmbs/mbsinit.c, wcsmbs/mbsrtowcs.c, wcsmbs/wchar.h,
        wcsmbs/wcrtomb.c, wcsmbs/wcsrtombs.c, wcsmbs/wcsstr.c,
        wcsmbs/wctob.c, wcsmbs/wmemchr.c, wcsmbs/wmemcmp.c,
        wcsmbs/wmemcpy.c, wcsmbs/wmemmove.c, wcsmbs/wmemset.c: New
        function according to ISO C amendment 1.
	* wchar.h: Wrapper around "wcsmbs/wchar.h".

	* wcsmbs/wcscat.c, wcsmbs/wcschr.c, wcsmbs/wcscmp.c,
        wcsmbs/wcscpy.c, wcsmbs/wcscspn.c, wcsmbs/wcsdup.c,
        wcsmbs/wcslen.c, wcsmbs/wcsncat.c, wcsmbs/wcsncmp.c,
        wcsmbs/wcsncpy.c, wcsmbs/wcspbrk.c, wcsmbs/wcsrchr.c,
        wcsmbs/wcsspn.c, wcsmbs/wcstok.c: Changed to conform with ISO C
        amendment 1.

	* wcsmbs/mbsadvance.c, wcsmbs/mbscat.c, wcsmbs/mbschr.c,
        wcsmbs/mbscmp.c, wcsmbs/mbscpy.c, wcsmbs/mbsdup.c,
        wcsmbs/mbslen.c, wcsmbs/mbsncat.c, wcsmbs/mbsncmp.c,
        wcsmbs/mbsncpy.c, wcsmbs/mbsrchr.c, wcsmbs/mbstomb.c,
        wcsmbs/mbstr.h, wcsmbs/wcstr.h, wcsmbs/wcswcs.c: Removed.
        Implement functions from early drafts, not part of final standard.

Sun Mar 31 16:50:41 1996  Roland McGrath  <roland@whiz-bang.gnu.ai.mit.edu>

	* setjmp/setjmp.h (jmp_buf): Change gratuitous struct tag name to
	__jmp_bug_tag so its C++ implicit typedef does not conflict with the
	__jmp_buf typedef.

	* Makerules (BUILD_CFLAGS) [! objdir]: Use $(..)config.h when
	compiling in the source directories.

Fri Mar 29 16:26:35 1996  Roland McGrath  <roland@whiz-bang.gnu.ai.mit.edu>

	* sysdeps/libm-ieee754/w_gamma.c: Use signgam instead of __signgam.
	* sysdeps/libm-ieee754/s_signgam.c: Undo last change.
1996-04-02 13:27:17 +00:00
Roland McGrath b80510574c Fri Mar 29 11:29:46 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/libm-ieee754/s_signgam.c (signgam): Renamed to __signgam,
	with weak alias signgam.
1996-03-29 21:23:58 +00:00
Roland McGrath 27e00f3f17 Thu Mar 28 18:32:34 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* Makeconfig (+cflags, +gcc-nowarn): Use gcc flags unconditionally.
1996-03-29 21:19:15 +00:00
Roland McGrath ac157523bd Thu Mar 28 18:32:34 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* Makeconfig (+cflags, +gcc-nowarn): Use gcc flags unconditionally.
1996-03-29 21:13:27 +00:00
Doug Evans 46a7c97679 (aux): Delete another duplicate entry. 1996-03-29 01:49:55 +00:00
Doug Evans 0daf278545 (aux): Delete duplicate entry. 1996-03-29 01:46:52 +00:00
Roland McGrath b7407d6362 wctype.h mention 1996-03-29 01:04:20 +00:00
Roland McGrath c475b8f594 * sunrpc/rpc_main.c (main): Call textdomain. 1996-03-28 21:00:28 +00:00
Roland McGrath 7a1c652d58 * MakeTAGS (XGETTEXTFLAGS-siglist.pot, XGETTEXTFLAGS-errlist.pot): Add
--no-location.
	(all-pot): Replace $(subdirs) files with $P/subdirs.pot.
	($P/subdirs.pot): New target.
	($P/SYS_libc.pot): Add -n switch.
1996-03-28 20:55:37 +00:00
Roland McGrath a141dd342d * locale/locale.h (LC_*): Values reordered to match Linux libc. 1996-03-28 19:34:47 +00:00
Roland McGrath 8c1442d02f Thu Mar 28 14:22:51 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/mach/hurd/kill.c: If proc_pid2task gives us MACH_PORT_NULL
	the process is a zombie; send no messages and return success.
1996-03-28 19:30:33 +00:00
Roland McGrath 43efc10333 Thu Mar 28 11:53:26 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* wctype/cname-lookup.h: Find localeinfo.h in ../locale.
	* wctype/wctype.c: Likewise.
	* wctype/wctrans.c: Likewise.
1996-03-28 17:19:40 +00:00
Roland McGrath ffcf96345f Thu Mar 28 03:00:43 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* locale/nl_langinfo.c (nl_langinfo): Use DATA->values instead of
	DATA->strings.

	* Makerules (BUILD_CFLAGS): Remove $(common-objpfx) from config.h.

	* configure.in (.weakext check): Fix asm code to use .weakext instead
	of .weak!  Fix bogus test calls.
	* configure: Regenerated.
1996-03-28 09:48:58 +00:00
Roland McGrath 0393dfd6c2 * locale/programs/xmalloc.c: Test _LIBC as well as STDC_HEADERS.
* locale/programs/ld-collate.c (collate_finish): Use error_at_line
	instead of error_with_loc.

	* locale/weight.h: Use u_int32_t instead of u32_t.
	* string/strxfrm.c: Likewise.

	* string/strxfrm.c: Find weight.h in ../locale; don't #include
	"localeinfo.h".
	* string/strcoll.c: Likewise.

	* locale/programs/simple-hash.c, locale/programs/simple-hash.h,
 	locale/programs/xmalloc.c, locale/programs/xstrdup.c: Helper functions
 	for locale related programs.
 	locale/programs/charmap.c, locale/programs/charset.c,
 	locale/programs/charset.h, locale/programs/config.h,
 	locale/programs/ctypedump.c, locale/programs/ld-collate.c,
 	locale/programs/ld-ctype.c, locale/programs/ld-messages.c,
 	locale/programs/ld-monetary.c, locale/programs/ld-numeric.c,
 	locale/programs/ld-time.c, locale/programs/linereader.c,
 	locale/programs/linereader.h, locale/programs/locale.c,
 	locale/programs/localedef.c, locale/programs/locales.h,
 	locale/programs/locfile-kw.gperf, locale/programs/locfile-kw.h,
 	locale/programs/locfile-token.h, locale/programs/locfile.c,
 	locale/programs/locfile.h, locale/programs/stringtrans.c,
 	locale/programs/stringtrans.h: Implementation of locale related
 	programs.
1996-03-28 09:16:15 +00:00
Roland McGrath 19bc17a905 Thu Mar 28 03:25:10 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* intl/Makefile (copysrc): Add missing > in sed cmd.

Sat Mar 23 17:52:49 1996  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* Makeconfig: Rename Makefile variable nlsdir to i18ndir and
	change value to $(datadir)/i18n.  `nls' is not an appropriate
	name.

	* Makefile (subdirs): Add new subdir wctype.

	* ctype/ctype-info.c: Add new global variable __ctype_names
	and initialize from _nl_C_LC_CTYPE.

	* ctype/ctype.h: In P1003.3b/D11 `alnum' is a separate character
        class.  Use bit 11.
	[_ISbit]: Protect definition of bitmasks because they are also
	used in wctype.h.

	* libio/genops.c (_IO_sputbackc, _IO_sungetc): Clear EOF flag
	after successfully pushing back a character.

	Fundamental changes in locale implementation.  Almost nothing
	from the old code is used anymore.
	* locale/charmap.c, locale/collate.c, locale/config.h,
 	locale/ctypedump.c, locale/hash.h, locale/keyword.gperf,
 	locale/keyword.h, locale/loadlocale.c, locale/locale-ctype.c,
 	locale/locale.c locale/localeconv.c, locale/localedef.c,
 	locale/localedef.h, locale/locfile-hash.c, locale/locfile-lex.c,
 	locale/locfile-parse.c, locale/messages.c, locale/monetary.c,
 	locale/numeric.c, locale/setlocale.c, locale/token.h,
 	locale/xmalloc.c: Removed.

	* locale/Makefile: Update for new locale implementation with
	program source code distributed in subdir.

	* locale/categories.def, locale/iso-4217.def: Updated file
        for new locale implementation.

	* locale/langinfo.h: Updated for new locale implementation.
	(ERA_D_T_FMT, ERA_T_FMT): New official values according to
	P1003.2b/D11.
	(_NL_COLLATE_NRULES, _NL_COLLATE_RULES, _NL_COLLATE_HASH_SIZE,
	_NL_COLLATE_HASH_LAYERS, _NL_COLLATE_TABLE_EB,
	_NL_COLLATE_TABLE_EL, _NL_COLLATE_UNDEFINED, _NL_COLLATE_EXTRA_EB,
	_NL_COLLATE_EXTRA_EL, _NL_CTYPE_NAMES_EB, _NL_CTYPE_NAMES_EL,
	_NL_CTYPE_HASH_SIZE, _NL_CTYPE_HASH_LAYERS, _NL_CTYPE_CLASS_NAMES,
	_NL_CTYPE_MAP_NAMES, _NL_CTYPE_WIDTH): New internal values for
	extended LC_CTYPE and LC_COLLATE implementation.

	* locale/simple-hash.c, locale/simple-hash.h, locale/xmalloc.c,
 	locale/xstrdup.c: Helper functions for locale related programs.

	* locale/C-collate.c, locale/C-ctype.c,
        locale/C-messages.c, locale/C-monetary.c,
        locale/C-numeric.c, locale/C-time.c,
        locale/lc-collate.c, locale/lc-ctype.c,
        locale/lc-messages.c, locale/lc-monetary.c,
        locale/lc-numeric.c, locale/lc-time.c: New implementation of locale
        functions, and new generated "C" locale data.

	* locale/loadlocale.c: Now handles word fields in locale binary
        automatically by changing the endianess if necessary.

	* locale/localeinfo.h (LIMAGIC): Changed magic number because
	of incompatible changes.
	(locale_data): Changed definition to allow word as a value type.
	(coll_sort_rule): Values for collation sorting mode.
	(_NL_CURRENT_WORD): New macro to access word value of locale entry.
	(__collate_table, __collate_extra): Declare new global variables
	for collation tables.

	* locale/programs/charmap-kw.gperf, locale/programs/charmap-kw.h,
        locale/programs/charmap.c, locale/programs/charset.c,
        locale/programs/charset.h, locale/programs/config.h,
        locale/programs/ctypedump.c, locale/programs/ld-collate.c,
        locale/programs/ld-ctype.c, locale/programs/ld-messages.c,
        locale/programs/ld-monetary.c, locale/programs/ld-numeric.c,
        locale/programs/ld-time.c, locale/programs/linereader.c,
        locale/programs/linereader.h, locale/programs/locale.c,
        locale/programs/localedef.c, locale/programs/locales.h,
        locale/programs/locfile-kw.gperf, locale/programs/locfile-kw.h,
        locale/programs/locfile-token.h, locale/programs/locfile.c,
        locale/programs/locfile.h, locale/programs/stringtrans.c,
        locale/programs/stringtrans.h: Implementation of locale related
        programs.

	* locale/weight.h: Functions to access collation tables.

	* posix/unistd.h: Define _POSIX2_LOCALEDEF.

	* stdio-common/printf_fp.c: Fix bug with printing certain numbers
	< 10^-1.  Reported by Bill Metzenthen.

	* stdio-common/tfformat.c: Add new test for above bug.

	* string/strcoll.c, string/strxfrm.c: Real implementation of
        string collation according to ISO C.

	* wctype/Makefile, wctype/cname-lookup.h, wctype/iswctype.c,
        wctype/test_wctype.c, wctype/towctrans.c, wctype/wcfuncs.c,
        wctype/wctrans.c, wctype/wctype.c, wctype/wctype.h: New files.
        Implementation of wide character classes and mapping.
1996-03-28 08:30:38 +00:00
Roland McGrath 53f770e0f9 Wed Mar 27 14:52:11 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* elf/rtld.c (dl_main): Call _dl_sysdep_start_cleanup after
	_dl_relocate_object loop.  Avoid relocating RTLD_MAP in that loop, and
	do it individually if necessary after _dl_sysdep_start_cleanup call.

	* stdlib/Makefile (mpn-routines): Add divrem.

Tue Mar 26 22:54:14  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* stdio-common/printf_fp.c (__printf_fp): Use mpn_divmod
	instead of __mpn_divmod.

Wed Mar 27 10:26:21 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/alpha/setjmp.S: Must establish global pointer before
 	address of __sigsetjmp_aux can be loaded.

Wed Mar 27 02:23:19 1996 Ulrich Drepper <drepper@gnu.ai.mit.edu>

	* sysdeps/i386/i586/memset.S: New file.  Highly optimized
	version for i586 contributed by Torbjorn Granlund.
	Adapted for use as bzero.
	* sysdeps/i386/i586/bzero.S: Use sysdeps/i386/i586/memset.S
	code to implement bzero().

Tue Mar 26 20:01:17 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* stdlib/Makefile (mpn-routines): Remove divmod.
1996-03-27 23:23:59 +00:00
Roland McGrath 3ef987a23c Updated from /src/gmp-1.937 1996-03-27 20:18:04 +00:00
Brendan Kehoe c0621444ed * sysdeps/unix/sysv/sysv4/solaris2/sparc/sysdep.h (NO_UNDERSCORES): Use
wrapped with #ifndef, to avoid config.h defining it.
Tue Mar 26 15:40:14 1996  Brendan Kehoe  <brendan@zen.org>

	* sysdeps/unix/sysv/sysv4/solaris2/sparc/sysdep.h (NO_UNDERSCORES): Use
	wrapped with #ifndef, to avoid config.h defining it.
1996-03-27 00:46:37 +00:00
Roland McGrath 81e4d60c7b * malloc/realloc.c (_realloc_internal): In case of growing large
block, leave _heaplimit zero across _malloc_internal call.
1996-03-25 21:23:16 +00:00
Roland McGrath 5775972dec Mon Mar 25 13:10:04 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* intl/Makefile [gettext-srcdir]: Use gpl2lgpl.sed on copied sources.
1996-03-25 18:10:46 +00:00
Roland McGrath 857fa1b81d Mon Mar 25 03:35:16 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* malloc/malloc.c (morecore): Don't attempt recursive realloc of info
	table when _heaplimit==0 during realloc growing large block.

	* MakeTAGS (extract): Remove /dev/null from xgettext command line.
	(text-srcs): New variable: extract only C sources from $(tags_sources).
	(po/$(domain).pot): Depend on that.
	If it's empty, cp /dev/null $@ instead of $(extract).

	* misc/Makefile (headers): Add iovec.h.
	* sysdeps/unix/sysv/linux/iovec.h: New file.
	* sysdeps/generic/iovec.h: New file.
	* misc/sys/uio.h (struct iovec): Type replaced with #include <iovec.h>.

	* configure.in (NO_UNDERSCORES check): Use AC_TRY_LINK instead of
	AC_TRY_COMPILE.

	* misc/sys/cdefs.h [__USE_BSD] (const, signed, volatile): Move these
	macros inside [! __STDC__].

	* stdlib/rpmatch.c: New file.
	* stdlib/Makefile (routines): Add rpmatch.
	* stdlib/stdlib.h [__USE_SVID]: Declare rpmatch.

	* MakeTAGS (MSGJOIN): Variable removed.
	(po/SYS_libc.pot): Use $(XGETTEXT) instead of $(MSGJOIN).

Wed Mar 20 20:08:46 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysdep.h: Don't define C_SYMBOL_NAME.

	* sysdeps/unix/sysv/linux/m68k/sysdep.h: Don't define
	NO_UNDERSCORES.
1996-03-25 17:48:26 +00:00
Roland McGrath 25c931a18c Contents were duplicated by botched patching. 1996-03-25 06:26:06 +00:00
Doug Evans edc1601c51 (os): sunos[3456] -> sunos[34], sunos[56] have their own entries 1996-03-21 23:26:26 +00:00
Roland McGrath 036a272548 Thu Mar 21 11:19:15 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* mach/devstream.c (input): Translate \r to \n on input.
1996-03-21 16:23:21 +00:00
Roland McGrath ce563359af Wed Mar 20 11:28:49 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* stdio-common/printf.h, stdio-common/printf_fp.c,
	stdio-common/vfprintf.c: Place const in parameter list at
	correct place.

Wed Mar 20 23:58.12 1996  Ulrich Drepper <drepper@gnu.ai.mit.edu>

	* sysdeps/i386/ldbl2mpn.c: Copy of former version of
	sysdeps/ieee754/ldbl2mpn.c.
	* sysdeps/ieee754/ldbl2mpn.c: Remove i386 specific unification.
	Reported by Andreas Schwab.

Wed Mar 20 19:58:43 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* version.c: Include version.h to define RELEASE and VERSION macros.
	(__libc_release, __libc_version): Use them.
	* locale/SYS_libc.c (_libc_intl_domainname): Include ../version.h and
	use VERSION to define domainname as `SYS_GNU_libc-VERSION'.
	* Make-dist (rel+vers): Snarf the macro values from version.h.

	* MakeTAGS (extract): Pass $(XGETTEXTFLAGS-$(@F)).
	(XGETTEXTFLAGS-siglist.pot, XGETTEXTFLAGS-errlist.pot): New variables;
	pass -a for these files.

	* Makerules (po/%.pot): Depend on FORCE target so recursive make is
	always run.
1996-03-21 15:20:37 +00:00
Roland McGrath 38bb44bc19 Mon Mar 18 22:54:32 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/wait3.c: New file.
	* sysdeps/unix/sysv/linux/wait.c: Use the bsd4.4 wait, not the
	one from sysdeps/posix.
1996-03-21 00:37:31 +00:00
Roland McGrath d7193325fc * sysdeps/unix/bsd/waitflags.h (WNOREAP): New macro. 1996-03-20 17:01:27 +00:00
Roland McGrath 948c3e72ec Wed Mar 20 09:42:11 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* elf/dl-load.c (_dl_map_object_from_fd): Always set L->l_type; if not
	lt_executable, then lt_library.
	* elf/rtld.c (dl_main): Don't set NEW->l_type after _dl_map_object.

Wed Mar 20 00:08:23 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/syscalls.list: Remove gtty and stty.

Tue Mar 19 16:31:06 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/termbits.h (CRTSCTS, CBAUDEX, VEOL,
	VEOL2, VMIN, VTIME): Corrected.
	(PAGEOUT, WRAP, VDSUSP): Deleted.

	* sysdeps/unix/readdir.c: Test [! _DIRENT_HAVE_D_RECLEN] instead of
	(sizeof (DP->d_name) > 1) to detect fixed-size dir entries.
1996-03-20 14:50:57 +00:00
Roland McGrath 213afb94b6 Regenerated
Thu Mar 14 06:01:07 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* posix/glob.c (glob): In GLOB_BRACE brace expansion, fix buffer size
	calculation to include trailing invariant portion.  Don't use alloca;
	instead use a dynamic auto array for GCC, malloc for non-GCC.
	Handle nested braces properly.
1996-03-20 03:12:40 +00:00
Roland McGrath 4d58533340 * sysdeps/i386/fpu/__math.h (asinh): Call log1p instead of __log1p.
* math/math.h: Move M_* constants before __math.h include.
	[__NO_MATH_INLINES || __OPTIMIZE__]: Include __math.h only #if this.

	* misc/efgcvt_r.c (ecvt_r): Declare floor, log10, fabs as weak extern.
	If log10 is not defined (i.e. no -lm), use stupid loop instead.
1996-03-20 00:18:44 +00:00
Roland McGrath d3669add24 * features.h (__FAVOR_BSD): Define only if _BSD_SOURCE is defined
and no other _*_SOURCE macro is.
	(_GNU_SOURCE): Don't define by default.
	* libc-symbols.h (_GNU_SOURCE): Define it.
1996-03-19 21:59:41 +00:00
Roland McGrath c8cf0b14ed * configure.in (alpha*-*-linux*): Unset $gnu_ld and $elf. 1996-03-19 21:23:40 +00:00
Roland McGrath c224a18a90 * config.make.in (weak-symbols): Variable removed.
* configure.in (--with-weak-symbols): Option removed.
	(NO_UNDERSCORES, HAVE_ASM_WEAK_DIRECTIVE, HAVE_ASM_WEAKEXT_DIRECTIVE):
	New tests.
	* config.h.in (HAVE_WEAK_SYMBOLS): #undef removed.
	(NO_UNDERSCORES, HAVE_ASM_WEAK_DIRECTIVE, HAVE_ASM_WEAKEXT_DIRECTIVE):
	New #undefs.
	* libc-symbols.h: Use them instead of HAVE_WEAK_SYMBOLS.

	* inet/inet_lnaof.c: Use u_int32_t instead of u_long.
	* inet/inet_mkadr.c: Likewise.
	* inet/inet_net.c: Likewise.
	* inet/inet_netof.c: Likewise.
	* inet/rcmd.c: Likewise.
	* inet/arpa/inet.h: Likewise.
	* inet/netinet/in.h: Likewise.
	* inet/netinet/tcp.h: Likewise.
	* inet/protocols/rwhod.h: Likewise.
	* inet/protocols/talkd.h: Likewise.
	* resolv/inet_addr.c: Likewise.

	* sunrpc/rpc/xdr.h (IXDR_GET_LONG, IXDR_PUT_LONG): change casts to
 	u_int32_t (instead of u_long).
1996-03-19 21:10:11 +00:00
Roland McGrath b20e47cb14 Tue Mar 19 14:18:42 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/bsd/pause.c: Moved to sysdeps/unix/common/pause.c.

Mon Mar  4 20:17:28 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/adjtime.c: Use INT_MAX instead of LONG_MAX.

	* sysdeps/unix/sysv/Makefile (sysdep_routines): Don't add s_getdents.

	* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Don't add mount,
	umount.

	* sysdeps/alpha/__math.h (atan, cabs): New functions.

	* sysdeps/unix/sysv/linux/alpha/sigsuspend.S: new file (syscall
 	expects set-value, not pointer to it).

Sun Feb 25 22:36:10 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/profil-counter.h: New file.

	* gmon/gmon.c (__bb_head): new variable.
	(write_hist, write_call_graph, write_bb_counts): new functions.
	(_mcleanup): modified to call above functions instead of directly
 	writing out gmon.out.
	* gmon/sys/gmon.h (struct __bb): New type.
	(struct gmonhdr): Type removed.
	(struct gmonparam): New member `log_hashfraction'.
	(GMONVERSION): Macro removed.

	* gmon/sys/gmon_out.h, gmon/bb_exit_func.c,
 	sysdeps/generic/bb_init_func.c, sysdeps/alpha/bb_init_func.S: new
 	files.
	* gmon/Makefile (headers): Add sys/gmon_out.h.
	(routines): Add bb_init_func, bb_exit_func.

	* gmon/mcount.c: Avoid integer division.

Wed Feb 21 23:56:41 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/alpha/setjmp.S: switched order in which sp and fp are
 	passed to match what __sigsetjmp_aux() expects.

Tue Feb 20 11:33:46 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/syscalls.list (select, bind,
 	connect, getpeername, getsockname, listen, recv, recvfrom,
 	recvmsg, send, sendmsg, sendto, setsockopt, shutdown, socketpair):
 	added to override same-name assembly file in the parent directory.

	* stdlib/stdlib.h: add include of sys/types.h in front of random
 	etc declarations to ensure int32_t is declared.

	* stdlib/random.c, stdlib/random_r.c: replaced "long int" by int32_t
	where 32 bit integers are required.  Also change LONG_MAX into
	0x7fffffff since the intent is to turn off the sign bit in a
	32 bit integer.

	* time/offtime.c (__offtime): Use Paul Eggert's code to deal
	with very large values for "days" (e.g., 64 bit values).

Mon Feb 19 22:22:12 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* stdlib/stdlib.h (__random, __random_r, random_r, struct
 	random_data): use int32_t instead of `long int'.

Sat Feb 17 11:29:29 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/ioperm.c: new file.

	* sysdeps/alpha/ffs.S: new file.

	* sysdeps/alpha/fabs.c: File removed.

	* time/tzfile.c (__tzfile_read): counter variable is i, *not*
	num_transitions!

	* time/offtime.c: make capable of dealing with very large (64 bit)
 	time_t values.  Use old algorithm until a year is reached that
	is an integer multiple of 400, then use DAYS_PER_400_YEARS to
	do the remainder in a single division.

	* sysdeps/generic/ffs.c (ffs): fix variable declarations to
	be unsigned int, not unsigned long.

	* string/test-ffs.c (main): add test case with all upper bits
	set.

	* stdlib/tst-strtol.c: add tests cases for machines where
	sizeof(long)==8.

	* stdlib/testrand.c (main): disallow rand() to return negative
 	integers.

	* stdlib/testmb.c (main): fix format to use %lx instead of %x.

	* stdlib/stdlib.h: on 64 bit machines, declare
	struct random_data, __random(),  __random_r, and random_r to
	return "int" instead of "long int".

	* stdlib/random_r.c: 64 bit machines use "int" instead of "long
 	int".  Similarly, use INT_MAX instead of LONG_MAX.

	* stdlib/random.c: on 64 bit machines, randtbl[] and __random[]
 	need to operate on "int" instead of "long int".

	* locale/locfile-hash.c (compute_hashval): make shifted constant
	a long to avoid loosing bits on 64 bit machines.

	* dirent/tst-seekdir.c (main): fix confusing comment; print
	a line to mark point where directory is rewound.

Fri Feb 16 15:01:49 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* time/strftime.c (strftime): any hour > 11 is PM (not > 12!).

Wed Feb 14 00:21:17 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/Makefile,
	sysdeps/unix/sysv/linux/alpha/brk.S,
	sysdeps/unix/sysv/linux/alpha/fpu_control.c,
	sysdeps/unix/sysv/linux/alpha/fpu_control.h,
	sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
	sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
	sysdeps/unix/sysv/linux/alpha/pipe.S,
	sysdeps/unix/sysv/linux/alpha/setfpucw.c,
	sysdeps/unix/sysv/linux/alpha/sigprocmask.c,
	sysdeps/unix/sysv/linux/alpha/speed.c,
	sysdeps/unix/sysv/linux/alpha/start.S,
	sysdeps/unix/sysv/linux/alpha/syscall.S,
	sysdeps/unix/sysv/linux/alpha/syscalls.list,
	sysdeps/unix/sysv/linux/alpha/alpha/regdef.h,
	sysdeps/unix/sysv/linux/alpha/sysdep.S,
	sysdeps/unix/sysv/linux/alpha/sysdep.h: New files.

	* sysdeps/alpha/setjmp_aux.c (__sigsetjmp_aux): restore return
 	address register before returning (gcc 2.7.1 doesn't do it,
 	presumably because $26 is declared as a global variable).

	* sysdeps/unix/sysv/linux/sys/mman.h: msync was missing "flags"
	argument.

	* sysdeps/unix/alarm.c (alarm): do roundup using test & increment
	instead of multiplication.

	* sysdeps/posix/sleep.c (sleep): initialize sa_mask to mask of
	currently blocked signals instead of the empty mask to ensure
	that execution of alarm handler occurs with none of the currently
	blocked signals enabled.

	* sysdeps/unix/alpha/sysdep.h: new file (adapted from OSF/1 version).

	* sysdeps/unix/bsd/osf/alpha/sysdep.h: include
 	sysdeps/unix/alpha/sysdep.h and removed definitions now in that file.

	* sysdeps/alpha/divrem.S, sysdeps/alpha/htonl.S,
	sysdeps/alpha/htons.S, sysdeps/alpha/machine-gmon.h,
	sysdeps/alpha/_mcount.S, sysdeps/alpha/ntohl.s, sysdeps/alpha/ntohs.s,
	sysdeps/alpha/strlen.S: New files.

	* sysdeps/alpha/divl.S, sysdeps/alpha/divlu.S, sysdeps/alpha/divq.S,
	sysdeps/alpha/divqu.S, sysdeps/alpha/divrem.m4,
	sysdeps/alpha/macros.m4, sysdeps/alpha/reml.S, sysdeps/alpha/remlu.S,
	sysdeps/alpha/remq.S, sysdeps/alpha/remqu.S, sysdeps/alpha/strlen.c:
 	Removed.

	* sysdeps/generic/sbrk.c (__sbrk): argument is of type ptrdiff_t, not
	int.

	* sysdeps/alpha/__longjmp.c (__longjmp): moved dummy while loop
	to end of function to avoid a jump across NOPs.

	* sysdeps/alpha/Makefile (sysdep_routines): Removed all rules
 	pertaining to integer division/remainder routines since new code
 	doesn't require them.

	* sunrpc/xdr_mem.c, sunrpc/xdr_stdio.c: Use 4 instead of sizeof(long)
	where 32 bit quantities are consumed/stored.  Various other minor
	64-bit cleanups (casting).

	* sunrpc/xdr.c (xdr_int): test for sizeof(int)==4 to determine
 	whether xdr_long or xdr_short should be used to encode an int.
  	Notice that an xdr_long is 4 bytes independent of the architecture
	(otherwise no Alpha could interoperate with existing NFS servers,
 	for example).  Ditto for enums.

	* sunrpc/svc_udp.c (svcudp_recv): changed test from 4*sizeof(u_long)
	to 16 since it really wants 16 bytes.

	* sunrpc/svc.c (maskp): changed from u_long* to u_int32*.

	* sunrpc/rpc_cmsg.c (xdr_callmsg), sunrpc/svc_authux.c: increment
	"buf" pointer by casting it to a char* first since a long* may be 8
 	bytes or more and oa->oa_length may be any multiple of 4.

	* sunrpc/rpc/xdr.h (IXDR_GET_LONG, IXDR_PUT_LONG): change casts to
 	u_int32_t (instead of u_long).

	* sunrpc/clnt_udp.c (clntudp_call): replaced sizeof(u_long) by 4
	since it really is testing for 32 bits.  Fixed casts to use
	u_int32 instead of u_long.
	* sunrpc/xdr_rec.c: Likewise.

	* sunrpc/clnt_tcp.c (clnttcp_call): replaced u_long by u_int32.
	* sunrpc/rpc/auth.h: Likewise.

	* limits.h (LONG_MAX, LONG_MIN, ULONG_MAX): use 64 bit values
	for Alpha.

Tue Mar 19 13:27:49 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* sysdeps/i386/fpu/__math.h: New file.
	Contributed by John C. Bowman <bowman@hagar.ph.utexas.edu>.

Sun Mar 17 00:28:16 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/posix/clock.c: Don't multiply the return value by
	CLOCKS_PER_SEC or CLK_TCK.

	* sysdeps/mach/hurd/getcwd.c: Fail with ENOENT if a parent directory
	scan finds no match.

	* posix/unistd.h (setpgrp): Declare no-arg version unless __FAVOR_BSD.
	* misc/bsd-compat.c (setpgrp): New function, two arg version.
	* sysdeps/stub/setpgid.c: Remove setpgrp alias.
	* sysdeps/mach/hurd/setpgid.c: Likewise.
	* sysdeps/unix/sysv/sysv4/setpgid.c: Likewise.
	* sysdeps/unix/common/syscalls.list (setpgid): Remove setpgrp alias.
	* sysdeps/unix/sysv/irix4/syscalls.list: Likewise.
	* sysdeps/unix/sysv/linux/setpgrp.c: Obsolete file removed.
	* posix/setpgrp.c (setpgrp): New file.
	* posix/Makefile (routines): Add setpgrp.

Tue Feb  6 12:46:29 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* libc-symbols.h (weak_alias, weak_symbol): added definitions
	for ECOFF (HAVE_ECOFF).
1996-03-19 20:21:54 +00:00
Roland McGrath e384537164 Mon Mar 18 13:20:46 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* elf/Makefile (rtld-link): New canned sequence.
	(ld.so, ld-linux.so.1): Use it.  Pass -soname option.

	* sysdeps/i386/setjmp.S (__setjmp): Define compatibility entry point.

Sun Mar 17 23:15:32 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/tcgetpgrp.c,
	sysdeps/unix/sysv/linux/tcsetpgrp.c: New files.
1996-03-18 18:32:47 +00:00
Roland McGrath 9b431e31e1 Sun Mar 17 07:19:33 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* db/Makefile (CFLAGS-hash_func.c): New variable; pass -Wno-unused.
	(CFLAGS): Append -Wno-unitialized.

	* sysdeps/alpha/memchr.S: New file.
	* sysdeps/alpha/memchr.c: Obsolete file removed.
	* string/tester.c: Soup up memchr tests.
1996-03-17 12:36:52 +00:00
Roland McGrath 5aab07eb56 Sat Mar 16 20:58:43 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* stdlib/erand48_r.c: Use FP division by powers of two to distribute
	short bits into double.
1996-03-17 02:00:05 +00:00
Roland McGrath 6025c399e9 Sat Mar 16 20:08:22 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/alpha/memchr.S: new file.
	* sysdeps/alpha/memchr.c: obsolete file removed.

Sat Mar 16 16:26:09 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* misc/Makefile (headers): Add sysexits.h.
	* misc/sysexits.h: New file.

Thu Mar 14 15:20:45 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/libm-ieee754/e_atan2.c (__ieee754_atan2): Change atan
	call to __atan.
	* sysdeps/libm-ieee754/e_atan2f.c (__ieee754_atan2f): Change atanf
 	call to __atanf.

	* sysdeps/m68k/fpu/e_acos.c, sysdeps/m68k/fpu/e_acosf.c,
	sysdeps/m68k/fpu/e_asin.c, sysdeps/m68k/fpu/e_asinf.c,
	sysdeps/m68k/fpu/e_atanh.c, sysdeps/m68k/fpu/e_atanhf.c,
	sysdeps/m68k/fpu/e_cosh.c, sysdeps/m68k/fpu/e_coshf.c,
	sysdeps/m68k/fpu/e_exp.c, sysdeps/m68k/fpu/e_expf.c,
	sysdeps/m68k/fpu/e_fmod.c, sysdeps/m68k/fpu/e_fmodf.c,
	sysdeps/m68k/fpu/e_log.c, sysdeps/m68k/fpu/e_log10.c,
	sysdeps/m68k/fpu/e_log10f.c, sysdeps/m68k/fpu/e_logf.c,
	sysdeps/m68k/fpu/e_pow.c, sysdeps/m68k/fpu/e_powf.c,
	sysdeps/m68k/fpu/e_remainder.c, sysdeps/m68k/fpu/e_remainderf.c,
	sysdeps/m68k/fpu/e_scalb.c, sysdeps/m68k/fpu/e_scalbf.c,
	sysdeps/m68k/fpu/e_sinh.c, sysdeps/m68k/fpu/e_sinhf.c,
	sysdeps/m68k/fpu/e_sqrt.c, sysdeps/m68k/fpu/e_sqrtf.c,
	sysdeps/m68k/fpu/k_cos.c, sysdeps/m68k/fpu/k_cosf.c,
	sysdeps/m68k/fpu/k_sin.c, sysdeps/m68k/fpu/k_sinf.c,
	sysdeps/m68k/fpu/k_tan.c, sysdeps/m68k/fpu/k_tanf.c,
	sysdeps/m68k/fpu/s_atan.c, sysdeps/m68k/fpu/s_atanf.c,
	sysdeps/m68k/fpu/s_ceil.c, sysdeps/m68k/fpu/s_ceilf.c,
	sysdeps/m68k/fpu/s_cos.c, sysdeps/m68k/fpu/s_cosf.c,
	sysdeps/m68k/fpu/s_expm1.c, sysdeps/m68k/fpu/s_expm1f.c,
	sysdeps/m68k/fpu/s_fabs.c, sysdeps/m68k/fpu/s_fabsf.c,
	sysdeps/m68k/fpu/s_finite.c, sysdeps/m68k/fpu/s_finitef.c,
	sysdeps/m68k/fpu/s_floor.c, sysdeps/m68k/fpu/s_floorf.c,
	sysdeps/m68k/fpu/s_frexp.c, sysdeps/m68k/fpu/s_frexpf.c,
	sysdeps/m68k/fpu/s_ilogb.c, sysdeps/m68k/fpu/s_ilogbf.c,
	sysdeps/m68k/fpu/s_isinf.c, sysdeps/m68k/fpu/s_isinff.c,
	sysdeps/m68k/fpu/s_isnan.c, sysdeps/m68k/fpu/s_isnanf.c,
	sysdeps/m68k/fpu/s_ldexp.c, sysdeps/m68k/fpu/s_ldexpf.c,
	sysdeps/m68k/fpu/s_log1p.c, sysdeps/m68k/fpu/s_log1pf.c,
	sysdeps/m68k/fpu/s_logb.c, sysdeps/m68k/fpu/s_logbf.c,
	sysdeps/m68k/fpu/s_modf.c, sysdeps/m68k/fpu/s_modff.c,
	sysdeps/m68k/fpu/s_rint.c, sysdeps/m68k/fpu/s_rintf.c,
	sysdeps/m68k/fpu/s_scalbn.c, sysdeps/m68k/fpu/s_scalbnf.c,
	sysdeps/m68k/fpu/s_significand.c,
	sysdeps/m68k/fpu/s_significandf.c, sysdeps/m68k/fpu/s_sin.c,
	sysdeps/m68k/fpu/s_sinf.c, sysdeps/m68k/fpu/s_tan.c,
	sysdeps/m68k/fpu/s_tanf.c, sysdeps/m68k/fpu/s_tanh.c,
	sysdeps/m68k/fpu/s_tanhf.c: New files, for m68881 port of fdlibm.

	* sysdeps/m68k/fpu/__math.h: Rewritten for fdlibm.

	* sysdeps/m68k/fpu/isinfl.c: Rewritten to get argument type right.
	* sysdeps/m68k/fpu/isnanl.c: Likewise.

Thu Mar 14 06:01:07 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* posix/glob.c (glob): In GLOB_BRACE brace expansion, fix buffer size
	calculation to include trailing invariant portion.  Don't use alloca;
	instead use a dynamic auto array for GCC, malloc for non-GCC.
	Handle nested braces properly.

	* elf/elf.h (Elf32_auxv_t): Specify prototype (void) for `a_un.a_fcn'.

	* libc-symbols.h (lint): New macro.

Fri Mar 15 01:18:00 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* libio/iosetvbuf.c: Add weak alias setvbuf.
1996-03-17 01:58:17 +00:00
Roland McGrath d3b7d2ac93 Fri Mar 15 01:18:00 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* libio/iosetvbuf.c: Add weak alias setvbuf.
1996-03-16 21:08:20 +00:00
Ian e5ba41ce24 Recognize mips-*-sysv* 1996-03-15 00:14:04 +00:00
Roland McGrath 8d71c7b0e4 Thu Mar 14 06:01:07 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* string/strnlen.c: New file.
	* string/Makefile (routines): Add strnlen.
	* string/string.h [__USE_GNU] (strnlen): Declare new function.
	[__OPTIMIZE__]: Define extern inline implementation of it.
1996-03-14 11:20:23 +00:00
Roland McGrath 52e9a9d118 Thu Mar 14 06:01:07 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* string/strnlen.c: New file.
	* string/Makefile (routines): Add strnlen.
	* string/string.h [__USE_GNU] (strnlen): Declare new function.
	[__OPTIMIZE__]: Define extern inline implementation of it.

	* stdlib/erand48_r.c: Use __mpn_construct_double instead of ldexp and
	addition, to avoid using anything from -lm.

Mon Mar  4 21:57:14 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/m68k/Makefile: New file.

	* sysdeps/unix/sysv/linux/m68k/sysdep.h (SYS_ify): Redefine.
	(CALL_MCOUNT): New macro, empty unless [PROF].
	(ENTRY): Do CALL_MCOUNT just after the label.
	(JUMPTARGET): New macro.
	(SYSCALL_ERROR_HANDLER): Fix syntax.

Thu Mar 14 04:20:48 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/init-first.c (init): Call `__personality'
	function instead of using inline asm i386 syscall.
	* sysdeps/unix/sysv/linux/syscalls.list: Add personality syscall.

	* posix/unistd.h [__USE_BSD]: Declare usleep.

	* misc/efgcvt.c (MAXDIG): New macro computed from <floats.h> constants.
	(fcvt, ecvt): Use it for buffer size.

	* stdlib/drand48-iter.c (__drand48_iterate): Use u_int64_t instead of
	conditionalizing long vs long long.

	* stdlib/drand48-iter.c (__drand48_iterate): Don't check for null
	pointers; never return EFAULT.
	* stdlib/drand48_r.c (drand48_r): Likewise.
	* stdlib/erand48_r.c (erand48_r): Likewise.
1996-03-14 11:20:03 +00:00
Roland McGrath 6c46dada59 Tue Mar 12 04:57:57 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* setjmp/Makefile (tests): Add jmpbug.
	* setjmp/jmpbug.c: New file.
1996-03-12 10:01:41 +00:00
Roland McGrath 1177c8babf Tue Mar 12 04:42:01 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/sparc/jmp_buf.h: Rewritten; use array of ints, not struct.
	* sysdeps/sparc/setjmp.S: Rewritten; store %fp value as well.
	* sysdeps/sparc/__longjmp.S: Rewritten; unwind frames one by one with
	`restore' until the target frame is hit.

Sun Mar 10 20:29:40 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/sigsuspend.c: New file.
	* sysdeps/unix/sysv/linux/syscalls.list: Remove sigsuspend, add
	s_sigsuspend.

Thu Mar  7 21:30:58 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules (+make-deps, sed-remove-objpfx): Quote periods on the
	left side of sed substitutions.

Sun Mar 10 16:58:10 1996  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* stdio-common/printf_fp.c (hack_digit): __mpn_normal_size
	is not available anymore.  Do it ourselves.

	* sysdeps/unix/sysv/linux/i386/fpu_control.h (_FPU_SETCW):
	Correct GCC `asm' syntax.

	* stdio-common/Makefile (tests): Add tst-ungetc.
	* stdio-common/tst-ungetc.c: New test from drepper.
	* stdio-common/tstscanf.c (main): New %[ test case from drepper.

	* sysdeps/libm-ieee754/s_scalbn.c (scalbn): Rename to __scalbn;
	somehow this was missed, though the weak alias is already there.
1996-03-12 09:50:46 +00:00
Roland McGrath dd0e4e0c8b Tue Mar 12 03:15:02 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/i386/fpu_control.h (_FPU_DEFAULT): Change
	default to double precision, all interrupts masked; fdlibm requires.
1996-03-12 08:19:58 +00:00
Roland McGrath d25d5f6a50 Sat Mar 9 18:44:27 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/i386/setfpucw.c: Obsolete file removed.

Fri Mar  8 22:16:48 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* stdio-common/printf_fp.c (HAVE_ALLOCA): New macro.
1996-03-09 23:50:19 +00:00
Roland McGrath 3f92886a4c Fri Mar 8 22:16:48 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* stdio-common/printf_fp.c (HAVE_ALLOCA): New macro.
1996-03-09 03:16:59 +00:00
Miles Bader 45667a533a *** empty log message ***
Tue Mar  5 18:45:14 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/select.c (__select): Include LASTFD in the
	final loop.
1996-03-05 23:48:15 +00:00
Miles Bader 5ac0712ca5 (__select): Include LASTFD in the final loop. 1996-03-05 23:46:23 +00:00
Richard Kenner b49d86bd21 Add -apple and -aux. 1996-03-05 23:34:58 +00:00
Roland McGrath f7eac6eb50 Mon Mar 4 20:54:40 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makeconfig ($(common-objpfx)config.make): Depend on config.h.in.


Mon Mar  4 17:35:09 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* hurd/catch-signal.c (hurd_safe_memmove): New function.
	(hurd_safe_copyin, hurd_safe_copyout): New functions.
	* hurd/hurd/sigpreempt.h: Declare them.

Sun Mar  3 08:43:44 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	Replace math code with fdlibm from Sun as modified for netbsd by
	JT Conklin and Ian Taylor, including x86 FPU support.
	* sysdeps/libm-ieee754, sysdeps/libm-i387: New directories.
	* math/math_private.h: New file.
	* sysdeps/i386/fpu/Implies: New file.
	* sysdeps/ieee754/Implies: New file.
	* math/machine/asm.h, math/machine/endian.h: New files.
	* math/Makefile, math/math.h: Rewritten.
	* mathcalls.h, math/mathcalls.h: New file, broken out of math.h.
	* math/finite.c: File removed.
	* sysdeps/generic/Makefile [$(subdir)=math]: Frobnication removed.

	* math/test-math.c: Include errno.h and string.h.

	* sysdeps/unix/bsd/dirstream.h: File removed.
	* sysdeps/unix/bsd/readdir.c: File removed.
1996-03-05 21:41:30 +00:00
Roland McGrath 1521668f2a Sun Mar 3 08:43:44 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* math/test-math.c: Include errno.h and string.h.
1996-03-05 19:06:19 +00:00
Miles Bader 5d8a006d2c A bug fix for the previous select bug fix.
Tue Mar  5 12:14:57 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/select.c (__select): Also don't fault just
	because some fdmask is 0.
1996-03-05 17:35:49 +00:00
Miles Bader 3cf11a4b33 (__select): Don't fault when some fdmask is 0. 1996-03-05 17:15:44 +00:00
Roland McGrath d43e047895 Mon Mar 4 20:54:40 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makeconfig ($(common-objpfx)config.make): Depend on config.h.in.
1996-03-05 16:23:22 +00:00
Erik Sandberg 9a0d30bdb1 (moss): Fix previous change. 1996-03-05 03:02:45 +00:00
Miles Bader e9ef1cf37a (__select): Don't increment GOT only because READ/WRITE/EXCEPTFDS is 0! Don't return without frobbing the bitmasks after a timeout. When clearing the bitmasks, only loop from FIRSTFD to LASTFD. 1996-03-05 00:07:01 +00:00
Richard Kenner bba51ac77a Accept -moss* as op sys. 1996-03-04 23:03:15 +00:00
Miles Bader e49639955f Hurd select fixes.
Mon Mar  4 17:35:35 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/select.c (__select):
	Don't increment GOT only because READ/WRITE/EXCEPTFDS is 0!
	Don't return without frobbing the bitmasks after a timeout.
	When clearing the bitmasks, only loop from FIRSTFD to LASTFD.
1996-03-04 22:56:09 +00:00
Roland McGrath c3d3967cd2 Mon Mar 4 17:35:09 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* hurd/catch-signal.c (hurd_safe_memmove): New function.
	(hurd_safe_copyin, hurd_safe_copyout): New functions.
	* hurd/hurd/sigpreempt.h: Declare them.
1996-03-04 22:45:04 +00:00
Roland McGrath 661fa17673 Sat Mar 2 16:35:40 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/m68k/profil-counter.h: File removed.
	* sysdeps/unix/sysv/sysv4/solaris2/sparc/profil-counter.h: File
	removed.
	* sysdeps/generic/profil-counter.h: New file.
1996-03-02 21:38:05 +00:00
Roland McGrath 36ff88f69e Sat Mar 2 16:35:40 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/m68k/profil-counter.h: File removed.
	* sysdeps/unix/sysv/sysv4/solaris2/sparc/profil-counter.h: File
	removed.
	* sysdeps/generic/profil-counter.h: New file.
1996-03-02 21:37:50 +00:00
Brendan Kehoe 48a65a2993 * sysdeps/unix/sysv/sysv4/solaris2/sparc/sigcontext.h: New file,
including <sysdeps/unix/bsd/sun/sparc/sigcontext.h>. 
* sysdeps/unix/sysv/sysv4/solaris2/sparc/profil-counter.h: New file, 
same as linux/m68k/profil-counter.h except the comment.
Fri Mar  1 17:11:59 1996  Brendan Kehoe  <brendan@zen.org>

	* sysdeps/unix/sysv/sysv4/solaris2/sparc/sigcontext.h: New file,
	including <sysdeps/unix/bsd/sun/sparc/sigcontext.h>.
	* sysdeps/unix/sysv/sysv4/solaris2/sparc/profil-counter.h: New file,
	same as linux/m68k/profil-counter.h except the comment.
1996-03-02 01:34:50 +00:00
Roland McGrath 6b628d3634 * stdlib/Makefile (mpn-stuff): New target.
(copy-mpn): Use it.

	* Code copied from GMP updated to 1.937 version.
	* stdlib/strtod.c (HAVE_ALLOCA): Define this for gmp headers.
1996-03-01 18:45:35 +00:00
Roland McGrath bc47d7a85b Regenerated
Fri Mar  1 10:09:46 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* posix/glob.c: Use canonical code from autoconf manual for dirent
 	include.
	[_D_NAMLEN]: Redefine NAMLEN using this.
	(glob_in_dir): Use NAMLEN macro.
1996-03-01 17:42:49 +00:00
Roland McGrath e9607dbeb9 Fri Mar 1 10:09:46 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* posix/glob.c: Use canonical code from autoconf manual for dirent
 	include.
	[_D_NAMLEN]: Redefine NAMLEN using this.
	(glob_in_dir): Use NAMLEN macro.

	* sysdeps/posix/profil.c: New file.

Thu Feb 29 20:55:57 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/m68k/profil-counter.h: New file.

	* libc-symbols.h [GCC >= 2.8] (strong_alias, weak_alias): Remove
	`extern' keyword.

	* time/zic.c, time/zdump.c, time/private.h: Updated from ADO 96e.
1996-03-01 17:40:28 +00:00
Roland McGrath 4a9af5c708 Regenerated
Fri Jan 19 13:28:59 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* posix/glob.c (glob): Use prototype in getlogin decl.

Thu Jan 18 00:32:43 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* posix/glob.c (_GNU_SOURCE): Define if undefined, so glob.h
	defines GNU extensions.
	* posix/fnmatch.c: Likewise.

Fri Jan 12 13:40:01 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* posix/glob.c (glob): Add parens in glob call flags arg for
	GLOB_BRACE case.
1996-03-01 17:07:03 +00:00
Roland McGrath 01fec49ca6 Recognize cpu-vendor [ctj]90-cray, default c90-cray-unicos. From tege. 1996-03-01 14:57:49 +00:00
Miles Bader d1c57d0c40 Updated from ../gpl2lgpl.sed /home/gd/gnu/lib/getopt.c 1996-02-29 01:05:13 +00:00
Roland McGrath b7459e56bd Tue Feb 27 12:14:59 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* time/strftime.c: Support - and _ flags to affect number padding.

	* sysdeps/unix/common/tcsendbrk.c: New file.
1996-02-27 19:19:12 +00:00
Roland McGrath 92777700d2 Mon Feb 26 10:22:30 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/dirstream.h: Rewritten.
	* sysdeps/unix/readdir.c: Rewritten.
	* sysdeps/unix/telldir.c: Rewritten.
	* sysdeps/unix/closedir.c: Use <...> instead of "..." for dirstream.h.
	Remove __ from DIR struct member names.
	* sysdeps/unix/dirfd.c: Likewise.
	* sysdeps/unix/seekdir.c: Likewise.
	* sysdeps/unix/rewinddir.c: Likewise.
	* sysdeps/unix/opendir.c: Likewise.  Don't allocate extra space after
	DIR structure.
	* sysdeps/stub/direct.h: File removed.
	* sysdeps/unix/bsd/bsd4.4/direct.h: File removed.
	* sysdeps/unix/bsd/direct.h: File removed.
	* sysdeps/unix/common/direct.h: File removed.
	* sysdeps/unix/sysv/irix4/direct.h: File removed.
	* sysdeps/unix/sysv/isc3/direct.h: File removed.
	* sysdeps/unix/sysv/sco3.2.4/direct.h: File removed.
	* sysdeps/unix/sysv/sysv4/solaris2/direct.h: File removed.
	* sysdeps/unix/common/direntry.h: New file.
	* sysdeps/unix/bsd/direntry.h: New file.
	* sysdeps/unix/bsd/bsd4.4/direntry.h: New file.
	* sysdeps/unix/sysv/direntry.h: New file.
	* sysdeps/stub/direntry.h: New file.
	* dirent/dirent.h (struct dirent): Type removed.  Include <direntry.h>
	to define it.
	(_D_EXACT_NAMLEN, _D_ALLOC_NAMLEN): New macros.
	* dirent/Makefile (headers): Add direntry.h.
	(distribute): Remove direct.h.
	* sysdeps/posix/getcwd.c: Use new macros instead of d_namlen.
	* dirent/scandir.c: Likewise.
	* io/fts.c (fts_build): Likewise.
	* io/ftw.c (ftw_dir): Likewise.
	* sysdeps/posix/ttyname.c: Likewise.

	* sysdeps/unix/sysv/sysv4/solaris2/syscalls.list: New file.

	* sysdeps/mach/hurd/profil.c (MAX_PC_SAMPLES): New macro.
	(collector_timeout): New static variable.
	(update_waiter): Actually call __task_enable_pc_sampling.
	Set collector_timeout based on the `tick' count returned.
	(profile_waiter): Use MAX_PC_SAMPLES.  Set nsamples before RPC.
	Use collector_timeout in __mach_msg call.

	* gmon/Makefile (noprof): New variable containing mcount.
	Append profil unless it is in $(unix-syscalls).
	(mcount.po): Use $(noprof) for list of targets in this rule.

	* libc-symbols.h: Define _LIBC before #include <config.h>.

Sun Feb 25 12:29:23 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* config.h.in [_LIBC] (HAVE_STRERROR): Define it.
	Protect 2nd page of #undef's for generator programs with #ifndef _LIBC.

	* time/zic.c, time/zdump.c, time/private.h: Updated from ADO's latest.

Fri Feb  9 12:40:19 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

 	* libio/cleanup.c (_IO_cleanup_registration_needed)
	[!_G_HAVE_ATEXIT]: Init to NULL.
	* libio/filedoalloc.c (_IO_cleanup_registration_needed): Remove decl.

Thu Feb  8 08:12:50 1996  Brendan Kehoe  <brendan@cygnus.com>

	* libio/filedoalloc.c (_IO_cleanup_registration_needed): Revert
	previous change, since cleanup.c only defines it if _G_HAVE_ATEXIT.

Wed Feb  7 15:10:17 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* libio/filedoalloc.c (_IO_cleanup_registration_needed): Declare as
	extern.

Sat Feb 24 11:34:13 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* sysdeps/i386/memcmp.S: Fix argument %esp offsets.

	* time/sys/time.h (timeradd, timersub): New macros; BSD has these.
1996-02-27 00:55:03 +00:00
Roland McGrath a182affdd9 Wed Feb 21 02:25:07 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* Rules (others): Depend on $(extra-objs), $(install-lib),
	$(install-bin), $(install-sbin), in object directory.

	* Makeconfig (link-libc): Don't pass -rpath option with default
	path, since ld.so should use the same default.
	* Makerules (build-shlib): Likewise.

	* Makerules (make-target-directory): Use mkinstalldirs.

	* sysdeps/mach/i386/sysdep.h: Include unix/i386/sysdep.h to
	redefine ENTRY et al.

	* sysdeps/unix/sysv/linux/i386/sysdep.h (NO_UNDERSCORES, ENTRY):
	Macros removed.  The code in unix/i386/sysdep.h should now suffice.

	* sysdeps/unix/i386/sysdep.h (ALIGNARG): New macro, defns for
	[HAVE_ELF] and not.
	(ENTRY): Use it in .align directive.
	(CALL_MCOUNT): New macro, empty unless [PROF].
	(ENTRY): Do CALL_MCOUNT just after the label.

	* Makeconfig (CPPFLAGS-.po): New variable, use -DPROF so assembly
	code can call mcount.

Tue Feb 20 23:05:16 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* time/private.h, time/zdump.c, time/zic.c: Updated verbatim from ADO;
	translation markings are now integrated in his distribution.

	* stdlib/strtod.c (round_and_return): Add missing (mp_limb) 1 cast.

	* po: New directory where `LANG.po' files for message translations
	will reside.
	* po/SYS_libc.pot: New file, template of message strings as in source.
	* MakeTAGS: New rules to build po/SYS_libc.pot automatically from
	the source using xgettext.
	* Makerules ($(..)po/%.pot): New rule.
	* manual/Makefile (../po/manual.pot): New target, make it empty.

	* sysdeps/unix/bsd/alarm.c: Moved to sysdeps/unix/alarm.c.
	* sysdeps/unix/bsd/nice.c: Moved to sysdeps/unix/nice.c.
	* sysdeps/unix/bsd/stime.c: Moved to sysdeps/unix/stime.c.
	* sysdeps/unix/bsd/time.c: Moved to sysdeps/unix/time.c.
	* sysdeps/unix/bsd/utime.c: Moved to sysdeps/unix/utime.c.
1996-02-22 15:52:20 +00:00
Roland McGrath f2e235b9b8 Mon Feb 19 18:31:59 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* time/zic.c, time/scheck.c, time/private.h, time/tzfile.h:
	Updated from ADO 96d.
1996-02-19 23:34:46 +00:00
Roland McGrath 0ddc0d1604 Sun Feb 18 14:08:04 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* csu/initfini.c (_init): Remove bogus volatile declarations and
	extra variable, take the address of __gmon_start__ only implicitly
	to avoid the test being optimized out.
1996-02-19 23:25:15 +00:00
Roland McGrath bfc04a9ff1 Sun Feb 18 15:08:10 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/posix/utimes.c (__utimes): There are 1000000 usecs in a
	sec.

Sun Feb 18 13:56:00 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf/Makefile, time/Makefile: Make `all' the default target.

Mon Feb 19 18:09:04 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* misc/sys/ptrace.h: Moved to ...
	* sysdeps/generic/sys/ptrace.h: ... here.
	* sys/ptrace.h: File removed.

Sun Feb 18 12:13:07 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/Makefile (headers): Add fpu_control.h.

	* sysdeps/unix/sysv/linux/i386/sysdep.S (errno): Put it into .bss
 	so that the symbol alias works.

	* sysdeps/unix/sysv/linux/m68k/fpu_control.h (_FPU_SETCW): Corrected.

	* sysdeps/unix/sysv/linux/resourcebits.h: New file.

	* sysdeps/unix/sysv/linux/sys/ptrace.h: New file.

	* sysdeps/unix/sysv/linux/syscalls.list: Add getegid, geteuid,
	getppid and reboot.

	* sysdeps/unix/sysv/linux/sysconf.c: Special version that does not
	use getdtablesize.

Sat Feb 17 10:30:21 1996  David Mosberger-Tang  <davidm@AZStarNet.com>

	* stdio-common/printf_fp.c, stdlib/strtod.c, sysdeps/ieee754/dbl2mpn.c,
	sysdeps/ieee754/ldbl2mpn.c, sysdeps/ieee754/mpn2dbl.c,
	sysdeps/ieee754/mpn2ldbl.c: Cast left operands of shift instructions
	to `long' where necessary.

Thu Feb 15 20:04:50 1996  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* stdlib/fpioconst.h: Introduce new constant _FPIO_CONST_OFFSET.
	* stdio-common/printf_fp.c, stdlib/strtod.c: Use _FPIO_CONST_OFFSET
	to correctly access MPN array depending on architecture.
1996-02-19 23:14:44 +00:00
Roland McGrath be10a86854 *** empty log message ***
Mon Feb 19 15:30:26 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* stdio-common/tstscanf.c (main): Add check for "0" as %d.

	* sysdeps/stub/msync.c: Undo change of Jan 29; just two args.
	Only some systems have three args; let them define their own stub.

	* sysdeps/generic/dl-sysdep.c: Declare _dl_secure.

	* sysdeps/generic/machine-gmon.h: New file.
	* gmon/Makefile (distribute): Add machine-gmon.h.
	* gmon/mcount.c: Undo changes of Feb 13.
	Include "machine-gmon.h".

Sun Feb 18 13:24:06 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/direct.h: File removed, since it is
	identical to unix/common/direct.h.

	* sysdeps/unix/Makefile [no_deps]: Don't include s-proto.d.

	* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Don't add ipc.

	* stdio-common/Makefile (tests): Remove scanf6.

	* sysdeps/unix/sysv/linux/Makefile (non-lib.a): Append libieee.a.

	* time/mktime.c (mktime): Move static variable localtime_offset to
	file scope.

	* stdio-common/vfscanf.c: Put '0' in buffer before scanning for %i
	base indicator.

Thu Feb 15 16:56:17 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/dl-machine.h (elf_machine_load_address): Corrected.
	(ELF_MACHINE_BEFORE_RTLD_RELOC): Define.
	(_dl_runtime_resolve): Save %a1 as well.
	(ELF_MACHINE_RUNTIME_FIXUP_ARGS): Add second dummy arg.
	(elf_machine_relplt): Define.

	* elf/dl-runtime.c: Include possible extra args in declaration of
 	fixup.
1996-02-19 20:54:38 +00:00
Roland McGrath 1cbca0d93c Fri Feb 16 11:01:59 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* time/tzset.c: Limit hours to 23, not 12.  From jaffer.
1996-02-16 16:15:45 +00:00
Roland McGrath 7c97bb094e Fri Feb 16 10:14:05 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* Makeconfig (CFLAGS-.po): Use -pg instead of -p.
1996-02-16 15:14:24 +00:00
Roland McGrath 9b19f55dc8 Thu Feb 15 11:49:45 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/sysv/sysv4/Makefile [$(subdir)-signal]
	(sysdep_routines): Don't add sys-sig.

	* sysdeps/unix/sysv/sysv4/solaris2/syscalls.list: New file.
1996-02-16 14:47:21 +00:00
Roland McGrath 9e3db9cd59 Thu Feb 15 13:57:08 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* mach/Machrules: Use -include for $(*.ir).

	* hurd/hurd/ioctl.h (_HURD_HANDLE_IOCTLS): Mask off type bits in
	request values.
	* sysdeps/mach/hurd/ioctls.h (_IOC_NOTYPE): New macro.
	(_IOT_COUNT2): Field is 3 bits, not 2.
	* sysdeps/mach/hurd/ioctl.c: Ignore handler if it fails with ENOTTY.
	* hurd/hurdioctl.c (_hurd_lookup_ioctl_handler): Mask off type
	bits before looking up handler.
	(fioctl): Use __hurd_dfail.
	(fioctl, fioclex): Use ENOTTY for bogus request instead of EGRATUITOUS.

Wed Feb 14 00:21:17 1996 David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/alpha/memchr.c (memchr): loop searching for matching
	character bailed out one too early; changed constant 6 to
	7 to fix this.
1996-02-16 02:19:52 +00:00
Roland McGrath a1c46301bb * posix/execvp.c: When executing shell on script, first arg is
full file name, not argv[0].

	* mach/Makefile [no_deps]: Inhibit inclusion of mach-syscalls.mk.
	* mach/Machrules [no_deps]: Inhibit interface rules.
1996-02-14 06:39:32 +00:00
Roland McGrath de1b40af73 Wed Feb 14 01:08:58 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* malloc/Makefile (distribute): Removed TODO.

	* sysdeps/unix/sysv/linux/syscalls.list (ipc): Specify msgget in
	caller column.
1996-02-14 06:09:19 +00:00
Miles Bader e335fa388a Updated from ../gpl2lgpl.sed /home/gd/gnu/lib/getopt.c 1996-02-13 18:28:59 +00:00
Roland McGrath c6de696871 (ipc): Specify msgget in caller column. 1996-02-13 16:09:47 +00:00
Roland McGrath ae4c4dae36 * sysdeps/unix/common/syscalls.list: Add sigaction syscall. 1996-02-13 11:53:03 +00:00
Roland McGrath d2c2312316 * elf/dl-runtime.c (fixup) [ELF_MACHINE_RUNTIME_FIXUP_ARGS]: Let
this macro declare extra leading args.

	* Makerules [$(elf)=yes] (ar-symtab-name): Define to empty.
1996-02-13 11:49:42 +00:00
Roland McGrath 13987e686c New file from Schwab
* sysdeps/unix/sysv/linux/m68k/fpu_control.h: New file.
1996-02-13 11:40:36 +00:00
Roland McGrath 46d7de1907 Sat Feb 10 13:09:03 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/m68k/brk.c,
	sysdeps/unix/sysv/linux/m68k/mmap.S,
	sysdeps/unix/sysv/linux/m68k/select.S,
	sysdeps/unix/sysv/linux/m68k/sigcontext.h,
	sysdeps/unix/sysv/linux/m68k/sigreturn.S,
	sysdeps/unix/sysv/linux/m68k/socket.S,
	sysdeps/unix/sysv/linux/m68k/syscall.S,
	sysdeps/unix/sysv/linux/m68k/sysdep.S,
	sysdeps/unix/sysv/linux/m68k/sysdep.h: New files.
	* sysdeps/unix/sysv/linux/m68k/brk.c,
	sysdeps/unix/sysv/linux/m68k/mmap.S,
	sysdeps/unix/sysv/linux/m68k/select.S,
	sysdeps/unix/sysv/linux/m68k/sigcontext.h,
	sysdeps/unix/sysv/linux/m68k/sigreturn.S,
	sysdeps/unix/sysv/linux/m68k/socket.S,
	sysdeps/unix/sysv/linux/m68k/syscall.S,
	sysdeps/unix/sysv/linux/m68k/sysdep.S,
	sysdeps/unix/sysv/linux/m68k/sysdep.h: New files.
1996-02-13 11:38:58 +00:00
Roland McGrath 4eea716e2d i386/gnu/types.h moved to top-level linux dir.
* sysdeps/unix/sysv/linux/gnu/types.h: Moved from linux/i386.
1996-02-13 11:35:47 +00:00
Roland McGrath 2a072de4a1 Tue Feb 13 05:12:02 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/Makefile [$(subdir)=math]
	(sysdep_routines): Append setfpucw.
	(extra-objs): Append ieee-fpucw.o.
	(install-lib): Append libieee.a.
	(libieee.a): New target.
	* sysdeps/unix/sysv/linux/ieee-fpucw.c: New file.
	* sysdeps/unix/sysv/linux/i386/fpu_control.h
	(_FPU_GETCW, _FPU_SETCW): New macros.
	(fpu_control_t): New typedef.
	(__setfpucw): Use fpu_control_t for argument type.
	* sysdeps/unix/sysv/linux/fpu_control.c: Moved from linux/i386.

	* sysdeps/unix/sysv/linux/init-first.c: Moved from linux/i386.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir)=math]
	(sysdep_routines): Append setfpucw.
	(extra-objs): Append ieee-fpucw.o.
	(install-lib): Append libieee.a.
	(libieee.a): New target.
	* sysdeps/unix/sysv/linux/ieee-fpucw.c: New file.
	* sysdeps/unix/sysv/linux/i386/fpu_control.h
	(_FPU_GETCW, _FPU_SETCW): New macros.
	(fpu_control_t): New typedef.
	(__setfpucw): Use fpu_control_t for argument type.
	* sysdeps/unix/sysv/linux/fpu_control.c: Moved from linux/i386.

	* sysdeps/unix/sysv/linux/init-first.c: Moved from linux/i386.
1996-02-13 11:07:05 +00:00
Roland McGrath 363113d02a Tue Feb 13 05:12:02 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/syscalls.list: Add ipc syscall.
	* sysdeps/unix/sysv/linux/i386/syscalls.list: File removed.
Tue Feb 13 05:12:02 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/syscalls.list: Add ipc syscall.
	* sysdeps/unix/sysv/linux/i386/syscalls.list: File removed.
1996-02-13 10:16:25 +00:00
Roland McGrath 3585d6bf30 Sat Feb 10 13:09:03 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/fpu/isinfl.c, sysdeps/m68k/fpu/isnanl.c,
	sysdeps/m68k/isinfl.c, sysdeps/m68k/isnanl.c: New files.
	* sysdeps/m68k/fpu/isinfl.c, sysdeps/m68k/fpu/isnanl.c,
	sysdeps/m68k/isinfl.c, sysdeps/m68k/isnanl.c: New files.
1996-02-13 09:51:13 +00:00
Roland McGrath 01f3e03bcd Sat Feb 10 13:09:03 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/sys/mman.h: Define MAP_ANON and
	MAP_FILE if not already defined.

	* elf/elf.h: Add m68k reloc definitions.
	* sysdeps/m68k/dl-machine.h, sysdeps/m68k/elf/start.S: New files.
Sat Feb 10 13:09:03 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/sys/mman.h: Define MAP_ANON and
	MAP_FILE if not already defined.

	* elf/elf.h: Add m68k reloc definitions.
	* sysdeps/m68k/dl-machine.h, sysdeps/m68k/elf/start.S: New files.
1996-02-13 09:26:53 +00:00
Roland McGrath 38334018ff Tue Feb 13 00:12:12 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/i386/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE,
	elf_machine_relplt): New macros.
	* elf/dl-runtime.c: New file.
	* sysdeps/i386/dl-runtime.c, sysdeps/stub/dl-runtime.c: Files removed.
	* sysdeps/i386/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE,
	elf_machine_relplt): New macros.
	* elf/dl-runtime.c: New file.
	* sysdeps/i386/dl-runtime.c, sysdeps/stub/dl-runtime.c: Files removed.
1996-02-13 07:05:16 +00:00
Roland McGrath dbdb6189d5 Tue Feb 13 00:12:12 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* gmon/Makefile (headers): Remove machine-gmon.h.
	* sysdeps/stub/machine-gmon.h, sysdeps/i386/machine-gmon.h: Removed.
	* gmon/mcount.c [! NO_UNDERSCORES] (_mcount): Specify "mcount" as
	the asm name.
	(_mcount): Define normally, taking no args.
	Use __builtin_return_address to fetch PC values of caller and caller's
	caller.
Tue Feb 13 00:12:12 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* gmon/Makefile (headers): Remove machine-gmon.h.
	* sysdeps/stub/machine-gmon.h, sysdeps/i386/machine-gmon.h: Removed.
	* gmon/mcount.c [! NO_UNDERSCORES] (_mcount): Specify "mcount" as
	the asm name.
	(_mcount): Define normally, taking no args.
	Use __builtin_return_address to fetch PC values of caller and caller's
	caller.

	* Makerules: Rewrote rules to update libc archives of all flavors.
	Define separate specific rules for each flavor using o-iterator.

	* sysdeps/unix/Makefile: Include s-proto.d only ifdef subdir.

Sat Feb 10 11:35:16 1996 Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules (ar-symtab-name): New macro.  Replace all occurences
	of __.SYMDEF by $(ar-symtab-name).
	* sysdeps/unix/sysv/Makefile (ar-symtab-name): Define as empty.

	* Makefile (configure, %/configure): Depend on aclocal.m4.
	* Make-dist (configure, %/configure): Likewise.

	* sysdeps/unix/Makefile: Include s-proto.d for its deps.

	* gmon/sys/gmon.h: Don't include machine-gmon.h; those defns are
	only needed in the implementation, not for any users.

	* time/northamerica: Updated from ADO 96c, new rules for Mexico in
	1996.
1996-02-13 05:46:59 +00:00
Roland McGrath afced61c8f Updated from ADO 96c, new rules for Mexico in 1996. 1996-02-13 03:56:17 +00:00
Doug Evans d592cd699d Recognize sparclet cpu. 1996-02-12 23:15:30 +00:00
Per Bothner a7cb7644cf * config.guess (UNAME_VERSION): Recognize X4.x as an OSF version. * config.guess (*:CYGWIN*): New 1996-02-12 20:55:56 +00:00
Per Bothner 889a9677fd * config.guess: Support m68k-cbm-sysv4. * config.guess (*:Linux:*:*): Guess m68k-unknown-linux 1996-02-12 20:44:56 +00:00
Roland McGrath 25f9784eb8 * sunrpc/pm_getport.c: #if 0 out gratuitous inclusion of <net/if.h>.
* sunrpc/pm_getmaps.c: Likewise.
1996-02-12 10:36:01 +00:00
Roland McGrath 1fe58993bc * sysdeps/unix/sysv/syscalls.list: Add setrlimit and settimeofday,
so real syscalls override unix/sysv/*.c on sysv-derived systems
 	that have them.
	* sysdeps/unix/common/syscalls.list: Add settimeofday here, to
	override unix/sysv/settimeofday.c since that overrides
	unix/syscalls.list.

	* Makeconfig (+link): Put $(link-libc) after deps from $^,
	regardless of where libc.a appears in the deps.
1996-02-12 10:23:47 +00:00
Roland McGrath 63f8940402 * hurd/hurdfault.c (_hurdsig_fault_init): Set qlimit on
FORWARD_SIGEXC to one.  Uncomment setting of thread exc port, and
 	move it to last thing.
1996-02-12 10:00:30 +00:00
Roland McGrath 808c413c90 Mon Feb 12 03:10:41 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/sysv/sysv4/syscalls.list: Remove redundancies.
	Add __waitid.
	* sysdeps/unix/sysv/linux/syscalls.list: Remove redundancies.
	Define __ name for sigprocmask.
	* sysdeps/unix/bsd/ultrix4/syscalls.list: Remove redundancies.
	Add getsysinfo.
	* sysdeps/unix/bsd/sun/sunos4/syscalls.list: Remove redundancies.
	* sysdeps/unix/bsd/sun/syscalls.list: Remove redundancies.
	* sysdeps/unix/bsd/bsd4.4/syscalls.list: Remove redundancies.
	* sysdeps/unix/bsd/syscalls.list: Remove settimeofday, utimes.
	Add getdents, wait3, waitpid.
	* sysdeps/unix/syscalls.list: Add seteuid, setegid, setsid,
	settimeofday, sigsuspend, sstk, utimes.
	* sysdeps/unix/bsd/ultrix4/mips/sigvec.S: File removed.
	* sysdeps/unix/bsd/ultrix4/mips/syscalls.list: New file.
	* sysdeps/unix/bsd/ultrix4/mips/Makefile (sysdep_routines):
	Removed sigtramp.
	* sysdeps/unix/bsd/ultrix4/mips/sigvec.c: Renamed from sigtramp.c.
	* sysdeps/unix/bsd/bsd4.4/sstk.S: File removed.
	* sysdeps/unix/bsd/hp/m68k/syscalls.list: File removed.
	* sysdeps/unix/bsd/osf/alpha/getdents.S: File removed.
	* sysdeps/unix/bsd/ultrix4/getsysinfo.S: File removed.
	* sysdeps/unix/bsd/ultrix4/waitpid.S: File removed.
	* sysdeps/unix/bsd/ultrix4/mips/sigtramp.c: File removed.
	* sysdeps/unix/bsd/ultrix4/mips/sigvec.S: File removed.
	* sysdeps/unix/bsd/ultrix4/mips/sigvec.c: New file.
	* sysdeps/unix/bsd/ultrix4/mips/syscalls.list: New file.
	* sysdeps/unix/sysv/irix4/wait3.S: File removed.
	* sysdeps/unix/sysv/sysv4/__waitid.S: File removed.
	* sysdeps/unix/sysv/sysv4/fchdir.S: File removed.
	* sysdeps/unix/sysv/sysv4/setegid.S: File removed.
	* sysdeps/unix/sysv/sysv4/seteuid.S: File removed.
	* sysdeps/unix/sysv/sysv4/sigaltstack.S: File removed.
	* sysdeps/unix/sysv/sysv4/solaris2/utimes.S: File removed.
1996-02-12 08:37:31 +00:00
Roland McGrath 47665862cd (sysdep_routines): Removed sigtramp. 1996-02-12 08:11:19 +00:00
Richard M. Stallman bdf2af37da Fix typo in previous change. 1996-02-11 23:40:37 +00:00
Roland McGrath 186588d6bf Sat Feb 10 05:57:08 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/generic/make_siglist.c: #undef _SIGNAL_H before defining it.

	* sysdeps/unix/sysv/linux/syscalls.list: Add sigprocmask, sigsuspend.
1996-02-11 10:00:24 +00:00
Richard Kenner 3038e60115 (-psos*): New case. 1996-02-10 13:26:26 +00:00
Roland McGrath 932be5efa3 #undef _SIGNAL_H before defining it. 1996-02-10 11:19:12 +00:00
Roland McGrath 6a032d8158 Sat Feb 10 04:18:48 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* posix/execvp.c: If execv fails with ENOEXEC, run the shell on
	the file.

Fri Feb  9 11:46:45 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* time/Makefile (CFLAGS-zdump.c, CFLAGS-zic.c, CFLAGS-ialloc.c,
	CFLAGS-scheck.c): Use -DNOID instead of -Wno-unused.

	* hurd/Makefile (user-interfaces): Added hurd/tioctl.
1996-02-10 10:00:27 +00:00
Roland McGrath 56f778c958 Thu Feb 8 18:55:27 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hurd/hurdioctl.c (tiocsctty): Set the terminal's pgrp to our own.
1996-02-09 10:00:23 +00:00
Roland McGrath a482b5a595 * Makefile (subdirs): Added wcsmbs.
* wcsmbs: New directory of wide char/multibyte char functions from
	drepper.
1996-02-08 10:00:34 +00:00
Roland McGrath 4ca84cff3b Wed Feb 7 18:48:30 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hurd/hurdmsg.c (_S_msg_report_wait): Function removed.
	* hurd/report-wait.c: New file.
	* hurd/Makefile (routines): Added report-wait.

	* sysdeps/mach/hurd/Makefile (inhibit-unix-syscalls): New variable.

	* sysdeps/mach/hurd/i386/intr-msg.h (struct mach_msg_trap_args):
	New type.
	(SYSCALL_EXAMINE, MSG_EXAMINE): New inline functions.
	* sysdeps/mach/hurd/i386/trampoline.c (struct mach_msg_trap_args):
	Structure moved to intr-msg.h; include that.

	* time/Makefile (CFLAGS-ialloc.c): Add -Wno-unused.
	(CFLAGS-scheck.c): New variable.

	* sysdeps/mach/hurd/dl-sysdep.c (__hurd_sigthread_stack_base,
	__hurd_sigthread_stack_end, __hurd_sigthread_variables,
	__hurd_threadvar_stack_mask): New variables.

	* sysdeps/mach/hurd/fork.c: Set the new task's exception port to
	its new message port.

	* misc/init-misc.c: Put __init_misc in the __libc_subinit set.

	* configure.in (uname): Add quoting.

	* sysdeps/mach/hurd/fchdir.c: Don't consult errno unless lookup fails.
	* hurd/fchroot.c: Likewise.

	* posix/sys/types.h [GCC >= 2.7]: Define intN_t/u_intN_t using
	__attribute__ ((__mode__ (__XX__))).

Wed Feb 7 03:24:05 1996 Torbjorn Granlund  <tege@tmg.se>

	* sysdeps/i386/i586/memcopy.h (WORD_COPY_FWD): Manually allocate
	destination cache lines.
	(WORD_COPY_BWD): Likewise.

Wed Feb  7 14:16:36 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* sysdeps/generic/Makefile (make_siglist): Get signum.h absolute
	file name first thing, before $(native-compile) changes directories.

	From Gord Matzigkeit <gord@enci.ucalgary.ca>:
	* sysdeps/unix/make_errlist.c: Use strerror if available.
	* sysdeps/unix/configure.in: New file

	* sysdeps/unix/bsd/sun/syscalls.list: Added sigvec.
	* sysdeps/unix/bsd/sun/sigvec.S: File removed.

	* sysdeps/stub/sendto.c: Make sockaddr arg pointer to const.
	* sysdeps/stub/connect.c: Likewise.
	* sysdeps/stub/bind.c: Likewise.

	* hurd/hurdlookup.c (__hurd_file_name_lookup_retry): RETRYNAME of
	"" is only special for FS_RETRY_NORMAL; for FS_RETRY_REAUTH, do
	another dir_lookup of "".
1996-02-08 02:10:15 +00:00
Roland McGrath 1ac3b08e93 Fri Feb 2 13:09:18 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/fork.c: Clear trace flag in child.
1996-02-03 10:00:25 +00:00
Michael Meissner c09ebb85ba Add cygwin32; Put eabi .sdata2/.sbss2 into read-only memory 1996-02-03 01:03:27 +00:00
Roland McGrath b07c5668f6 Updated from ../gpl2lgpl.sed /home/gd/gnu/lib/getopt.c 1996-02-02 18:41:42 +00:00
Roland McGrath 5413944738 Wed Jan 31 20:08:26 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hurd/intr-msg.c (_hurd_intr_rpc_mach_msg): Clear SS->intr_port
	when cancelled before RPC.
1996-02-01 10:00:23 +00:00
Roland McGrath b18c76e9f5 (_hurd_intr_rpc_mach_msg): Clear SS->intr_port when cancelled before RPC. 1996-02-01 01:08:12 +00:00
Ian 635a540581 Add support for A/UX 1996-01-31 19:14:05 +00:00
Ian 4505e8c1ed Recognize A/UX 1996-01-31 19:10:52 +00:00
Roland McGrath 01cdeca0c9 Tue Jan 30 13:32:05 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* dirent/scandir.c: Allocate dirents with correct size for name, and
	copy with correct size.

	* hurd/hurdinit.c [! PIC] (map0): New function, on _hurd_preinit_hook.

	* stdio-common/vfscanf.c (TYPEMOD): New macro of all type modifier
	flag bits.
	(__vfscanf): Fix checking of extra type modifiers.

	* time/asia, time/australasia, time/backward: Updated from ADO 96b.

Tue Jan 30 12:17:26 1996  Ulrich Drepper  <drepper@ipd.info.uni-karlsruhe.de>

	* stdlib/strtod.c: Only negate exponent when there really is one.

	* stdio-common/vfscanf.c: Accept type modifiers on %n.
	Fix FP number parsing.
1996-01-31 10:00:24 +00:00
Roland McGrath f0b1101835 Mon Jan 29 21:53:40 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/stub/msync.c (msync): Declare third arg FLAGS.

	* resolv/Makefile (+cflags): Append to this instead of CFLAGS.

Mon Jan 29 16:29:16 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/select.c (__select): Recalculate GOT to
 	include an increment for each operation allowed on each fd.

Mon Jan 29 11:44:38 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/configure: Set $inhibit_glue.

	* Makefile: Use -include for sysd-dirs.

	* configure.in (uname): Check for uname in syscalls.list files.
	* sysdeps/unix/sysv/syscalls.list: Remove uname.
	* sysdeps/unix/syscalls.list: Add uname.

	* stdlib/strtol.c (weak1): New macro, to get the right name declared
	weak.

	* sysdeps/posix/getcwd.c (size_t): Don't define #ifdef __GNU_LIBRARY__.

	* db/hash/ndbm.c: Change all uses of `errno' struct member to `errnum'.
	(dbm_open): Use dynamic allocation for file name buffer, instead of
	limitting its size to MAXPATHLEN.

	* db/btree/bt_open.c (tmp): Use dynamic allocation for file name
	buffer, instead of limitting its size to MAXPATHLEN.

	* db/hash/hash.h (HTAB): Rename member `errno' to `errnum'.
	* db/hash/hash.c: Change all uses of `errno' struct member to `errnum'.
1996-01-30 10:00:24 +00:00
Roland McGrath f3fc970dae (+cflags): Append to this instead of CFLAGS. 1996-01-30 02:53:27 +00:00
Miles Bader 924940c120 (__select): Recalculate GOT to include an increment for each operation allowed on each fd. 1996-01-29 21:45:43 +00:00
Roland McGrath b86199fb60 Set $inhibit_glue. 1996-01-29 19:30:15 +00:00
Roland McGrath 429ed67ba1 Sun Jan 28 19:42:04 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* time/Makefile: Fix check for cross compiling.
Sun Jan 28 19:42:04 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* time/Makefile: Fix check for cross compiling.
1996-01-29 16:11:27 +00:00
Roland McGrath 19c3f20809 Thu Jan 25 21:10:39 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* db/Makefile (subdir-dirs): Renamed from dbdirs.

	* Makerules (distinfo-vars): Add subdir-dirs.

	* MakeTAGS: Remove vpath directives.
	(all-dirs): Prepend $(subdir-dirs).
	(all-sources, all-headers): Use wildcard to find sources.
Thu Jan 25 21:10:39 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* db/Makefile (subdir-dirs): Renamed from dbdirs.

	* Makerules (distinfo-vars): Add subdir-dirs.

	* MakeTAGS: Remove vpath directives.
	(all-dirs): Prepend $(subdir-dirs).
	(all-sources, all-headers): Use wildcard to find sources.

Mon Jan 29 10:44:38 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* malloc/Makefile (CFLAGS-vm-limit.c, CFLAGS-ralloc.c): New
	variables.

	* mach/msgserver.c: Declare DEMUX arg with prototype.
1996-01-29 16:05:21 +00:00
Roland McGrath dc825f85f4 Sun Jan 28 17:25:38 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* setjmp/setjmp.h (jmp_buf): Give a tag in the struct defn, to
	make C++ happy.
	* alpha/jmp_buf.h: Likewise.
	* m68k/jmp_buf.h: Likewise.
	* mips/jmp_buf.h: Likewise.
	* sparc/jmp_buf.h: Likewise.
	* vax/jmp_buf.h: Likewise.
Sun Jan 28 17:25:38 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* setjmp/setjmp.h (jmp_buf): Give a tag in the struct defn, to
	make C++ happy.
	* alpha/jmp_buf.h: Likewise.
	* m68k/jmp_buf.h: Likewise.
	* mips/jmp_buf.h: Likewise.
	* sparc/jmp_buf.h: Likewise.
	* vax/jmp_buf.h: Likewise.

	* sysdeps/generic/memmem.c: Fix return value in case where
	NEEDLE_LEN==0.

	* hurd/hurdlookup.c (__file_name_lookup_under,
	__file_name_lookup): Restrict mode with umask.
	* sysdeps/mach/hurd/xmknod.c: Restrict mode with umask.
	* sysdeps/mach/hurd/mkdir.c: Restrict mode with umask.
1996-01-28 22:47:31 +00:00
Roland McGrath eb8c0f2de5 Fri Jan 26 12:20:45 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* stdlib/strtol.c: Undo last change.  ANSI C changed since the
	draft I checked yesterday.  Sigh.
1996-01-27 10:00:24 +00:00
Roland McGrath 8dad333dce Thu Jan 25 18:58:25 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* stdlib/strtol.c [UNSIGNED]: Don't recognize + or - as sign.
1996-01-26 10:00:23 +00:00
Roland McGrath ebc53fbed0 * malloc/mcheck.c (mabort): Declare prototype. 1996-01-25 10:00:24 +00:00
Roland McGrath 555f3a396a * sysdeps/unix/sysv/linux/fcntlbits.h: Moved from linux/i386.
* Makerules: Use -include for generated makefiles.

	* errno.h: Don't declare errno if it's defined as a macro.
1996-01-24 20:36:21 +00:00
Roland McGrath 914d9d7bdf * stdio-common/vfscanf.c: Disallow l flag after ll or L. 1996-01-24 08:25:13 +00:00
Roland McGrath a66067befe * stdio-common/Makefile (tests): Add scanf[1-9].
* stdio-common/scanf[1-9].c: New files.  Bug tests from hjl.
Wed Jan 24 03:22:07 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* stdio-common/Makefile (tests): Add scanf[1-9].
	* stdio-common/scanf[1-9].c: New files.  Bug tests from hjl.
1996-01-24 08:23:33 +00:00
Roland McGrath 0793d3483a Wed Jan 24 04:18:36 1996 Paul Eggert <eggert@twinsun.com>
* strftime.c (strftime):
	When invoking self, check whether the subsidiary invocation failed.
	Use "???" (not "") to denote unknown time zone information.

	Make this source file portable to standalone contexts (e.g. GNU Emacs).
	<config.h>: Include if HAVE_CONFIG_H is defined.
	(HAVE_LIMITS_H, HAVE_MBLEN, HAVE_TM_ZONE, STDC_HEADERS): New symbols,
	defined if _LIBC or if <config.h> defines them.
	<ansidecl.h>, "../locale/localeinfo.h": Include only if _LIBC.
	<sys/types.h>: New include; some hosts require it for `time_t'.
	<ctype.h>: Include only if HAVE_MBLEN (since it's only needed then).
	<limits.h>: Include only if HAVE_LIMITS_H.
	<stddef.h, stdlib.h, string.h>: Include only if STDC_HEADERS.
	(memcpy): Define in terms of bcopy if !STDC_HEADERS.
	(__P, PTR): Define if not already defined.
	(__tzname, __daylight, __timezone): Remove macros; no longer needed.
	(add, strftime): Don't use NULL, for portability to some weird hosts.
	(fmt): If !_LIBC, don't assume sprintf returns a count.
	(week, strftime): Use old-style function declarations.
	(weekday_name, month_name): New constants.
	(strftime): Use traditional C values if locale support isn't available.
	Use `const' instead of CONST.  For time zones, use tm_zone if
	possible, then fall back on tzname.  Don't check for multibyte
	characters unless mblen is supported.  Use formats like %02d instead
	of %.2d, for portability to older hosts.
Wed Jan 24 04:18:36 1996  Paul Eggert  <eggert@twinsun.com>

	* strftime.c (strftime):
	When invoking self, check whether the subsidiary invocation failed.
	Use "???" (not "") to denote unknown time zone information.

	Make this source file portable to standalone contexts (e.g. GNU Emacs).
	<config.h>: Include if HAVE_CONFIG_H is defined.
	(HAVE_LIMITS_H, HAVE_MBLEN, HAVE_TM_ZONE, STDC_HEADERS): New symbols,
	defined if _LIBC or if <config.h> defines them.
	<ansidecl.h>, "../locale/localeinfo.h": Include only if _LIBC.
	<sys/types.h>: New include; some hosts require it for `time_t'.
	<ctype.h>: Include only if HAVE_MBLEN (since it's only needed then).
	<limits.h>: Include only if HAVE_LIMITS_H.
	<stddef.h, stdlib.h, string.h>: Include only if STDC_HEADERS.
	(memcpy): Define in terms of bcopy if !STDC_HEADERS.
	(__P, PTR): Define if not already defined.
	(__tzname, __daylight, __timezone): Remove macros; no longer needed.
	(add, strftime): Don't use NULL, for portability to some weird hosts.
	(fmt): If !_LIBC, don't assume sprintf returns a count.
	(week, strftime): Use old-style function declarations.
	(weekday_name, month_name): New constants.
	(strftime): Use traditional C values if locale support isn't available.
	Use `const' instead of CONST.  For time zones, use tm_zone if
	possible, then fall back on tzname.  Don't check for multibyte
	characters unless mblen is supported.  Use formats like %02d instead
	of %.2d, for portability to older hosts.

Wed Jan 24 00:07:52 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* stdio-common/vfscanf.c (GROUP, MALLOC): New flag macros.
	(__vfscanf): Eliminate flag vars that were redundant with FLAGS bits.
	Fix bug in recognition of %ll flag for long long.
	Fix overeager checks for conflicting type modifiers.
	With ' flag, match thousands separators for decimal numbers.

Tue Jan 23 22:02:40 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* locale/Makefile (CFLAGS-locfile-lex.c): New variable.

	* resolv/Makefile (CFLAGS): Disable some warnings.

	* sysdeps/generic/Makefile (elided-routines): Removed hypot.
	(+gccwarn): Set with override.

	* stdio-common/Makefile (CFLAGS-tst-printf.c): New variable.

	* posix/Makefile (CFLAGS-regex.c): New variable.

	* malloc/Makefile (CFLAGS-obstack.c): New variable.

	* io/Makefile (CFLAGS-fts.c): New variable.
	* io/fts.c (fts_open): Use prototypes for COMPAR decl.

Tue Jan 23 21:35:32 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/bind.c (bind): Ensure NAME for the AF_LOCAL
	case is '\0'-terminated.

Tue Jan 23 19:49:54 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* elf/rtld.c (dl_main): Support additional args in --list mode for
	debugging: look them up as symbol names and print values.

	* misc/getttyent.c (skip, value): Declare with prototypes in file
	scope.

	* csu/initfini.c (_init): Explicitly set a variable that is
 	pointer to volatile with the address of __gmon_start__, to avoid
 	the test being optimized out.
1996-01-24 06:03:37 +00:00
Roland McGrath 8ebd0a71be (fts_open): Use prototypes for COMPAR decl. 1996-01-24 03:02:14 +00:00
Miles Bader 6d5cbf7b35 (bind): Ensure NAME for the AF_LOCAL case is '\0'-terminated. 1996-01-24 02:39:26 +00:00
Roland McGrath fd86137937 (dl_main): Support additional args in --list mode for debugging: look them up as symbol names and print values. 1996-01-24 01:34:10 +00:00
Roland McGrath 1d8dc4293f Mon Jan 22 10:40:40 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/posix/getcwd.c [__GNU_LIBRARY__]: Include unistd.h.

	* io/fts.h (FTSENT): Define fts_compar member with prototype.

	* hurd/hurd.h: Use prototype in getcttyid decl.

	* stdlib/l64a.c: Fix typo in last change.

	* stdlib/drand48-iter.c: Test limits.h macros instead of sizeof
	for determining size of types.
	* stdlib/srand48_r.c: Likewise.

	* misc/utmp.h: Declare login, logout, logwtmp.
	* misc/logout.c: Declare argument as pointer to const.
	* misc/login.c: Likewise.
	* misc/logwtmp.c: Likewise.
	Include time.h, string.h.

	* misc/efgcvt_r.c: Include stdlib.h.

	* io/mknod.c: Include sys/types.h.

	* gmon/sys/gmon.h: Declare monstartup, _mcleanup.

	* csu/gmon-start.c (_start, etext): Declare with prototypes.

	* stdio-common/vfscanf.c (%[): Fix range handling.
1996-01-23 10:00:23 +00:00
Roland McGrath f2f7f9e665 * misc/Makefile (headers): Rename queue.h to sys/queue.h.
* misc/queue.h: Moved to misc/sys/queue.h.
1996-01-22 10:00:24 +00:00
Roland McGrath bbed653cda Sun Jan 21 00:55:25 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/shmat.c: Include sys/shm.h instead of
	sys/sem.h.

	* stdlib/stdlib.h [__USE_SVID]: Declare a64l, l64a.

	* stdlib/l64a.c: Use 6-bit numbers as indices in CONV_TABLE, not
	literal byte values.

	* misc/bsd-compat.c (getpgrp): Define with prototype.

	* misc/init-misc.c (__progname_full): New variable.
	(program_invocation_name, program_invocation_short_name): New aliases.
	(__init_misc): Define with prototype.  Set __progname_full.
	* misc/progname.c: File removed.
	* misc/Makefile (aux): Remove progname.

	* misc/hsearch_r.c (isprime): Define with prototype.

	* sysdeps/unix/sysv/linux/seteuid.c: Just include unix/bsd version.
	* sysdeps/unix/bsd/seteuid.c: Disallow arg of -1.
	* sysdeps/unix/bsd/setegid.c: Likewise.
1996-01-21 10:01:05 +00:00
Roland McGrath eb63bdd072 * sysdeps/unix/sysv/linux/tcdrain.c: Define tcdrain, not
__tcdrain.

	* posix/glob.c (glob): Use prototype in getlogin decl.

	* db/ndbm.h: Declare dbm_error, dbm_clearerr.
	* db/db/db.c (__dberr): Define with prototype.
	(__dbpanic): Use prototypes in casts.
	* db/hash/hash_log2.c: Add prototype decl.

	* sysdeps/generic/_strerror.c (_strerror_internal): Define with
	prototype.
1996-01-20 10:00:23 +00:00
Roland McGrath 522548fb47 Fri Jan 19 13:28:59 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/unix/mkdir.c, syspdep/unix/rmdir.c: Moved from unix/sysv.
	They will be overridden with syscalls if extant by unix/syscalls.list.
Fri Jan 19 13:28:59 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* sysdeps/unix/mkdir.c, syspdep/unix/rmdir.c: Moved from unix/sysv.
	They will be overridden with syscalls if extant by unix/syscalls.list.

	* Makeconfig (+gccwarn): Add -Wstrict-prototypes.

	* stdio-common/printf_fp.c (__printf_fp): Define with prototype.
	* stdio-common/vfprintf.c (_IO_helper_overflow): Likewise.
1996-01-19 18:43:03 +00:00
Roland McGrath 97aa195cf7 * io/Makefile (routines): Add mknod, xstat fxstat lxstat xmknod.
* sysdeps/unix/sysv/linux/ptrace.c: Use ... decl, and stdarg.h to
	get args.

	* posix/glob.c (_GNU_SOURCE): Define if undefined, so glob.h
	defines GNU extensions.
	* posix/fnmatch.c: Likewise.
1996-01-19 10:00:23 +00:00
Roland McGrath 9b29e6f7a3 Thu Jan 18 00:32:43 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
Replaced all simple system call files *.S throughout sysdeps/unix
	with syscalls.list files to be processed by make-syscalls.sh.
	* sysdeps/unix/s-proto.S: New file.
	* sysdeps/unix/syscalls.list: New file.
	* sysdeps/unix/bsd/syscalls.list: New file.
	* sysdeps/unix/bsd/bsd4.4/syscalls.list: New file.
	* sysdeps/unix/bsd/hp/m68k/syscalls.list: New file.
	* sysdeps/unix/bsd/osf/syscalls.list: New file.
	* sysdeps/unix/bsd/osf/alpha/syscalls.list: New file.
	* sysdeps/unix/bsd/sony/newsos4/syscalls.list: New file.
	* sysdeps/unix/bsd/sun/syscalls.list: New file.
	* sysdeps/unix/bsd/sun/sunos4/syscalls.list: New file.
	* sysdeps/unix/bsd/ultrix4/syscalls.list: New file.
	* sysdeps/unix/common/syscalls.list: New file.
	* sysdeps/unix/inet/syscalls.list: New file.
	* sysdeps/unix/mman/syscalls.list: New file.
	* sysdeps/unix/sysv/syscalls.list: New file.
	* sysdeps/unix/sysv/irix4/syscalls.list: New file.
	* sysdeps/unix/sysv/isc2.2/syscalls.list: New file.
	* sysdeps/unix/sysv/linux/syscalls.list: New file.
	* sysdeps/unix/sysv/linux/i386/syscalls.list: New file.
	* sysdeps/unix/sysv/sco3.2.4/syscalls.list: New file.
	* sysdeps/unix/sysv/sysv4/syscalls.list: New file.
	* sysdeps/unix/sysv/sysv4/i386/syscalls.list: New file.
	* sysdeps/unix/sysv/sysv4/solaris2/sparc/syscalls.list: New file.
	* sysdeps/unix/acct.S: File removed.
	* sysdeps/unix/chdir.S: File removed.
	* sysdeps/unix/chmod.S: File removed.
	* sysdeps/unix/chown.S: File removed.
	* sysdeps/unix/chroot.S: File removed.
	* sysdeps/unix/close.S: File removed.
	* sysdeps/unix/configure: File removed.
	* sysdeps/unix/configure.in: File removed.
	* sysdeps/unix/dup.S: File removed.
	* sysdeps/unix/fcntl.S: File removed.
	* sysdeps/unix/fsync.S: File removed.
	* sysdeps/unix/getgid.S: File removed.
	* sysdeps/unix/getpid.S: File removed.
	* sysdeps/unix/getuid.S: File removed.
	* sysdeps/unix/ioctl.S: File removed.
	* sysdeps/unix/kill.S: File removed.
	* sysdeps/unix/link.S: File removed.
	* sysdeps/unix/lseek.S: File removed.
	* sysdeps/unix/open.S: File removed.
	* sysdeps/unix/ptrace.S: File removed.
	* sysdeps/unix/read.S: File removed.
	* sysdeps/unix/reboot.S: File removed.
	* sysdeps/unix/setgid.S: File removed.
	* sysdeps/unix/setuid.S: File removed.
	* sysdeps/unix/sync.S: File removed.
	* sysdeps/unix/umask.S: File removed.
	* sysdeps/unix/unlink.S: File removed.
	* sysdeps/unix/write.S: File removed.
	* sysdeps/unix/bsd/flock.S: File removed.
	* sysdeps/unix/bsd/getdtsz.S: File removed.
	* sysdeps/unix/bsd/getpagesize.S: File removed.
	* sysdeps/unix/bsd/killpg.S: File removed.
	* sysdeps/unix/bsd/profil.S: File removed.
	* sysdeps/unix/bsd/readv.S: File removed.
	* sysdeps/unix/bsd/settimeofday.S: File removed.
	* sysdeps/unix/bsd/sigblock.S: File removed.
	* sysdeps/unix/bsd/sigpause.S: File removed.
	* sysdeps/unix/bsd/sigsetmask.S: File removed.
	* sysdeps/unix/bsd/sigstack.S: File removed.
	* sysdeps/unix/bsd/sigvec.S: File removed.
	* sysdeps/unix/bsd/utimes.S: File removed.
	* sysdeps/unix/bsd/writev.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/chflags.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/fchdir.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/fchflags.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/getdents.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/getdomain.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/revoke.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/setdomain.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/setegid.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/seteuid.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/setlogin.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/setsid.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/sigaltstack.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/wait4.S: File removed.
	* sysdeps/unix/bsd/hp/m68k/getdents.S: File removed.
	* sysdeps/unix/bsd/osf/msync.S: File removed.
	* sysdeps/unix/bsd/osf/alpha/wait4.S: File removed.
	* sysdeps/unix/bsd/sony/newsos4/fchdir.S: File removed.
	* sysdeps/unix/bsd/sony/newsos4/sys_wait4.S: File removed.
	* sysdeps/unix/bsd/sun/getdents.S: File removed.
	* sysdeps/unix/bsd/sun/sunos3/m68k/wait.S: File removed.
	* sysdeps/unix/bsd/sun/sunos4/msync.S: File removed.
	* sysdeps/unix/bsd/sun/sunos4/poll.S: File removed.
	* sysdeps/unix/bsd/sun/sunos4/setsid.S: File removed.
	* sysdeps/unix/bsd/sun/sunos4/sys_mmap.S: File removed.
	* sysdeps/unix/bsd/sun/sunos4/sys_wait4.S: File removed.
	* sysdeps/unix/bsd/sun/sunos4/uname.S: File removed.
	* sysdeps/unix/bsd/ultrix4/getdents.S: File removed.
	* sysdeps/unix/bsd/ultrix4/setsid.S: File removed.
	* sysdeps/unix/bsd/ultrix4/uname.S: File removed.
	* sysdeps/unix/common/access.S: File removed.
	* sysdeps/unix/common/adjtime.S: File removed.
	* sysdeps/unix/common/dup2.S: File removed.
	* sysdeps/unix/common/fchmod.S: File removed.
	* sysdeps/unix/common/fchown.S: File removed.
	* sysdeps/unix/common/ftruncate.S: File removed.
	* sysdeps/unix/common/getgroups.S: File removed.
	* sysdeps/unix/common/getitimer.S: File removed.
	* sysdeps/unix/common/getpgid.S: File removed.
	* sysdeps/unix/common/getpriority.S: File removed.
	* sysdeps/unix/common/getrlimit.S: File removed.
	* sysdeps/unix/common/getrusage.S: File removed.
	* sysdeps/unix/common/gettimeofday.S: File removed.
	* sysdeps/unix/common/mkdir.S: File removed.
	* sysdeps/unix/common/readlink.S: File removed.
	* sysdeps/unix/common/rename.S: File removed.
	* sysdeps/unix/common/rmdir.S: File removed.
	* sysdeps/unix/common/select.S: File removed.
	* sysdeps/unix/common/setgroups.S: File removed.
	* sysdeps/unix/common/setitimer.S: File removed.
	* sysdeps/unix/common/setpgid.S: File removed.
	* sysdeps/unix/common/setpriority.S: File removed.
	* sysdeps/unix/common/setregid.S: File removed.
	* sysdeps/unix/common/setreuid.S: File removed.
	* sysdeps/unix/common/setrlimit.S: File removed.
	* sysdeps/unix/common/swapon.S: File removed.
	* sysdeps/unix/common/symlink.S: File removed.
	* sysdeps/unix/common/truncate.S: File removed.
	* sysdeps/unix/common/vhangup.S: File removed.
	* sysdeps/unix/inet/accept.S: File removed.
	* sysdeps/unix/inet/bind.S: File removed.
	* sysdeps/unix/inet/connect.S: File removed.
	* sysdeps/unix/inet/gethostid.S: File removed.
	* sysdeps/unix/inet/gethostname.S: File removed.
	* sysdeps/unix/inet/getpeername.S: File removed.
	* sysdeps/unix/inet/getsockname.S: File removed.
	* sysdeps/unix/inet/getsockopt.S: File removed.
	* sysdeps/unix/inet/listen.S: File removed.
	* sysdeps/unix/inet/recv.S: File removed.
	* sysdeps/unix/inet/recvfrom.S: File removed.
	* sysdeps/unix/inet/recvmsg.S: File removed.
	* sysdeps/unix/inet/send.S: File removed.
	* sysdeps/unix/inet/sendmsg.S: File removed.
	* sysdeps/unix/inet/sendto.S: File removed.
	* sysdeps/unix/inet/sethostid.S: File removed.
	* sysdeps/unix/inet/sethostname.S: File removed.
	* sysdeps/unix/inet/setsockopt.S: File removed.
	* sysdeps/unix/inet/shutdown.S: File removed.
	* sysdeps/unix/inet/socket.S: File removed.
	* sysdeps/unix/inet/socketpair.S: File removed.
	* sysdeps/unix/mman/madvise.S: File removed.
	* sysdeps/unix/mman/mmap.S: File removed.
	* sysdeps/unix/mman/mprotect.S: File removed.
	* sysdeps/unix/mman/msync.S: File removed.
	* sysdeps/unix/mman/munmap.S: File removed.
	* sysdeps/unix/sysv/alarm.S: File removed.
	* sysdeps/unix/sysv/ftime.S: File removed.
	* sysdeps/unix/sysv/nice.S: File removed.
	* sysdeps/unix/sysv/pause.S: File removed.
	* sysdeps/unix/sysv/poll.S: File removed.
	* sysdeps/unix/sysv/s_getdents.S: File removed.
	* sysdeps/unix/sysv/signal.S: File removed.
	* sysdeps/unix/sysv/stime.S: File removed.
	* sysdeps/unix/sysv/time.S: File removed.
	* sysdeps/unix/sysv/times.S: File removed.
	* sysdeps/unix/sysv/ulimit.S: File removed.
	* sysdeps/unix/sysv/uname.S: File removed.
	* sysdeps/unix/sysv/utime.S: File removed.
	* sysdeps/unix/sysv/irix4/getpgid.S: File removed.
	* sysdeps/unix/sysv/irix4/msync.S: File removed.
	* sysdeps/unix/sysv/irix4/setpgid.S: File removed.
	* sysdeps/unix/sysv/irix4/signal.S: File removed.
	* sysdeps/unix/sysv/irix4/sysmp.S: File removed.
	* sysdeps/unix/sysv/irix4/syssgi.S: File removed.
	* sysdeps/unix/sysv/isc2.2/rename.S: File removed.
	* sysdeps/unix/sysv/linux/adjtimex.S: File removed.
	* sysdeps/unix/sysv/linux/fork.S: File removed.
	* sysdeps/unix/sysv/linux/getpgid.S: File removed.
	* sysdeps/unix/sysv/linux/getpgrp.S: File removed.
	* sysdeps/unix/sysv/linux/getsid.S: File removed.
	* sysdeps/unix/sysv/linux/gtty.S: File removed.
	* sysdeps/unix/sysv/linux/mlock.S: File removed.
	* sysdeps/unix/sysv/linux/mlockall.S: File removed.
	* sysdeps/unix/sysv/linux/mount.S: File removed.
	* sysdeps/unix/sysv/linux/munlock.S: File removed.
	* sysdeps/unix/sysv/linux/munlockall.S: File removed.
	* sysdeps/unix/sysv/linux/pipe.S: File removed.
	* sysdeps/unix/sysv/linux/s_ptrace.S: File removed.
	* sysdeps/unix/sysv/linux/setpgid.S: File removed.
	* sysdeps/unix/sysv/linux/setsid.S: File removed.
	* sysdeps/unix/sysv/linux/settimeofday.S: File removed.
	* sysdeps/unix/sysv/linux/sigpending.S: File removed.
	* sysdeps/unix/sysv/linux/stty.S: File removed.
	* sysdeps/unix/sysv/linux/umount.S: File removed.
	* sysdeps/unix/sysv/linux/wait4.S: File removed.
	* sysdeps/unix/sysv/linux/i386/ipc.S: File removed.
	* sysdeps/unix/sysv/sco3.2.4/pathconf.S: File removed.
	* sysdeps/unix/sysv/sco3.2.4/pgrpsys.S: File removed.
	* sysdeps/unix/sysv/sco3.2.4/sco_getgrp.S: File removed.
	* sysdeps/unix/sysv/sco3.2.4/sigpending.S: File removed.
	* sysdeps/unix/sysv/sco3.2.4/sigprocmask.S: File removed.
	* sysdeps/unix/sysv/sco3.2.4/sigsuspend.S: File removed.
	* sysdeps/unix/sysv/sysv4/pgrpsys.S: File removed.
	* sysdeps/unix/sysv/sysv4/sigprocmask.S: File removed.
	* sysdeps/unix/sysv/sysv4/sigsuspend.S: File removed.
	* sysdeps/unix/sysv/sysv4/sysconfig.S: File removed.
	* sysdeps/unix/sysv/sysv4/sysinfo.S: File removed.
	* sysdeps/unix/sysv/sysv4/solaris2/sparc/sys-sig.S: File removed.
	Replaced all simple system call files *.S throughout sysdeps/unix
	with syscalls.list files to be processed by make-syscalls.sh.
	* sysdeps/unix/s-proto.S: New file.
	* sysdeps/unix/syscalls.list: New file.
	* sysdeps/unix/bsd/syscalls.list: New file.
	* sysdeps/unix/bsd/bsd4.4/syscalls.list: New file.
	* sysdeps/unix/bsd/hp/m68k/syscalls.list: New file.
	* sysdeps/unix/bsd/osf/syscalls.list: New file.
	* sysdeps/unix/bsd/osf/alpha/syscalls.list: New file.
	* sysdeps/unix/bsd/sony/newsos4/syscalls.list: New file.
	* sysdeps/unix/bsd/sun/syscalls.list: New file.
	* sysdeps/unix/bsd/sun/sunos4/syscalls.list: New file.
	* sysdeps/unix/bsd/ultrix4/syscalls.list: New file.
	* sysdeps/unix/common/syscalls.list: New file.
	* sysdeps/unix/inet/syscalls.list: New file.
	* sysdeps/unix/mman/syscalls.list: New file.
	* sysdeps/unix/sysv/syscalls.list: New file.
	* sysdeps/unix/sysv/irix4/syscalls.list: New file.
	* sysdeps/unix/sysv/isc2.2/syscalls.list: New file.
	* sysdeps/unix/sysv/linux/syscalls.list: New file.
	* sysdeps/unix/sysv/linux/i386/syscalls.list: New file.
	* sysdeps/unix/sysv/sco3.2.4/syscalls.list: New file.
	* sysdeps/unix/sysv/sysv4/syscalls.list: New file.
	* sysdeps/unix/sysv/sysv4/i386/syscalls.list: New file.
	* sysdeps/unix/sysv/sysv4/solaris2/sparc/syscalls.list: New file.
	* sysdeps/unix/acct.S: File removed.
	* sysdeps/unix/chdir.S: File removed.
	* sysdeps/unix/chmod.S: File removed.
	* sysdeps/unix/chown.S: File removed.
	* sysdeps/unix/chroot.S: File removed.
	* sysdeps/unix/close.S: File removed.
	* sysdeps/unix/configure: File removed.
	* sysdeps/unix/configure.in: File removed.
	* sysdeps/unix/dup.S: File removed.
	* sysdeps/unix/fcntl.S: File removed.
	* sysdeps/unix/fsync.S: File removed.
	* sysdeps/unix/getgid.S: File removed.
	* sysdeps/unix/getpid.S: File removed.
	* sysdeps/unix/getuid.S: File removed.
	* sysdeps/unix/ioctl.S: File removed.
	* sysdeps/unix/kill.S: File removed.
	* sysdeps/unix/link.S: File removed.
	* sysdeps/unix/lseek.S: File removed.
	* sysdeps/unix/open.S: File removed.
	* sysdeps/unix/ptrace.S: File removed.
	* sysdeps/unix/read.S: File removed.
	* sysdeps/unix/reboot.S: File removed.
	* sysdeps/unix/setgid.S: File removed.
	* sysdeps/unix/setuid.S: File removed.
	* sysdeps/unix/sync.S: File removed.
	* sysdeps/unix/umask.S: File removed.
	* sysdeps/unix/unlink.S: File removed.
	* sysdeps/unix/write.S: File removed.
	* sysdeps/unix/bsd/flock.S: File removed.
	* sysdeps/unix/bsd/getdtsz.S: File removed.
	* sysdeps/unix/bsd/getpagesize.S: File removed.
	* sysdeps/unix/bsd/killpg.S: File removed.
	* sysdeps/unix/bsd/profil.S: File removed.
	* sysdeps/unix/bsd/readv.S: File removed.
	* sysdeps/unix/bsd/settimeofday.S: File removed.
	* sysdeps/unix/bsd/sigblock.S: File removed.
	* sysdeps/unix/bsd/sigpause.S: File removed.
	* sysdeps/unix/bsd/sigsetmask.S: File removed.
	* sysdeps/unix/bsd/sigstack.S: File removed.
	* sysdeps/unix/bsd/sigvec.S: File removed.
	* sysdeps/unix/bsd/utimes.S: File removed.
	* sysdeps/unix/bsd/writev.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/chflags.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/fchdir.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/fchflags.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/getdents.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/getdomain.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/revoke.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/setdomain.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/setegid.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/seteuid.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/setlogin.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/setsid.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/sigaltstack.S: File removed.
	* sysdeps/unix/bsd/bsd4.4/wait4.S: File removed.
	* sysdeps/unix/bsd/hp/m68k/getdents.S: File removed.
	* sysdeps/unix/bsd/osf/msync.S: File removed.
	* sysdeps/unix/bsd/osf/alpha/wait4.S: File removed.
	* sysdeps/unix/bsd/sony/newsos4/fchdir.S: File removed.
	* sysdeps/unix/bsd/sony/newsos4/sys_wait4.S: File removed.
	* sysdeps/unix/bsd/sun/getdents.S: File removed.
	* sysdeps/unix/bsd/sun/sunos3/m68k/wait.S: File removed.
	* sysdeps/unix/bsd/sun/sunos4/msync.S: File removed.
	* sysdeps/unix/bsd/sun/sunos4/poll.S: File removed.
	* sysdeps/unix/bsd/sun/sunos4/setsid.S: File removed.
	* sysdeps/unix/bsd/sun/sunos4/sys_mmap.S: File removed.
	* sysdeps/unix/bsd/sun/sunos4/sys_wait4.S: File removed.
	* sysdeps/unix/bsd/sun/sunos4/uname.S: File removed.
	* sysdeps/unix/bsd/ultrix4/getdents.S: File removed.
	* sysdeps/unix/bsd/ultrix4/setsid.S: File removed.
	* sysdeps/unix/bsd/ultrix4/uname.S: File removed.
	* sysdeps/unix/common/access.S: File removed.
	* sysdeps/unix/common/adjtime.S: File removed.
	* sysdeps/unix/common/dup2.S: File removed.
	* sysdeps/unix/common/fchmod.S: File removed.
	* sysdeps/unix/common/fchown.S: File removed.
	* sysdeps/unix/common/ftruncate.S: File removed.
	* sysdeps/unix/common/getgroups.S: File removed.
	* sysdeps/unix/common/getitimer.S: File removed.
	* sysdeps/unix/common/getpgid.S: File removed.
	* sysdeps/unix/common/getpriority.S: File removed.
	* sysdeps/unix/common/getrlimit.S: File removed.
	* sysdeps/unix/common/getrusage.S: File removed.
	* sysdeps/unix/common/gettimeofday.S: File removed.
	* sysdeps/unix/common/mkdir.S: File removed.
	* sysdeps/unix/common/readlink.S: File removed.
	* sysdeps/unix/common/rename.S: File removed.
	* sysdeps/unix/common/rmdir.S: File removed.
	* sysdeps/unix/common/select.S: File removed.
	* sysdeps/unix/common/setgroups.S: File removed.
	* sysdeps/unix/common/setitimer.S: File removed.
	* sysdeps/unix/common/setpgid.S: File removed.
	* sysdeps/unix/common/setpriority.S: File removed.
	* sysdeps/unix/common/setregid.S: File removed.
	* sysdeps/unix/common/setreuid.S: File removed.
	* sysdeps/unix/common/setrlimit.S: File removed.
	* sysdeps/unix/common/swapon.S: File removed.
	* sysdeps/unix/common/symlink.S: File removed.
	* sysdeps/unix/common/truncate.S: File removed.
	* sysdeps/unix/common/vhangup.S: File removed.
	* sysdeps/unix/inet/accept.S: File removed.
	* sysdeps/unix/inet/bind.S: File removed.
	* sysdeps/unix/inet/connect.S: File removed.
	* sysdeps/unix/inet/gethostid.S: File removed.
	* sysdeps/unix/inet/gethostname.S: File removed.
	* sysdeps/unix/inet/getpeername.S: File removed.
	* sysdeps/unix/inet/getsockname.S: File removed.
	* sysdeps/unix/inet/getsockopt.S: File removed.
	* sysdeps/unix/inet/listen.S: File removed.
	* sysdeps/unix/inet/recv.S: File removed.
	* sysdeps/unix/inet/recvfrom.S: File removed.
	* sysdeps/unix/inet/recvmsg.S: File removed.
	* sysdeps/unix/inet/send.S: File removed.
	* sysdeps/unix/inet/sendmsg.S: File removed.
	* sysdeps/unix/inet/sendto.S: File removed.
	* sysdeps/unix/inet/sethostid.S: File removed.
	* sysdeps/unix/inet/sethostname.S: File removed.
	* sysdeps/unix/inet/setsockopt.S: File removed.
	* sysdeps/unix/inet/shutdown.S: File removed.
	* sysdeps/unix/inet/socket.S: File removed.
	* sysdeps/unix/inet/socketpair.S: File removed.
	* sysdeps/unix/mman/madvise.S: File removed.
	* sysdeps/unix/mman/mmap.S: File removed.
	* sysdeps/unix/mman/mprotect.S: File removed.
	* sysdeps/unix/mman/msync.S: File removed.
	* sysdeps/unix/mman/munmap.S: File removed.
	* sysdeps/unix/sysv/alarm.S: File removed.
	* sysdeps/unix/sysv/ftime.S: File removed.
	* sysdeps/unix/sysv/nice.S: File removed.
	* sysdeps/unix/sysv/pause.S: File removed.
	* sysdeps/unix/sysv/poll.S: File removed.
	* sysdeps/unix/sysv/s_getdents.S: File removed.
	* sysdeps/unix/sysv/signal.S: File removed.
	* sysdeps/unix/sysv/stime.S: File removed.
	* sysdeps/unix/sysv/time.S: File removed.
	* sysdeps/unix/sysv/times.S: File removed.
	* sysdeps/unix/sysv/ulimit.S: File removed.
	* sysdeps/unix/sysv/uname.S: File removed.
	* sysdeps/unix/sysv/utime.S: File removed.
	* sysdeps/unix/sysv/irix4/getpgid.S: File removed.
	* sysdeps/unix/sysv/irix4/msync.S: File removed.
	* sysdeps/unix/sysv/irix4/setpgid.S: File removed.
	* sysdeps/unix/sysv/irix4/signal.S: File removed.
	* sysdeps/unix/sysv/irix4/sysmp.S: File removed.
	* sysdeps/unix/sysv/irix4/syssgi.S: File removed.
	* sysdeps/unix/sysv/isc2.2/rename.S: File removed.
	* sysdeps/unix/sysv/linux/adjtimex.S: File removed.
	* sysdeps/unix/sysv/linux/fork.S: File removed.
	* sysdeps/unix/sysv/linux/getpgid.S: File removed.
	* sysdeps/unix/sysv/linux/getpgrp.S: File removed.
	* sysdeps/unix/sysv/linux/getsid.S: File removed.
	* sysdeps/unix/sysv/linux/gtty.S: File removed.
	* sysdeps/unix/sysv/linux/mlock.S: File removed.
	* sysdeps/unix/sysv/linux/mlockall.S: File removed.
	* sysdeps/unix/sysv/linux/mount.S: File removed.
	* sysdeps/unix/sysv/linux/munlock.S: File removed.
	* sysdeps/unix/sysv/linux/munlockall.S: File removed.
	* sysdeps/unix/sysv/linux/pipe.S: File removed.
	* sysdeps/unix/sysv/linux/s_ptrace.S: File removed.
	* sysdeps/unix/sysv/linux/setpgid.S: File removed.
	* sysdeps/unix/sysv/linux/setsid.S: File removed.
	* sysdeps/unix/sysv/linux/settimeofday.S: File removed.
	* sysdeps/unix/sysv/linux/sigpending.S: File removed.
	* sysdeps/unix/sysv/linux/stty.S: File removed.
	* sysdeps/unix/sysv/linux/umount.S: File removed.
	* sysdeps/unix/sysv/linux/wait4.S: File removed.
	* sysdeps/unix/sysv/linux/i386/ipc.S: File removed.
	* sysdeps/unix/sysv/sco3.2.4/pathconf.S: File removed.
	* sysdeps/unix/sysv/sco3.2.4/pgrpsys.S: File removed.
	* sysdeps/unix/sysv/sco3.2.4/sco_getgrp.S: File removed.
	* sysdeps/unix/sysv/sco3.2.4/sigpending.S: File removed.
	* sysdeps/unix/sysv/sco3.2.4/sigprocmask.S: File removed.
	* sysdeps/unix/sysv/sco3.2.4/sigsuspend.S: File removed.
	* sysdeps/unix/sysv/sysv4/pgrpsys.S: File removed.
	* sysdeps/unix/sysv/sysv4/sigprocmask.S: File removed.
	* sysdeps/unix/sysv/sysv4/sigsuspend.S: File removed.
	* sysdeps/unix/sysv/sysv4/sysconfig.S: File removed.
	* sysdeps/unix/sysv/sysv4/sysinfo.S: File removed.
	* sysdeps/unix/sysv/sysv4/solaris2/sparc/sys-sig.S: File removed.

	* io/mknod.c: New file.
1996-01-19 00:42:21 +00:00
Roland McGrath aeb72b1622 Thu Jan 18 00:32:43 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makerules (COMPILE.s): New variable.

	* sysdeps/unix/Makefile (sysd-syscalls): New target; generate with
	make-syscalls.sh and include it.
	[$(subdir)=misc] (sysdep_routines): Append extra syscalls from
	sysd-syscalls.
	* sysdeps/unix/make-syscalls.sh: New file.

	* Makerules (COMPILE.S): New variable.
1996-01-18 10:00:52 +00:00
Roland McGrath 285a3eee46 * sysdeps/unix/sysv/linux/statbuf.h (_STAT_VER_LINUX,
_STAT_VER_SVR4, _STAT_VER): New macros.
	(_MKNOD_VER_LINUX, _MKNOD_VER_SVR4, _MKNOD_VER): New macros.

	* sysdeps/unix/sysv/sysv4/i386/statbuf.h (_STAT_VER, _MKNOD_VER):
	New macros.
1996-01-18 00:50:52 +00:00
Roland McGrath c43b8c4bea Wed Jan 17 11:04:58 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* io/sys/stat.h (_STAT_VER, _MKNOD_VER): New macros.
	(__xstat, __fxstat, __lxstat, __xmknod): Declare new functions.
	[__GNUC__] (stat, fstat, lstat, mknod): Define these (and __ names)
	as `extern inline's calling the `x' functions.
	* io/fstat.c: New file.
	* io/lstat.c: New file.
	* io/stat.c: New file.
	* sysdeps/generic/lstat.c: File removed.
	* sysdeps/generic/lxstat.c: New file.
	* sysdeps/mach/hurd/fstat.c: File removed.
	* sysdeps/mach/hurd/fxstat.c: New file.
	* sysdeps/mach/hurd/lstat.c: File removed.
	* sysdeps/mach/hurd/lxstat.c: New file.
	* sysdeps/mach/hurd/mknod.c: File removed.
	* sysdeps/mach/hurd/stat.c: File removed.
	* sysdeps/mach/hurd/xmknod.c: New file.
	* sysdeps/mach/hurd/xstat.c: New file.
	* sysdeps/stub/fstat.c: File removed.
	* sysdeps/stub/fxstat.c: New file.
	* sysdeps/stub/lstat.c: File removed.
	* sysdeps/stub/lxstat.c: New file.
	* sysdeps/stub/mknod.c: File removed.
	* sysdeps/stub/stat.c: File removed.
	* sysdeps/stub/xmknod.c: New file.
	* sysdeps/stub/xstat.c: New file.
	* sysdeps/unix/common/lstat.S: File removed.
	* sysdeps/unix/common/lxstat.c: New file.
	* sysdeps/unix/fstat.S: File removed.
	* sysdeps/unix/fxstat.c: New file.
	* sysdeps/unix/mknod.S: File removed.
	* sysdeps/unix/stat.S: File removed.
	* sysdeps/unix/sysv/linux/fstat.c: File removed.
	* sysdeps/unix/sysv/linux/i386/fxstat.S: File removed.
	* sysdeps/unix/sysv/linux/i386/lxstat.S: File removed.
	* sysdeps/unix/sysv/linux/i386/xmknod.S: File removed.
	* sysdeps/unix/sysv/linux/i386/xstat.S: File removed.
	* sysdeps/unix/sysv/linux/lstat.c: File removed.
	* sysdeps/unix/sysv/linux/mknod.c: File removed.
	* sysdeps/unix/sysv/linux/stat.c: File removed.
	* sysdeps/unix/sysv/sysv4/i386/fstat.S: File removed.
	* sysdeps/unix/sysv/sysv4/i386/lstat.S: File removed.
	* sysdeps/unix/sysv/sysv4/i386/mknod.S: File removed.
	* sysdeps/unix/sysv/sysv4/i386/stat.S: File removed.
	* sysdeps/unix/xmknod.c: New file.
	* sysdeps/unix/xstat.c: New file.
	* sysdeps/unix/mkfifo.c: Use __xmknod instead of __mknod.
	* misc/Makefile (routines): Remove mknod.
	* io/sys/stat.h (_STAT_VER, _MKNOD_VER): New macros.
	(__xstat, __fxstat, __lxstat, __xmknod): Declare new functions.
	[__GNUC__] (stat, fstat, lstat, mknod): Define these (and __ names)
	as `extern inline's calling the `x' functions.
	* io/fstat.c: New file.
	* io/lstat.c: New file.
	* io/stat.c: New file.
	* sysdeps/generic/lstat.c: File removed.
	* sysdeps/generic/lxstat.c: New file.
	* sysdeps/mach/hurd/fstat.c: File removed.
	* sysdeps/mach/hurd/fxstat.c: New file.
	* sysdeps/mach/hurd/lstat.c: File removed.
	* sysdeps/mach/hurd/lxstat.c: New file.
	* sysdeps/mach/hurd/mknod.c: File removed.
	* sysdeps/mach/hurd/stat.c: File removed.
	* sysdeps/mach/hurd/xmknod.c: New file.
	* sysdeps/mach/hurd/xstat.c: New file.
	* sysdeps/stub/fstat.c: File removed.
	* sysdeps/stub/fxstat.c: New file.
	* sysdeps/stub/lstat.c: File removed.
	* sysdeps/stub/lxstat.c: New file.
	* sysdeps/stub/mknod.c: File removed.
	* sysdeps/stub/stat.c: File removed.
	* sysdeps/stub/xmknod.c: New file.
	* sysdeps/stub/xstat.c: New file.
	* sysdeps/unix/common/lstat.S: File removed.
	* sysdeps/unix/common/lxstat.c: New file.
	* sysdeps/unix/fstat.S: File removed.
	* sysdeps/unix/fxstat.c: New file.
	* sysdeps/unix/mknod.S: File removed.
	* sysdeps/unix/stat.S: File removed.
	* sysdeps/unix/sysv/linux/fstat.c: File removed.
	* sysdeps/unix/sysv/linux/i386/fxstat.S: File removed.
	* sysdeps/unix/sysv/linux/i386/lxstat.S: File removed.
	* sysdeps/unix/sysv/linux/i386/xmknod.S: File removed.
	* sysdeps/unix/sysv/linux/i386/xstat.S: File removed.
	* sysdeps/unix/sysv/linux/lstat.c: File removed.
	* sysdeps/unix/sysv/linux/mknod.c: File removed.
	* sysdeps/unix/sysv/linux/stat.c: File removed.
	* sysdeps/unix/sysv/sysv4/i386/fstat.S: File removed.
	* sysdeps/unix/sysv/sysv4/i386/lstat.S: File removed.
	* sysdeps/unix/sysv/sysv4/i386/mknod.S: File removed.
	* sysdeps/unix/sysv/sysv4/i386/stat.S: File removed.
	* sysdeps/unix/xmknod.c: New file.
	* sysdeps/unix/xstat.c: New file.
	* sysdeps/unix/mkfifo.c: Use __xmknod instead of __mknod.
	* misc/Makefile (routines): Remove mknod.

	* sysdeps/ieee754/ieee754.h (union ieee854_long_double.ieee_nan):
	Add missing ; in little-endian case.
1996-01-18 00:35:55 +00:00
Roland McGrath c59928df4d (_STAT_VER, _MKNOD_VER): New macros. (__xstat, __fxstat, __lxstat, __xmknod): Declare new functions. [__GNUC__] (stat, fstat, lstat, mknod): Define these (and __ names) as extern inline's calling the x' functions. 1996-01-18 00:10:56 +00:00
Doug Evans af8488a871 Recognize go32* as an os. 1996-01-17 23:54:58 +00:00
Richard M. Stallman bc8789b942 Default OS to nextstep if machine vendor is Next. -ns2 is an alias for -nextstep. 1996-01-17 22:40:42 +00:00
Roland McGrath 069aa63891 (union ieee854_long_double.ieee_nan): Add missing ; in little-endian case. 1996-01-17 22:33:48 +00:00
Roland McGrath 44534645d6 * elf/dynamic-link.h [ELF_MACHINE_NO_REL] (ELF_DYNAMIC_DO_REL):
Define this instead of ELF_DYNAMIC_DO_RELA.
1996-01-17 17:42:14 +00:00
Roland McGrath 9399579574 Sun Jan 14 01:01:10 1996 Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
* sysdeps/mips/bytesex.h: Add default byte sex.  By Ralf Baechle.

	* sysdeps/unix/sysv/linux/adjtime.c [! MOD_OFFSET]: Use `mode'
	member of `struct timex' instead of `modes'.  From Andreas Schwab.

	* sysdeps/unix/sysv/linux/mknod.c: New file.  Generic C version.
	* sysdeps/unix/sysv/linux/i386/mknod.S: Remove assembler version.

	* sysdeps/unix/sysv/linux/Makefile (inhibit-glue): New variable.
	[$(subdir) = misc] (sysdep_routines): Add mount, umount, and s_ptrace.
	[$(subdir) = misc] (headers): Append sys/mount.h.

	* sysdeps/unix/sysv/linux/mount.S, sysdeps/unix/sysv/linux/umount.S:
	New files.  Implement system calls.
	* sysdeps/unix/sysv/linux/sys/mount.h: New header file.

	* sysdeps/unix/sysv/linux/ptrace.c: New file.  Wrapper around
	ptrace system call.
	* sysdeps/unix/sysv/linux/s_ptrace.S: New file: ptrace system call.

	* sysdeps/unix/sysv/linux/i386/gnu/types.h: New file with correct
	types for i386/Linux.
Sun Jan 14 01:01:10 1996  Ulrich Drepper  <drepper@ipd.info.uni-karlsruhe.de>

	* sysdeps/mips/bytesex.h: Add default byte sex.  By Ralf Baechle.

	* sysdeps/unix/sysv/linux/adjtime.c [! MOD_OFFSET]: Use `mode'
	member of `struct timex' instead of `modes'.  From Andreas Schwab.

	* sysdeps/unix/sysv/linux/mknod.c: New file.  Generic C version.
	* sysdeps/unix/sysv/linux/i386/mknod.S: Remove assembler version.

	* sysdeps/unix/sysv/linux/Makefile (inhibit-glue): New variable.
	[$(subdir) = misc] (sysdep_routines): Add mount, umount, and s_ptrace.
	[$(subdir) = misc] (headers): Append sys/mount.h.

	* sysdeps/unix/sysv/linux/mount.S, sysdeps/unix/sysv/linux/umount.S:
	New files.  Implement system calls.
	* sysdeps/unix/sysv/linux/sys/mount.h: New header file.

	* sysdeps/unix/sysv/linux/ptrace.c: New file.  Wrapper around
	ptrace system call.
	* sysdeps/unix/sysv/linux/s_ptrace.S: New file: ptrace system call.

	* sysdeps/unix/sysv/linux/i386/gnu/types.h: New file with correct
	types for i386/Linux.
1996-01-17 17:13:48 +00:00
Roland McGrath 6f0017d1cd Wed Jan 17 11:04:58 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/unix/sysv/time.S: Moved from sysv4.
	* sysdeps/unix/sysv/irix4/time.S: File removed.

	* sysdeps/unix/sysv/linux/signum.h: Moved from
	sysdeps/unix/sysv/linux/i386.
	(_NSIG): Move inside #ifdef _SIGNAL_H.
Wed Jan 17 11:04:58 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* sysdeps/unix/sysv/time.S: Moved from sysv4.
	* sysdeps/unix/sysv/irix4/time.S: File removed.

	* sysdeps/unix/sysv/linux/signum.h: Moved from
	sysdeps/unix/sysv/linux/i386.
	(_NSIG): Move inside #ifdef _SIGNAL_H.
1996-01-17 16:17:58 +00:00
Roland McGrath b6e9b25ba8 * sysdeps/unix/seekdir.c: Don't modify POS before seeking.
* sysdeps/unix/telldir.c: Fix position calculation to account for
	buffered data properly.
1996-01-17 10:00:23 +00:00
Roland McGrath b8aec9fa1a Sun Jan 14 17:51:09 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* MakeTAGS (all-sources, all-headers): Always search the
	current directory first.

	* db/btree/bt_seq.c (__bt_first): Return RET_SPECIAL when key not
	found.
	* MakeTAGS (all-sources, all-headers): Always search the
	current directory first.

	* db/btree/bt_seq.c (__bt_first): Return RET_SPECIAL when key not
	found.
1996-01-17 02:41:04 +00:00
Roland McGrath 13bc775dc3 * sysdeps/m68k/Makefile (crypt): Don't define if building a shared
library.
1996-01-17 02:33:33 +00:00
Roland McGrath 5f3d5c2bbb * csu/initfini.c (_init): Call __gmon_start__ if defined (weak ref).
* csu/gmon-start.c (__gmon_start__): Renamed from gmon_start, made
	global.
	[! HAVE_INITFINI]: Only make it a constructor in this case.
1996-01-17 02:29:57 +00:00
Roland McGrath d99d7e2644 * gmon/Makefile (CFLAGS-mcount.c): New variable.
(mcount.po): New target.

	* Makeconfig (CFLAGS): Append $(CFLAGS-$(<F)).
1996-01-17 02:11:06 +00:00
Roland McGrath 7176f4e4b5 * misc/efgcvt_r.c (ecvt_r): Handle negative values.
* stdlib/stdlib.h: Replace __CONSTVALUE by attribute.
	* stdlib/abs.c, stdlib/div.c, stdlib/labs.c, stdlib/ldiv.c,
	sysdeps/generic/hypot.c: Remove obsolete __CONSTVALUE.

	* stdio-common/printf_fp.c (__printf_fp): Fix parameter
	declaration.

	* sysdeps/generic/putenv.c (putenv): Fix second argument of
	setenv.

	* sysdeps/ieee754/hypot.c: New file, extracted out of cabs.c.
	* sysdeps/ieee754/cabs.c: Don't define hypot here.

	* sysdeps/ieee754/ieee754.h (union ieee854_long_double): Fix
	definition of ieee_nan alternative.

	* sysdeps/m68k/__longjmp.c, sysdeps/m68k/setjmp.c: Add register
 	prefix spec.

	* sysdeps/m68k/ffs.c (ffs): Fix register constraint.

	* sysdeps/m68k/fpu/__math.h: Include <errno.h>.  Replace obsolete
	__CONSTVALUE by attribute.
	(floor): Round to negative infinity.
	(rint, expm1) [__NO_MATH_INLINES]: Don't define, to avoid type
	clash when compiling source.
	(pow): Handle x == 0 and x < 0.
	(ceil, __isinf, __isnan): Fix register constraints.
	(__isinfl, __isnanl): Added.
	* sysdeps/m68k/fpu/acos.c, sysdeps/m68k/fpu/atan2.c,
	sysdeps/m68k/fpu/fmod.c, sysdeps/m68k/fpu/ldexp.c,
	sysdeps/m68k/fpu/pow.c: Remove obsolete __CONSTVALUE.

	* sysdeps/m68k/bsd-_setjmp.S, sysdeps/m68k/bsd-setjmp.S: Fix
	assembler syntax.

	* sysdeps/unix/bsd/bsd4.4/fchdir.S (fchdir): Take only one
 	argument.

	* sysdeps/unix/bsd/clock.c (timeval_to_clock_t): Fix timeval to
	clock_t conversion.
	(clock): Don't multiply by CLOCKS_PER_SEC.

	* sysdeps/unix/bsd/poll.c (poll): Fix msec to timeval conversion.

	* sysdeps/unix/bsd/sun/m68k/brk.S (brk): Compare with address of
	__end.

	* sysdeps/unix/bsd/sun/m68k/vfork.S: Fix assembler syntax.

	* sysdeps/unix/bsd/ualarm.c (ualarm): Fix timeval calculation.

	* sysdeps/unix/bsd/vax/vfork.S: Remove duplicate label.
1996-01-17 02:03:00 +00:00
Roland McGrath b17178fc56 Tue Jan 16 17:37:39 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* csu/Makefile [have-initfini=yes] (CPPFLAGS): Append -DHAVE_INITFINI.
	(initfini): Compile initfini.c with -fPIC.

Sun Jan 14 17:51:09 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* stdio-common/vfscanf.c (inchar, conv_error, input_error,
	memory_error): Add cast to void to avoid gcc warning.
	(vfscanf): Rewrite character class parsing to make it more efficient.
1996-01-17 01:46:13 +00:00
Roland McGrath da128169aa Sun Jan 14 01:01:10 1996 Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
* stdlib/strtol.c: Return correct pointer for strings
	like "0xyz" and base 0 or 16.

	* string/strxfrm.c: Handle case for LENGTH == 0 correct.

	* sunrpc/etc.rpc: Add some more known protocols.
Sun Jan 14 01:01:10 1996  Ulrich Drepper  <drepper@ipd.info.uni-karlsruhe.de>

	* stdlib/strtol.c: Return correct pointer for strings
	like "0xyz" and base 0 or 16.

	* string/strxfrm.c: Handle case for LENGTH == 0 correct.

	* sunrpc/etc.rpc: Add some more known protocols.
1996-01-17 00:46:59 +00:00
Roland McGrath 294897f4a6 [have-initfini=yes] (CPPFLAGS): Append -DHAVE_INITFINI. (initfini): Compile initfini.c with -fPIC. 1996-01-16 22:37:27 +00:00
Richard Kenner d008bcf32c (sco5): New case. 1996-01-16 01:58:43 +00:00
Roland McGrath 4984f343aa . 1996-01-14 10:00:22 +00:00
Roland McGrath 02ac66c50d Fri Jan 12 13:40:01 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* posix/gnu/types.h: Moved to sysdeps/generic/gnu/types.h.

	* posix/glob.c (glob): Add parens in glob call flags arg for
	GLOB_BRACE case.

	* string/string.h (strdupa): New macro.

	* stdio-common/vfscanf.c (%[): Grok ] as first char in set, not
	terminator on empty set.  From drepper.
1996-01-13 00:46:48 +00:00
Roland McGrath d94d8f2a59 Thu Jan 11 13:09:20 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* elf/do-rel.h (elf_dynamic_do_rel): Use referring symbol as
	referent for STB_LOCAL.
1996-01-11 18:09:50 +00:00
Roland McGrath 72d8cdf09d Wed Jan 10 10:11:39 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* time/africa, time/antarctica, time/asia, time/australasia,
 	time/europe, time/northamerica, time/pacificnew, time/solar87,
 	time/solar88, time/solar89, time/southamerica: Updated from ADO 96a.
1996-01-11 10:00:22 +00:00
Roland McGrath 22930c9bf2 Tue Jan 9 16:10:26 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* elf/dl-load.c (_dl_map_object_from_fd): After mapping first
 	segment to find location, mprotect excess region to no access,
 	don't munmap it.

	* sysdeps/mach/hurd/dl-sysdep.c (mmap): If vm_map returns
	KERN_NO_SPACE for fixed location, deallocate it and try again.
1996-01-10 10:00:22 +00:00
Roland McGrath 7410183b8b Mon Jan 8 17:43:23 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* locale/Makefile (lib-modules): Renamed hash to locfile-hash.
	* locale/hash.c: Renamed to locale/locfile-hash.c.
1996-01-09 10:00:21 +00:00
Roland McGrath 02859f472b Thu Dec 14 02:28:22 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* posix/glob.c (glob_in_dir): Cast result of opendir to __ptr_t,
	and cast STREAM to DIR * before passing to readdir and closedir.
1996-01-08 22:44:45 +00:00
Roland McGrath a2e1b046f6 Sat Jan 6 16:39:14 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makefile (subdirs): Added db.

	* resolv/Makefile (routines): Add res_data.
	* resolv/res_data.c, resolv/res_debug.c, resolv/resolv.h:
	Updated from BIND 4.9.3 final release.

	* elf/dynamic-link.h (elf_get_dynamic_info): Handle
	processor-specific tags.
	(ELF_DYNAMIC_DO_REL, ELF_DYNAMIC_DO_RELA): Handle absent DT_PLTREL tag.

	* elf/elf.h (DT_MIPS_NUM, DT_PROCNUM): New macros.
	* elf/link.h (struct link_map): Extend `l_info' by DT_PROCNUM.

	* sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Take new
	arg LAZY.  Only do our work if LAZY and there is a DT_JMPREL record.
	* elf/dl-reloc.c (_dl_relocate_object): Call
	elf_machine_runtime_setup unconditionally, and pass it LAZY flag.

	* elf/dl-load.c: Fixed ELFMAG check to work for either byte order.
	Align end of load segment only to page size, not to segment alignment.
1996-01-07 10:00:21 +00:00
Roland McGrath c4b7291877 Fixed ELFMAG check to work for either byte order. Align end of load segment only to page size, not to segment alignment. 1996-01-06 21:39:03 +00:00
Jim Meyering 85f4084001 Reverse order of arguments in getgroups call (in example) to match prototype. 1996-01-04 23:21:47 +00:00
Roland McGrath 7974fe2117 Thu Jan 4 11:35:18 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/setitimer.c: Code rearranged a bit to use new
	preemption interface.

	* sysdeps/mach/hurd/i386/trampoline.c (_hurd_setup_sighandler):
	Use _hurdsig_catch_memory_fault.

	* hurd/Makefile (headers): Add hurd/sigpreempt.h.
	(sig): Add catch-signal.

	* hurd/hurdfault.c (_hurdsig_fault_catch_exception_raise):
	Rewritten using a preempter in new interface.
	* hurd/hurdfault.h (_hurdsig_catch_fault): Likewise.
	(_hurdsig_catch_memory_fault): New macro.
1996-01-04 17:00:45 +00:00
Roland McGrath fb8e70d6dd Wed Jan 3 20:23:42 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hurd/catch-signal.c: New file.

	* hurd/intr-msg.c: When restarting RPC, fetch a new reply port.

	* hurd/hurdsig.c: Use new hurdfault.h interface.
	(abort_all_rpcs): Mutate return value to EINTR in threads whose
	replies we will wait for.

	* hurd/hurdkill.c (_hurd_sig_post): When doing pgrp, make sure we
	do ourselves last.

Wed Jan  3 19:17:10 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/access.c (__access): Put the uid/gid arguments
	to auth_makeauth() in the right order.

Wed Jan  3 17:19:04 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* sysdeps/generic/strsep.c: Rewritten.

	* sysdeps/mach/hurd/fork.c: Use a different workaround for the
 	suspended page fault deadlock kernel bug: thread_abort our signal
 	thread first thing after proc_dostop.

	* sysdeps/mach/hurd/setgid.c: Rewrote gid frobnication to
	recognize rootness properly.

	* hurd/hurdsig.c: Use new signal preemption interface.
1996-01-04 10:00:22 +00:00
Roland McGrath 67f27f3a02 (_hurd_sig_post): When doing pgrp, make sure we do ourselves last. 1996-01-04 01:23:21 +00:00
Miles Bader 9418ccede9 (__access): Put the uid/gid arguments to auth_makeauth() in the right order. 1996-01-04 00:18:53 +00:00
Roland McGrath 6df1b2474a Rewritten. 1996-01-04 00:06:01 +00:00
Roland McGrath 71733723fb * hurd/hurd/signal.h (struct hurd_sigstate): New member `preempters'.
(hurd_preempt_signals, hurd_unpreempt_signals): Decls removed.
	* hurd/hurd/sigpreempt.h: New file.
	* hurd/preempt-sig.c: Rewritten with new interface.
	* sysdeps/mach/hurd/jmp-unwind.c (_longjmp_unwind): Remove local signal
	preempters being unwound past.

	* db: New directory, 4.4 BSD db package incorporated from BSD db-1.85
	release.

	* sysdeps/unix/sysv/linux/sys/param.h: Several new macros for BSD
	compatibility.
1996-01-02 08:57:42 +00:00
Roland McGrath fc4026d8e4 Tue Jan 2 00:50:10 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* misc/queue.h: New file, incorporated from 4.4BSD.
	* misc/Makefile (headers): Add queue.h.

	* posix/sys/types.h [__USE_BSD]: Include endian.h.

	* io/sys/stat.h (DEFFILEMODE, ALLPERMS, ACCESSPERMS, S_BLKSIZE):
	New macros.
1996-01-02 06:19:15 +00:00
Roland McGrath 0a95f04d06 Thu Dec 28 10:21:35 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/generic/confname.h: Define all names as self-referential
	macros so #ifdef works.

	* hurd/preempt-sig.c (hurd_unpreempt_signals): Remove bogus asgnmt
	of _hurd_signal_preempters[SIGNO].
1995-12-29 10:00:22 +00:00
Roland McGrath be7e3b7e7e Mon Dec 25 20:56:39 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/bind.c: Translate EEXIST from dir_link into
	EADDRINUSE.  If translated node doesn't grok ifsock protocol,
	return EADDRINUSE.

	* sysdeps/mach/hurd/connect.c: Make address arg
	`const struct sockaddr_un *'.
	The redecl is kosher and avoids another variable for AF_LOCAL case.
	* sysdeps/mach/hurd/sendto.c: Likewise.
	* sysdeps/mach/hurd/bind.c: Likewise.

	* socket/sys/socket.h (__SOCKADDR_ARG): Enable transparent_union
 	code for GCC >= 2.7; use __transparent_union__ for name safety;
 	add several sockaddr flavors.
	(__SOCKADDR_ALLTYPES, __SOCKADDR_ONETYPE): New macros used in
	constructing the transparent union declarations.
	(__CONST_SOCKADDR_ARG): New type (or macro if not GCC 2.7).
	(bind, connect, sendto): Make the sockaddr argument use that.
1995-12-26 10:00:22 +00:00
Roland McGrath e0f09b6b2a * sysdeps/mach/hurd/setgid.c: In root case, store into NEWAUX, not
old vector.
	* sysdeps/mach/hurd/setuid.c: Likewise.
1995-12-23 01:16:45 +00:00
Roland McGrath 2114e10acb Fri Dec 22 00:38:00 1995 H.J. Lu <hjl@nynexst.com>
* stdio-common/vfscanf.c: Correctly handle white space skipping.
	* stdio-common/Makefile (tests): Add bug11.
	* stdio-common/bug11.c: New file.
Fri Dec 22 00:38:00 1995  H.J. Lu  <hjl@nynexst.com>

        * stdio-common/vfscanf.c: Correctly handle white space skipping.
	* stdio-common/Makefile (tests): Add bug11.
	* stdio-common/bug11.c: New file.
1995-12-23 01:14:10 +00:00
Roland McGrath 975320984b Fri Dec 22 00:57:38 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/setuid.c: Rewrote ID frobnication to do the
	right thing.
	* sysdeps/mach/hurd/setgid.c: Likewise.
	* sysdeps/mach/hurd/setreuid.c: Likewise.
	* sysdeps/mach/hurd/setregid.c: Likewise.
	* sysdeps/mach/hurd/setegid.c: Likewise.
	* sysdeps/mach/hurd/seteuid.c: Likewise.

	* sysdeps/mach/hurd/fork.c: Peek __mach_task_self_ value before
	proc_dostop call to work around kernel paging bug.

Thu Dec 21 12:19:32 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/setuid.c (__setuid): Actually add the new uid
 	instead of putting it (and other uids) in the gids and leaving the
 	old uids as is.
1995-12-22 10:00:21 +00:00
Roland McGrath e3fa2641f4 Peek __mach_task_self_ value before proc_dostop call to work around kernel paging bug. 1995-12-22 05:57:24 +00:00
Miles Bader 567676ff81 (__setuid): Actually add the new uid instead of putting it (and other uids) in the gids and leaving the old uids as is. 1995-12-21 17:43:59 +00:00
Roland McGrath 8ef76445e8 Wed Dec 20 18:23:10 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* stdio/internals.c (flushbuf): If the target is -1, always
	discard the buffer of read data.
	Only set TWIDDLED flag in !ALIGNED case.
	Never increment target or offset when old value is -1.
1995-12-21 10:00:22 +00:00
Roland McGrath f94a3574d5 Tue Dec 19 17:00:42 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hurd/hurdpid.c (_S_msg_proc_newids): Only run the hook when the
	pgrp changes.
1995-12-20 10:00:22 +00:00
Roland McGrath 755f55b0db Mon Dec 18 13:40:37 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* stdio/fread.c: Don't increment __offset when it's -1.

	* elf/rtld.c (dl_main): Prepend tab to "statically linked".  Exit
	0 in that case.

	* misc/err.c (vwarnx, vwarn): Fix major brainos.

	* sysdeps/mach/hurd/dl-sysdep.c (mmap): Fix setting of
	inheritance.
1995-12-19 10:00:22 +00:00
Roland McGrath 8882961f38 Sun Dec 17 15:56:35 1995 Miles Bader <miles@gnu.ai.mit.edu>
* misc/getpass.c (getpass): Don't barf if getline returns a null BUF.
1995-12-18 10:00:20 +00:00
Miles Bader 5ca8c0ba63 (getpass): Don't barf if getline returns a null BUF. 1995-12-17 20:58:55 +00:00
Roland McGrath 102800e09d Sat Dec 16 10:33:11 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makerules: Use $(do-install-so) for installing shared objects.
	(do-install-so): New canned sequence.  Make a symlink LIB.so after
	installing LIB.so.VERSION.

	* inet/netinet/in.h: Fixed typo in IPPORT_WHOIS.
1995-12-17 10:00:23 +00:00
Roland McGrath 293e360a25 Fixed typo in IPPORT_WHOIS. 1995-12-16 15:32:59 +00:00
Stan Cox d277428889 (AViiON): Add ix86-dg-dgux 1995-12-16 03:32:35 +00:00
Stan Cox 2cb7465b38 (i*86*) Change [345] to [3456] 1995-12-15 15:43:33 +00:00
Roland McGrath 05be689b57 Fri Dec 15 04:41:22 1995 Ulrich Drepper <drepper@gnu.ai.mit.edu>
* stdio-common/Makefile (tests): Add bug10.
	* stdio-common/bug10.c: New file.  From HJ Lu.

	* stdio-common/tstdiomisc.c: Make more test-suite like: exit
	status tells about successful run.

	* stdio-common/vfscanf.c [!USE_IN_LIBIO]: Use `flags' to check
	format correctness.
	Correct handling of trailing white spaces in format + EOF.

Fri Dec 15 01:31:56 1995  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* stdio-common/Makefile (tests): Add bug8 and bug9.
	* stdio-common/bug8.c, stdio-common/bug9.c: New tests.

	* stdio-common/vfscanf.c: Fix bug in dynamic buffer handling.

	* stdlib/strtod.c: Correct spelling: nominator -> numerator.
	Thanks to Jim Meyering.

Sat Nov 25 06:05:12 1995  H.J. Lu  <hjl@nynexst.com>

	* stdio-common/vfscanf.c: Always check width !=0.
	Correctly handle %%.
1995-12-15 05:22:35 +00:00
Roland McGrath faf92f2a62 Thu Dec 14 02:28:22 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* posix/glob.c (glob_in_dir): Cast result of opendir to __ptr_t,
	and cast STREAM to DIR * before passing to readdir and closedir.

Wed Dec 13 22:06:07 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* hurd/hurdsig.c (_hurd_internal_post_signal: suspend): Reply
	after aborting RPCs but before calling proc_mark_stop.
1995-12-14 10:00:22 +00:00
Roland McGrath 6a7169a509 (_hurd_internal_post_signal: suspend): Reply after aborting RPCs but before calling proc_mark_stop. 1995-12-14 03:05:50 +00:00
Ian 26bd65c364 Accept *-*-ieee*. 1995-12-13 21:43:08 +00:00
Roland McGrath a4e2c88cf4 Regenerated
Mon Dec 11 20:07:54 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* posix/glob.c [! STDC_HEADERS]: Declare getenv.
	(glob): Avoid using function as value.
1995-12-12 04:32:33 +00:00
Roland McGrath 3be01400fd Mon Dec 11 20:07:54 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* posix/glob.c [! STDC_HEADERS]: Declare getenv.
	(glob): Avoid using function as value.

	* elf/rtld.c (dl_main): When mapping argument executable, set
	l_name to "", not l_libname.
	After loading DT_NEEDED library, set its l_type to lt_library.

	* sysdeps/mach/hurd/mmap.c: Don't interpret MAP_INHERIT to mean
	VM_INHERIT.  We can't handle MAP_INHERIT easily.
	Handle non-page-aligned addresses if congruent to offset.

	* elf/dl-init.c: Skip the initializer for l_type lt_executable
	with l_name "". Start at _dl_loaded; don't skip the first element.

	* elf/dl-load.c (MAP_FILE): Define to zero if undefined.
	(MAP_COPY): Define to MAP_PRIVATE if undefined.
	(_dl_map_object_from_fd): Don't use MAP_INHERIT in mmap calls.
	If file it ET_EXEC, set its l_type to lt_executable.
1995-12-12 04:29:09 +00:00
Roland McGrath 65bf5fa317 Regenerated
Fri Dec  8 13:04:51 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* posix/glob.c: Implement new options GLOB_ALTDIRFUNC, GLOB_BRACE,
	GLOB_TILDE, GLOB_NOMAGIC.
	(glob): Use stat instead of lstat to determine directoriness.
	* posix/glob.h (GLOB_ALTDIRFUNC, GLOB_BRACE, GLOB_NOMAGIC, GLOB_TILDE):
	New flag bits.
	(__GLOB_FLAGS): Include them.
	(glob_t): New members gl_closedir, gl_readdir, gl_opendir, gl_lstat,
	gl_stat.
1995-12-12 02:42:14 +00:00
Roland McGrath 9b8a44cd18 (MAP_FILE): Define to zero if undefined. (MAP_COPY): Define to MAP_PRIVATE if undefined. (_dl_map_object_from_fd): Don't use MAP_INHERIT in mmap calls. If file it ET_EXEC, set its l_type to lt_executable. 1995-12-12 01:07:35 +00:00
Per Bothner d72d8b1328 (powerpc-harris-powerunix): Add guess for port to new target. 1995-12-12 00:47:21 +00:00
Roland McGrath 25b86c05c3 Sun Dec 10 09:56:06 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* elf/dl-minimal.c (malloc): Use MAP_PRIVATE in mmap call.
1995-12-11 10:00:21 +00:00
Roland McGrath 787e4db95c Fri Dec 8 13:04:51 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* locale/error.c, locale/error.h: Files removed.
	* locale/Makefile (distribute): Remove error.h.
	(lib-modules): Remove error.

	* hurd/hurdlookup.c (__hurd_file_name_lookup_retry): For "tty"
	magic, return ENXIO if no ctty.

	* sysdeps/mach/hurd/mmap.c: For MAP_FIXED, deallocate a previous
	mapping if vm_map fails for that reason.

	* posix/glob.c: Implement new options GLOB_ALTDIRFUNC, GLOB_BRACE,
	GLOB_TILDE, GLOB_NOMAGIC.
	(glob): Use stat instead of lstat to determine directoriness.
	* posix/glob.h (GLOB_ALTDIRFUNC, GLOB_BRACE, GLOB_NOMAGIC, GLOB_TILDE):
	New flag bits.
	(__GLOB_FLAGS): Include them.
	(glob_t): New members gl_closedir, gl_readdir, gl_opendir, gl_lstat,
	gl_stat.

	* elf/elf.h (ET_NUM, SHT_NUM, STB_NUM, STT_NUM, PT_NUM): New macros.

	* sysdeps/unix/sysv/linux/sys/mman.h: Include <linux/mman.h> to
	define all the bit values.
	(MAP_*, MCL_*): Macros removed.
1995-12-09 10:00:22 +00:00
Roland McGrath c994299d50 Thu Dec 7 02:27:56 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* resolv/res_comp.c, resolv/res_debug.c, resolv/res_send.c:
	Updated from BIND 4.9.3-BETA27.

Wed Dec  6 18:44:01 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/select.c (__select): Swap size args to mach_msg.

	* sysdeps/mach/hurd/select.c (__select): Frob TYPES correctly when
	we get a delayed reply.
	Only grab values out of entries in TYPES that have SELECT_RETURNED
 	turned on, and turn it on whenever an rpc returns.
	Only clear bits in the user's fdsets -- those needing to be set
	should be already.
	Use SELECT_ALL in appropiate places.
	(SELECT_RETURNED, SELECT_ALL): New macros.

Wed Dec  6 09:10:39 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* sysdeps/mach/hurd/sys/param.h (NBBY): New macro.

	* gnu-versions.h (_GNU_GLOB_INTERFACE_VERSION): New macro.
1995-12-08 10:00:22 +00:00
Roland McGrath a4219bc4c0 Updated from BIND-4.9.3-BETA27. 1995-12-07 19:37:55 +00:00
Miles Bader 0c7b844d25 (__select): Still clear the user's bits for an fd when SELECT_RETURNED isn't set. Only clear bits in the user's fdsets -- those needing to be set should be already. Use SELECT_ALL in appropiate places. (SELECT_ALL): New macro. 1995-12-07 03:03:31 +00:00
Miles Bader 53525291ae (__select): Swap size args to mach_msg. 1995-12-06 23:45:07 +00:00
Roland McGrath 756245d743 (NBBY): New macro. 1995-12-06 14:13:00 +00:00
Roland McGrath 7353787873 (_GNU_GLOB_INTERFACE_VERSION): New macro. 1995-12-06 14:10:23 +00:00
erich 1ff0303078 Recognize aof in the OS field. 1995-12-06 11:57:46 +00:00
Roland McGrath edbba60a5e Tue Dec 5 14:00:17 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* misc/Makefile (headers): Add error.h, err.h.
	(routines): Add error, err.
	(gpl2lgpl): New variable.
	* misc/err.c: New file.
	* misc/err.h: New file.
	* misc/error.c, misc/error.h: New files.

	* sysdeps/mach/hurd/ioctl.c: Fix typo in last change.

	* Makeconfig (+link): Translate libc% from $^, not just libc.a.
	(link-libc): Append $(libc.so-version) to libc.so.
	(built-program-cmd): Fix comma usage.
	* Makerules [libc.so-version] (libc.so$(libc.so-version)): Make a
	symlink to libc.so in the build directory.
	* Rules ($(others) $(tests)): Depend on the library that appears
	in $(link-libc).
	(%.out): Use $(built-program-cmd) in commands.

	* posix/unistd.h [__USE_MISC]: Declare brk, sbrk.

	* sysdeps/generic/setenv.c: Added canonical portability cruft.
	(setenv): Use realloc on LAST_ENVIRON instead of always copying.
	(unsetenv): New function.
	* stdlib/stdlib.h [__USE_BSD]: Declare unsetenv.
	* sysdeps/generic/putenv.c: Rewritten using setenv and unsetenv.

	* libio/Makefile (routines): Remove iofscanf, add iopopen, pclose.
1995-12-06 10:00:22 +00:00
Paul Eggert 034ff8def9 (transformbasename): Fix misspelling in initialization. 1995-12-06 09:44:53 +00:00
Roland McGrath 196980f511 Updated from ../gpl2lgpl.sed /home/gd/gnu/lib/error.c 1995-12-06 00:14:32 +00:00
Roland McGrath 77a58cad3f Tue Dec 5 02:27:32 1995 Ulrich Drepper <drepper@gnu.ai.mit.edu>
* libio/Makefile [routines]: Remove iofscanf, add iopopen, pclose.

	* libio/iofscanf.c: Remove file.

	* libio/iogetdelim.c (_IO_getdelim): Correct stupid bug at string
        termination.

	* libio/iopopen.c: New file from GNU libio.

	* libio/memstream.c: Fixed bug in fclose handling.  Instead of
	providing a close callback we need a finish callback.

	* libio/pclose.c: New file.  Derived from popen.c in GNU libio.

	* posix/gnu/types.h: Fixed typo.

	* stdio-common/errnobug.c: fputs returns EOF in error case.  Do
	not test for != 0.

	* stdio-common/printf-parse.h (parse_one_spec): Do not force
	padding with ' ' if precision is given.  Fix by HJ Lu.

	* stdio-common/printf_fp.c: Fix comment.

	* stdio-common/tfformat.c, stdio-common/tiformat.c,
	stdio-common/tstdiomisc.c: New files from GNU libio test suite.

	* stdio-common/tstgetln.c: Provide ssize_t type when testing
	libio.

	* stdio-common/vfprintf.c (outchar): Use PUTC instead of putc.
	(vfprintf): Cleasr args_type array before using it.
	When printing 0 as an integer with precision 0 nothing must be
	written for the number.
	Based on patch by HJ Lu.

	* stdio-common/vfscanf.c: Remove fixed input buffer.  Now we
        have a dynamically extended buffer.

	* stdlib/strtod.c: Merge with version in Linux libc.  This fixes
        some bugs with handling of very small numbers and has different
        solution for formaer patches.

	* sysdeps/i386/i586/add_n.S, sysdeps/i386/i586/sub_n.S: Rename
        macros r1 and r2 to t1, and t2 resp.  This is necessary because
        glibc headers also define r1.
Tue Dec  5 02:27:32 1995  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* libio/Makefile [routines]: Remove iofscanf, add iopopen, pclose.

	* libio/iofscanf.c: Remove file.

	* libio/iogetdelim.c (_IO_getdelim): Correct stupid bug at string
        termination.

	* libio/iopopen.c: New file from GNU libio.

	* libio/memstream.c: Fixed bug in fclose handling.  Instead of
	providing a close callback we need a finish callback.

	* libio/pclose.c: New file.  Derived from popen.c in GNU libio.

	* posix/gnu/types.h: Fixed typo.

	* stdio-common/errnobug.c: fputs returns EOF in error case.  Do
	not test for != 0.

	* stdio-common/printf-parse.h (parse_one_spec): Do not force
	padding with ' ' if precision is given.  Fix by HJ Lu.

	* stdio-common/printf_fp.c: Fix comment.

	* stdio-common/tfformat.c, stdio-common/tiformat.c,
	stdio-common/tstdiomisc.c: New files from GNU libio test suite.

	* stdio-common/tstgetln.c: Provide ssize_t type when testing
	libio.

	* stdio-common/vfprintf.c (outchar): Use PUTC instead of putc.
	(vfprintf): Cleasr args_type array before using it.
	When printing 0 as an integer with precision 0 nothing must be
	written for the number.
	Based on patch by HJ Lu.

	* stdio-common/vfscanf.c: Remove fixed input buffer.  Now we
        have a dynamically extended buffer.

	* stdlib/strtod.c: Merge with version in Linux libc.  This fixes
        some bugs with handling of very small numbers and has different
        solution for formaer patches.

	* sysdeps/i386/i586/add_n.S, sysdeps/i386/i586/sub_n.S: Rename
        macros r1 and r2 to t1, and t2 resp.  This is necessary because
        glibc headers also define r1.
1995-12-05 03:35:55 +00:00
Roland McGrath b5a08c5aca Mon Dec 4 12:10:28 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* stdlib/gen-mpn-copy (translations): Updated for new layout in
	GMP 1.910.

	* malloc/malloc.c (__malloc_initialize): Renamed from initialize;
	made global.
	(malloc): Caller changed.
	* malloc/realloc.c (realloc): Call __malloc_initialize if
	necessary, before checking hook.
	* malloc/malloc.h: Declare __malloc_initialize.

	* sysdeps/mach/hurd/ioctl.c: For IOC_VOID request, send ARG itself
	as integer_t arg in RPC.
1995-12-04 19:00:50 +00:00
Roland McGrath ba848785bb Updated from ../=mpn/gmp-1.910 1995-12-04 18:37:56 +00:00
Linda A. Walsh c13a4f3dbd * config.guess: Recognize HP model 816 machines as having a PA1.1 processor. 1995-12-04 18:22:22 +00:00
Roland McGrath 99cf7e3eba For IOC_VOID request, send ARG itself as integer_t arg in RPC. 1995-12-04 17:10:03 +00:00
Roland McGrath 683158e0c4 * sysdeps/mach/hurd/brk.c (DATA_SIZE): Bump to 128MB.
(_hurd_set_brk): Try to allocate more space when we run out.
	* sysdeps/generic/sbrk.c: If __curbrk is zero, call __brk with
	zero and examine it again.
	* sysdeps/unix/sysv/linux/i386/brk.c: New file.
	* sysdeps/unix/sysv/linux/i386/brk.S: File removed.
	* sysdeps/unix/sysv/linux/i386/sbrk.S: File removed.
	* sysdeps/unix/sysv/linux/dl-sysdep.c: New file.
1995-12-03 10:00:22 +00:00
Roland McGrath 0fe4e55291 Sat Dec 2 03:47:27 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/i386/sbrk.S: File removed.

	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start) [DL_SYSDEP_INIT]:
	Invoke this macro before calling DL_MAIN.

	* malloc/malloc.c (malloc): Do initialization here, before
	checking the hook.
	(_malloc_internal): Don't do it here.
1995-12-02 10:00:20 +00:00
Roland McGrath 376fd36e2d (_dl_sysdep_start) [DL_SYSDEP_INIT]: Invoke this macro before calling DL_MAIN. 1995-12-02 09:03:14 +00:00
Per Bothner 8e2e98a2a9 * config.guess: Recognize Pentium under SCO. 1995-11-30 21:59:48 +00:00
Roland McGrath b2518f55c0 Wed Nov 29 12:30:50 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* libio/vsnprintf.c (__vsnprintf): Define as alias.
	* libio/iovsscanf.c (__vsscanf): Define as alias.
	* asprintf.c: Remove libio adaptation code added by drepper.
	* dprintf.c: Likewise.
	* printf.c: Likewise.
	* scanf.c: Likewise.
	* snprintf.c: Likewise.
	* sprintf.c: Likewise.
	* sscanf.c: Likewise.
	* vprintf.c: Likewise.
	* stdio-common/vfscanf.c [USE_IN_LIBIO] (__vfscanf): New wrapper
	function.
	(vfscanf): Define unconditionally.

	* sysdeps/i386/dl-machine.h (elf_machine_rel): If SYM is null, use
	zero for value.

	* misc/getpass.c: Write a newline after reading the unechoed
	password.
1995-11-30 04:49:04 +00:00
Roland McGrath b7843ea9ff Mon Nov 27 19:24:18 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* posix/Makefile (routines): Add getsid.
	* sysdeps/unix/sysv/linux/getsid.S: New file.
	* sysdeps/mach/hurd/getsid.c: New file.
	* sysdeps/stub/getsid.c: New file.
	* posix/unistd.h [__USE_GNU]: Declare getsid.
1995-11-28 10:00:22 +00:00
Roland McGrath 1ed0083ca9 * sysdeps/unix/sysv/linux/sys/mman.h: Add prototypes for new functions 1995-11-27 10:00:22 +00:00
Roland McGrath f45e34fcae Sun Nov 26 12:44:38 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* libc-symbols.h (N_): New macro.
1995-11-26 17:45:08 +00:00
Roland McGrath cbd3dceb39 Sat Nov 25 02:48:47 1995 Ulrich Drepper <drepper@gnu.ai.mit.edu>
* assert/assert-perr.c, assert/assert.c, inet/rcmd.c,
	malloc/mcheck.c, malloc/vm-limit.c, posix/getconf.c, posix/id.c,
	resolv/herror.c, sunrpc/auth_unix.c, sunrpc/clnt_perr.c,
	sunrpc/clnt_raw.c, sunrpc/get_myaddr.c, sunrpc/pmap_clnt.c,
	sunrpc/pmap_rmt.c, sunrpc/portmap.c, sunrpc/rpc_main.c,
	sunrpc/rpc_parse.c, sunrpc/rpc_scan.c, sunrpc/rpc_util.c,
	sunrpc/rpcinfo.c, sunrpc/svc_simple.c, sunrpc/svc_tcp.c,
	sunrpc/svc_udp.c, time/zdump.c, time/zic.c: Mark translatable
	strings.
Sat Nov 25 02:48:47 1995  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* assert/assert-perr.c, assert/assert.c, inet/rcmd.c,
	malloc/mcheck.c, malloc/vm-limit.c, posix/getconf.c, posix/id.c,
	resolv/herror.c, sunrpc/auth_unix.c, sunrpc/clnt_perr.c,
	sunrpc/clnt_raw.c, sunrpc/get_myaddr.c, sunrpc/pmap_clnt.c,
	sunrpc/pmap_rmt.c, sunrpc/portmap.c, sunrpc/rpc_main.c,
	sunrpc/rpc_parse.c, sunrpc/rpc_scan.c, sunrpc/rpc_util.c,
	sunrpc/rpcinfo.c, sunrpc/svc_simple.c, sunrpc/svc_tcp.c,
	sunrpc/svc_udp.c, time/zdump.c, time/zic.c: Mark translatable
	strings.
1995-11-26 17:37:11 +00:00
Roland McGrath fbaad1494f Sun Nov 26 02:00:02 1995 Ulrich Drepper <drepper@gnu.ai.mit.edu>
* misc/syslog.c (vsyslog) [USE_IN_LIBIO]: Adapted for libio.

Thu Nov 23 02:21:55 1995  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/{mlock,munlock,mlockall,munlockall}.S:
	New files.
	* sysdeps/unix/sysv/linux/mman.h: Add prototypes for new functions
	mlock, munlock, mlockall, and munlockall.
1995-11-26 17:32:10 +00:00
Roland McGrath f44820454c Thu Nov 23 18:26:52 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* configure.in (--enable-libio): Set $stdio based on $enableval,
	not always to libio.

Thu Nov 23 18:06:48 1995  Richard Stallman  <rms@gnu.ai.mit.edu>

	* malloc/malloc.c (_malloc_internal): Can't use
	get_contiguous_space when the heap info table
	will be growing.  Account for new contiguous space in _heaplimit.
1995-11-24 10:00:21 +00:00
Roland McGrath 42d2676e7c Wed Nov 22 12:37:39 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/i386/sysdep.S (_errno): Define as alias
	for errno.

	* stdio-common/vfprintf.c [USE_IN_LIBIO] (vfprintf): Define as
	alias for _IO_vfprintf.

	* sysdeps/unix/sysv/linux/sockaddrcom.h: File removed.

	* sysdeps/unix/sysv/linux/i386/init-first.c (init): Use
	__fpu_control instead of ___fpu_control.
	* sysdeps/unix/sysv/linux/i386/ieee_fpu.c
	(___fpu_control): Renamed to __fpu_control.
	* sysdeps/unix/sysv/linux/i386/fpu_control.h: Likewise.
	* sysdeps/unix/sysv/linux/i386/fpu_control.c: Likewise.

	* elf/dl-minimal.c: New file.
	* elf/Makefile (rtld-routines): Add dl-minimal.
	* elf/rtld.c (__dgettext, __assert_fail, __assert_perror_fail):
	Functions moved to dl-minimal.c.
	* sysdeps/mach/hurd/dl-sysdep.c (malloc, free, realloc,
	sigjmp_save, longjmp): Likewise.

	* sysdeps/unix/sysv/linux/i386/brk.S (__curbrk): Always initialize
	to &_end, regardless of PIC.

	* stdio-common/vfscanf.c (__vfscanf): Fix arg name in defn.
1995-11-23 04:53:06 +00:00
Roland McGrath 1a3a58fd76 Tue Nov 21 14:12:13 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* malloc/malloc.c (align): Don't check contiguity and call abort.

	* hurd/hurdsig.c (post_reply): Function removed.
	(abort_thread, abort_all_rpcs, _hurdsig_abort_rpcs): Don't call it.
	Take single callback fn arg instead of reply port and type.
	(_hurd_internal_post_signal): Callers changed.
	Cache reply stub fn ptr in local var before UNTRACED might be changed.

	* sysdeps/mach/hurd/mmap.c: Cope with a null write memobj for
	PROT_READ|PROT_WRITE copy mapping.  Pass a proper vm_inherit_t to
	vm_map.

	* elf/rtld.c (_dl_start): For --list, do output and exit before
	relocating.
1995-11-22 10:00:23 +00:00
Roland McGrath 91c7b85dc8 Mon Nov 20 16:19:15 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* intl/Makefile [gettext-srcdir]: Rewrote copying rules to only
	get .c and .h files.

	* malloc/malloc.c (align): Use abort instead of assert.
1995-11-21 10:01:17 +00:00
Roland McGrath 054cc4cc38 Sun Nov 19 18:23:07 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makeconfig (+includes): Add $($(stdio)-include).
	(libio-include): New variable.

	* stdlib/strtod.c: Put weak_symbol after function defn.
	* stdlib/strtol.c: Likewise.

	* configure.in (--enable-libio): If not present, set $stdio to
	"default".  Move stdio/libio check to end, so sysdeps fragments
	can affect it.  Reset $stdio to "stdio" if it's "default".
	* sysdeps/unix/sysv/linux/configure: New file.
1995-11-20 10:01:12 +00:00
Roland McGrath 96aa2d94a2 Sat Nov 18 16:46:01 1995 Ulrich Drepper <drepper@gnu.ai.mit.edu>
* libio/Makefile, libio/cleanup.c, libio/clearerr.c, libio/feof.c,
	libio/ferror.c, libio/fgetc.c, libio/filedoalloc.c, libio/fileno.c,
	libio/fileops.c, libio/fputc.c, libio/freopen.c, libio/fseek.c,
	libio/genops.c, libio/getc.c, libio/getchar.c, libio/iofclose.c,
	libio/iofdopen.c, libio/iofflush.c, libio/iofgetpos.c, libio/iofgets.c,
	libio/iofopen.c, libio/iofprintf.c, libio/iofputs.c, libio/iofread.c,
	libio/iofscanf.c, libio/iofsetpos.c, libio/ioftell.c, libio/iofwrite.c,
	libio/iogetdelim.c, libio/iogetline.c, libio/iogets.c, libio/iolibio.h,
	libio/iopadn.c, libio/ioprims.c, libio/ioputs.c, libio/ioseekoff.c,
	libio/ioseekpos.c, libio/iosetbuffer.c, libio/iosetvbuf.c,
	libio/iosprintf.c, libio/ioungetc.c, libio/iovsprintf.c,
	libio/iovsscanf.c, libio/libio.h, libio/libioP.h, libio/putc.c,
	libio/putchar.c, libio/rewind.c, libio/setbuf.c, libio/setlinebuf.c,
	libio/stdfiles.c, libio/stdio.c, libio/stdio.h, libio/strfile.h,
	libio/strops.c, libio/vasprintf.c, libio/vscanf.c, libio/vsnprintf.c:
	New files.  Slightly modified version from Linux libc.

	* libio/memstream.c, libio/vdprintf.c: New files for functions not
	(yet) part of GNU libio.

	* libio/iofopncook.c: Implementation of `fopencookie', mainly written
	by Per Bothner.

	* stdio-common/getline.c: Adapted to libio.
	* stdio-common/snprintf.c: Adapted to libio.
	* stdio-common/vfprintf.c: Adapted to libio.
	* stdio-common/vfscanf.c: Adapted to libio.
	* sysdeps/posix/tempname.c: Adapted to libio.
1995-11-20 03:48:11 +00:00
Roland McGrath a5a81fecc7 Fri Nov 17 17:57:00 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/generic/Makefile (make_siglist): Add missing backslash.

	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start_cleanup): New
	function.

	* hurd/hurdfault.c: Replace __libc_fatal calls with assert_perror.
	(_hurdsig_fault_init): Remove #if 0 from setting exception port.
	Insert send right for SIGEXC before thread_set_special_port.
	* hurd/hurdsig.c: Replace __libc_fatal calls with assert_perror.
	(_hurdsig_init): Remove #if 0 from setting exception port.

	* sysdeps/mach/hurd/ptrace.c (ptrace: PTRACE_CONT): Use
	HURD_MSGPORT_RPC macro.
1995-11-18 10:00:22 +00:00
Roland McGrath 4cb202902d Thu Nov 16 06:07:49 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start_cleanup): New
	function.
	(_dl_sysdep_start): Move cleanup code there.

	* Makeconfig (default-rpath): New variable.
	(link-libc): Use it.
	* elf/Makefile (ld.so): Pass -rpath=$(default-rpath).
	* elf/rtld.c (_dl_rpath): New variable.
	(_dl_start): Set it from rtld_map's DT_RPATH.
	Call _dl_setup_hash on rtld_map.
	(dl_main): Cache address of _exit in variable before relocating,
	and use that in later calls.  Call _dl_sysdep_start_cleanup before
	relocating.  Keep track of dependency order while loading; remove
	rtld_map from chain, and reinsert in proper order if there is a
	dependency on it.

	* sysdeps/generic/Makefile (make_siglist): Pass
	-DSIGNUM_H=... with config's signum.h location.
	* sysdeps/generic/make_siglist.c: Include SIGNUM_H to define
	signal numbers.
	(HAVE_STRSIGNAL, HAVE_PSIGNAL): Define these before including signame.c
	(main): Deansideclize output.

	* elf/dl-load.c (_dl_map_object): Use _dl_rpath variable in place
	of DEFAULT_RPATH macro.
	* elf/Makefile: Undo last change.

	* sysdeps/mach/hurd/dl-sysdep.c (free): Don't abort, just nop.
1995-11-17 02:33:47 +00:00
Roland McGrath 8738e7f8b0 * elf/dl-lookup.c (_dl_lookup_symbol): Undefined symbol is no
error if weak.

	* elf/Makefile (default-rpath): New variable.
	(CPPFLAGS): Append -DDEFAULT_RPATH=....
	* elf/dl-load.c (_dl_map_object): Use DEFAULT_RPATH instead of
	hard-coded "/lib:/usr/lib".
1995-11-16 02:37:06 +00:00
Roland McGrath ec967c06ac Wed Nov 15 19:22:07 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/dl-sysdep.c: Include _itoa.h from stdio-common
	instead of stdio.
	(_dl_sysdep_start): If passed user entry is zero and
	EXEC_STACK_ARGS flag set, reset user entry to &_start.

	* elf/rtld.c (dl_main): Only call _dl_setup_hash if there is a
	DT_HASH element.

	* libc-symbols.h [HAVE_ELF] (symbol_set_declare): Gratuitously
	repeat weak decl using weak_symbol macro, in case using broken GCC
	(<2.8).

Wed Nov 15 18:49:55 1995  Ulrich Drepper  <drepper@ipd.info.uni-karlsruhe.de>

	* sysdeps/i386/isnanl.c: New file.
	* sysdeps/i386/isinfl.c: New file.
1995-11-16 00:44:18 +00:00
Roland McGrath 2ede96c936 Tue Nov 14 18:44:21 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* malloc/free.c (free): Moved null and aligned_blocks checks
	inside _free_internal.
1995-11-15 00:27:30 +00:00
Roland McGrath 9199ec6eb2 Mon Nov 13 15:23:01 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* malloc/malloc.c (morecore): Fix inverted test in allocating new
	info table.

	* malloc/malloc.c (align): Fix assertion.

	* malloc/malloc.c: Include assert.h.

	* libc-symbols.h: Use __attribute__ for GCC 2.8, not 2.7.

	* malloc/malloc.h [emacs] (emacs_loser_valloc): Macro removed.
	(valloc): Protect decl with [! (_MALLOC_INTERNAL && emacs)].
1995-11-14 10:00:21 +00:00
Roland McGrath accc07a981 * malloc/malloc.c (align): Assert that space for alignment
adjustment is same original space.

	* hurd/hurdprio.c (_hurd_priority_which_map): Cast vm_deallocate
	arg to vm_address_t.
1995-11-11 10:01:11 +00:00
Roland McGrath 75914335da Fri Nov 10 14:15:21 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hurd/hurdsig.c (_hurd_internal_post_signal): For SIGNO == 0,
	skip straight to pending check.  When UNTRACED, resume process
	from suspension first.

	* intl/Makefile (headers): New variable, libintl.h.
	[gettext-srcdir]: New rules to copy source from $(gettext-srcdir)/intl.
	* configure.in: Check for --with-gettext arg.

Fri Nov 10 13:51:30 1995  Richard Stallman  <rms@gnu.ai.mit.edu>

	* malloc/malloc.c (get_contiguous_space): New function.
	(morecore): Rewrite allocating new malloc info table.
	(_malloc_internal): Use get_contiguous_space.

Fri Nov 10 13:03:40 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* hurd/hurdexec.c (_hurd_exec): If exec'ing self, pass
	_hurd_msgport to be destroyed.

	* Makerules (installed-libcs): Filter out %_pic.a.

	* hurd/hurdinit.c (_hurd_proc_init): When traced, use msg_sig_post
	to our msgport to take SIGTRAP, instead of _hurd_raise_signal.

	* hurd/Makefile (user-interfaces): Add hurd/process_request.
1995-11-10 20:38:31 +00:00
Roland McGrath d7435cd836 Wed Nov 8 16:31:25 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* termios/Makefile (headers): Add sys/ttychars.h.
	* termios/sys/ttychars.h: New file, incorporated from 4.4BSD-Lite
	for compatibility.

	* signal/signal.h [__USE_BSD] (sig_t): New typedef.

Wed Nov  8 15:12:47 1995  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/ptrace.c (ptrace) [PTRACE_TRACEME]: Notify the
	proc server that we are now traced.
1995-11-09 10:00:21 +00:00
Roland McGrath 7606603541 [__USE_BSD] (sig_t): New typedef. 1995-11-08 21:31:12 +00:00
Thomas Bushnell, BSG f535a036af (ptrace) [PTRACE_TRACEME]: Notify the proc server that we are now traced. 1995-11-08 20:12:30 +00:00
Roland McGrath 094bacdbd8 * elf/Makefile (ldd): Make it executable.
* Makeconfig (config-LDFLAGS): Find dynamic linker in $(slibdir).

	* Makeconfig (slibdir): New variable.
	* Makerules (install): Install libc.so in $(slibdir).
	* elf/Makefile (install-others): Install ld.so and ld-linux.so.1
	in $(slibdir).
1995-11-08 02:28:15 +00:00
Roland McGrath 86d2c878ac Tue Nov 7 12:29:46 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* elf/linux-compat.c: New file.
	* elf/Makefile (distribute): Add linux-compat.c.
	(generated): Add librtld.so.
	[$(config-os)=linux*] (extra-objs): Add linux-compat.so.
	[$(config-os)=linux*] (extra-objs): Add ld-linux.so.1.
	(librtld.so): New target.
	(ld.so, ld-linux.so.1): Make from librtld.so.

	* elf/rtld.c (dl_main): Instead of weak call to _dl_compat_init,
	call our own DT_INIT if we have one (and then clear it).
	(__dgettext): New weak function.

	* intl/localealias.c (read_alias_file): Avoid sprintf; use memcpy
	by hand instead.

	* sysdeps/generic/_strerror.c (_strerror_internal): Use _itoa
	instead of snprintf.

	* sysdeps/mach/_strerror.c (_strerror_internal): Don't write
	BUF[BUFLEN].

	* elf/rtld.c (rtld_map): New static variable.
	(_dl_start): Use a differently named local BOOTSTRAP_MAP for the
	bootstrapping.  Then copy data into `rtld_map'.
	(dl_main): Finish filling in rtld_map and link it into the chain,
	instead of allocating a new structure.
	(dl_main): Call _dl_compat_init if it is defined (use weak ref).

	* elf/dlsym.c: Fix last change: move REF out of `doit'.


	control.
	using it.

	and cwdir ports.
	functions.
	these.
	$(libdir)(rtld-installed-name).

	leading zeroes.

	in the rhs.
	pattern rule.


	never know.
	(fork): Use symbol_set_* macros for _hurd_fork_locks.
	* sysdeps/unix/sysv/sysv4/linux/i386/sysdep.S (__syscall_error):
 	instead of unix/sysv.

	-dynamic-linker.

	(__printf_fp): Last arg ARGS is now `const void **const';

	locale/C-ctype.c.
	* sysdeps/mach/hurd/sigsuspend.c: Likewise.
	* sysdeps/mach/hurd/mips/sigreturn.c: Likewise.
	alias gethostname.
	setitmr
	setpgrp
	(_S_msg_get_exec_flags, _S_msg_set_exec_flags,
	(abort_thread, abort_rpcs): Take same new arg and pass it through.
1995-11-07 21:46:52 +00:00
Roland McGrath 51093422b2 Mon Nov 6 16:20:14 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* elf/dlsym.c: Return the proper value, not just the defining
	object's loadbase.
1995-11-07 10:00:21 +00:00
Roland McGrath f797c38303 * stdio-common/vfprintf.c (%c): Count the character itself towards
the field width in all cases.
1995-11-06 10:00:20 +00:00
Roland McGrath e380bf6248 Sun Nov 5 16:09:13 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/getpriority.c (getpriority): Cast
	__vm_deallocate arg to vm_address_t.
1995-11-05 21:13:25 +00:00
Roland McGrath 853f0eead1 Fri Nov 3 17:27:49 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/sendto.c: Don't pass BINDING arg to
	socket_create_address.
	* sysdeps/mach/hurd/connect.c: Likewise.
	* sysdeps/mach/hurd/bind.c: Likewise.

	* hurd/hurdprio.c (_hurd_priority_which_map): Pass threadwaits
	args to proc_getprocinfo.
	* sysdeps/mach/hurd/getpriority.c: Likewise.

	* hurd/hurdmsg.c (_S_msg_report_wait): New stub function.
1995-11-03 22:42:06 +00:00
Roland McGrath 27cc33c3b4 Thu Nov 2 19:24:37 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/i386/sysdep.S (errno): Define as common.
1995-11-03 10:00:20 +00:00
Roland McGrath 80b55d320b * sysdeps/mach/hurd/getpriority.c (getpriority): Pass
PI_FETCH_TASKINFO to proc_getprocinfo and through
	_hurd_priority_which_map.

	* sysdeps/mach/hurd/setpriority.c (setpriority): Pass new arg to
	_hurd_priority_which_map.
	* hurd/hurdprio.c (_hurd_priority_which_map): New arg PI_FLAGS,
	passed through to proc_getprocinfo RPC.
	* hurd/hurd/resource.h: Add PI_FLAGS arg in decl.
1995-11-01 10:00:20 +00:00
Roland McGrath 3bbceb1287 Tue Oct 31 00:07:29 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/group_member.c: New file.
	* sysdeps/generic/group_member.c: New file.

	* Makerules (lib-noranlib): Don't depend on $(install-lib).
	(others): Do.
	* extra-lib.mk: Fix test of $(lib)-no-lib-dep.

Mon Oct 30 12:33:10 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* Rules (others): Depend on $(extra-objs).

	* posix/unistd.h [__USE_GNU]: Declare group_member, __group_member.
	* posix/Makefile (routines): Add group_member.

	* sysdeps/posix/euidaccess.c: New file, adapted from fileutils.

	* sysdeps/unix/sysv/linux/i386/sigaction.c: Tighten constraint for
	SIG operand in asm so it must be a register.
	Add dead return to quiet gcc warning.

	* Makerules (sysd-rules): Write a defn for sysd-rules-done.
	[! sysd-rules-done]: Inhibit deps.
1995-10-31 06:54:40 +00:00
Roland McGrath 3e2ee7271d Thu Oct 26 23:11:11 1995 Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
* sysdeps/unix/sysv/linux/poll.c: Don't define as stub.  Use
	simulation of system call using select.

	* sysdeps/unix/sysv/linux/signal.c: Use POSIX implementation.

	* sysdeps/unix/sysv/linux/statbuf.h: Define _STAT_VER.

	* sysdeps/unix/sysv/linux/i386/sigaction.c: Correct parameter
	name usage (new->act, old->oact).
	Correct asm statement because of gcc strangeness.
	
	* sysdeps/i386/i586/strchr.S: Correct typos: cmp -> cmpb.

	* sunrpc/clnt_perr.c: Remove declaration of sys_errlist.  They
	conflict with the ones in stdio.h.

	* string/tester.c: %Z is no complete format.  Change to %Zd.

	* sysdeps/mach/hurd/symlink.c (__symlink): Ditto.
1995-10-30 16:40:52 +00:00
Roland McGrath f094496c12 Thu Oct 26 18:13:33 1995 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/bind.c (bind): Swap args to dir_link.
	* sysdeps/mach/hurd/link.c (__link): Ditto.
	* sysdeps/mach/hurd/mknod.c (__mknod): Ditto.
	Include "stdio-common/_itoa.h" instead of "stdio/_itoa.h".

	* sysdeps/mach/hurd/symlink.c (__symlink): Ditto.
1995-10-27 09:00:21 +00:00
Miles Bader bf899faa49 Include "stdio-common/_itoa.h" instead of "stdio/_itoa.h". 1995-10-26 23:11:02 +00:00
Miles Bader 29370ca488 Swap args to dir_link. 1995-10-26 22:19:57 +00:00
Roland McGrath efc755b282 Thu Oct 26 00:11:13 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/i386/sigaction.c: New file.

	* sysdeps/unix/sysv/linux/i386/xstat.S: Don't use JUMPTARGET macro
	on syscall_error.  For PIC, it is a local label;
	for non-PIC, JUMPTARGET expands to the unadorned name anyway.
	* sysdeps/unix/sysv/linux/i386/xmknod.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/syscall.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/socket.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/sbrk.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/mmap.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/brk.S: Likewise.
1995-10-26 04:17:49 +00:00
Roland McGrath 4133498776 Thu Oct 26 03:01:22 1995 Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
* sysdeps/unix/sysv/linux/syscall.h: Strip list of syscalls in
	comment to the necessary ones.  Add _readv and _writev.

	* sysdeps/unix/configure.in: Change syntax for system call test
	candidates and adapt sed script for this.  Now use : to separate
	syscall name and file name.

	* sysdeps/unix/sysv/linux/i386/sysdep.h (ENTRY): System call
	number is now set is DO_CALL.  So call with additional argument.
	(DO_CALL): Takes an additional argument.  Load system call
	number according to new argument.
	(SYSCALL_ERROR_HANDLER): Add ; after last ret statement.
	* sysdeps/unix/sysv/linux/i386/brk.S [PIC]: Define __syscall_error
	locally using SYSCALL_ERROR_HANDLER macro.
	* sysdeps/unix/sysv/linux/i386/mmap.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/sbrk.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/socket.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/xmknod.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/xstat.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/syscall.S: Likewise.
	Don't use DO_CALL macro; instead use lower level macros for better
	control. 

	* sysdeps/unix/sysv/linux/sigaction.h: New file.
	* sysdeps/unix/sysv/linux/sigaction.S: File removed.
	* sysdeps/unix/sysv/linux/signal.S: File removed.
1995-10-26 04:01:17 +00:00
Roland McGrath c14e4c326d * hurd/hurdstartup.c (_hurd_startup): Use new
exec_startup_get_info RPC from exec_startup.defs
	in place of old exec_startup from exec.defs.  Remove kludge to
	guess user entry and phdr locations, since the new RPC gives us
	that info.

	* sysdeps/generic/_strerror.c: Undo last change.
1995-10-26 03:59:27 +00:00
Roland McGrath f44f9c33df * stdio/stdio.h (sys_errlist, _sys_errlist): Declare const. 1995-10-26 03:38:19 +00:00
Roland McGrath ff9bef7f88 Wed Oct 25 14:23:35 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/stat.c: New file.
	* sysdeps/unix/sysv/linux/fstat.c: New file.
	* sysdeps/unix/sysv/linux/lstat.c: New file.
	* sysdeps/unix/sysv/linux/i386/stat.S: File removed.
	* sysdeps/unix/sysv/linux/i386/fstat.S: File removed.
	* sysdeps/unix/sysv/linux/i386/lstat.S: File removed.
1995-10-25 19:20:45 +00:00
Roland McGrath 03a7582576 * sysdeps/unix/sysv/linux/i386/sysdep.h (SYSCALL_ERROR_HANDLER):
New macro.
	(PSEUDO): Use it instead of SYSCALL_PIC_SETUP and jmp syscall_error.

	* sysdeps/unix/sysv/linux/i386/sysdep.S (__syscall_error): Define
	only #ifndef PIC.

	* Makeconfig (built-program-cmd): New variable.
	* sunrpc/Makefile (rpcgen-cmd): Use $(built-program-cmd).
	* time/Makefile (zic-cmd): Likewise.

	* hurd/Makefile (user-interfaces): Add hurd/exec_startup.
1995-10-25 02:19:39 +00:00
Roland McGrath e97ec51d01 * sunrpc/Makefile (librpcsvc-no-lib-dep): New variable.
* extra-lib.mk: If $(lib)-no-lib-dep is defined and MAKELEVEL>0,
	make `others' rather than `lib-noranlib' depend on the libraries.
1995-10-24 21:45:10 +00:00
Roland McGrath 21ee716616 Tue Oct 24 15:22:58 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/unix/configure.in: Check for fchdir syscall.
	Improve sed script to allow / on rhs without / on lhs.

Thu Oct 19 03:47:32 1995  Ulrich Drepper  <drepper@ipd.info.uni-karlsruhe.de>

	* sysdeps/unix/sysv/linux/termbits.h: Don't define speed constants.

	* elf/rtld.c: Include _itoa.h from stdio-common instead of stdio.

	* sysdeps/unix/sysv/linux/select.S: New file.
1995-10-24 20:29:05 +00:00
Roland McGrath 1d234146c0 * sysdeps/unix/sysv/linux/i386/sysdep.h (PSEUDO): Use
SYSCALL_PIC_SETUP before jumping to syscall_error.
	* sysdeps/unix/i386/sysdep.h (SYSCALL_PIC_SETUP): New macro.
	(PSEUDO): Use it before jumping to syscall_error.
	* sysdeps/unix/i386/sysdep.S [! PIC]: Don't find GOT address;
	expect it in %ebx on entry.  Pop old %ebx value off stack after
	using it.
1995-10-19 02:20:22 +00:00
Roland McGrath 580c1888be * signal/signal.h [__USE_BSD] (_sys_siglist, sys_siglist): Declare
them.
1995-10-18 19:46:18 +00:00
Roland McGrath 4d049a8baa Wed Oct 18 03:33:22 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/generic/_strerror.c: Declare _sys_errlist and _sys_nerr.

	* hurd/hurdlookup.c (__hurd_file_name_lookup_retry): For magic
	`fd/', pass the right pointer to strtol to parse the number.
1995-10-18 07:36:16 +00:00
Roland McGrath cabcc273c2 Tue Oct 17 23:00:10 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/_strerror.c: Include stdio-common/_itoa.h instead
	of stdio/_itoa.h.

Tue Oct 17 19:51:17 1995  Ulrich Drepper  <drepper@ipd.info.uni-karlsruhe.de>

	* sysdeps/unix/sysv/linux/i386/stat.S [PIC] (__stat): Set GOT
	register %ebx before calling __xstat through PLT.

	* sysdeps/unix/sysv/linux/i386/sysdep.S: Fix typo in comment.

	* sysdeps/unix/sysv/linux/sigset.h: Remove file.

	* hurd/hurdsock.c: Include stdio-common/_itoa.h instead of
	stdio/_itoa.h.
	* hurd/hurdlookup.c: Likewise.
1995-10-18 05:47:53 +00:00
Roland McGrath f2149f697a * hurd/hurd/signal.h: Declare hurd_preempt_signals and
hurd_unpreempt_signals.

	* stdio/stdio.h: Declare __snprintf and __vsnprintf.
1995-10-17 09:00:50 +00:00
Roland McGrath b3a59f408e Tue Oct 17 01:21:21 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* stdio-common/psignal.c: Translate signal description strings.
	* string/strsignal.c: Likewise.
	* sysdeps/generic/_strerror.c (_strerror_internal): Translate
	error strings.
	* sysdeps/mach/_strerror.c: Likewise.

	* stdio-common/snprintf.c (__snprintf): Renamed from snprintf;
	call __vsnprintf.
	(snprintf): Define as weak alias.
	* stdio/vsnprintf.c (__vsnprintf): Renamed from vsnprintf.
	(vsnprintf): Define as weak alias.

	* libc-symbols.h [! ASSEMBLER] (_): New macro.
1995-10-17 05:49:48 +00:00
Roland McGrath 0700dfa143 * Makerules (install-lib): Filter out %_pic.a; install only the
linked shared objects.
1995-10-17 02:19:11 +00:00
Roland McGrath cb2f05ed72 * locale/Makefile (aux): Add SYS_libc.
* locale/SYS_libc.c: New file.
	* libc-symbols.h (_): New macro.

	* configure.in (libc_cv_asm_set_directive): Link program into
	conftest instead of letting it default to a.out.
1995-10-17 02:14:34 +00:00
Roland McGrath d17e960c2b * elf/Makefile (install-others): Add missing slash.
* elf/ldd.sh.in: Prepend `./' to relative file names so ld.so
	won't search LD_LIBRARY_PATH.
1995-10-17 01:08:25 +00:00
Roland McGrath deab9deadc * Makefile (subdirs): Replace stdio with stdio-common and $(stdio).
* configure.in: Grok arg --enable-libio.
	($stdio = libio): Define USE_IN_LIBIO.
	* config.h.in (USE_IN_LIBIO): Add #undef.
	* config.make.in (stdio): New variable, set by configure.
	* Makeconfig (stdio): New variable.
	* stdio.h [USE_IN_LIBIO]: Include libio/stdio.h instead of
	stdio/stdio.h.
	* stdio-common/Makefile: New file.
	* stdio/Makefile: Half the contents moved to stdio-common/Makefile.
	* stdio/_itoa.c: Moved to stdio-common.
	* stdio/_itoa.h: Moved to stdio-common.
	* stdio/asprintf.c: Moved to stdio-common.
	* stdio/bug1.c: Moved to stdio-common.
	* stdio/bug1.input: Moved to stdio-common.
	* stdio/bug2.c: Moved to stdio-common.
	* stdio/bug3.c: Moved to stdio-common.
	* stdio/bug4.c: Moved to stdio-common.
	* stdio/bug5.c: Moved to stdio-common.
	* stdio/bug6.c: Moved to stdio-common.
	* stdio/bug6.input: Moved to stdio-common.
	* stdio/bug7.c: Moved to stdio-common.
	* stdio/dprintf.c: Moved to stdio-common.
	* stdio/errnobug.c: Moved to stdio-common.
	* stdio/getline.c: Moved to stdio-common.
	* stdio/getw.c: Moved to stdio-common.
	* stdio/perror.c: Moved to stdio-common.
	* stdio/printf-parse.h: Moved to stdio-common.
	* stdio/printf-prs.c: Moved to stdio-common.
	* stdio/printf.c: Moved to stdio-common.
	* stdio/printf.h: Moved to stdio-common.
	* stdio/printf_fp.c: Moved to stdio-common.
	* stdio/psignal.c: Moved to stdio-common.
	* stdio/putw.c: Moved to stdio-common.
	* stdio/reg-printf.c: Moved to stdio-common.
	* stdio/scanf.c: Moved to stdio-common.
	* stdio/snprintf.c: Moved to stdio-common.
	* stdio/sprintf.c: Moved to stdio-common.
	* stdio/sscanf.c: Moved to stdio-common.
	* stdio/tempnam.c: Moved to stdio-common.
	* stdio/temptest.c: Moved to stdio-common.
	* stdio/test-fseek.c: Moved to stdio-common.
	* stdio/test-fwrite.c: Moved to stdio-common.
	* stdio/test-popen.c: Moved to stdio-common.
	* stdio/test_rdwr.c: Moved to stdio-common.
	* stdio/tmpfile.c: Moved to stdio-common.
	* stdio/tmpnam.c: Moved to stdio-common.
	* stdio/tst-fileno.c: Moved to stdio-common.
	* stdio/tst-printf.c: Moved to stdio-common.
	* stdio/tstgetln.c: Moved to stdio-common.
	* stdio/tstgetln.input: Moved to stdio-common.
	* stdio/tstscanf.c: Moved to stdio-common.
	* stdio/tstscanf.input: Moved to stdio-common.
	* stdio/vfprintf.c: Moved to stdio-common.
	* stdio/vfscanf.c: Moved to stdio-common.
	* stdio/vprintf.c: Moved to stdio-common.
	* stdio/xbug.c: Moved to stdio-common.
	* sysdeps/generic/Makefile (siglist.c rules): Do this in subdir
	stdio-common instead of stdio.
	* sysdeps/unix/Makefile (errlist.c rules): Likewise.
	* stdio-common/asprintf.c [USE_IN_LIBIO]: Call libio primitive
	function.
	* stdio-common/dprintf.c: Likewise.
	* stdio-common/printf.c: Likewise.
	* stdio-common/scanf.c: Likewise.
	* stdio-common/snprintf.c: Likewise.
	* stdio-common/sprintf.c: Likewise.
	* stdio-common/sscanf.c: Likewise.
	* stdio-common/vprintf.c: Likewise.

	* Makerules: Include $(+depfiles) directly instead of generating
	depend-$(subdir).
	(depend-$(subdir)): Target removed.
	(common-clean): Don't remove depend-$(subdir).
1995-10-17 00:41:39 +00:00
Roland McGrath 10fd03c601 (errlist.c rules): Do this in subdir stdio-common instead of stdio. 1995-10-16 23:10:45 +00:00
Linda A. Walsh c90514fc98 * config.guess: Recognize HP model 819 machines has having a PA 1.1 processor. 1995-10-16 15:40:29 +00:00
Roland McGrath 32a392b61c * sysdeps/unix/sysv/linux/Makefile (rtld-installed-name): New variable.
(config-LDFLAGS): Variable removed.
1995-10-16 09:00:14 +00:00
Roland McGrath 924b9ff68d Mon Oct 16 03:22:37 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/getcwd.c: Use __file_name_lookup_under.
	* sysdeps/mach/hurd/bind.c: Likewise.
	* sysdeps/mach/hurd/access.c: Use new __hurd_file_name_lookup
	calling convention.

	* hurd/hurdexec.c: Undo last change (10 Oct 95).
1995-10-16 07:29:08 +00:00
Roland McGrath 2948fc64a6 * hurd/hurd/lookup.h: New file.
* hurd/hurdlookup.c (__file_name_lookup_under): New function.
	(__hurd_file_name_lookup, __hurd_file_name_lookup_retry,
	__hurd_file_name_split): Rewritten to take callback functions for
	using any needed init or dtable port, instead of passing in crdir
	and cwdir ports.  
	(__file_name_lookup, __file_name_split): Use new calling
	convention; pass _hurd_ports_use and __getdport as the callback
	functions. 

	* sysdeps/mach/hurd/chroot.c: Use __file_name_lookup_under instead
	of __hurd_file_name_lookup.
	* sysdeps/mach/hurd/chdir.c: Likewise.
	* sysdeps/mach/hurd/fchdir.c: Likewise.
	* hurd/fchroot.c: Likewise.
1995-10-16 02:51:06 +00:00
Roland McGrath 6cab5056c4 Sun Oct 15 21:04:13 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* stdlib/Makefile (mpn-found): Don't omit %.s.
	(mpn-copy-sysdep): Omit files in nonexistent directories.
	(copy-mpn): Commit files to CVS.
	* stdlib/gen-mpn-copy (translations): Update translations for GMP
	1.906.7.

	* configure.in (machine): Translate alpha* to alpha/&, hppa* to hppa/&.

Thu Oct 12 15:45:32 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* hurd/hurd.h (file_name_lookup_under): Declare it.
	* hurd/Makefile (headers): Add hurd/lookup.h.

	* hurd/hurdinit.c (_hurd_ports_use): New function.
	* hurd/hurd.h (_hurd_ports_use): Declare it.
	(hurd_invoke_translator, hurd_file_name_lookup, hurd_file_name_split,
	hurd_file_name_lookup_retry): Remove these decls.
	* hurd/Makefile (routines): Remove invoke-trans.
1995-10-16 02:14:42 +00:00
Roland McGrath 8f5ca04bc7 Sat Oct 14 02:52:36 1995 Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
* malloc/malloc.c (_malloc_internal): Performance fix.  Move
	if statement out of loop.

	* stdio/_itoa.c, stdio/_itoa.h: Complete rewrite.  Much faster
	implementation using GMP functions.  Contributed by
	Torbjorn Granlund and Ulrich Drepper.

	* stdio/test_rdwr.c: Include <errno.h>.

	* sysdeps/i386/i586/Implies: New file.

	New highly optimized string functions for i[345]86.
	* sysdeps/i386/memchr.S, sysdeps/i386/memcmp.S: New files.
        * sysdeps/i386/stpcpy.S, sysdeps/i386/stpncpy.S: New files.
        * sysdeps/i386/strchr.S, sysdeps/i386/strcspn.S: New files.
        * sysdeps/i386/strpbrk.S, sysdeps/i386/strrchr.S: New files.
        * sysdeps/i386/strspn.S, sysdeps/i386/i486/strcat.S: New files.
        * sysdeps/i386/i486/strlen.S, sysdeps/i386/i586/strchr.S: New files.
        * sysdeps/i386/i586/strlen.S: New file.
	* sysdeps/i386/memchr.c: Removed.  There is now an assembler version.

	* sysdeps/i386/i586/memcopy.h (WORD_COPY_BWD): Parameters did
	not correspond to used values.

	* sysdeps/unix/sysv/linux/nfs/nfs.h: New file.  Simply a wrapper
        around a kernel header file.
	* sysdeps/unix/sysv/linux/Dist: Add it.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir)=sunrpc] (headers):
	Likewise.

	* sysdeps/unix/sysv/linux/local_lim.h: Rewrite.  Instead of
        defining ourself we use a kernel header file.

	* sysdeps/unix/sysv/linux/i386/sysdep.h (DO_CALL): Optimize system
        call handler for i586.

	* sysdeps/unix/sysv/linux/sys/param.h: Add copyright and clean up.
Sat Oct 14 02:52:36 1995  Ulrich Drepper  <drepper@ipd.info.uni-karlsruhe.de>

	* malloc/malloc.c (_malloc_internal): Performance fix.  Move
	if statement out of loop.

	* stdio/_itoa.c, stdio/_itoa.h: Complete rewrite.  Much faster
	implementation using GMP functions.  Contributed by
	Torbjorn Granlund and Ulrich Drepper.

	* stdio/test_rdwr.c: Include <errno.h>.

	* sysdeps/i386/i586/Implies: New file.

	New highly optimized string functions for i[345]86.
	* sysdeps/i386/memchr.S, sysdeps/i386/memcmp.S: New files.
        * sysdeps/i386/stpcpy.S, sysdeps/i386/stpncpy.S: New files.
        * sysdeps/i386/strchr.S, sysdeps/i386/strcspn.S: New files.
        * sysdeps/i386/strpbrk.S, sysdeps/i386/strrchr.S: New files.
        * sysdeps/i386/strspn.S, sysdeps/i386/i486/strcat.S: New files.
        * sysdeps/i386/i486/strlen.S, sysdeps/i386/i586/strchr.S: New files.
        * sysdeps/i386/i586/strlen.S: New file.
	* sysdeps/i386/memchr.c: Removed.  There is now an assembler version.

	* sysdeps/i386/i586/memcopy.h (WORD_COPY_BWD): Parameters did
	not correspond to used values.

	* sysdeps/unix/sysv/linux/nfs/nfs.h: New file.  Simply a wrapper
        around a kernel header file.
	* sysdeps/unix/sysv/linux/Dist: Add it.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir)=sunrpc] (headers):
	Likewise.

	* sysdeps/unix/sysv/linux/local_lim.h: Rewrite.  Instead of
        defining ourself we use a kernel header file.

	* sysdeps/unix/sysv/linux/i386/sysdep.h (DO_CALL): Optimize system
        call handler for i586.

	* sysdeps/unix/sysv/linux/sys/param.h: Add copyright and clean up.
1995-10-16 01:37:51 +00:00
Roland McGrath 5d82cf5c55 * sysdeps/i386/dl-machine.h (elf_machine_rel): Use +=, not =, to
apply R_386_PC32 reloc.
1995-10-12 09:00:05 +00:00
Roland McGrath db65048bb3 Wed Oct 11 00:00:00 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makeconfig (config-LDFLAGS): Add missing slash.

	* sysdeps/mach/hurd/profil.c (fork_profil): Only call
	update_waiter if profiling was enabled in the parent.

	* csu/initfini.c: Don't pass -f flag to cp.
1995-10-11 05:53:53 +00:00
Roland McGrath 8e3cc80f6d Tue Oct 10 23:08:53 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makerules (build-shlib): Pass -rpath and -rpath-link options.
	(LDFLAGS-c.so): Don't pass -dynamic-linker here.
	* Makeconfig (+link): Pass $(sysdep-LDFLAGS).
	(link-libc): Pass -rpath and -rpath-link options.

	* MakeTAGS (all-dirs): Omit CVS directories.
	Specify vpath directives to find source files in $(all-dirs).
	(sources, headers): Append sources and headers from $(all-dist) to
	these. 
	(all-dist): Filter them out of this.
	(all-headers, all-sources): Use $(shell find ...) instead of
	$(wildcard ...).

	* sysdeps/mach/hurd/Makefile (sysdep-LDFLAGS): New variable; pass
	-rpath-link.

	* hurd/hurdexec.c: Pass poly and dealloc args to __file_exec.

	* elf/Makefile (install-others): Add missing $.

	* mach/Makefile ($(objpfx)errsystems.c): Rule reenabled.
1995-10-11 03:34:46 +00:00
Roland McGrath b122c7038e Mon Oct 9 02:54:14 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makeconfig (config-LDFLAGS): Define to
	-Wl-dynamic-linker=$(libdir)$(rtld-installed-name).
	(rtld-installed-name): New variable.
	* elf/Makefile (install-lib): Variable removed.
	(install-others): Define this instead, to
	$(libdir)(rtld-installed-name). 
	($(libdir)(rtld-installed-name)): New target; install from ld.so.

	* elf/ldd.sh.in: New file.
	* elf/Makefile (distribute): Add ldd.sh.in.
	(install-bin): Add ldd.
	($(objpfx)ldd: ldd.sh.in): New rule.

	* sysdeps/mach/hurd/dl-sysdep.c: Use __hurd_fail throughout.
	* hurd/hurd.h (__hurd_fail): Replace macro with inline function.
	Translate some Mach errors to Hurd errors.

	* elf/rtld.c (dl_main): Under --list, print msg if executable is
	statically linked.

	* elf/dl-load.c (_dl_map_object_from_fd): Rewrote program header
	table processing.

Sat Oct  7 01:25:48 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* sysdeps/stub/machine-gmon.h: Add #error.

Fri Oct  6 01:49:48 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* elf/dynamic-link.h (elf_get_dynamic_info): If DYN is null, don't
	examine it.
1995-10-09 07:06:29 +00:00
Roland McGrath 80fd73873b Fri Sep 29 03:43:51 1995 Paul Eggert <eggert@twinsun.com>
Rewrite mktime from scratch for performance, and for correctness
	in the presence of leap seconds.

	* time/mktime.c	(ydhms_tm_diff, not_equal_tm, print_tm, check_result):
	New functions.
	(LEAP_SECONDS_POSSIBLE, CHAR_BIT, INT_MIN, INT_MAX,
	TIME_T_MIN, TIME_T_MAX, TM_YEAR_BASE, EPOCH_YEAR): New macros.
	<limits.h>, <stdlib.h>: New #includes.
	(main): Support tests with given broken-down value; support benchmarks.
	(__mon_lengths, debugging_enabled, printtm, dist_tm, doit,
	do_normalization, normalize, BAD_STRUCT_TM, SKIP_VALUE,
	<ctype.h>): Remove.

	* time/time.h, time/mktime.c (__mktime_internal): New offset arg.
	* time/mktime.c (mktime), time/timegm.c (timegm): Use it.

	* time/mktime.c (__mon_yday): New variable; replaces `__mon_lengths'.
	time/offtime.c (__offtime), time/tzset.c (compute_change): Use it.
	
	* time/offtime.c (__offtime): Remove useless assignment
	`tp->tm_isdst = -1'.

	* manual/maint.texi: Update credits.

Fri Oct  6 00:28:53 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* sysdeps/unix/common/readv.S: Moved to sysdeps/unix/bsd.
	* sysdeps/unix/common/writev.S: Moved to sysdeps/unix/bsd.
	* sysdeps/unix/sysv/linux/readv.c: File removed.
	* sysdeps/unix/sysv/linux/writev.c: File removed.
	* sysdeps/unix/configure.in: Check for readv and writev syscalls.

	* sysdeps/unix/configure.in: If eval doesn't set $unix_srcname,
	set it to $unix_syscall instead of $unix_function.
1995-10-06 04:50:55 +00:00
Roland McGrath 6a76c11515 Thu Oct 5 00:59:58 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* elf/rtld.c (dl_main): Grok --list flag.
	* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start): Ignore -- args.

	* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_message): New function.
	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_message): New function.
	* elf/link.h (_dl_sysdep_message): Declare it.
1995-10-05 09:00:06 +00:00
Roland McGrath 57aefafe56 * sysdeps/unix/Makefile ($(common-objpfx)ioctls): Remove NULL from
the list.

	* time/northamerica: Corrections to Canada data from ADO 95i.

	* sysdeps/unix/sysv/linux/Makefile (headers): Don't append to this
	unconditionally.  In socket subdir, append sys/socketcall.h; in
	time subdir, append sys/timex.h.
	(config-LDFLAGS): New variable.
	* sysdeps/unix/sysv/linux/Dist: New file.
	* Makeconfig (+link): Pass $(config-LDFLAGS) before $(LDFLAGS).
1995-10-04 21:52:33 +00:00
Roland McGrath 5f77086119 Wed Oct 4 00:21:03 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/generic/stpncpy.c: Don't increment DEST when zero-filling.

	* elf/dlopen.c (dlopen): Don't pass USER_ENTRY arg to _dl_map_object.
1995-10-04 17:06:55 +00:00
Roland McGrath 879bf2e65a * sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start): If started by
kernel with args on stack, point _dl_hurd_data at zero data
	instead of garbage.  When ld.so run as program, grok args
	-LIB=MEMOBJ and pre-load shared object files found in memory
	objects loaded by the boot loader.

	* elf/link.h (struct link_map): New member `l_entry'.
	(_dl_map_object, _dl_map_object_from_fd): Remove last arg ENTRY_POINT.
	* elf/dl-load.c (_dl_map_object, _dl_map_object_from_fd): Remove
	last arg ENTRY_POINT.  Store the entry point location in the
	`l_entry' member of the new map.
	* elf/rtld.c (dl_main): Don't pass USER_ENTRY arg to
	_dl_map_object.  When run as program, set *USER_ENTRY to L->l_entry.
	* elf/dl-init.c (_dl_init_next): Don't pass ENTRY_POINT arg to
	_dl_map_object.
1995-09-30 21:18:30 +00:00
Roland McGrath 41cfadd63c Sat Sep 30 11:47:05 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* posix/tstgetopt.c, posix/tstgetopt.args: Test long options too.

	* sysdeps/unix/sysv/linux/i386/init-first.c (init): Save, set, and
	restore %ebx by hand for personality syscall.
	GCC cannot deal with spilling the dedicated GOT register.

	* misc/Makefile (routines): Add mntent, which was somehow omitted.

Fri Sep 29 15:07:10 1995  Ulrich Drepper  <drepper@ipd.info.uni-karlsruhe.de>

 	* sysdeps/unix/sysv/linux/adjtime.c (__adjtime):
 	Change name of field `mode' in `struct timex' to `modes'.
	Linux-1.3.28 updates this name according to RFC 1489.
1995-09-30 17:10:48 +00:00
Roland McGrath 24906b43b9 Thu Sep 28 13:05:54 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
Merge new message handling code from GNU gettext, by Drepper.
	* intl: New directory.
	* Makefile (subdirs): Add intl.

	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Return
	USER_ENTRY instead of storing it on our stack.

	* elf/rtld.c (rtld_command): Variable removed.
	(_dl_skip_args): New variable.
	(dl_main): Increment _dl_skip_args instead of setting rtld_command.
	If the link_map for the executable itself is not first in the chain,
	make it so.
	* sysdeps/i386/dl-machine.h (RTLD_START): Use _dl_skip_args as
	count of args to skip.

Thu Sep 28 09:20:04 1995  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* stdlib/strtod.c (STRTOF): Fix handling of numbers with lots of
	leading zeroes.
1995-09-28 18:42:29 +00:00
Roland McGrath 91f62ce6b5 (rtld_command): Variable removed. (_dl_skip_args): New variable. (dl_main): Increment _dl_skip_args instead of setting rtld_command. If the link_map for the executable itself is not first in the chain, make it so. 1995-09-28 17:05:33 +00:00
Ulrich Drepper 889fd48ef9 (STRTOF): Fix handling of numbers with lots of leading zeroes. 1995-09-28 09:20:04 +00:00
Roland McGrath 3ec41e0302 * sysdeps/mach/hurd/getcwd.c (__getcwd): Renamed from getcwd.
(getcwd): Define as weak alias.
	* sysdeps/posix/getcwd.c: Likewise.
	* sysdeps/stub/getcwd.c: Likewise.
	* posix/unistd.h: Declare __getcwd.

	* string/string.h: Declare __strcasecmp.
	* sysdeps/generic/strcasecmp.c (__strcasecmp): Renamed from
	strcasecmp.
	(strcasecmp): Define as weak alias.

	* string/string.h: Declare __stpcpy.
	* sysdeps/generic/stpcpy.c (__stpcpy): Renamed from stpcpy.
	(stpcpy): Define as weak alias.
1995-09-28 09:00:19 +00:00
Roland McGrath f94f8067b1 * sysdeps/unix/sysv/linux/Implies: Add unix/common. 1995-09-27 16:07:53 +00:00
Roland McGrath 3f33a4ce76 * sysdeps/unix/i386/sysdep.h [HAVE_ELF] (ASM_TYPE_DIRECTIVE):
Don't use `type' for arg name, since we are using it as a keyword
	in the rhs. 

	* sysdeps/unix/configure.in: Check for syscalls getpriority,
	setpriority, getrlimit, setrlimit.

	* sysdeps/posix/truncate.c: Include fcntl.h.

	* sysdeps/generic/getdomain.c: Include string.h for strncpy decl.

	* sysdeps/stub/getpriority.c: Don't include obsolete gnu-stabs.h;
	use new stub_warning syntax.
	* sysdeps/stub/setpriority.c: Likewise.
	* sysdeps/stub/__longjmp.c: Likewise.
	* sysdeps/stub/_exit.c: Likewise.
	* sysdeps/stub/accept.c: Likewise.
	* sysdeps/stub/acos.c: Likewise.
	* sysdeps/stub/alarm.c: Likewise.
	* sysdeps/stub/asin.c: Likewise.
	* sysdeps/stub/atan2.c: Likewise.
	* sysdeps/stub/bind.c: Likewise.
	* sysdeps/stub/cbrt.c: Likewise.
	* sysdeps/stub/chroot.c: Likewise.
	* sysdeps/stub/closedir.c: Likewise.
	* sysdeps/stub/connect.c: Likewise.
	* sysdeps/stub/cos.c: Likewise.
	* sysdeps/stub/cosh.c: Likewise.
	* sysdeps/stub/ctermid.c: Likewise.
	* sysdeps/stub/cuserid.c: Likewise.
	* sysdeps/stub/defs.c: Likewise.
	* sysdeps/stub/exp.c: Likewise.
	* sysdeps/stub/fmod.c: Likewise.
	* sysdeps/stub/frexp.c: Likewise.
	* sysdeps/stub/fsync.c: Likewise.
	* sysdeps/stub/getcwd.c: Likewise.
	* sysdeps/stub/getenv.c: Likewise.
	* sysdeps/stub/gethostid.c: Likewise.
	* sysdeps/stub/getlogin.c: Likewise.
	* sysdeps/stub/getpeername.c: Likewise.
	* sysdeps/stub/getrlimit.c: Likewise.
	* sysdeps/stub/getsockname.c: Likewise.
	* sysdeps/stub/getsockopt.c: Likewise.
	* sysdeps/stub/listen.c: Likewise.
	* sysdeps/stub/log.c: Likewise.
	* sysdeps/stub/log10.c: Likewise.
	* sysdeps/stub/mkfifo.c: Likewise.
	* sysdeps/stub/morecore.c: Likewise.
	* sysdeps/stub/nice.c: Likewise.
	* sysdeps/stub/nlist.c: Likewise.
	* sysdeps/stub/opendir.c: Likewise.
	* sysdeps/stub/pipestream.c: Likewise.
	* sysdeps/stub/ptrace.c: Likewise.
	* sysdeps/stub/putenv.c: Likewise.
	* sysdeps/stub/readdir.c: Likewise.
	* sysdeps/stub/reboot.c: Likewise.
	* sysdeps/stub/recv.c: Likewise.
	* sysdeps/stub/recvfrom.c: Likewise.
	* sysdeps/stub/rename.c: Likewise.
	* sysdeps/stub/rewinddir.c: Likewise.
	* sysdeps/stub/seekdir.c: Likewise.
	* sysdeps/stub/send.c: Likewise.
	* sysdeps/stub/sendto.c: Likewise.
	* sysdeps/stub/setegid.c: Likewise.
	* sysdeps/stub/seteuid.c: Likewise.
	* sysdeps/stub/setgroups.c: Likewise.
	* sysdeps/stub/sethostid.c: Likewise.
	* sysdeps/stub/sethostname.c: Likewise.
	* sysdeps/stub/setjmp.c: Likewise.
	* sysdeps/stub/setrlimit.c: Likewise.
	* sysdeps/stub/setsockopt.c: Likewise.
	* sysdeps/stub/shutdown.c: Likewise.
	* sysdeps/stub/signal.c: Likewise.
	* sysdeps/stub/sigsuspend.c: Likewise.
	* sysdeps/stub/sin.c: Likewise.
	* sysdeps/stub/sinh.c: Likewise.
	* sysdeps/stub/socket.c: Likewise.
	* sysdeps/stub/socketpair.c: Likewise.
	* sysdeps/stub/sqrt.c: Likewise.
	* sysdeps/stub/sync.c: Likewise.
M sysd-stdio.c
	* sysdeps/stub/system.c: Likewise.
	* sysdeps/stub/tan.c: Likewise.
	* sysdeps/stub/tanh.c: Likewise.
	* sysdeps/stub/tcdrain.c: Likewise.
	* sysdeps/stub/tcflow.c: Likewise.
	* sysdeps/stub/tcgetpgrp.c: Likewise.
	* sysdeps/stub/tcsendbrk.c: Likewise.
	* sysdeps/stub/tcsetattr.c: Likewise.
	* sysdeps/stub/tcsetpgrp.c: Likewise.
	* sysdeps/stub/telldir.c: Likewise.
	* sysdeps/stub/tempname.c: Likewise.
	* sysdeps/stub/ttyname.c: Likewise.
	* sysdeps/stub/ttyname_r.c: Likewise.
	* sysdeps/stub/utime.c: Likewise.

	* gmon/gmon.c (moncontrol): Don't cast buffer arg to profil.

	* time/mktime.c (localtime_r): Use 0 instead of NULL.
1995-09-27 16:05:25 +00:00
Roland McGrath ea03559a9d Wed Sep 27 00:27:25 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* config.make.in (AS): New variable; set to `$(CC) -c'.

	* posix/unistd.h [__USE_BSD]: Declare profil.

	* elf/dl-load.c (_dl_map_object_from_fd): New function, broken out
	of _dl_map_object.
	(_dl_map_object): Call it.
	* elf/link.h (_dl_map_object_from_fd): Declare it.
1995-09-27 06:49:48 +00:00
Roland McGrath c709e372e8 * locale/libintl.h: Rewritten by Ulrich Drepper for use with GNU
gettext code.

	* sysdeps/unix/sysv/linux/sys/param.h: New file.
	* sysdeps/unix/sysv/linux/Subdirs: File removed.

	* libc-symbols.h (_LIBC): Define to 1, not just empty.
1995-09-27 02:50:10 +00:00
Roland McGrath 11c981a96d Tue Sep 26 16:50:17 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* gmon: New directory of profiling code, incorporated from
	4.4BSD-Lite and modified.
	* sysdeps/i386/machine-gmon.h: New file.
	* sysdeps/stub/machine-gmon.h: New file.
	* sysdeps/mach/hurd/profil.c: New file.
	* sysdeps/stub/profil.c: New file.
	* sysdeps/unix/bsd/profil.S: New file.
	* Makefile (subdirs): Add gmon.
	* csu/gmon-start.c: New file.
	* csu/Makefile (extra-objs): Add gmon-start.o,
	g$(start-installed-name).
	(install-lib, omit-deps): Add g$(start-installed-name).
	($(objpfx)g$(start-installed-name)): New target.
1995-09-26 20:59:38 +00:00
Roland McGrath e11c394911 B2 are always congruent; just test that B1 is aligned. 1995-09-25 09:00:05 +00:00
Roland McGrath 969705cc5b Fri Sep 22 14:24:25 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/Makefile: Elide sunrpc from $(subdirs) for the
	time being.

	* sysdeps/unix/configure.in: Check for `profil' syscall.
1995-09-22 18:32:19 +00:00
Roland McGrath c12d1df0f0 * manual/Makefile (infodir, prefix, INSTALL, INSTALL_DATA): Variables
removed.
1995-09-21 21:41:20 +00:00
Roland McGrath a5570f62dd * time/africa, time/asia, time/europe, time/northamerica,
time/yearistype: New data from ADO 95h.
1995-09-21 16:21:49 +00:00
Roland McGrath 193bd2ce37 * Makerules (build-shlib): Use $(@F:lib%.so=%) in place of
$(notdir $*), so it wins for the explicit libc.so rule as well as the
	pattern rule.
1995-09-21 16:12:57 +00:00
Roland McGrath 10b40b115c * Makerules (build-shlib): Use $(@F:lib%=%) in place of $(notdir $*),
so it wins for the explicit libc.so rule as well as the pattern rule.
1995-09-21 15:16:01 +00:00
Roland McGrath 0324daa005 Thu Sep 21 00:03:53 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/stub/sys/sem_buf.h (union semun): New type.

	* sysdeps/mach/hurd/i386/init-first.c (init1) [PIC]: Call
	__libc_global_ctors.
	* sysdeps/i386/init-first.c: Rewritten.
	* sysdeps/unix/sysv/linux/i386/init-first.S: File removed.
	* sysdeps/unix/sysv/linux/i386/init-first.c: New file.

	* sysdeps/unix/sysv/linux/i386/fpu_control.h: Fix name in decl of
	___fpu_control.

	* Makerules (build-shlib): New canned sequence, broken out of
	lib%.so rule.  Link in $^ instead of just $<.
	(lib%.so: lib%_pic.a): Use it.
	(libc.so): New target; use $(build-shlib) for cmds, but also depend
	on soinit.so first and sofini.so last.

	* elf/soinit.c: New file.
	* elf/sofini.c: New file.
	* elf/Makefile (distribute): Add soinit.c and sofini.c.
	(extra-objs): Add soinit.so and sofini.so.

	* sysvipc/sys/shm.h (shmat): Fix return type to char *.
	* sysdeps/stub/sys/ipc_buf.h (key_t): Type removed.

	* misc/syslog.c (vsyslog): Rewritten using open_memstream to
	dynamically allocate buffers.

	* Makerules (install-lib-nosubdir): Make this, rather than
	install-no-libc.a, depend on the installed shared libraries.
1995-09-21 06:24:21 +00:00
Roland McGrath 600927014b Wed Sep 20 18:02:03 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* locale/locale.c: Include errno.h.
	* locale/localedef.c: Likewise.

Tue Sep 19 00:02:06 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* Makefile (distclean-1): Remove config.cache, config.log, config.h.
	(parent-mostlyclean): Remove all flavors of the parent library.

	* misc/mntent.c (getmntent): Skip multiple whitespace chars
	between fields.

	* hurd/hurdstartup.c (_hurd_startup): If RPC returns
	EXEC_STACK_ARGS flag, get args from stack.
	If args on stack but have info from RPC, relocate args on stack to make
	space for struct hurd_startup_data.

	* elf/dl-object.c: Include errno.h.
	* posix/execvp.c: Likewise.
	* dirent/scandir.c: Likewise.
	* sysdeps/posix/system.c: Likewise.
	* sysdeps/generic/setenv.c: Likewise.
	* stdlib/msort.c: Likewise.
	* stdio/memstream.c: Likewise.
	* stdio/fclose.c: Likewise.
	* stdio/getdelim.c: Likewise.
	* stdio/setvbuf.c: Likewise.
	* sysdeps/ieee754/ldexp.c: Likewise.
	* locale/locfile-parse.c: Likewise.

	* stdlib/lcong48_r.c: Don't check for null argument; let it fault.
	* stdlib/seed48_r.c: Likewise.
	* stdlib/srand48_r.c: Likewise.
	* stdlib/jrand48_r.c: Likewise.
	* stdlib/nrand48_r.c: Likewise.

	* misc/search.h: Many decls for hsearch functions.
1995-09-21 04:01:40 +00:00
Roland McGrath bf40c56f1a Mon Sep 18 15:06:00 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makeconfig (+gccwarn): Remove -Wbad-function-cast, which seems
	to be useless.
1995-09-18 19:06:33 +00:00
Roland McGrath c22164805d Mon Sep 18 12:39:22 1995 Paul Eggert <eggert@twinsun.com>
* mktime.c (localtime_r): Add substitute if the system doesn't
	provide one.

Mon Sep 18 14:39:20 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* time/gmtime.c (gmtime_r): Define as weak alias.
	* time/localtime.c (localtime_r): Define as weak alias.
	* time/time.h [__USE_REENTRANT] (gmtime_r, localtime_r): Declare them.

	* errno.h: Only define _ERRNO_H #ifndef __need_Emath.
	#undef __need_Emath after including errnos.h.
	[_ERRNO_H]: Protect decls with this.

Sun Sep 17 08:22:12 1995  Paul Eggert  <eggert@twinsun.com>

	Fix mktime so that it does not write over localtime's returned value.
	* localtime.c (__localtime_r): New function, with extra arg
	specifying where to store result.
	(localtime): Use it.
	(_tmbuf): New var.
	* gmtime.c (__gmtime_r, gmtime, _tmbuf): Likewise.
	* mktime.c (__mktime_internal):	Conversion function is now
	__localtime_r style, not localtime style.
	(mktime): Pass __localtime_r, not localtime.
	* timegm.c (timegm): Pass __gmtime_r, not gmtime.
	* offtime.c (__offtime): New arg specifying where to store result.
	* time.h (__mktime_internal, __offtime): Adjust decls accordingly.
	(__gmtime_r, __localtime_r): New decls.

	* time/localtime.c: <stddef.h>, <ctype.h>, <stdio.h>,
	<stdlib.h>, <string.h>: Remove includes.
	<errno.h>: Add include.

	* time/mktime.c, time/time.h, time/timegm.c (__mktime_internal):
	Renamed from _mktime_internal to avoid namespace pollution.

	* time/gmtime.c: Clear tm_isdst.

	* misc/efgcvt_r.c (ecvt_r, fcvt_r): Last arg is size_t, not int.
	* stdlib/stdlib.h (ecvt_r, fcvt_r): Fix type of last arg: make it
	size_t.

	* sysdeps/mach/hurd/fpathconf.c: Call __io_pathconf instead of
	__file_pathconf.
	* sysdeps/mach/hurd/pathconf.c: Likewise.
1995-09-18 19:00:32 +00:00
Roland McGrath aa9109070f Mon Sep 18 01:58:40 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makefile (subdirs): Add sysvipc.

	* stdlib/srand48_r.c (srand48_r): Use UL suffix for huge constant.
	* stdlib/drand48-iter.c (__drand48_iterate): Likewise.

	* hurd/hurdlookup.c (__hurd_file_name_lookup_retry): Call
	 __file_set_size instead of __file_truncate.

	* features.h (__USE_REENTRANT): New macro.
1995-09-18 09:00:07 +00:00
Roland McGrath e537c55ea9 Sun Sep 17 18:29:13 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/truncate.c: Call __file_set_size instead of
	__file_truncate.
	* sysdeps/mach/hurd/ftruncate.c: Likewise.

	* sysdeps/unix/sysv/linux/dl-machine.h: File removed.
1995-09-18 03:28:15 +00:00
Roland McGrath 60478656fa Sat Sep 16 17:47:19 1995 Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
* elf/elf.h (AT_GID): Fix typo: Read -> Real.

	* misc/efgvt_r.c: New file.  Reentrant version of [efg]cvt functions.
	* misc/efgcvt.c: Rewrite to use reentrant functions.
	* misc/hsearch_r.c: New file.  Reentrant version of functions from
	hsearch family.
	* misc/hsearch.c, misc/tsearch.c: New files.
	* misc/Makefile (routines): Add efgcvt_r, hsearch_r, hsearch, tsearch.

	* posix/unistd.h (ttyname_r): Add prototype for new function.

	* stdlib/drand48_r.c, stdlib/erand48_r.c, stdlib/jrand48_r.c,
	stdlib/lrand48_r.c, stdlib/mrand48_r.c, stdlib/nrand48_r.c,
	stdlib/seed48_r.c, stdlib/srand48_r.c, stdlib/lcong48_r.c,
	stdlib/drand48-iter.c: New files implementing reentrant versions
	of functions from drand48 family.
	* stdlib/seed48.c, stdlib/drand48.c, stdlib/erand48.c,
	stdlib/jrand48.c, stdlib/lrand48.c, stdlib/mrand48.c,
	stdlib/nrand48.c, stdlib/srand48.c, stdlib/lcong48.c:
	Rewrite to use reentrant versions.
	* stdlib/a64l.c, stdlib/l64a.c: New files.  Implement a64l()
	and l64a() functions from SysV library.
	* stdlib/Makefile (routines): Add drand48_r, erand48_r, lrand48_r,
	nrand48_r, mrand48_r, jrand48_r, srand48_r, seed48_r, lcong48_r,
	drand48-iter, a64l, l64a.
	* stdlib/stdlib.h: Declare them.

	* stdlib/random_r.c: New file.  Reentrant version of functions
	from random family.
	* stdlib/stdlib.h: Declare them.
	* stdlib/random.c: Rewrite to use reentrant functions.

	* string/strerror_r.c: New file.  Reentrant version.
	* string/strerror.c: Change for new _strerror_internal form.
	* string/Makefile (routines): Add strerror_r.

	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Set default
	value of user_entry to `_start'.
	Close AT_ENTRY case with `break'.

	* sysdeps/generic/strstr.c: New and much faster implementation
	by Stephen R. van den Berg.

	* sysdeps/generic/_strerror.c: _strerror_internal now takes
	three argument and has and explicit buffer length.
	* sysdeps/mach/_strerror.c: Change for new interface with three
	arguments.
	* stdio/perror.c, stdio/vfprintf.c: Callers changed.
	
	* sysdeps/mach/hurd/ttyname_r.c: New file.  Reentrant version.
	* sysdeps/posix/ttyname_r.c: New file.  Reentrant version.
	* sysdeps/stub/ttyname_r: New file.  Define as dummy function.

	* sysdeps/posix/utimes.c: Include <utime.h> for prototype.
	(utimes): First parameter to utime must be file, not path.

	* sysdeps/posix/sysconf.c (__sysconf): Test for CLK_TCK in case
	_SC_CLK_TCK and return it when available.
	Test for STREAM_MAX in case _SC_STREAM_MAX and return it when
	available.
	Add case for _SC_2_LOCALEDEF which is now available.

	* posix/sys/types.h [__USE_SVID] (key_t): New type.
	* sysvipc/Makefile, sysvipc/ftok.c, sysvipc/sys/ipc.h,
	sysvipc/sys/msg.h, sysvipc/sys/sem.h, sysvipc/sys/shm.h,
	sysdeps/stub/sys/msq_buf.h, sysdeps/stub/sys/sem_buf.h,
	sysdeps/stub/sys/shm_buf.h, sysdeps/stub/sys/ipc_buf.h,
	sysdeps/stub/semctl.c, sysdeps/stub/semget.c, sysdeps/stub/semop.c,
	sysdeps/stub/shmat.c, sysdeps/stub/shmctl.c, sysdeps/stub/shmdt.c,
	sysdeps/stub/shmget.c, sysdeps/stub/msgctl.c, sysdeps/stub/msgget.c,
	sysdeps/stub/msgrcv.c, sysdeps/stub/msgsnd.c: New files.
	Add implementation of System V IPC.
1995-09-17 20:23:15 +00:00
Roland McGrath 9fd18b6c1b Fri Sep 15 21:34:28 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hurd/hurdsig.c: Include <hurd/crash.h> in place of <hurd/core.h>.
	(write_corefile): Call __crash_dump_task instead of __core_dump_task.
	Use envariable CRASHSERVER instead of CORESERVER.
	* hurd/Makefile (user-interfaces): Replace hurd/core with hurd/crash.
1995-09-17 19:29:59 +00:00
Roland McGrath 7a770247ab Tue Sep 12 14:30:07 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* misc/mntent.c: New file.
	* misc/mntent.h: New file.
	* misc/Makefile (headers): Added mntent.h.
	(routines): Added mntent.
	* misc/fstab.c: Rewritten using mntent functions.

Mon Sep 11 14:00:14 1995  Roland McGrath  <roland@whiz-bang.gnu.ai.mit.edu>

	* posix/glob.c (glob): Comment fix.
1995-09-14 09:00:06 +00:00
Roland McGrath eef089c2ab Regenerated
Mon Sep 11 14:00:14 1995  Roland McGrath  <roland@whiz-bang.gnu.ai.mit.edu>

	* posix/glob.c (glob): Comment fix.

Wed Aug 30 16:44:55 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* posix/glob.c (glob): Use realloc to extend strings for GLOB_MARK
	slash.
	(glob_in_dir): Don't allocate extra byte here.
1995-09-11 18:03:48 +00:00
Roland McGrath c043db7a2a (glob): Comment fix. 1995-09-11 17:59:24 +00:00
Ulrich Drepper a36e4c9f7b (MAX): Add macro. It is not sure we get it through any header file. 1995-09-11 12:17:05 +00:00
Roland McGrath 287fbbe72e Added i486-linux 1995-09-09 09:23:24 +00:00
Roland McGrath f87cd5a229 * libc-symbols.h [HAVE_ELF] (symbol_set_declare): Declare the
symbols weak.
1995-09-09 00:01:05 +00:00
Roland McGrath c64908b01f Fri Sep 8 16:25:22 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* conf/portability.h (NEED_INETADDR, NEED_INETATON): Define to 1,
	not empty.

	* sysdeps/unix/sysv/linux/i386/Dist,
	* sysdeps/unix/sysv/linux/sys/ipc_buf.h,
	* sysdeps/unix/sysv/sysv4/linux: Tree removed.
	
Thu Sep  7 17:05:13 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* stdlib/msort.c (msort_with_tmp): Fixed alignment test.  B1 and
	 B2 are always congruent; just test that B1 is aligned.
1995-09-08 20:55:20 +00:00
Roland McGrath 99291e9c19 (NEED_INETADDR, NEED_INETATON): Define to 1, not empty. 1995-09-08 20:24:57 +00:00
Ulrich Drepper d2f5be2a12 Document new files for Linux i386/ELF port.
Fri Sep  8 16:32:12 1995  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

        * sysdeps/unix/sysv/linux/Implies,
        sysdeps/unix/sysv/linux/Makefile, sysdeps/unix/sysv/linux/Subdirs,
        sysdeps/unix/sysv/linux/accept.S, sysdeps/unix/sysv/linux/adjtime.c,
        sysdeps/unix/sysv/linux/adjtimex.S, sysdeps/unix/sysv/linux/bind.S,
        sysdeps/unix/sysv/linux/connect.S, sysdeps/unix/sysv/linux/direct.h,
        sysdeps/unix/sysv/linux/dl-machine.h, sysdeps/unix/sysv/linux/errnos.h,
        sysdeps/unix/sysv/linux/fork.S, sysdeps/unix/sysv/linux/gethostid.c,
        sysdeps/unix/sysv/linux/gethostname.C,
        sysdeps/unix/sysv/linux/getpeername.S,
        sysdeps/unix/sysv/linux/getpgid.S, sysdeps/unix/sysv/linux/getpgrp.S,
	sysdeps/unix/sysv/linux/getsockname.S,
	sysdeps/unix/sysv/linux/getsockopt.S, sysdeps/unix/sysv/linux/gtty.S,
	sysdeps/unix/sysv/linux/listen.S, sysdeps/unix/sysv/linux/local_lim.h,
	sysdeps/unix/sysv/linux/madvise.c, sysdeps/unix/sysv/linux/msgctl.c,
	sysdeps/unix/sysv/linux/msgget.c, sysdeps/unix/sysv/linux/msgrcv.c,
	sysdeps/unix/sysv/linux/msgsnd.c, sysdeps/unix/sysv/linux/pipe.S,
	sysdeps/unix/sysv/linux/poll.c, sysdeps/unix/sysv/linux/readv.c,
	sysdeps/unix/sysv/linux/recv.S, sysdeps/unix/sysv/linux/recvfrom.S,
	sysdeps/unix/sysv/linux/recvmsg.S, sysdeps/unix/sysv/linux/semctl.c,
	sysdeps/unix/sysv/linux/semget.c, sysdeps/unix/sysv/linux/semop.c,
	sysdeps/unix/sysv/linux/send.S, sysdeps/unix/sysv/linux/sendmsg.S,
	sysdeps/unix/sysv/linux/sendto.S, sysdeps/unix/sysv/linux/setegid.c,
	sysdeps/unix/sysv/linux/seteuid.c, sysdeps/unix/sysv/linux/sethostid.c,
	sysdeps/unix/sysv/linux/setpgid.c, sysdeps/unix/sysv/linux/setpgrp.c,
	sysdeps/unix/sysv/linux/setsid.S, sysdeps/unix/sysv/linux/setsockopt.S,
	sysdeps/unix/sysv/linux/settimeofday.S,
	sysdeps/unix/sysv/linux/shmat.c, sysdeps/unix/sysv/linux/shmctl.c,
	sysdeps/unix/sysv/linux/shmdt.c, sysdeps/unix/sysv/linux/shmget.c,
	sysdeps/unix/sysv/linux/shutdown.S,
	sysdeps/unix/sysv/linux/sigaction.S, sysdeps/unix/sysv/linux/signal.S,
	sysdeps/unix/sysv/linux/sigpending.S, sysdeps/unix/sysv/linux/sigset.h,
	sysdeps/unix/sysv/linux/sockaddrcom.h,
	sysdeps/unix/sysv/linux/socketpair.S, sysdeps/unix/sysv/linux/speed.c,
	sysdeps/unix/sysv/linux/statbuf.h, sysdeps/unix/sysv/linux/stty.S,
	sysdeps/unix/sysv/linux/syscall.h, sysdeps/unix/sysv/linux/sysconf.c,
	sysdeps/unix/sysv/linux/tcdrain.c, sysdeps/unix/sysv/linux/tcflow.c,
	sysdeps/unix/sysv/linux/tcflush.c, sysdeps/unix/sysv/linux/tcgetattr.c,
	sysdeps/unix/sysv/linux/tcsetattr.c,
	sysdeps/unix/sysv/linux/termbits.h, sysdeps/unix/sysv/linux/ualarm.c,
	sysdeps/unix/sysv/linux/ulimit.c, sysdeps/unix/sysv/linux/usleep.c,
	sysdeps/unix/sysv/linux/utsnamelen.h, sysdeps/unix/sysv/linux/vfork.c,
	sysdeps/unix/sysv/linux/wait.c, sysdeps/unix/sysv/linux/wait4.S,
	sysdeps/unix/sysv/linux/waitpid.c, sysdeps/unix/sysv/linux/writev.c:
	New Linux/ELF specific, architecture independent files.

	sysdeps/unix/sysv/linux/i386/Dist,
	sysdeps/unix/sysv/linux/i386/Makefile,
	sysdeps/unix/sysv/linux/i386/brk.S,
	sysdeps/unix/sysv/linux/i386/fcntlbits.h,
	sysdeps/unix/sysv/linux/i386/fpu_control.c,
	sysdeps/unix/sysv/linux/i386/fpu_control.h,
	sysdeps/unix/sysv/linux/i386/fstat.S,
	sysdeps/unix/sysv/linux/i386/fxstat.S,
	sysdeps/unix/sysv/linux/i386/ieee_fpu.c,
	sysdeps/unix/sysv/linux/i386/init-first.S,
	sysdeps/unix/sysv/linux/i386/ipc.S,
	sysdeps/unix/sysv/linux/i386/lstat.S,
	sysdeps/unix/sysv/linux/i386/lxstat.S,
	sysdeps/unix/sysv/linux/i386/mknod.S,
	sysdeps/unix/sysv/linux/i386/mmap.S,
	sysdeps/unix/sysv/linux/i386/sbrk.S,
	sysdeps/unix/sysv/linux/i386/setfpucw.c,
	sysdeps/unix/sysv/linux/i386/signum.h,
	sysdeps/unix/sysv/linux/i386/socket.S,
	sysdeps/unix/sysv/linux/i386/stat.S,
	sysdeps/unix/sysv/linux/i386/syscall.S,
	sysdeps/unix/sysv/linux/i386/sysdep.S,
	sysdeps/unix/sysv/linux/i386/sysdep.h,
	sysdeps/unix/sysv/linux/i386/xmknod.S,
	sysdeps/unix/sysv/linux/i386/xstat.S:
	New Linux i386/ELF specific files.

	sysdeps/unix/sysv/linux/sys/ipc_buf.h,
	sysdeps/unix/sysv/linux/sys/mman.h,
	sysdeps/unix/sysv/linux/sys/msq_buf.h,
	sysdeps/unix/sysv/linux/sys/sem_buf.h,
	sysdeps/unix/sysv/linux/sys/shm_buf.h,
	sysdeps/unix/sysv/linux/sys/socketcall.h,
	sysdeps/unix/sysv/linux/sys/timex.h:
	New Linux/ELF specific, architecture independent header files.
1995-09-08 17:02:25 +00:00
Ulrich Drepper d586354e51 (base_os): Linux is based on unix/sysv, not unix/sysv/sysv4. 1995-09-08 12:50:01 +00:00
Roland McGrath cbf48a6ba0 (msort_with_tmp): Fixed alignment test. B1 and B2 are always congruent; just test that B1 is aligned. 1995-09-07 21:04:57 +00:00
Roland McGrath 1571a01695 Wed Sep 6 19:41:10 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* elf/dl-lookup.c (_dl_lookup_symbol): Test WEAK_VALUE.s rather
	than WEAK_VALUE.a to see if a weak value has been set.  A valid
	weak value may set WEAK_VALUE.a to 0.
1995-09-07 09:00:05 +00:00
Roland McGrath f405bed5ef * sysdeps/mach/hurd/i386/longjmp-ts.c: Use new array format for
jmp_buf.
1995-09-01 22:26:36 +00:00
Roland McGrath 44c8d1a2a8 Fri Sep 1 16:16:12 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* libc-symbols.h (link_warning): Take new first arg SYMBOL; ask
	for a warning on references to that specific symbol, not the
	entire containing object file.
	(stub_warning): Pass symbol name to link_warning.
	* stdio/gets.c: Pass function name in link_warning invocation.

	* hurd/intr-msg.c: Treat apparent EINTR return from msg trap like
	MACH_SEND_INTERRUPTED.  That indicates interrupt_operation was
	sent, but failed.

	* stdlib/msort.c: Include memcopy.h.
	(msort_with_tmp): If operating on aligned op_t words, use direct word
	fetches and stores.

	* sysdeps/i386/dl-machine.h (ELF_MACHINE_BEFORE_RTLD_RELOC): Add
	missing backslash.
1995-09-01 22:25:08 +00:00
Roland McGrath e3726b056b Rewrote i386 setjmp in assembly.
Thu Aug 31 13:23:35 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* sysdeps/unix/i386/brk.S [PIC]: Set __curbrk through the GOT.

	Rewrote i386 setjmp code in assembly, so as to avoid fighting
	with the compiler for the register values.
	* sysdeps/i386/setjmp.S, sysdeps/i386/__longjmp.S: New files.
	* sysdeps/i386/setjmp.c, sysdeps/i386/__longjmp.c: Files removed.
	* sysdeps/i386/jmp_buf.h [! _ASM] (__jmp_buf): Define as array of ints.
	[__USE_MISC || _ASM] (JB_*): New macros, for indices therein.
	(_JMPBUF_UNWINDS): Use JB_SP.
1995-08-31 17:33:01 +00:00
Roland McGrath a993273c0d Wed Aug 30 16:44:55 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/select.c: Deal with out of order replies
	during io_select request loop.
	Handle MACH_RCV_TIMED_OUT error from requests.
	* hurd/intr-msg.c: If the user passed the MACH_RCV_TIMEOUT option,
	distinguish MACH_RCV_TIMED_OUT from EINTR.

	* posix/glob.c (glob): Use realloc to extend strings for GLOB_MARK
	slash.
	(glob_in_dir): Don't allocate extra byte here.

	* sysdeps/i386/dl-machine.h (ELF_MACHINE_BEFORE_RTLD_RELOC):
	Decrement the DT_RELSZ value for the skipped reloc.
1995-08-31 00:02:32 +00:00
Roland McGrath 18926cf415 Tue Aug 29 12:35:56 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* time/australasia: Updated data from ADO.

Mon Aug 28 17:47:11 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* dirent/dirent.h: Don't include <dirstream.h>.
	Instead, define DIR as typedef for (undefined) `struct __dirstream'.
1995-08-29 16:41:47 +00:00
Roland McGrath 9e865adecf * sysdeps/mach/hurd/dirstream.h: Define `struct __dirstream'
instead of `DIR'.
	* sysdeps/unix/bsd/dirstream.h: Likewise.
	* sysdeps/stub/dirstream.h: Likewise.
	* sysdeps/unix/dirstream.h: Likewise.
	* sysdeps/mach/hurd/telldir.c: Include "dirstream.h".
	* sysdeps/mach/hurd/seekdir.c: Likewise.
	* sysdeps/mach/hurd/opendir.c: Likewise.
	* sysdeps/mach/hurd/closedir.c: Likewise.
	* sysdeps/mach/hurd/readdir.c: Likewise.
	* sysdeps/unix/telldir.c: Likewise.
	* sysdeps/unix/seekdir.c: Likewise.
	* sysdeps/unix/rewinddir.c: Likewise.
	* sysdeps/unix/readdir.c: Likewise.
	* sysdeps/unix/opendir.c: Likewise.
	* sysdeps/unix/closedir.c: Likewise.
	* sysdeps/unix/bsd/telldir.c: Likewise.
	* sysdeps/unix/bsd/readdir.c: Likewise.
	* dirent/Makefile (headers): Remove dirstream.h.
	(distribute): Put it here instead.
1995-08-28 09:00:05 +00:00
Roland McGrath 7752137a6a Fri Aug 25 12:12:42 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/mmap.c: Fix inverted test of MAP_FIXED.

	* stdio/vfscanf.c (number): Allow field width to inhibit first
	digit after base detection.

	* stdio/vfprintf.c (vfprintf: %s): Never search past the limit
	specified by the precision.

	* grp/grpread.c (__grpscan): New function.
	* grp/grp.h (__grpscan): Declare it.
	* grp/getgrgid.c: Use __grpscan.
	* grp/getgrnam.c: Likewise.
	* pwd/pwdread.c (__pwdscan): New function.
	* pwd/pwd.h (__pwdscan): Declare it.
	* pwd/getpwnam.c: Use __pwdscan.
	* pwd/getpwuid.c: Likewise.

Thu Aug 24 16:29:40 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* sysdeps/mach/hurd/mmap.c: Treat (FLAGS & MAP_TYPE) == 0 like
	MAP_FILE.

	* hurd/thread-cancel.c: Return EINTR when called on self.
	* sysdeps/i386/elf/start.S (data_start): Define as weak alias for
	__data_start.
1995-08-25 19:23:32 +00:00
Roland McGrath 3cf595e562 Tue Aug 22 16:49:12 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* inet/netdb.h: Moved to resolv.
	* inet/Makefile (headers): Remove netdb.h.
	* resolv/Makefile (headers): Add netdb.h.
	* resolv/gethnamaddr.c, resolv/inet_addr.c, resolv/netdb.h,
	resolv/res_send.c: Updated from BIND-4.9.3-BETA26.

	* hurd/thread-cancel.c: If SS->cancel_hook is not null, call it before
	resuming the thread.
	* hurd/hurd/signal.h (struct hurd_sigstate): New member `cancel_hook'.

	* hurd/Makefile: Removed dep on hurd/signal.h for RPC stub objects.

Mon Aug 21 16:37:09 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* sysdeps/i386/dl-machine.h (elf_machine_rel): Grok R_386_NONE
	relocs, and do nothing.  Why the linker generates them we may
	never know. 

	* sysdeps/mach/hurd/i386/intr-msg.h: New file.
1995-08-22 22:47:57 +00:00
Roland McGrath 207eb76afb (struct hurd_sigstate): New member `cancel_hook'. 1995-08-22 20:53:23 +00:00
Miles Bader 537257ae0f Updated from ../gpl2lgpl.sed /home/gd/gnu/lib/regex.c 1995-08-22 20:52:58 +00:00
Roland McGrath 86fe2915bb Removed dep on hurd/signal.h for RPC stub objects. 1995-08-22 20:48:46 +00:00
Roland McGrath a4bb25890d * sysdeps/mach/hurd/Makefile: Don't elide sunrpc and manual from
`subdirs' variable.
1995-08-21 09:00:05 +00:00
Roland McGrath 3fe9de0da5 Thu Aug 17 16:18:38 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hurd/intr-msg.c: Use INTR_MSG_TRAP macro from machine-dependent
 	"intr-msg.h" for special syscall code, instead of i386-specific asm.
	* hurd/hurdsig.c: Use INTR_MSG_BACK_OUT macro from
 	machine-dependent "intr-msg.h" before mutating thread state to
 	skip RPC.

	* sysdeps/mach/hurd/i386/trampoline.c: If PC is inside
 	_hurd_intr_rpc_mach_msg special syscall code, use real SP saved in
	%ecx.

	* Makeconfig (link-libc): New variable; use shared library if
 	available.
	(+link): Use it.

	* sysdeps/mach/hurd/fork.c (_hurd_fork_locks): Variable removed.
  	Instead, declare with `symbol_set_declare'.
	(fork): Use symbol_set_* macros for _hurd_fork_locks.  
	Use SS->thread instead of __mach_thread_self ().  Suspend all
 	other threads during task_create and port copying.
1995-08-17 22:55:22 +00:00
Roland McGrath 191abc516c Wed Aug 16 17:04:26 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hurd/intr-msg.c: Fixed calculation of syscall %esp.

Tue Aug 15 12:26:18 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* hurd/hurdsig.c (_hurdsig_abort_rpcs): Remove `static'.

	* hurd/Makefile (sig): Add intr-msg.
1995-08-17 09:00:05 +00:00
Roland McGrath 2f85f8807d (sig): Add intr-msg. 1995-08-15 16:25:22 +00:00
Per Bothner d144e1d29e Changes for Linux and LynxOS. 1995-08-15 02:33:42 +00:00
Roland McGrath b88269329c (kill_pid): Don't make `inline'. 1995-08-14 23:32:44 +00:00
Roland McGrath 54da5be39c Mon Aug 14 16:51:13 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hurd/thread-cancel.c: New file.
	* sysdeps/mach/hurd/i386/trampoline.c (_hurd_setup_sighandler): In
 	rpc_wait case, frob mach_msg args to set timeout on receive.
	(_hurdsig_rcv_interrupted_p): Function removed.
	* sysdeps/mach/hurd/alpha/trampoline.c: Likewise.
	* sysdeps/mach/hurd/hppa/trampoline.c: Likewise.
	* sysdeps/mach/hurd/mips/trampoline.c: Likewise.
	* hurd/intr-msg.c: New file.
	* hurd/hurd/signal.h (struct hurd_sigstate): New member `cancel'.
	(_hurdsig_rcv_interrupted_p): Declaration removed.
	(HURD_EINTR_RPC): Macro removed.
	(_hurd_longjmp_thread_state, _hurd_interrupted_rpc_timeout): Declare
	these.
	* hurd/intr-rpc.h: New file.
	* hurd/intr-rpc.defs: Just import intr-rpc.h.
	* hurd/hurdsig.c (_hurd_interrupted_rpc_timeout): New variable.
	(interrupted_reply_port_location): Take new flag arg; only catch
	faults if it's set.
	(abort_rpcs): Rename to _hurdsig_abort_rpcs; take same new flag arg.
	No longer use _hurdsig_rcv_interrupted_p; instead compare PC to
 	&_hurd_intr_rpc_msg_in_trap.  If before it, mutate state to simulate
 	MACH_SEND_INTERRUPTED return; on it, interrupt the operation.  All
 	callers changed.
	* hurd/hurd.h (hurd_thread_cancel, hurd_check_cancel): Declare these.
	* hurd/Makefile (distribute): Remove intr-rpc.awk.
	(sig): Add thread-cancel.
	(transform-user-stub, transform-user-stub-output): Variables removed.
	* sysdeps/mach/hurd/dl-sysdep.c: Change all RPCs from
 	`__hurd_intr_rpc_*' to `__*'.
	(_hurd_intr_rpc_mach_msg): New function.
	(_hurd_thread_sigstate): Function removed.
	* sysdeps/mach/hurd/ioctl.c: Use _hurd_intr_rpc_mach_msg function,
 	instead of __mach_msg inside HURD_EINTR_RPC macro.

	* sysdeps/generic/morecore.c [__GNU_LIBRARY__]: Declare `__sbrk'
 	to take ptrdiff_t arg.

	* sysdeps/mach/hurd/fork.c: Remove _hurd_longjmp_thread_state decl.

	* sysdeps/mach/hurd/kill.c (kill_pid): Don't make `inline'.

	* libc-symbols.h [GCC >= 2.7] (strong_alias, weak_symbol,
 	weak_alias): Use `extern' storage class.
1995-08-14 22:49:23 +00:00
Roland McGrath 047f282dd7 Regenerated
Mon Aug  7 14:04:36 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* posix/glob.c (glob_in_dir): Allocate GLOB_MARK byte in case when
 	(NFOUND == 0 && (FLAGS & GLOB_NOCHECK)).
1995-08-10 23:29:25 +00:00
Roland McGrath 76894e2e6a Wed Aug 9 14:25:35 1995 Miles Bader <miles@geech.gnu.ai.mit.edu>
* sysdeps/mach/hurd/setuid.c (__setuid): Switch the port-type and
	port-count parameters to __auth_makeauth.
	* sysdeps/mach/hurd/setgid.c (__setgid): Ditto.

Tue Aug  8 12:22:59 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* hurd/sigunwind.c: Remove _hurd_longjmp_thread_state decl.

	* inet/netinet/tcp.h: New file, incorporated from 4.4BSD-Lite.

Tue Aug  8 12:06:04 1995  Michael I. Bushnell, p/BSG  <mib@duality.gnu.ai.mit.edu>

	* inet/netinet/in.h (IP_MULTICAST_TTL, IP_MULTICAST_LOOP,
 	IP_MULTICAST_IP, IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP): New IP
 	layer socket options.
	(IPPROTO_GGP): Delete obsolote protocol.
	(IPPROTO_IGMP): Add new protocol (with same value [2] as old GGP).
	(struct ip_mreq): New type.
1995-08-10 09:00:07 +00:00
Miles Bader 46bdf16bf7 (__setuid): Switch the port-type and port-count parameters to __auth_makeauth. 1995-08-09 18:31:09 +00:00
Miles Bader 995069eea6 (__setgid): Switch the port-type and port-count parameters to __auth_makeauth. 1995-08-09 18:28:56 +00:00
Roland McGrath 6c1b5ea4c1 Remove _hurd_longjmp_thread_state decl. 1995-08-08 22:18:35 +00:00
Thomas Bushnell, BSG 527fbc2a8c Reorder new multicast options to conform to BSD. (struct ip_mreq): New type. 1995-08-08 16:29:15 +00:00
Roland McGrath 5dedb8013e New file, incorporated from 4.4BSD-Lite. 1995-08-08 16:22:38 +00:00
Thomas Bushnell, BSG 3de5ea654c (IP_MULTICAST_TTL, IP_MULTICAST_LOOP, IP_MULTICAST_IP, IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP): New IP layer socket options. 1995-08-08 16:14:02 +00:00
Thomas Bushnell, BSG a88363fbc7 (IPPROTO_GGP): Drop obsolete protocol. (IPPROTO_IGMP): Add new protocol (with same value [2] as old GGP). 1995-08-08 16:05:07 +00:00
Roland McGrath b25c5d66b2 * stdlib/strtol.c: Use #ifdef, not #if, for HAVE_LIMITS_H.
* posix/glob.c (glob_in_dir): Allocate GLOB_MARK byte in case when
 	(NFOUND == 0 && (FLAGS & GLOB_NOCHECK)).
1995-08-07 21:45:04 +00:00
Roland McGrath 99a9e88e55 Mon Aug 7 14:04:36 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/generic/sysd-stdio.c (__stdio_reopen): Return failure
 	when __stdio_open fails with a code other than ENFILE or EMFILE.

	* csu/initfini.c (SECTION): New macro, different definitions for
 	#ifdef HAVE_ELF and not.
	(_init, _fini): Use that macro.
	* config.make.in (have-initfini): New variable, set by configure.
	* conf/portability.h (NEED_INETADDR, NEED_INETATON): New macros.
1995-08-07 18:24:47 +00:00
Roland McGrath 5e98d83c10 Fri Aug 4 16:01:59 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makefile (headers): Added gnu-versions.h.

Thu Aug  3 14:41:11 1995  Michael I. Bushnell  <mib@duality.gnu.ai.mit.edu>

	* inet/netinet/in.h (IN_CLASSD, IN_EXPERIMENTAL, IN_BADCLASS): Use
	equality, not assignment, to test bitfields.

Sat Jul 29 10:41:06 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* sysdeps/mach/hurd/sendto.c (sendto): Use the ifsock protocol to
	resolve AF_LOCAL addresses.

	* sysdeps/mach/hurd/accept.c (accept): If the protocol family
	can't tell us what an address means, just return a zero-length
	buffer instead.
	* sysdeps/mach/hurd/recvfrom.c (recvfrom): Ditto.

Fri Jul 28 15:29:11 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* sysdeps/mach/hurd/bind.c (bind): Don't use
	file_invoke_translator, as it doesn't work.  Instead just lookup
	the translated node again, and hope we're not hit by any race
	conditions.
1995-08-07 09:00:07 +00:00
Roland McGrath de9ba9bd56 (headers): Added gnu-versions.h. 1995-08-04 20:01:33 +00:00
Thomas Bushnell, BSG 2765963bdc (IN_CLASSD, IN_EXPERIMENTAL, IN_BADCLASS): Use equality, not assignment, to test bit fields. 1995-08-03 18:40:32 +00:00
Jim Meyering 6c685ebb79 [_LIBC]: Define HAVE_LIMITS_H. [HAVE_LIMITS_H]: Include it. 1995-07-30 18:48:43 +00:00
Jim Meyering 507fcb753b Sun Jul 30 01:09:08 1995 Jim Meyering (meyering@comco.com)
* strtol.c [!defined errno]: Declare it.
1995-07-30 06:09:50 +00:00
Miles Bader ad738d03ae (accept): If the protocol family can't tell us what an address means, just return a zero-length buffer instead. 1995-07-30 00:37:36 +00:00
Miles Bader 221c50840f (bind): Don't use file_invoke_translator, as it doesn't work. Instead just lookup the translated node again, and hope we're not hit by any race conditions. 1995-07-28 22:25:57 +00:00
Roland McGrath b8dc6a10ee * csu/Makefile [$(elf)=yes] (have-initfini): Set to yes.
[$(have-initfini)=yes]: Test this rather than $(elf) for crtstuff.
	[start-installed-name-rule]: If this is defined, elide rule for
	$(objpfx)$(start-installed-name).
	* sysdeps/unix/sysv/sco3.2.4/Makefile [$(subdir)=csu]
 	(start-installed-rule, start-installed-name-rule): New variables;
 	specify crt1.o, created by our own rule.
	($(objpfx)crt1.o): New rule.
	* configure.in: Require autoconf 2.4.2 or later.  Change all
 	AC_CACHE_VAL uses to use new AC_CACHE_CHECK macro instead;
 	prettify some messages.
	[$elf!=yes] (libc_cv_have_initfini): New test for `.init' and `.fini'
	sections.
	* munch-tmpl.c [HAVE_INITFINI]: Call _init and atexit (_fini) in
 	this case rather than #ifdef HAVE_ELF.
	* config.h.in (HAVE_INITFINI): New macro.
1995-07-27 09:00:07 +00:00
Roland McGrath 4e1bac76a8 * stdio/vfscanf.c (conv_error): Simplify expression to avoid
"value computed is not used" warning.

	* Makeconfig (+gccwarn): Removed -Wconversion.

	* csu/initfini.c (GLOBAL): Macro removed.
	(_init, _fini): Always define globally.
	* csu/Makefile (crtstuff, initfini): Don't make crt[in]_s.o.
1995-07-26 14:04:19 +00:00
Roland McGrath 3d61b63cc7 * asia, backward, europe, leapseconds, southamerica: New data from
ADO's 95e.

	* inet/Makefile (routines): Removed inet_addr.
	* inet/inet_addr.c: Moved to resolv/ subdirectory.
	* resolv/Makefile (routines): Added inet_addr.
	* resolv/inet_addr.c: Incorporated from BIND 4.9.3-BETA24 release.
	* resolv/gethnamaddr.c: Likewise.
	* resolv/getnetbyaddr.c: Likewise.
	* resolv/getnetbyname.c: Likewise.
	* resolv/getnetent.c: Likewise.
	* resolv/getnetnamadr.c: Likewise.
	* resolv/herror.c: Likewise.
	* resolv/nsap_addr.c: Likewise.
	* resolv/res_comp.c: Likewise.
	* resolv/res_debug.c: Likewise.
	* resolv/res_init.c: Likewise.
	* resolv/res_mkquery.c: Likewise.
	* resolv/res_query.c: Likewise.
	* resolv/res_send.c: Likewise.
	* resolv/resolv.h: Likewise.
	* resolv/sethostent.c: Likewise.
	* resolv/arpa/nameser.h: Likewise.
	* inet/netdb.h: Incorporated from BIND 4.9.3-BETA24 release.
	[__GNU_LIBRARY__]: Include <rpc/netdb.h> instead of repeating
	its declarations (and doing so only #ifdef sun!).

	* posix/sys/types.h [__USE_BSD] (__BIT_TYPES_DEFINED__): New macro.
	[__USE_BSD] [__GNUC__] (int64_t, u_int64_t, register_t): New typedefs.
1995-07-26 10:14:02 +00:00
Roland McGrath 958f803fc0 Wed Jul 26 02:00:29 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* malloc/memalign.c: Allocate (SIZE + ALIGNMENT - 1) and then trim
 	if possible.

	* mach/shortcut.awk: Emit decls for RPC.

	* libc-symbols.h [GCC >= 2.7 && !ASSEMBLER] (weak_symbol,
 	weak_alias, strong_alias): Define using GCC __attribute__ syntax.

	* Makerules ($(installed-libcs)): Depend on `lib' (only).
1995-07-26 07:10:58 +00:00
Roland McGrath 9f2233e81a ($(installed-libcs)): Depend on `lib' (only). 1995-07-26 06:00:04 +00:00
David MacKenzie 9e63357e18 Remove weird unnecessary shell construction. 1995-07-26 04:26:23 +00:00
Roland McGrath 49633efbcc New file, based on NET2 code but with DES code removed. 1995-07-26 00:13:55 +00:00
Roland McGrath ff48a63c86 * sysdeps/mach/hurd/pathconf.c: Declare VALUE as int, not long int. 1995-07-25 20:44:48 +00:00
Roland McGrath 4356cfd7ad * stdlib/strtol.c [_LIBC]: Define STDC_HEADERS.
* sysdeps/unix/sysv/ftime.S: New file.

	* locale/locfile-parse.c (categories_write): Cast "" to char *.

	* io/fcntl.h [__OPTIMIZE__] (creat): Macro removed.

	* time/strftime.c: Use year modulo 100 for %y.

	* time/sys/timeb.h: Add __BEGIN_DECLS and __END_DECLS.

	* sysdeps/unix/snarf-ioctls (snarfexclude): Use two sed's instead
 	of one, to work around bug in sunos4.1.2 sed.
1995-07-25 18:36:31 +00:00
Roland McGrath 874f1b9bd8 Tue Jul 25 09:14:53 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* stdio/vfprintf.c (vfprintf): For %s with precision spec, use
 	memchr instead of strlen to limit search for NUL by precision.
1995-07-25 14:47:53 +00:00
Roland McGrath 51813e8065 Mon Jul 24 03:13:16 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/posix/pathconf.c: New file.
1995-07-24 07:14:51 +00:00
2781 changed files with 190986 additions and 40701 deletions
+2 -1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
@@ -5,7 +6,7 @@ glibc-*
configparms
sun4 i386 i386-gnuelf hp300-netbsd hp300
sun[43]* i[345]86* hp300*
ieeetest hppa-sysdeps regex
+5572 -2933
View File
File diff suppressed because it is too large Load Diff
+10878
View File
File diff suppressed because it is too large Load Diff
+553
View File
@@ -0,0 +1,553 @@
Frequently Asked Question on GNU C Library
As every FAQ this one also tries to answer questions the user might have
when using the package. Please make sure you read this before sending
questions or bug reports to the maintainers.
The GNU C Library is very complex. The building process exploits the
features available in tools generally available. But many things can
only be done using GNU tools. Also the code is sometimes hard to
understand because it has to be portable but on the other hand must be
fast. But you need not understand the details to use GNU C Library.
This will only be necessary if you intend to contribute or change it.
If you have any questions you think should be answered in this document,
please let me know.
--drepper@cygnus.com
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q1] ``What systems does the GNU C Library run on?''
[Q2] ``What compiler do I need to build GNU libc?''
[Q3] ``When starting make I get only error messages.
What's wrong?''
[Q4] ``After I changed configure.in I get `Autoconf version X.Y.
or higher is required for this script'. What can I do?''
[Q5] ``Do I need a special linker or archiver?''
[Q6] ``Do I need some more things to compile GNU C Library?''
[Q7] ``When I run `nm -u libc.so' on the produced library I still
find unresolved symbols? Can this be ok?''
[Q8] ``Can I replace the libc on my Linux system with GNU libc?''
[Q9] ``I expect GNU libc to be 100% source code compatible with
the old Linux based GNU libc. Why isn't it like this?''
[Q10] ``Why does getlogin() always return NULL on my Linux box?''
[Q11] ``Where are the DST_* constants found in <sys/time.h> on many
systems?''
[Q12] ``The `gencat' utility cannot process the input which are
successfully used on my Linux libc based system. Why?''
[Q13] ``How do I configure GNU libc so that the essential libraries
like libc.so go into /lib and the other into /usr/lib?''
[Q14] ``When linking with the new libc I get unresolved symbols
`crypt' and `setkey'. Why aren't these functions in the
libc anymore?''
[Q15] ``What are these `add-ons'?''
[Q16] ``When I use GNU libc on my Linux system by linking against
to libc.so which comes with glibc all I get is a core dump.''
[Q17] ``Looking through the shared libc file I haven't found the
functions `stat', `lstat', `fstat', and `mknod' and while
linking on my Linux system I get error messages. How is
this supposed to work?''
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q1] ``What systems does the GNU C Library run on?''
[A1] {UD} This is difficult to answer. The file `README' lists the
architectures GNU libc is known to run *at some time*. This does not
mean that it still can be compiled and run on them in the moment.
The systems glibc is known to work on in the moment and most probably
in the future are:
*-*-gnu GNU Hurd
i[3456]86-*-linux Linux-2.0 on Intel
m68k-*-linux Linux-2.0 on Motorola 680x0
alpha-*-linux Linux-2.0 on DEC Alpha
Other Linux platforms are also on the way to be supported but I need
some success reports first.
If you have a system not listed above (or in the `README' file) and
you are really interested in porting it, contact
<bug-glibc@prep.ai.mit.edu>
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q2] ``What compiler do I need to build GNU libc?''
[A2] {UD} It is (almost) impossible to compile GNU C Library using a
different compiler than GNU CC. A lot of extensions of GNU CC are
used to increase the portability and speed.
But this does not mean you have to use GNU CC for using the GNU C
Library. In fact you should be able to use the native C compiler
because the success only depends on the binutils: the linker and
archiver.
The GNU CC is found like all other GNU packages on
ftp://prep.ai.mit.edu/pub/gnu
or better one of the many mirror sites.
You always should try to use the latest official release. Older
versions might not have all the features GNU libc could use.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q3] ``When starting `make' I get only errors messages.
What's wrong?''
[A3] {UD} You definitely need GNU make to translate GNU libc. No
other make program has the needed functionality.
Versions before 3.74 have bugs which prevent correct execution so you
should upgrade to the latest version before starting the compilation.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q4] ``After I changed configure.in I get `Autoconf version X.Y.
or higher is required for this script'. What can I do?''
[A4] {UD} You have to get the specified autoconf version (or a later)
from your favourite mirror of prep.ai.mit.edu.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q5] ``Do I need a special linker or archiver?''
[A5] {UD} If your native versions are not too buggy you can probably
work with them. But GNU libc works best with GNU binutils.
On systems where the native linker does not support weak symbols you
will not get a really ISO C compliant C library. Generally speaking
you should use the GNU binutils if they provide at least the same
functionality as your system's tools.
Always get the newest release of GNU binutils available.
Older releases are known to have bugs that affect building the GNU C
Library.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q6] ``Do I need some more things to compile GNU C Library?''
[A6] {UD} Yes, there are some more :-).
* GNU gettext; the GNU libc is internationalized and partly localized.
For bringing the messages for the different languages in the needed
form the tools from the GNU gettext package are necessary. See
ftp://prep.ai.mit.edu/pub/gnu or better any mirror site.
* lots of diskspace (for i?86-linux this means, e.g., ~70MB).
You should avoid compiling on a NFS mounted device. This is very
slow.
* plenty of time (approx 1h for i?86-linux on i586@133 or 2.5h on
i486@66 or 4.5h on i486@33).
If you have some more measurements let me know.
* Some files depend on special tools. E.g., files ending in .gperf
need a `gperf' program. The GNU version (part of libg++) is known
to work while some vendor versions do not.
* When compiling for Linux:
+ the header files of the Linux kernel must be available in the
search path of the CPP as <linux/*.h> and <asm/*.h>.
* Some files depend on special tools. E.g., files ending in .gperf
need a `gperf' program. The GNU version (part of libg++) is known
to work while some vendor versions do not.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q7] ``When I run `nm -u libc.so' on the produced library I still
find unresolved symbols? Can this be ok?''
[A7] {UD} Yes, this is ok. There can be several kinds of unresolved
symbols:
* magic symbols automatically generated by the linker. Names are
often like __start_* and __stop_*
* symbols starting with _dl_* come from the dynamic linker
* symbols resolved by using libgcc.a
(__udivdi3, __umoddi3, or similar)
* weak symbols, which need not be resolved at all
(currently fabs among others; this gets resolved if the program
is linked against libm, too.)
Generally, you should make sure you find a real program which produces
errors while linking before deciding there is a problem.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q8] ``Can I replace the libc on my Linux system with GNU libc?''
[A8] {UD} You cannot replace any existing libc for Linux with GNU
libc. There are different versions of C libraries and you can run
libcs with different major version independently.
For Linux there are today two libc versions:
libc-4 old a.out libc
libc-5 current ELF libc
GNU libc will have the major number 6 and therefore you can have this
additionally installed. For more information consult documentation for
shared library handling. The Makefiles of GNU libc will automatically
generate the needed symbolic links which the linker will use.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q9] ``I expect GNU libc to be 100% source code compatible with
the old Linux based GNU libc. Why isn't it like this?''
[A9] {DMT,UD} Not every extension in Linux libc's history was well
thought-out. In fact it had a lot of problems with standards compliance
and with cleanliness. With the introduction of a new version number these
errors now can be corrected. Here is a list of the known source code
incompatibilities:
* _GNU_SOURCE: glibc does not automatically define _GNU_SOURCE. Thus,
if a program depends on GNU extensions or some other non-standard
functionality, it is necessary to compile it with C compiler option
-D_GNU_SOURCE, or better, to put `#define _GNU_SOURCE' at the beginning
of your source files, before any C library header files are included.
This difference normally manifests itself in the form of missing
prototypes and/or data type definitions. Thus, if you get such errors,
the first thing you should do is try defining _GNU_SOURCE and see if
that makes the problem go away.
For more information consult the file `NOTES' part of the GNU C
library sources.
* reboot(): GNU libc sanitizes the interface of reboot() to be more
compatible with the interface used on other OSes. In particular,
reboot() as implemented in glibc takes just one argument. This argument
corresponds to the third argument of the Linux reboot system call.
That is, a call of the form reboot(a, b, c) needs to be changed into
reboot(c).
Beside this the header <sys/reboot.h> defines the needed constants
for the argument. These RB_* constants should be used instead of the
cryptic magic numbers.
* swapon(): the interface of this function didn't changed, but the
prototype is in a separate header file <sys/swap.h>. For the additional
argument of of swapon() you should use the SWAP_* constants from
<linux/swap.h>, which get defined when <sys/swap.h> is included.
* errno: If a program uses variable "errno", then it _must_ include header
file <errno.h>. The old libc often (erroneously) declared this variable
implicitly as a side-effect of including other libc header files. glibc
is careful to avoid such namespace pollution, which, in turn, means that
you really need to include the header files that you depend on. This
difference normally manifests itself in the form of the compiler
complaining about the references of the undeclared symbol "errno".
* Linux-specific syscalls: All Linux system calls now have appropriate
library wrappers and corresponding declarations in various header files.
This is because the syscall() macro that was traditionally used to
work around missing syscall wrappers are inherently non-portable and
error-prone. The following tables lists all the new syscall stubs,
the header-file declaring their interface and the system call name.
syscall name: wrapper name: declaring header file:
------------- ------------- ----------------------
bdflush bdflush <sys/kdaemon.h>
create_module create_module <sys/module.h>
delete_module delete_module <sys/module.h>
get_kernel_syms get_kernel_syms <sys/module.h>
init_module init_module <sys/module.h>
syslog ksyslog_ctl <sys/klog.h>
* lpd: Older versions of lpd depend on a routine called _validuser().
The library does not provide this function, but instead provides
__ivaliduser() which has a slightly different interfaces. Simply
upgrading to a newer lpd should fix this problem (e.g., the 4.4BSD
lpd is known to be working).
* resolver functions/BIND: like on many other systems the functions of
the resolver library are not included in the libc itself. There is
a separate library libresolv. If you find some symbols starting with
`res_*' undefined simply add -lresolv to your call of the linker.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q10] ``Why does getlogin() always return NULL on my Linux box?''
[A10] {UD} The GNU C library has a format for the UTMP and WTMP file
which differs from what your system currently has. It was extended to
fulfill the needs of the next years when IPv6 is introduced. So the
record size is different, fields might have a different position and
so reading the files written by functions from the one library cannot
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
means to support the new techniques later.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q11] ``Where are the DST_* constants found in <sys/time.h> on many
systems?''
[A11] {UD} These constants come from the old BSD days and are not used
today anymore (even the Linux based glibc does not implement the handling
although the constants are defined).
Instead GNU libc contains the zone database handling and compatibility
code for POSIX TZ environment variable handling.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q12] ``The `gencat' utility cannot process the input which are
successfully used on my Linux libc based system. Why?''
[A12] {UD} Unlike the author of the `gencat' program which is distributed
with Linux libc I have read the underlying standards before writing the
code. It is completely compatible with the specification given in
X/Open Portability Guide.
To ease the transition from the Linux version some of the non-standard
features are also present in the `gencat' program of GNU libc. This
mainly includes the use of symbols for the message number and the automatic
generation of header files which contain the needed #defines to map the
symbols to integers.
Here is a simple SED script to convert at least some Linux specific
catalog files to the XPG4 form:
-----------------------------------------------------------------------
# Change catalog source in Linux specific format to standard XPG format.
# Ulrich Drepper <drepper@cygnus.com>, 1996.
#
/^\$ #/ {
h
s/\$ #\([^ ]*\).*/\1/
x
s/\$ #[^ ]* *\(.*\)/\$ \1/
}
/^# / {
s/^# \(.*\)/\1/
G
s/\(.*\)\n\(.*\)/\2 \1/
}
-----------------------------------------------------------------------
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q13] ``How do I configure GNU libc so that the essential libraries
like libc.so go into /lib and the other into /usr/lib?''
[A13] {UD} Like all other GNU packages GNU libc is configured to use a
base directory and install all files relative to this. If you intend
to really use GNU libc on your system this base directory is /usr. I.e.,
you run
configure --prefix=/usr <other_options>
Some systems like Linux have a filesystem standard which makes a
difference between essential libraries and others. Essential
libraries are placed in /lib because this directory is required to be
located on the same disk partition as /. The /usr subtree might be
found on another partition/disk.
To install the essential libraries which come with GNU libc in /lib
one must explicitly tell this. Autoconf has no option for this so you
have to use the file where all user supplied additional information
should go in: `configparms' (see the `INSTALL' file). For Linux the
`configparms' file should contain:
slibdir=/lib
sysconfdir=/etc
The first line specifies the directory for the essential libraries,
the second line the directory for file which are by tradition placed
in a directory named /etc.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q14] ``When linking with the new libc I get unresolved symbols
`crypt' and `setkey'. Why aren't these functions in the
libc anymore?''
[A14] {UD} Remember the US restrictions of exporting cryptographic
programs and source code. Until this law gets abolished we cannot
ship the cryptographic function together with the libc.
But of course we provide the code and there is an very easy way to use
this code. First get the extra package. People in the US way get it
from the same place they got the GNU libc from. People outside the US
should get the code from ftp.uni-c.dk [129.142.6.74], or another
archive site outside the USA. The README explains how to install the
sources.
If you already have the crypt code on your system the reason for the
failure is probably that you failed to link with -lcrypt. The crypto
functions are in a separate library to make it possible to export GNU
libc binaries from the US.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q15] ``What are these `add-ons'?''
[A15] {UD} To avoid complications with external or external source
code some optional parts of the libc are distributed as separate
packages (e.g., the crypt package, see Q14).
To ease the use as part of GNU libc the installer just has to unpack
the package and tell the configuration script about these additional
subdirectories using the --enable-add-ons option. When you add the
crypt add-on you just have to use
configure --enable-add-ons=crypt,XXX ...
where XXX are possible other add-ons and ... means the rest of the
normal option list.
You can use add-ons also to overwrite some files in glibc. The add-on
system dependent subdirs are search first. It is also possible to add
banner files (use a file named `Banner') or create shared libraries.
Using add-ons has the big advantage that the makefiles of the GNU libc
can be used. Only some few stub rules must be written to get
everything running. Even handling of architecture dependent
compilation is provided. The GNU libc's sysdeps/ directory shows how
to use this feature.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q16] ``When I use GNU libc on my Linux system by linking against
to libc.so which comes with glibc all I get is a core dump.''
[A16] {UD} It is not enough to simply link against the GNU libc
library itself. The GNU C library comes with its own dynamic linker
which really conforms to the ELF API standard. This dynamic linker
must be used.
Normally this is done by the compiler. The gcc will use
-dynamic-linker /lib/ld-linux.so.1
unless the user specifies her/himself a -dynamic-linker argument. But
this is not the correct name for the GNU dynamic linker. The correct
name is /lib/ld.so.1 which is the name specified in the SVr4 ABi.
To change your environment to use GNU libc for compiling you need to
change the `specs' file of your gcc. This file is normally found at
/usr/lib/gcc-lib/<arch>/<version>/specs
In this file you have to change a few things:
- change `ld-linux.so.1' to `ld.so.1'
- remove all expression `%{...:-lgmon}'; there is no libgmon in glibc
Things are getting a bit more complicated if you have GNU libc
installed in some other place than /usr, i.e., if you do not want to
use it instead of the old libc. In this case the needed startup files
and libraries are not found in the regular places. So the specs file
must tell the compiler and linker exactly what to use. Here is for
example the gcc-2.7.2 specs file when GNU libc is installed at
/home/gnu:
-----------------------------------------------------------------------
*asm:
%{V} %{v:%{!V:-V}} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}
*asm_final:
%{pipe:-}
*cpp:
%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{!m386:-D__i486__} %{posix:-D_POSIX_SOURCE} -I/home/gnu/include
*cc1:
*cc1plus:
*endfile:
%{!shared:crtend.o%s} %{shared:crtendS.o%s} /home/gnu/lib/crtn.o%s
*link:
-m elf_i386 -rpath=/home/gnu/lib -L/home/gnu/lib %{shared:-shared} %{!shared: %{!ibcs: %{!static: %{rdynamic:-export-dynamic} %{!dynamic-linker:-dynamic-linker=/home/gnu/lib/ld.so.1}} %{static:-static}}}
*lib:
%{!shared: %{mieee-fp:-lieee} %{p:-lc_p} %{!p:%{pg:-lc_p} %{!pg:-lc}}}
*libgcc:
%{!shared:-lgcc}
*startfile:
%{!shared: %{pg:/home/gnu/lib/gcrt1.o%s} %{!pg:%{p:/home/gnu/lib/gcrt1.o} %{!p:/home/gnu/lib/crt1.o%s}}} /home/gnu/lib/crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}
*switches_need_spaces:
*signed_char:
%{funsigned-char:-D__CHAR_UNSIGNED__}
*predefines:
-D__ELF__ -Dunix -Di386 -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(i386) -Amachine(i386)
*cross_compile:
0
*multilib:
. ;
-----------------------------------------------------------------------
Future versions of GCC will automatically provide the correct specs.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q17] ``Looking through the shared libc file I haven't found the
functions `stat', `lstat', `fstat', and `mknod' and while
linking on my Linux system I get error messages. How is
this supposed to work?''
[A17] {RM} Believe it or not, stat and lstat (and fstat, and mknod)
are supposed to be undefined references in libc.so.6! Your problem is
probably a missing or incorrect /usr/lib/libc.so file; note that this
is a small text file now, not a symlink to libc.so.6. It should look
something like this:
GROUP ( libc.so.6 ld.so.1 libc.a )
{UD} The Linux ldconfig file probably generates a link libc.so ->
libc.so.6 in /lib. This is not correct. There must not be such a
link. The linker script with the above contents is placed in
/usr/lib which is enough for the linker.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Answers were given by:
{UD} Ulrich Drepper, <drepper@cygnus.com>
{DMT} David Mosberger-Tang, <davidm@AZStarNet.com>
{RM} Roland McGrath, <roland@gnu.ai.mit.edu>
Local Variables:
mode:text
End:
+273 -187
View File
@@ -4,16 +4,13 @@ Library Maintenance
How to Install the GNU C Library
================================
Installation of the GNU C library is relatively simple.
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.*
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:
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
@@ -21,46 +18,6 @@ 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.
The GNU C Library currently supports configurations that match the
following patterns:
alpha-dec-osf1
i386-ANYTHING-bsd4.3
i386-ANYTHING-gnu
i386-ANYTHING-isc2.2
i386-ANYTHING-isc3.N
i386-ANYTHING-sco3.2
i386-ANYTHING-sco3.2v4
i386-ANYTHING-sysv
i386-ANYTHING-sysv4
i386-force_cpu386-none
i386-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
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
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
Here are some options that you should specify (if appropriate) when
you run `configure':
@@ -76,8 +33,15 @@ you run `configure':
building the GNU C Library. On some systems, the library may not
build properly if you do *not* use `gas'.
`--with-gnu-binutils'
This option implies both `--with-gnu-ld' and `--with-gnu-as'. On
systems where GNU tools are the system tools, there is no need to
specify this option. These include GNU, GNU/Linux, and free BSD
systems.
`--without-fp'
`--nfp'
Use this option if your computer lacks hardware floating point
Use this option if your computer lacks hardware floating-point
support.
`--prefix=DIRECTORY'
@@ -89,6 +53,29 @@ you run `configure':
subdirectories of `DIRECTORY'. (You can also set this in
`configparms'; see below.)
`--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.
@@ -141,57 +128,107 @@ work with object files for the target you configured for.
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.)
The current release of the C library contains some header files that
the compiler normally provides: `stddef.h', `stdarg.h', and several
files with names of the form `va-MACHINE.h'. The versions of these
files that came with older releases of GCC do not work properly with
the GNU C library. The `stddef.h' file in release 2.2 and later of GCC
is correct. If you have release 2.2 or later of GCC, use its version
of `stddef.h' instead of the C library's. To do this, put the line
`override stddef.h =' in `configparms'. The other files are corrected
in release 2.3 and later of GCC. `configure' will automatically detect
whether the installed `stdarg.h' and `va-MACHINE.h' files are
compatible with the C library, and use its own if not.
There is a potential problem with the `size_t' type and versions of
GCC prior to release 2.4. ANSI C requires that `size_t' always be an
unsigned type. For compatibility with existing systems' header files,
GCC defines `size_t' in `stddef.h' to be whatever type the system's
`sys/types.h' defines it to be. Most Unix systems that define `size_t'
in `sys/types.h', define it to be a signed type. Some code in the
library depends on `size_t' being an unsigned type, and will not work
correctly if it is signed.
The GNU C library code which expects `size_t' to be unsigned is
correct. The definition of `size_t' as a signed type is incorrect.
Versions 2.4 and later of GCC always define `size_t' as an unsigned
type, and GCC's `fixincludes' script massages the system's
`sys/types.h' so as not to conflict with this.
In the meantime, we work around this problem by telling GCC
explicitly to use an unsigned type for `size_t' when compiling the GNU C
library. `configure' will automatically detect what type GCC uses for
`size_t' arrange to override it if necessary.
To build the library, type `make lib'. This will produce a lot of
output, some of which looks like errors from `make' (but isn't). Look
for error messages from `make' containing `***'. Those indicate that
something is really wrong.
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 tests'. This will produce several files
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'. To format the Info version of the manual for on line
reading with `C-h i' in Emacs or with the `info' program, type
`make info'.
`make dvi'.
To install the library and its header files, and the Info files of
the manual, type `make install', after setting the installation
directories in `configparms'. This will build things if necessary,
the manual, type `make install'. This will build things if necessary,
before installing them.
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.75
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 or later.
* GCC 2.7.2.1
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.
* `binutils' 2.7
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.7 or later;
earlier versions are known to have problems or to not support all
architectures.
Supported Configurations
------------------------
The GNU C Library currently supports configurations that match the
following patterns:
alpha-ANYTHING-linux
alpha-ANYTHING-linuxecoff
iX86-ANYTHING-gnu
iX86-ANYTHING-linux
m68k-ANYTHING-linux
Former versions of this library used to support the following
configurations but the current status is unknown:
alpha-dec-osf1
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
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
==============
@@ -246,8 +283,10 @@ But what they do is fairly straightforward, and only requires that you
define a few variables in the right places.
The library sources are divided into subdirectories, grouped by
topic. The `string' subdirectory has all the string-manipulation
functions, `stdio' has all the standard I/O functions, etc.
topic.
The `string' subdirectory has all the string-manipulation functions,
`math' has all the mathematical functions, etc.
Each subdirectory contains a simple makefile, called `Makefile',
which defines a few `make' variables and then includes the global
@@ -283,7 +322,9 @@ The basic variables that a subdirectory makefile defines are:
data in a file called `TEST-PROGRAM.input'; it will be given to
the test program on its standard input. If a test program wants
to be run with arguments, put the arguments (all on a single line)
in a file called `TEST-PROGRAM.args'.
in a file called `TEST-PROGRAM.args'. Test programs should exit
with zero status when the test passes, and nonzero status when the
test indicates a bug in the library or error in building.
`others'
The names of "other" programs associated with this section of the
@@ -362,18 +403,24 @@ So the final list is `unix/bsd/vax unix/bsd unix/inet unix posix'.
`sysdeps' has two "special" subdirectories, called `generic' and
`stub'. These two are always implicitly appended to the list of
subdirectories (in that order), so you needn't put them in an `Implies'
file, and you should not create any subdirectories under them.
`generic' is for things that can be implemented in machine-independent
C, using only other machine-independent functions in the C library.
`stub' is for "stub" versions of functions which cannot be implemented
on a particular machine or operating system. The stub functions always
return an error, and set `errno' to `ENOSYS' (Function not
implemented). *Note Error Reporting::.
file, and you should not create any subdirectories under them intended
to be new specific categories. `generic' is for things that can be
implemented in machine-independent C, using only other
machine-independent functions in the C library. `stub' is for "stub"
versions of functions which cannot be implemented on a particular
machine or operating system. The stub functions always return an
error, and set `errno' to `ENOSYS' (Function not implemented). *Note
Error Reporting::.
A source file is known to be system-dependent by its having a
version in `generic' or `stub'; every system-dependent function should
have either a generic or stub implementation (there is no point in
having both).
version in `generic' or `stub'; every generally-available function whose
implementation is system-dependent in should have either a generic or
stub implementation (there is no point in having both). 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.
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-
@@ -629,18 +676,106 @@ generated are `ioctls.h', `errnos.h', `sys/param.h', and `errlist.c'
Contributors to the GNU C Library
=================================
The GNU C library was written almost entirely by Roland McGrath, who
now maintains it. Some parts of the library were contributed or worked
on by other people.
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.
* Most of the math functions are taken from 4.4 BSD; they have been
modified only slightly to work with the GNU C library. The
Internet-related code (most of the `inet' subdirectory) and several
other miscellaneous functions and header files have been included
with little or no modification.
* 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 Torbjorn 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' function was contributed by Ian Lance Taylor.
* 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 Torbjorn 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.
* 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').
* 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:
@@ -694,70 +829,7 @@ on by other people.
changes to fit into the GNU C library and to fit the ANSI C
standard, but the functional code is Berkeley's.
* 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 Torbjorn Granlund.
* 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 `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' function was contributed by Ian Lance Taylor.
* The code to support SunOS shared libraries was contributed by Tom
Quinn.
* The `mktime' function was contributed by Noel Cragg.
* 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.
* The Internet resolver code is taken directly from BIND 4.9.1,
* 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.
@@ -780,15 +852,6 @@ on by other people.
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* 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 floating-point printing function used by `printf' and friends
was written by Roland McGrath and Torbjorn Granlund. The
multi-precision integer functions used in that function are taken
from GNU MP, which was contributed by Torbjorn Granlund.
* The code to support Sun RPC is taken verbatim from Sun's
RPCSRC-4.0 distribution, and is covered by this copyright:
@@ -824,9 +887,32 @@ on by other people.
2550 Garcia Avenue
Mountain View, California 94043
* The port to SGI machines running Irix 4 (`mips-sgi-irix4') was
contributed by Tom Quinn.
* Some of the support code for Mach is taken from Mach 3.0 by CMU,
and is under the following copyright terms:
* The port of the Mach and Hurd code to the MIPS architecture
(`mips-ANYTHING-gnu') was contribued by Kazumoto Kojima.
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.
+42 -34
View File
@@ -1,4 +1,4 @@
# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
# Copyright (C) 1991, 92, 93, 94, 95, 96 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
@@ -18,6 +18,8 @@
dist:
# Make the value empty so ifdef fails if it's $(-subdir).
subdir := $(subdir)
ifdef subdir
.. := ../
else
@@ -31,12 +33,19 @@ foo:=$(shell echo 'foobar=$(filter %.c %.S %.s %.h,$(distribute))'>&2)
ifndef sysdep_dirs
# Find all sysdep directories.
export sysdep_dirs := $(shell find $(..)sysdeps -type d ! -name RCS -print)
export sysdep_dirs := $(shell find $(..)sysdeps -type d \
! -name CVS ! -name RCS -print)
else
# Defined by the parent.
sysdep_dirs := $(addprefix $(..),$(sysdep_dirs))
endif
# Don't distribute add-on subdirs.
subdirs := $(filter-out $(add-ons),$(subdirs))
# Make sure both stdio and libio get in, whichever is in use.
subdirs += stdio libio
sysdep-Subdir-files := $(wildcard $(addsuffix /Subdirs,$(sysdep_dirs)))
ifdef sysdep-Subdir-files
subdirs := $(sort $(subdirs) \
@@ -48,7 +57,7 @@ endif
# where source files might be found.
ifdef subdir
all-headers = $(headers)
all-headers = $(filter-out $(sysdep_headers),$(headers))
else
+distinfo := $(shell MAKEFLAGS= MFLAGS= $(MAKE) -s no_deps=t \
inhibit_interface_rules=t inhibit_mach_syscalls=t \
@@ -62,22 +71,33 @@ all-headers := $(sort $(headers) $(wildcard $(all-headers)))
endif
foo:=$(shell echo 'IS THIS WORKING??? all-headers=$(all-headers)' >&2)
sources += $(addsuffix .c,$(elided-routines) \
$(foreach l,$(extra-libs),$($l-routines)))
# Find all sysdep sources and headers.
+maybe-sysdeps := $(sources) $(sources:.c=.s) $(sources:.c=.S) $(all-headers) \
$(filter %.c %.S %.s %.h %.sub,$(distribute))
foo:=$(shell echo '+maybe-sysdeps=$(+maybe-sysdeps)'>&2)
# Find all the files that have a stub or generic version.
try-sysdeps := $(foreach dir,$(..)sysdeps/stub $(..)sysdeps/generic,\
try-sysdeps := $(foreach dir,$(..)sysdeps/stub $(..)sysdeps/generic \
$(..)sysdeps/libm-ieee754,\
$(addprefix $(dir)/,$(+maybe-sysdeps)))
foo:=$(shell echo 'try-sysdeps=$(try-sysdeps)'>&2)
+sysdeps := $(wildcard $(try-sysdeps))
foo:=$(shell echo 'stub/generic +sysdeps=$(+sysdeps)'>&2)
+sysdep-names := $(sort $(notdir $(+sysdeps)))
+sysdep-names := $(sort $(patsubst $(..)sysdeps/generic/%,%,\
$(patsubst $(..)sysdeps/stub/%,%,\
$(patsubst $(..)sysdeps/libm-ieee754/%,%,\
$(+sysdeps)))))
foo:=$(shell echo '+sysdep-names=$(+sysdep-names)' >&2)
ifdef subdir-dirs
vpath % $(subdir-dirs)
endif
# Now find all the sysdep versions of those files.
+sysdeps := $(wildcard $(foreach dir,$(sysdep_dirs) $(source_dirs),\
$(addprefix $(dir)/, \
+sysdeps := $(foreach dir,$(sysdep_dirs) $(source_dirs),\
$(wildcard $(addprefix $(dir)/, \
$(+sysdep-names) \
$(+sysdep-names:.c=.s) \
$(+sysdep-names:.c=.S) \
@@ -93,10 +113,9 @@ sources := $(filter-out $(addsuffix .c,$(basename $(.S.s))),$(sources)) $(.S.s)
$(addsuffix .c,$(sysdep_routines)) \
$(+subdir-nodist)
#foo:=$(shell echo '+out=$(+out)' >&2; echo foofoo >&2)
+tsrcs := $(filter-out $(+out) $(addprefix %/,$(+out)), \
$(sources) $(all-headers) $(distribute)) \
+tsrcs := $(filter-out $(+out), $(sources) $(all-headers) $(distribute)) \
$(+sysdeps)
foo:=$(shell echo made +tsrcs >&2)
foo:=$(shell echo 'made +tsrcs=$(+tsrcs)'>&2)
foo:=$(shell echo generated='$(generated)' >&2)
generated := $(sort $(generated) $(generated:.S=.c) $(generated:.s=.c))
foo:=$(shell echo now generated='$(generated)' >&2)
@@ -105,19 +124,15 @@ foo:=$(shell echo '+tsrcs=$(+tsrcs)'>&2)
foo:=$(shell echo foobie, dammit! >&2)
ifndef tardir
rel+vers := $(shell sed -n -e 's/^.*libc_release.*\"\([^"]*\)";$$/\1/p' \
-e 's/^.*libc_version.*\"\([^"]*\)";$$/\1/p' \
< $(..)version.c)
release := $(word 1,$(rel+vers))
version := $(word 2,$(rel+vers))
-include $(common-objpfx)version.mk
export tardir := glibc-$(version)
endif
$(..)glibc-$(version):
ln -s . $@
+tsrcs := $(+tsrcs) \
TAGS
#+tsrcs := $(+tsrcs) \
# TAGS
.PHONY: TAGS
TAGS: $(..)MakeTAGS
$(MAKE) -f $< $@ -o subdir_TAGS
@@ -131,7 +146,6 @@ foo:=$(shell echo subdir foo >&2)
$(wildcard $(addsuffix .input,$(tests)) \
$(addsuffix .args,$(tests)))
+tardeps := $(strip $(+tsrcs))
+tsrcs := $(addprefix $(tardir)/$(subdir)/,$(+tardeps))
verbose = v
@@ -139,7 +153,8 @@ verbose = v
dist: $(..)$(tardir) $(+tardeps)
@cd ..; if test -f dist.tar; then c=u; else c=c; fi; \
$(+cmdecho) "cd ..; tar $${c}h$(verbose)f dist.tar ..."; \
tar $${c}h$(verbose)f dist.tar $(+tsrcs)
tar $${c}h$(verbose)f dist.tar \
$(addprefix $(tardir)/$(subdir)/,$(filter-out $<,$^))
else # Parent makefile.
@@ -155,9 +170,7 @@ foo:=$(shell echo +sysdep-distfiles='$(+sysdep-distfiles)'>&2)
$(sysdep-Subdir-files)
foo:=$(shell echo '+sysdep-dist=$(+sysdep-dist)' >&2)
subdirs := $(filter-out crypt,$(subdirs))
+sysdep-tsrcs := $(wildcard $(foreach file,Makefile Implies \
+sysdep-tsrcs := $(wildcard $(foreach file,Makefile Implies syscalls.list\
configure configure.in,\
$(addsuffix /$(file),$(sysdep_dirs)))) \
$(+sysdep-dist)
@@ -170,26 +183,21 @@ mv -f $@.new $@
test ! -d CVS || cvs commit -m'Regenerated: autoconf $(ACFLAGS) $<' $@
endef
configure: configure.in; $(autoconf-it)
%/configure: %/configure.in; $(autoconf-it)
configure: configure.in aclocal.m4; $(autoconf-it)
%/configure: %/configure.in aclocal.m4; $(autoconf-it)
.PHONY: dist
dist: $(tardir).tar.gz $(tardir)-crypt.tar.gz
$(tardir)-crypt.tar.gz: crypt/crypt.tar.gz
ln $< $@
crypt/%: FORCE
$(MAKE) -C $(@D) $(@F)
FORCE:
dist: $(tardir).tar.gz
subdir_dist: dist.tar
dist.tar: $(tardir) $(+tsrcs)
tar chvf $@ $(addprefix $(tardir)/,$(filter-out $(tardir),$^))
$(tardir).tar: dist.tar subdir_dist
tar xfv $< -C /tmp | doschk
@echo Files listed here have names exceeding 14 chars.
tar xfv $< -C /tmp | sed -n '/[^/]\{15,\}/p'
tar covf $@ -C /tmp $(tardir)
-rm -fr /tmp/$(tardir) &
-rm -fr /tmp/$(tardir) dist.tar &
%.Z: %
compress -c $< > $@
@@ -210,7 +218,7 @@ README: README.template version.c
sed -e 's/RELEASE/$(release)/' -e 's/VERSION/$(version)/' < $< > $@
# Make it unwritable so I won't change it by mistake.
chmod 444 $@
test ! -d CVS || commit -m'Remade for $(release)-$(version)' $@
test ! -d CVS || cvs commit -m'Remade for $(release)-$(version)' $@
endif # Subdirectory vs. parent makefile
+88 -14
View File
@@ -1,6 +1,6 @@
# Make the TAGS files.
# Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc.
# Copyright (C) 1992, 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
@@ -39,16 +39,18 @@ tags_sources = $(all-sources) $(all-headers) $(all-dist)
endif # ctype
endif # No tags_sources
sysdep-dirs := $(addprefix $(sysdep_dir)/,$(sysdirs))
sysdep-dirs := $(full-config-subdirs)
ifndef sysdep_dirs
# Find all sysdep directories.
sysdep_dirs := $(shell find $(..)sysdeps -type d ! -name RCS -print)
sysdep_dirs := $(shell find $(..)sysdeps -type d \
! -name RCS ! -name CVS -print)
endif
# Find all sysdep dirs there are, but putting the ones
# we are configured to use first and preserving their order.
all-dirs := $(objdir) \
all-dirs := $(subdir-dirs) \
$(objdir) \
$(sysdep-dirs) \
$(source_dirs) \
$(filter-out $(sysdep-dirs),$(sysdep_dirs))
@@ -71,18 +73,26 @@ else
all-dist = $(distribute)
endif
# sources and headers must be simply expanded variables
sources := $(sources) $(filter %.c %.s %.S,$(all-dist))
headers := $(headers) $(filter %.h,$(all-dist))
all-dist := $(filter-out %.h %.c %.s %.S,$(all-dist))
sources += $(foreach lib,$(extra-libs),$($(lib)-routines:=.c))
# All different versions of $(sources), preserving the configured sysdep
# directory order.
all-sources = $(wildcard $(foreach file,$(sources),\
$(file) \
$(foreach dir,$(all-dirs),\
$(dir)/$(file) \
$(dir)/$(file:.c=.S) \
$(dir)/$(file:.c=.s))))
all-sources = $(wildcard $(sort $(sources) $(sources:.c=.S) $(sources:.c=.s) \
$(others:=.c) $(tests:=.c))) \
$(foreach dir,$(all-dirs),\
$(wildcard \
$(addprefix $(dir)/,\
$(sort $(sources) $(sources:.c=.S) \
$(sources:.c=.s)))))
all-headers = $(wildcard $(foreach file,$(headers),\
$(file) \
$(foreach dir,$(all-dirs),$(dir)/$(file))))
all-headers = $(wildcard $(headers)) \
$(foreach dir,$(all-dirs),\
$(wildcard $(addprefix $(dir)/,$(headers))))
tags_sources := $(strip $(tags_sources))
@@ -91,7 +101,7 @@ ifdef subdir
ifdef tags_sources
$(ETAGS) -o $@ $^
else
# No sources. Create a dummy file.
# No sources. Create a dummy file.
touch $@
endif # tags_sources
else # parent
@@ -107,3 +117,67 @@ $(subdirs:%=%/TAGS):
$(MAKE) -C $(@D) no_deps=t $(@F)
endif # subdir
ifndef XGETTEXT
XGETTEXT = xgettext
endif
P = $(..)po
ifdef subdir
domain = $(subdir)
else
domain = libc-top
endif
define extract
@rm -f $@.new
$(XGETTEXT) --keyword=_ --keyword=N_ --add-comments=TRANS --sort-output \
--omit-header -n -d - $(XGETTEXTFLAGS-$(@F)) > $@.new $^
mv -f $@.new $@
endef
text-srcs := $(filter %.c %.h %.cc %.C,$(tags_sources))
$P/$(domain).pot: $(text-srcs)
ifeq (,$(text-srcs))
cp /dev/null $@
else
$(extract)
endif
$P/siglist.pot: $(common-objpfx)stdio-common/siglist.c; $(extract)
# Extract all strings from this file; its strings are not marked.
# Their surroundings are also not interesting.
XGETTEXTFLAGS-siglist.pot = -a --no-location
all-pot = $P/libc-top.pot $P/subdirs.pot $P/siglist.pot
ifndef subdir
# Collect all the subdir messages, massaging the file names in comments
# to include the subdir name.
$P/subdirs.pot: $(subdirs:%=$P/%.pot)
@rm -f $@.new
(for d in $(subdirs); \
do sed "/^#:/s% % $$d/%g" $P/$$d.pot; done) > $@.new
mv -f $@.new $@
# Get $(version) defined.
include $(common-objpfx)version.mk
# Combine all the messages into the final sorted template translation file.
# The following code requires GNU date.
$P/libc.pot: $(all-pot)
@rm -f $@.new
disp='set `date -R`; echo $$6'; \
sed -e 's/VERSION/$(version)/' \
-e "s/DATE/`date +'%Y-%m-%d %I:%M'$$disp/" \
po/header.pot > $@.new
$(XGETTEXT) -d - --omit-header -n -s $^ >> $@.new
mv -f $@.new $@
test ! -d CVS || cvs ci -m'Regenerated from source files' $@
$(subdirs:%=$P/%.pot): $P/%.pot: FORCE
$(MAKE) -C $* no_deps=t ../$@
FORCE:
endif
+170 -38
View File
@@ -1,4 +1,4 @@
# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
# Copyright (C) 1991, 92, 93, 94, 95, 96 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
@@ -56,11 +56,11 @@ objdir = $(ARCH)
endif
endif
# $(common-objdir) is the place to put objects and
# $(common-objdir) is the place to put objects and
# such that are not specific to a single subdir.
ifdef objdir
objpfx = $(objdir)/
common-objpfx = $(objpfx)
objpfx := $(patsubst %//,%/,$(objdir)/$(subdir)/)
common-objpfx = $(objdir)/
common-objdir = $(objdir)
else
objpfx :=
@@ -74,20 +74,35 @@ common-objdir = .
endif
endif
# Root of the sysdeps tree.
sysdep_dir := $(..)sysdeps
export sysdep_dir := $(sysdep_dir)
# Get the values defined by options to `configure'.
include $(common-objpfx)config.make
# Complete path to sysdep dirs.
full-config-sysdirs := $(filter /%, $(config-sysdirs)) \
$(addprefix $(..), $(filter-out /%, $(config-sysdirs)))
export full-config-sysdirs := $(full-config-sysdirs)
# Run config.status to update config.make and config.h. We don't show the
# dependence of config.h to Make, because it is only touched when it
# changes and so config.status would be run every time; the dependence of
# config.make should suffice to force regeneration and re-exec, and the new
# image will notice if config.h changed.
$(common-objpfx)config.make: $(common-objpfx)config.status
$(common-objpfx)config.make: $(common-objpfx)config.status $(..)config.h.in
cd $(<D); $(SHELL) $(<F)
# Force the user to configure before making.
$(common-objpfx)config.status: $(..)configure
# Find all the sysdeps configure fragments, to make sure we re-run
# configure when any of them changes.
$(common-objpfx)config.status: $(..)configure \
$(foreach dir,$(full-config-sysdirs),\
$(wildcard \
$(dir)/Implies) \
$(patsubst %.in,%,\
$(firstword $(wildcard \
$(addprefix $(dir)/,configure configure.in)))))
@cd $(@D); if test -f $(@F); then exec $(SHELL) $(@F) --recheck; else \
echo The GNU C library has not been configured. >&2; \
echo Run \`configure\' to configure it before building. >&2; \
@@ -99,13 +114,10 @@ ifneq ($(wildcard $(..)configparms),)
include $(..)configparms
endif
ifneq ($(objpfx),)
ifneq ($(wildcard $(objpfx)configparms),)
include $(objpfx)configparms
ifneq ($(wildcard $(common-objpfx)configparms),)
include $(common-objpfx)configparms
endif
endif
sysdep_dir := $(..)sysdeps
export sysdep_dir := $(sysdep_dir)
####
#### These are the configuration variables. You can define values for
@@ -114,6 +126,12 @@ export sysdep_dir := $(sysdep_dir)
####
# Set this to either `stdio' or `libio', to compile in either GNU stdio
# or GNU libio.
ifndef stdio
stdio = stdio
endif
# Common prefix for machine-independent installation directories.
ifeq ($(origin prefix),undefined) # ifndef would override explicit empty value.
prefix = /usr/local
@@ -129,6 +147,11 @@ ifndef libdir
libdir = $(exec_prefix)/lib
endif
# Where to install the shared library and dynamic linker.
ifndef slibdir
slibdir = $(exec_prefix)/lib
endif
# Prefix to put on files installed in $(libdir). For libraries `libNAME.a',
# the prefix is spliced between `lib' and the name, so the linker switch
# `-l$(libprefix)NAME' finds the library; for other files the prefix is
@@ -153,15 +176,15 @@ ifndef zonedir
zonedir = $(datadir)/zoneinfo
endif
# Where to install the locale data files (which are machine-independent).
# Where to install the locale and message catalog data files (which are
# machine-independent).
ifndef localedir
localedir = $(datadir)/locale
endif
# Where to install the locale charmap and message catalog files (which are
# machine-independent).
ifndef nlsdir
nlsdir = $(datadir)/nls
# Where to install the locale charmap source files.
ifndef i18ndir
i18ndir = $(datadir)/i18n
endif
@@ -202,6 +225,16 @@ ifndef localtime-file
localtime-file = $(sysconfdir)/localtime
endif
# What to use for leap second specifications in compiling the default
# timezone files. Set this to `/dev/null' for no leap second handling as
# 1003.1 requires, or to `leapseconds' for proper leap second handling.
# Both zone flavors are always available as `posix/ZONE' and `right/ZONE'.
# This variable determines the default: if it's `/dev/null',
# ZONE==posix/ZONE; if it's `leapseconds', ZONE==right/ZONE.
ifndef leapseconds
leapseconds = /dev/null
endif
# What timezone's DST rules should be used when a POSIX-style TZ
# environment variable doesn't specify any rules. For 1003.1 compliance
# this timezone must use rules that are as U.S. federal law defines DST.
@@ -254,7 +287,7 @@ endif
# Default flags to pass the C compiler.
ifndef default_cflags
default_cflags := -g
default_cflags := -g -O
endif
# Flags to pass the C compiler when assembling preprocessed assembly code
@@ -267,22 +300,81 @@ endif
# Command for linking programs with the C library.
ifndef +link
+link = $(CC) -nostdlib $(LDFLAGS) -o $@ \
$(addprefix $(csu-objpfx),start.o $(+preinit)) \
$(^:lib=$(common-objpfx)libc.a) $(gnulib) $(common-objpfx)libc.a \
$(addprefix $(csu-objpfx),$(+postinit))
+link = $(CC) -nostdlib -nostartfiles -o $@ \
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) \
$(addprefix $(csu-objpfx),start.o) $(+preinit) \
$(filter-out $(addprefix $(csu-objpfx),start.o) $(+preinit) \
$(link-extra-libs) $(common-objpfx)libc% $(+postinit),$^) \
$(link-extra-libs) $(link-libc) $(+postinit)
endif
ifndef config-LDFLAGS
ifeq (yes,$(build-shared))
config-LDFLAGS = -Wl,-dynamic-linker=$(slibdir)/$(rtld-installed-name)
endif
endif
ifndef link-libc
ifeq (yes,$(build-shared))
# We need the versioned name of libc.so in the deps of $(others) et al
# so that the symlink to libc.so is created before anything tries to
# run the linked programs.
link-libc = -Wl,-rpath-link=$(rpath-link) \
$(common-objpfx)libc.so$(libc.so-version) \
$(elfobjdir)/$(rtld-installed-name) \
$(common-objpfx)libc.a $(gnulib)
# Choose the default search path for the dynamic linker based on
# where we will install libraries.
ifneq ($(libdir),$(slibdir))
default-rpath = $(slibdir):$(libdir)
else
default-rpath = $(libdir)
endif
# This is how to find at build-time things that will be installed there.
rpath-link = $(common-objdir):$(elfobjdir):$(nssobjdir)
nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
else
link-libc = $(common-objpfx)libc.a $(gnulib) $(common-objpfx)libc.a
endif
endif
ifndef link-extra-libs
ifeq (yes,$(build-shared))
link-extra-libs = $(foreach lib,$(LDLIBS-$(@F)),$(common-objpfx)$(lib).so$($(notdir $(lib)).so-version))
else
link-extra-libs = $(foreach lib,$(LDLIBS-$(@F)),$(common-objpfx)$(lib).a)
endif
endif
ifndef gnulib
gnulib := -lgcc
endif
ifeq ($(elf),yes)
+preinit = crti.o
+postinit = crtn.o
+preinit = $(addprefix $(csu-objpfx),crti.o)
+postinit = $(addprefix $(csu-objpfx),crtn.o)
endif
ifdef objpfx
csu-objpfx = $(objpfx)
csu-objpfx = $(common-objpfx)csu/
elf-objpfx = $(common-objpfx)elf/
db-objpfx = $(common-objpfx)db/
ifeq (yes,$(build-shared))
# The name under which the run-time dynamic linker is installed.
# We are currently going for the convention that `/lib/ld.so.1'
# names the SVR4/ELF ABI-compliant dynamic linker.
ifndef rtld-installed-name
rtld-installed-name = ld.so.1
endif
endif
# How to run a program we just linked with our library.
# The program binary is assumed to be $(word 2,$^).
built-program-file = $(dir $(word 2,$^))$(notdir $(word 2,$^))
ifneq (yes,$(build-shared))
built-program-cmd = $(built-program-file)
else
csu-objpfx = $(..)csu/
comma = ,
define built-program-cmd
LD_LIBRARY_PATH=$(rpath-link)$(patsubst -Wl$(comma)-rpath-link=%,:%,\
$(filter -Wl$(comma)-rpath-link=%,\
$(sysdep-LDFLAGS))) \
$(elf-objpfx)$(rtld-installed-name) $(built-program-file)
endef
endif
ifndef LD
@@ -294,8 +386,7 @@ RANLIB = ranlib
endif
# Extra flags to pass to GCC.
+gccwarn := -Wall -Wwrite-strings -Wno-parentheses -Winline \
-Wbad-function-cast -Wconversion
+gccwarn := -Wall -Wwrite-strings -Wno-parentheses -Winline -Wstrict-prototypes
# This is the program that generates makefile
# dependencies from C source files.
@@ -341,13 +432,8 @@ ifeq "$(strip $(+cflags))" ""
+cflags := $(default_cflags)
endif # $(+cflags) == ""
# If using gcc, add flags that only it will grok.
ifneq "$(findstring gcc,$(CC))" ""
+cflags := $(+cflags) $(+gccwarn)
+gcc-nowarn := -w
else
+gcc-nowarn :=
endif # gcc
# Don't duplicate options if we inherited variables from the parent.
+cflags := $(sort $(+cflags))
@@ -357,14 +443,18 @@ endif # gcc
# files (including ones given in angle brackets) in the current directory
# and in the parent library source directory.
# `+sysdep-includes' will be defined by Makerules.
+includes = -I. $(filter-out -I,-I$(patsubst %/,%,$(..))) \
+includes = -I. $(filter-out -I,-I$(patsubst %/,%,$(..))) $($(stdio)-include) \
$(includes) $(+sysdep-includes) $(last-includes)
# Since libio has several internal header files, we use a -I instead
# of many little headers in the top level source directory.
libio-include = -I$(..)libio
# These are the variables that the implicit compilation rules use.
CPPFLAGS = $(+includes) $(defines) -include $(..)libc-symbols.h \
$(sysdep-CPPFLAGS) $(CPPFLAGS-$(suffix $@))
override CFLAGS = $(+cflags) $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@))
override CFLAGS = $(+cflags) $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) \
$(CFLAGS-$(<F))
# This is the macro that the implicit linking rules use.
@@ -392,7 +482,8 @@ ifeq (yes,$(build-profile))
# Under --enable-profile, we will build a static library of profiled objects.
# The profiled object files are named foo.po.
object-suffixes += .po
CFLAGS-.po = -p
CPPFLAGS-.po = -DPROF
CFLAGS-.po = -pg
libtype.po = lib%_p.a
endif
ifeq (yes,$(build-omitfp))
@@ -402,18 +493,59 @@ ifeq (yes,$(build-omitfp))
object-suffixes += .go
CFLAGS-.go = -g
CFLAGS-.o = -g0 -O99 -fomit-frame-pointer
CFLAGS-.so += $(CFLAGS.o)
CFLAGS-.so += $(CFLAGS-.o)
libtype.go = lib%_g.a
endif
+gnu-stabs = $(shell echo>&2 '*** BARF ON ME')
ifndef BUILD_CC
BUILD_CC = $(CC)
endif
ifneq ($(BUILD_CC),$(CC))
cross-compiling := yes
else
cross-compiling := no
endif
# Figure out the version numbers from version.h.
$(common-objpfx)version.mk: $(..)version.h $(..)Makeconfig
sed -n -e 's/^.*RELEASE.*"\([^"]*\)".*$$/release=\1/p' \
-e 's/^.*VERSION.*"\([^"]*\)".*$$/version=\1/p' \
< $< > $@-new
mv -f $@-new $@
ifeq (yes, $(build-shared))
# Process the shlib-versions file, which tells us what shared library
# version numbers to use when we install shared objects on this system.
-include $(common-objpfx)soversions.mk
$(common-objpfx)soversions.mk: $(..)shlib-versions $(..)Makeconfig \
$(wildcard $(patsubst %, $(..)%/shlib-versions,\
$(add-ons))) \
$(common-objpfx)config.make
(file="$(wildcard $(patsubst %,$(..)%/shlib-versions,$(add-ons))) \
$(..)shlib-versions"; \
for f in $$file; do \
sed 's/#.*$$//' $$f | while read conf versions; do \
test -n "$$versions" || continue; \
case '$(config-machine)-$(config-vendor)-$(config-os)' in $$conf)\
for v in $$versions; do \
lib=`echo $$v | sed 's/=.*$$//'`; \
if eval "test -z \"\$$vers_lib$$lib\""; then \
eval vers_lib$${lib}=yes; \
echo $$v | sed "s/^.*=/$$lib.so-version=./"; \
fi; \
done ;; esac; done; \
done;) > $@T; exit 0
mv -f $@T $@
# Get $(version) defined with the release version number.
-include $(common-objpfx)version.mk
endif # build-shared
endif # Makeconfig not yet included
+52 -31
View File
@@ -1,4 +1,4 @@
# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
# Copyright (C) 1991, 92, 93, 94, 95, 96 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
@@ -36,13 +36,13 @@ mv -f $@.new $@
test ! -d CVS || cvs commit -m'Regenerated: autoconf $(ACFLAGS) $<' $@
endef
configure: configure.in; $(autoconf-it)
%/configure: %/configure.in; $(autoconf-it)
configure: configure.in aclocal.m4; $(autoconf-it)
%/configure: %/configure.in aclocal.m4; $(autoconf-it)
include Makeconfig
ifndef avoid-generated
include $(objpfx)sysd-dirs
-include $(objpfx)sysd-dirs
define \n
@@ -51,14 +51,14 @@ sysdep-subdirs := $(subst $(\n), ,$(sysdep-subdirs))
endif
# These are the subdirectories containing the library source.
subdirs := csu assert ctype locale math setjmp signal stdio stdlib \
malloc string time dirent grp pwd posix io termios resource \
socket misc gnulib $(wildcard crypt) manual \
$(sysdep-subdirs) elf
subdirs = csu assert ctype db locale intl catgets math setjmp signal stdlib \
stdio-common $(stdio) malloc string wcsmbs time dirent grp pwd\
posix io termios resource misc login socket sysvipc gmon gnulib \
wctype manual shadow crypt $(sysdep-subdirs) nss elf po $(add-ons)
export subdirs := $(subdirs) # Benign, useless in GNU make before 3.63.
# The mach and hurd subdirectories have many generated header files which
# the much of rest of the library depends on, so it is best to build them
# much of the rest of the library depends on, so it is best to build them
# first (and mach before hurd, at that). The before-compile additions in
# sysdeps/{mach,hurd}/Makefile should make it reliably work for these files
# not to exist when making in other directories, but it will be slower that
@@ -76,13 +76,15 @@ subdirs := $(filter mach,$(subdirs)) $(filter hurd,$(subdirs)) \
+subdir_targets := subdir_lib objects objs others subdir_mostlyclean \
subdir_clean subdir_distclean subdir_realclean \
tests subdir_lint.out \
subdir_distinfo \
subdir_echo-headers subdir_echo-distinfo \
subdir_install $(addprefix install-, \
no-libc.a bin lib \
data headers others)
subdir_install \
$(addprefix install-, no-libc.a bin lib data headers others)
headers := features.h errno.h sys/errno.h errnos.h limits.h values.h
headers := errno.h sys/errno.h errnos.h limits.h values.h \
features.h gnu-versions.h libc-lock.h
aux = sysdep $(libc-init) version
before-compile = $(objpfx)version-info.h
echo-headers: subdir_echo-headers
@@ -113,16 +115,25 @@ ifeq (yes,$(build-shared))
lib: $(common-objpfx)libc.so
endif
$(objpfx)sysd-dirs: $(+sysdir_pfx)config.make
(echo define sysdep-subdirs; \
for dir in $(sysdirs); do \
if [ -r $(sysdep_dir)/$$dir/Subdirs ]; then \
sed 's/#.*$$//' $(sysdep_dir)/$$dir/Subdirs; \
else true; \
fi; \
done; \
all-Subdirs-files = $(wildcard $(addsuffix /Subdirs, $(config-sysdirs)))
$(objpfx)sysd-dirs: $(+sysdir_pfx)config.make $(all-Subdirs-files)
(echo define sysdep-subdirs; \
sed 's/#.*$$//' $(all-Subdirs-files) /dev/null; \
echo endef) > $@-tmp
mv -f $@-tmp $@
mv -f $@-tmp $@
all-Banner-files = $(wildcard $(addsuffix /Banner, $(subdirs)))
$(objpfx)version-info.h: $(+sysdir_pfx)config.make $(all-Banner-files)
(files="$(all-Banner-files)"; \
if test -n "$$files"; then \
echo "\"Available extensions:"; \
sed -e '/^#/d' -e 's/^[[:space:]]*/ /' $$files; \
echo "\""; \
fi) > $@-tmp
mv -f $@-tmp $@
version.c-objects := $(addprefix $(objpfx)version,$(object-suffixes))
$(version.c-objects): $(objpfx)version-info.h
# Makerules creates a file `stub-$(subdir)' for each subdirectory, which
# contains `#define __stub_FUNCTION' for each function which is a stub.
@@ -143,7 +154,9 @@ $(includedir)/stubs.h: subdir_install
echo ' in the C library which is a stub, meaning it will fail';\
echo ' every time called, usually setting errno to ENOSYS. */';\
sort $(subdir-stubs)) > $(objpfx)stubs.h
$(INSTALL_DATA) $(objpfx)stubs.h $@
if test -r $@ && cmp -s $(objpfx)stubs.h $@; \
then echo stubs.h unchanged ; \
else $(INSTALL_DATA) $(objpfx)stubs.h $@; fi
rm -f $(objpfx)stubs.h
# This makes the Info or DVI file of the documentation from the Texinfo source.
@@ -173,7 +186,9 @@ $(all-subdirs-targets):
# Subroutines of all cleaning targets.
parent-mostlyclean: common-mostlyclean # common-mostlyclean is in Makerules.
-rm -f $(common-objpfx)libc.a $(addprefix $(objpfx),$(install-lib))
-rm -f $(foreach o,$(object-suffixes),\
$(common-objpfx)$(patsubst %,$(libtype$o),c)) \
$(addprefix $(objpfx),$(install-lib))
parent-clean: parent-mostlyclean common-clean
-rm -f $(addprefix $(common-objpfx),$(common-generated))
-rm -f $(addprefix $(objpfx),sysd-Makefile sysd-dirs sysd-rules)
@@ -199,8 +214,8 @@ realclean distclean: parent-clean
# Subroutine of distclean and realclean.
distclean-1: subdir_$(distclean-1)
-rm -f $(config-generated)
-rm -f $(addprefix $(objpfx),config.status cache.cache)
-rm -f $(addprefix $(objpfx),config.make config-name.h)
-rm -f $(addprefix $(objpfx),config.status config.cache config.log)
-rm -f $(addprefix $(objpfx),config.make config-name.h config.h)
ifdef objdir
-rm -f $(objpfx)Makefile
endif
@@ -214,20 +229,23 @@ echo-distinfo: parent_echo-distinfo subdir_echo-distinfo
parent_echo-distinfo:
@echo $(addprefix +header+,$(headers)) \
$(addprefix +nodist+,$(generated))
# Make the distribution tarfile.
distribute := README INSTALL NOTES COPYING.LIB COPYING NEWS \
ChangeLog ChangeLog.[0-9] \
distribute := README INSTALL FAQ NOTES NEWS PROJECTS \
COPYING.LIB COPYING ChangeLog ChangeLog.[0-9] \
Makefile Makeconfig Makerules Rules Make-dist MakeTAGS \
extra-lib.mk o-iterator.mk \
ansidecl.h mkinstalldirs move-if-change install-sh \
configure configure.in aclocal.m4 config.sub config.guess\
config.make.in config-name.in Makefile.in \
munch-tmpl.c munch.awk sysdep.h set-hooks.h libc-symbols.h
config.h.in config.make.in config-name.in Makefile.in \
autolock.sh munch-tmpl.c munch.awk interp.c \
sysdep.h set-hooks.h libc-symbols.h version.h shlib-versions \
rpm/Makefile rpm/template rpm/rpmrc
distribute := $(strip $(distribute))
generated := $(generated) stubs.h
generated := $(generated) stubs.h version-info.h
README: README.template version.c ; # Make-dist should update README.
@@ -238,3 +256,6 @@ makeinfo --no-validate --no-warn --no-headers $< -o $@
endef
INSTALL: manual/maint.texi; $(format-me)
NOTES: manual/creature.texi; $(format-me)
rpm/%: subdir_distinfo
$(MAKE) -C $(@D) subdirs='$(subdirs)' $(@F)
+351 -157
View File
@@ -1,4 +1,4 @@
# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
# Copyright (C) 1991, 92, 93, 94, 95, 96 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
@@ -25,6 +25,13 @@ ifneq (,)
This makefile requires GNU Make.
endif
REQUIRED_MAKE_VERSION = 3.74
ifneq ($(REQUIRED_MAKE_VERSION), \
$(firstword $(sort $(MAKE_VERSION) $(REQUIRED_MAKE_VERSION))))
Wrong GNU Make version. See above for the version needed.
endif
ifdef subdir
.. := ../
@@ -36,8 +43,6 @@ ifneq "$(findstring env,$(origin sources))" ""
sources :=
endif
headers := $(headers) $(sysdep_headers)
oPATH := $(PATH)
PATH := this definition should take precedence over $(oPATH)
ifeq ($(PATH),$(oPATH))
@@ -51,13 +56,13 @@ include $(..)Makeconfig
endif
# `configure' writes a definition of `config-sysdirs' in `config.make'.
sysdirs = $(config-sysdirs)
sysdirs = $(strip $(full-config-sysdirs))
+sysdir_pfx = $(common-objpfx)
export sysdirs := $(sysdirs)
+sysdep_dirs := $(addprefix $(sysdep_dir)/,$(sysdirs))
+sysdep_dirs := $(full-config-sysdirs)
ifdef objdir
+sysdep_dirs := $(objdir) $(+sysdep_dirs)
endif
@@ -65,45 +70,57 @@ endif
# Add -I switches to get the right sysdep directories.
# `+includes' in Makeconfig references $(+sysdep-includes).
+sysdep-includes := $(addprefix -I,$(+sysdep_dirs))
# The name of the symbol table archive member. The default is suitable for
# BSD style archives. It can be overridden in sysdep Makefiles when SYSV
# style archive are used.
ifeq (no,$(elf))
ar-symtab-name = __.SYMDEF
else
ar-symtab-name = # The null name is used in ELF archives.
endif
# Include any system-specific makefiles.
# This is here so things in sysdep Makefiles can easily depend on foo.h as
# appropriate and not worry about where foo.h comes from, which may be
# system dependent and not known by that Makefile.
vpath %.h $(subst $(empty) ,:,$(strip $(common-objpfx) \
$(addprefix $(sysdep_dir)/,$(sysdirs)) \
$(..)))
ifeq ($(wildcard $(+sysdir_pfx)sysd-Makefile),)
# Don't do deps until this exists, because it might change the sources list.
no_deps=t
endif
vpath %.h $(subst $(empty) ,:,$(strip $(common-objpfx) $(objpfx) \
$(+sysdep_dirs) $(..)))
# Some sysdep makefiles use this to distinguish being included here from
# being included individually by a subdir makefile (hurd/Makefile needs this).
in-Makerules := yes
ifndef avoid-generated
include $(+sysdir_pfx)sysd-Makefile
ifneq ($(sysd-Makefile-sysdirs),$(sysdirs))
-include $(+sysdir_pfx)sysd-Makefile
ifneq ($(sysd-Makefile-sysdirs),$(config-sysdirs))
sysd-Makefile-force = FORCE
FORCE:
endif
$(+sysdir_pfx)sysd-Makefile: $(+sysdir_pfx)config.make $(..)Makerules \
$(sysd-Makefile-force)
-@rm -f $@T
(echo 'sysd-Makefile-sysdirs := $(sysdirs)'; \
for dir in $(sysdirs); do \
file=sysdeps/$$dir/Makefile; \
if [ -f $(..)$$file ]; then \
echo include "\$$(..)$$file"; \
(echo 'sysd-Makefile-sysdirs := $(config-sysdirs)'; \
for dir in $(config-sysdirs); do \
file=$$dir/Makefile; \
if [ -f $$file ]; then \
case $$dir in \
/*) echo include "$$file" ;; \
*) echo include "\$$(..)$$file" ;; \
esac; \
else true; fi; \
done; \
echo 'sysd-Makefile-done=t') > $@T
mv -f $@T $@
endif
ifndef sysd-Makefile-done
# Don't do deps until this exists, because it might change the sources list.
no_deps=t
endif
# Reorder before-compile so that mach things come first, and hurd things
# second, before all else. The mach and hurd subdirectories have many
# generated header files which the much of rest of the library depends on,
@@ -135,9 +152,9 @@ endif
# have source in .s files, and thus do not in fact need a .d file.
# So we must define rules to make .d files for .s files.
define make-dummy-dep
$(addprefix ln $(objpfx)dummy.d ,$(filter-out $(wildcard $@),$@))
$(addprefix ln $(common-objpfx)dummy.d ,$(filter-out $(wildcard $@),$@))
endef
$(objpfx)dummy.d:
$(common-objpfx)dummy.d:
echo '# .s files cannot contain includes, so they need no deps.' > $@
# It matters that this set of rules, for compiling from sources in
@@ -154,7 +171,7 @@ $(objpfx)%.o: %.s $(before-compile); $(compile-command.s)
$(objpfx)%.so: %.s $(before-compile); $(compile-command.s)
$(objpfx)%.po: %.s $(before-compile); $(compile-command.s)
$(objpfx)%.go: %.s $(before-compile); $(compile-command.s)
$(objpfx)%.d: %.s $(objpfx)dummy.d; $(make-dummy-dep)
$(objpfx)%.d: %.s $(common-objpfx)dummy.d; $(make-dummy-dep)
$(objpfx)%.o: %.c $(before-compile); $(compile-command.c)
$(objpfx)%.so: %.c $(before-compile); $(compile-command.c)
$(objpfx)%.po: %.c $(before-compile); $(compile-command.c)
@@ -175,7 +192,7 @@ $(objpfx)%.o: $(objpfx)%.s $(before-compile); $(compile-command.s)
$(objpfx)%.so: $(objpfx)%.s $(before-compile); $(compile-command.s)
$(objpfx)%.po: $(objpfx)%.s $(before-compile); $(compile-command.s)
$(objpfx)%.go: $(objpfx)%.s $(before-compile); $(compile-command.s)
$(objpfx)%.d: $(objpfx)%.s $(objpfx)dummy.d; $(make-dummy-dep)
$(objpfx)%.d: $(objpfx)%.s $(common-objpfx)dummy.d; $(make-dummy-dep)
$(objpfx)%.o: $(objpfx)%.c $(before-compile); $(compile-command.c)
$(objpfx)%.so: $(objpfx)%.c $(before-compile); $(compile-command.c)
$(objpfx)%.po: $(objpfx)%.c $(before-compile); $(compile-command.c)
@@ -197,9 +214,9 @@ endif
# included. It might define inhibit-sysdep-asm, which would affect the
# contents of sysd-rules.
ifdef sysd-Makefile-done
include $(+sysdir_pfx)sysd-rules
ifneq ($(sysd-rules-sysdirs),$(sysdirs))
# The value of $(sysdirs) the sysd-rules was computed for
-include $(+sysdir_pfx)sysd-rules
ifneq ($(sysd-rules-sysdirs),$(config-sysdirs))
# The value of $(+sysdep_dirs) the sysd-rules was computed for
# differs from the one we are using now. So force a rebuild of sysd-rules.
sysd-rules-force = FORCE
FORCE:
@@ -207,12 +224,15 @@ endif
endif
$(+sysdir_pfx)sysd-rules: $(+sysdir_pfx)config.make $(..)Makerules \
$(wildcard $(foreach dir,$(sysdirs),\
$(sysdep_dir)/$(dir)/Makefile))\
$(dir)/Makefile))\
$(sysd-rules-force)
-@rm -f $@T
(echo 'sysd-rules-sysdirs := $(sysdirs)'; \
for sysdir in $(sysdirs); do \
dir="\$$(sysdep_dir)/$$sysdir"; \
(echo 'sysd-rules-sysdirs := $(config-sysdirs)'; \
for sysdir in $(config-sysdirs); do \
case $$sysdir in \
/*) dir=$$sysdir ;; \
*) dir="\$$(..)$$sysdir" ;; \
esac; \
for o in $(object-suffixes); do \
$(open-check-inhibit-asm) \
echo "\$$(objpfx)%$$o: $$dir/%.S \$$(before-compile); \
@@ -224,16 +244,23 @@ $(+sysdir_pfx)sysd-rules: $(+sysdir_pfx)config.make $(..)Makerules \
\$$(compile-command.c)"; \
done; \
$(open-check-inhibit-asm) \
echo "\$$(objpfx)%.d: $$dir/%.s \$$(objpfx)dummy.d; \
echo "\$$(objpfx)%.d: $$dir/%.s \$$(common-objpfx)dummy.d; \
\$$(make-dummy-dep)"; \
echo "\$$(objpfx)%.d: $$dir/%.S \$$(before-compile); \
\$$(+make-deps)"; \
$(close-check-inhibit-asm) \
echo "\$$(objpfx)%.d: $$dir/%.c \$$(before-compile); \
\$$(+make-deps)"; \
done) > $@T
done; \
echo 'sysd-rules-done = t') > $@T
mv -f $@T $@
ifndef sysd-rules-done
# Don't do deps until this exists, because it provides rules to make the deps.
no_deps=t
endif
ifndef compile-command.S
compile-command.S = $(compile.S) $(OUTPUT_OPTION)
endif
@@ -245,8 +272,10 @@ compile-command.c = $(compile.c) $(OUTPUT_OPTION)
endif
# GCC can grok options after the file name, and it looks nicer that way.
compile.S = $(CC) $< -c $(CPPFLAGS) -DASSEMBLER $(asm-CPPFLAGS)
compile.c = $(CC) $< -c $(CFLAGS) $(CPPFLAGS)
compile.S = $(CC) $< -c $(CPPFLAGS) -DASSEMBLER $(asm-CPPFLAGS)
COMPILE.S = $(CC) -c $(CPPFLAGS) -DASSEMBLER $(asm-CPPFLAGS)
COMPILE.s = $(filter-out -pipe,$(CC)) -c $(ASFLAGS)
# We need this for the output to go in the right place. It will default to
# empty if make was configured to work with a cc that can't grok -c and -o
@@ -255,15 +284,84 @@ OUTPUT_OPTION = -o $@
S-CPPFLAGS = $(asm-CPPFLAGS)
define +make-deps
$(make-target-directory)
-@rm -f $@
$(+mkdep) $< $(CPPFLAGS) $($(<:$*.%=%)-CPPFLAGS) | \
sed -e 's,$*\.o,$(foreach o,$(object-suffixes),$(@:.d=$o)) $@,' \
sed -e 's,$(subst .,\.,$*)\.o,$(foreach o,$(object-suffixes),$(@:.d=$o)) $@,' \
$(sed-remove-objpfx) > $(@:.d=.T)
mv -f $(@:.d=.T) $@
endef
ifneq (,$(objpfx))
sed-remove-objpfx = -e 's@ $(subst @,\@,$(objpfx))@ $$(objpfx)@g' \
-e 's@^$(subst @,\@,$(objpfx))@$$(objpfx)@g'
# Continuation lines here are dangerous because they introduce spaces!
define sed-remove-objpfx
-e 's@ $(subst .,\.,$(subst @,\@,$(common-objpfx)))@ $$(common-objpfx)@g' \
-e 's@^$(subst .,\.,$(subst @,\@,$(common-objpfx)))@$$(common-objpfx)@g'
endef
endif
# Shared library building.
ifeq (yes,$(build-shared))
# Pattern rule to build a shared object from an archive of PIC objects.
# This must come after the installation rules so Make doesn't try to
# build shared libraries in place from the installed *_pic.a files.
# $(LDLIBS-%.so) may contain -l switches to generate run-time dependencies
# on other shared objects.
lib%.so: lib%_pic.a; $(build-shlib)
ifeq ($(have-no-whole-archive),yes)
no-whole-archive = -Wl,--no-whole-archive
else
no-whole-archive =
endif
interp-obj = $(common-objpfx)interp.so
$(interp-obj): $(common-objpfx)%.so: $(..)%.c
$(compile-command.c)
common-generated += interp.so
CFLAGS-interp.c = -D'RUNTIME_LINKER="$(slibdir)/$(rtld-installed-name)"'
$(common-objpfx)libc.so: $(interp-obj)
$(patsubst %,$(objpfx)%.so,$(extra-libs)): $(interp-obj)
define build-shlib
$(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \
-B$(csu-objpfx) \
-Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \
$(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \
-L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
-Wl,--whole-archive $^ $(no-whole-archive) \
$(LDLIBS-$(@F:lib%.so=%).so)
endef
# Don't try to use -lc when making libc.so itself.
# Also omits crti.o and crtn.o, which we do not want
# since we define our own `.init' section specially.
LDFLAGS-c.so = -nostdlib -nostartfiles
# Give libc.so an entry point and make it directly runnable itself.
LDFLAGS-c.so += -e __libc_main
# Use our own special initializer and finalizer files for libc.so.
elfobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)elf)
$(common-objpfx)libc.so: $(elfobjdir)/soinit.so \
$(common-objpfx)libc_pic.a \
$(elfobjdir)/sofini.so $(elfobjdir)/ld.so
$(build-shlib)
ifdef libc.so-version
$(common-objpfx)libc.so$(libc.so-version): $(common-objpfx)libc.so
rm -f $@
ln -s $(<F) $@ || ln $< $@
endif
endif
# Some files must not be compiled with the exception handler mechanism
# enabled (introduced in gcc-2.8). Use $(no-exceptions) in the
# appropriate CFLAGS definition.
ifeq ($(have-no-exceptions),yes)
no-exceptions = -fno-exceptions
else
no-exceptions =
endif
# Figure out the source filenames in this directory.
@@ -273,6 +371,8 @@ override sources := $(addsuffix .c,$(filter-out $(elided-routines),\
$(sysdep_routines)))
sysdep_routines := $(sysdep_routines)
headers := $(headers) $(sysdep_headers)
# This is the list of all object files, gotten by
# replacing every ".c" in `sources' with a ".o".
override objects := $(addprefix $(objpfx),$(sources:.c=.o))
@@ -282,7 +382,7 @@ override objects := $(addprefix $(objpfx),$(sources:.c=.o))
# $(o-iterator-doit) to produce some desired rule using $o for the object
# suffix, and setting $(object-suffixes-left) to $(object-suffixes); a copy
# is produced for each object suffix in use.
o-iterator = $(patsubst %,$(..)o-iterator.mk,$(object-suffixes))
o-iterator = $(patsubst %,$(..)o-iterator.mk,$(object-suffixes-left))
# The makefile may define $(extra-libs) with `libfoo libbar'
# to build libfoo.a et al from the modules listed in $(libfoo-routines).
@@ -301,19 +401,10 @@ endif
$(filter-out $(addsuffix .d,$(omit-deps)),\
$(+depfiles)))
$(objpfx)depend-$(subdir): Makefile
ifdef +depfiles
for file in $(+depfiles:$(objpfx)%=%); do \
echo "include \$$(objpfx)$$file"; \
done > $@-tmp
mv -f $@-tmp $@
else
cp /dev/null $@
endif
ifneq ($(no_deps),t)
# Include the generated dependencies of the sources in this directory.
include $(objpfx)depend-$(subdir)
-include $(+depfiles)
endif
endif
# Maximize efficiency by minimizing the number of rules.
@@ -348,72 +439,91 @@ ARFLAGS := r$(verbose)
lib: lib-noranlib $(foreach l,$(libtypes),$(patsubst %,$(common-objpfx)$l,c))
# Pattern rule for libraries: depend on the __.SYMDEF member updated by ranlib.
lib%.a: lib%.a(__.SYMDEF) ;
lib%.a: lib%.a($(ar-symtab-name)) ;
# For object-suffix $o, the list of objects with that suffix.
# Makefiles can define `elide-routines.so = foo' to leave foo.so out.
o-objects = $(patsubst %.o,%$o,$(filter-out $(patsubst %,$(objpfx)%.o,\
$(elide-routines$o)),\
$(objects)))
libobjs: $(foreach o,$(object-suffixes),\
$(common-objpfx)$(patsubst %,$(libtype$o),c)(\
$(notdir $(objects:.o=$o))))
lib-noranlib: libobjs $(addprefix $(objpfx),$(install-lib))
$(notdir $(o-objects))))
lib-noranlib: libobjs
others: $(addprefix $(objpfx),$(install-lib))
ifdef objects
ifndef objects
# Create the stamp$o files to keep the parent makefile happy.
subdir_lib: $(foreach o,$(object-suffixes),$(objpfx)stamp$o-$(subdir))
$(foreach o,$(object-suffixes),$(objpfx)stamp$o-$(subdir)):
$(make-target-directory)
rm -f $@; > $@
else
# Define a pattern rule that will match many targets libc.a(foo.%), for
# each foo.o in $(objects) (% will just happen always to match `o'). This is
# the only way to define a rule that updates many targets at once with one
# sequence of commands. We in fact define the pattern rule to match
# targets libc.a(foo.%), libc_pic.a(foo.%), etc, to avoid repeating the rule.
# Each match will only ever be called upon to make member objects of
# the appropriate type in each library (i.e. libc_pic.a(foo.so)).
$(foreach l,$(libtypes),\
$(common-objpfx)$(patsubst %,$l,c)($(notdir $(objects:.o=.%)))): \
# sequence of commands.
define o-iterator-doit
$(common-objpfx)$(patsubst %,$(libtype$o),c)(\
$(addsuffix .%,$(filter-out $(elide-routines$o),$(notdir $(objects:.o=))))): \
$(objpfx)stamp.%-$(subdir) ;
endef
object-suffixes-left := $(object-suffixes)
include $(o-iterator)
# The pattern rule tells Make to remake $(objpfx)stamp.%-$(subdir) as
# the way to update all the foo.% object files in $(objects).
# Now we define a static pattern rule to update each
# $(objpfx)stamp.SUFFIX-$(subdir) timestamp file;
# these rules (one explicit rule is generated for each object suffix)
# will update the parent archive with
$(foreach o,$(object-suffixes),$(objpfx)stamp$o-$(subdir)): \
$(objpfx)stamp%-$(subdir): $(objects:.o=%)
$(patsubst %,cd %;,$(objdir)) \
$(AR) cru$(verbose) ${O%-lib} \
$(patsubst $(objpfx)%,%,$^)
# `touch' won't let me touch a world-writable file I don't own. Sigh.
rm -f $@
touch $@
ifdef subdir
O%-lib = $(filter ../,$(firstword $(objdir) ../))$(patsubst %,$(libtype$*),c)
else
O%-lib = $(patsubst %,$(libtype$*),c)
endif
# the way to update all the foo.% object files in $(objects). Now we
# define explicit rules to update each $(objpfx)stamp.SUFFIX-$(subdir)
# timestamp file; these rules (one explicit rule is generated for each
# object suffix) will update the parent archive with ar. Use a static
# pattern rule so $* is set to the object type during the commands.
define o-iterator-doit
$(objpfx)stamp$o-$(subdir): $(objpfx)stamp%-$(subdir): $(o-objects); $$(do-ar)
endef
object-suffixes-left := $(object-suffixes)
include $(o-iterator)
define do-ar
topdir=`cd $(..).; pwd`; \
$(patsubst %/,cd %;,$(objpfx)) \
$$topdir/autolock.sh ${O%-lib}.lck $(AR) cru$(verbose) ${O%-lib} \
$(patsubst $(objpfx)%,%,$^)
rm -f $@
touch $@
endef
O%-lib = $(..)$(patsubst %,$(libtype$*),c)
endif
# Rules to update the __.SYMDEF member with ranlib.
# To consolidate, each flavor library's __.SYMDEF member
# depends on the imaginary intermediate file `symdef.SUFFIX',
# where SUFFIX is that flavor's object suffix; then a pattern rule
# "remakes" symdef.% depending on all the libc.a(foo.%) files in $(objects).
$(common-objpfx)$(patsubst %,$(libtype.o),c)(__.SYMDEF): symdef.o
$(common-objpfx)$(patsubst %,$(libtype.so),c)(__.SYMDEF): symdef.so
$(common-objpfx)$(patsubst %,$(libtype.po),c)(__.SYMDEF): symdef.po
$(common-objpfx)$(patsubst %,$(libtype.go),c)(__.SYMDEF): symdef.go
symdef.%: $(foreach o,$(object-suffixes),\
$(common-objpfx)$(patsubst %,$(libtype$o),c)(\
$(patsubst $(objpfx)%.o,%.%,$(objects)))) \
$(filter subdir_lib,$(firstword $(subdir) subdir_lib))
# The last line above makes it also depend on subdir_lib for the parent.
$(RANLIB) $(common-objpfx)$(patsubst %,$(libtype.$*),c)
# Rules to update the $(ar-symtab-name) member with ranlib,
# one for each object flavor.
define o-iterator-doit
$(common-objpfx)$(patsubst %,$(libtype$o),c)($(ar-symtab-name)): \
$(common-objpfx)$(patsubst %,$(libtype$o),c)(\
$(patsubst $(objpfx)%,%,$(o-objects))) $(subdirs-stamp-o); \
$$(..)./autolock.sh \
$$(common-objpfx)$$(patsubst %,$$(libtype$o),c).lck \
$$(RANLIB) $$(common-objpfx)$$(patsubst %,$$(libtype$o),c)
endef
ifndef subdir
subdirs-stamps := $(foreach d,$(subdirs),$(common-objpfx)$d/stamp%-$d)
subdirs-stamp-o = $(subst %,$o,$(subdirs-stamps))
$(subdirs-stamps): subdir_lib;
endif
object-suffixes-left = $(object-suffixes)
include $(o-iterator)
# This makes all the object files.
.PHONY: objects objs
objects objs: $(foreach o,$(object-suffixes),$(objects:.o=$o)) \
objects objs: $(foreach o,$(object-suffixes),$(o-objects)) \
$(addprefix $(objpfx),$(extra-objs))
# Canned sequence for building an extra library archive.
define build-extra-lib
$(patsubst %,cd %;,$(objdir)) \
$(patsubst %/,cd %;,$(objpfx)) \
$(AR) cru$(verbose) $(@:$(objpfx)%=%) \
$(patsubst $(objpfx)%,%,$^)
$(RANLIB) $@
@@ -441,13 +551,11 @@ $(make-target-directory)
$(INSTALL_DATA) $< $@
endef
# Make the target directory if it doesn't exist. Because of make's
# directory cache, this will produce the `mkdir' command when the directory
# already exists, if it didn't exist at the start of the `make' run. The
# `-' prefix ignores errors from mkdir, so there will just be some
# gratuitous but harmless `File exists' messages.
# Make the target directory if it doesn't exist, using the `mkinstalldirs'
# script that does `mkdir -p' even if `mkdir' doesn't support that flag.
define make-target-directory
$(addprefix -mkdir ,$(filter-out $(wildcard $(@D:%/=%)),$(@D:%/=%)))
$(addprefix $(..)./mkinstalldirs ,\
$(filter-out $(wildcard $(@D:%/=%)),$(@D:%/=%)))
endef
# Any directory (parent or subdir) that has any object files to build
@@ -457,16 +565,13 @@ ifdef objects
installed-libcs := $(foreach o,$(object-suffixes),\
$(libdir)/$(patsubst %,$(libtype$o),\
$(libprefix)$(libc-name)))
installed-libcs := $(filter-out %_pic.a,$(installed-libcs))
install: $(installed-libcs)
# We avoid depending on lib-noranlib because that makes the parent make
# subdir_lib in all the subdirs, when the make install run they do will
# update the library anyway. Running ranlib after installing makes the
# __.SYMDEF time stamp up to date, which avoids messages from some linkers.
# Depending on subdir_install gets all the subdirs to update the library,
# and is optimal for `make install' at top level.
$(installed-libcs): $(libdir)/lib$(libprefix)%: libobjs subdir_install
$(installed-libcs): $(libdir)/lib$(libprefix)%: lib
$(make-target-directory)
$(INSTALL_DATA) $(common-objpfx)lib$(*:$(libc-name)%=c%) $@
# Running ranlib after installing makes the __.SYMDEF time stamp up to
# date, which avoids messages from some linkers.
$(RANLIB) $@
endif
@@ -477,20 +582,118 @@ mv -f $@.new $@
endef
install-lib.so := $(filter %.so,$(install-lib:%_pic.a=%.so))
install-lib := $(filter-out %.so,$(install-lib))
install-lib := $(filter-out %.so %_pic.a,$(install-lib))
ifeq (yes,$(build-shared))
install: $(libdir)/libc.so$(libc.so-version)
install-no-libc.a: $(foreach so,$(install-lib.so),\
$(libdir)/$(patsubst $(libprefix)lib%,lib$(libprefix)%,\
$(libprefix)$(so))$($(so)-version))
install-lib.so += libc.so
$(foreach v,$(sort $(foreach so,$(install-lib.so),.so$($(so)-version))),\
install-lib-nosubdir: $(install-lib.so:%=$(libdir)/%)
# Find which .so's have versions.
versioned := $(strip $(foreach so,$(install-lib.so),\
$(patsubst %,$(so),$($(so)-version))))
# Install all the unversioned shared libraries.
$(addprefix $(libdir)/,$(filter-out $(versioned),$(install-lib.so))): \
$(libdir)/%.so: $(objpfx)%.so; $(do-install-program)
define make-link
cd $(@D); rm -f $(@F).new; $(LN_S) $(<F) $(@F).new; mv -f $(@F).new $(@F)
endef
ifdef libc.so-version
# For a library specified to be version N, install three files:
# libc.so -> libc.so.N (e.g. libc.so.6)
# libc.so.6 -> libc-VERSION.so (e.g. libc-1.10.so)
$(slibdir)/libc.so$(libc.so-version): $(slibdir)/libc-$(version).so
$(make-link)
$(slibdir)/libc-$(version).so: $(common-objpfx)libc.so; $(do-install-program)
install: $(slibdir)/libc.so$(libc.so-version)
ifndef subdir
# 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.
# The libc.so object is not complete since some functions are only defined
# in libc.a and the dynamic linker is an etra object.
install: $(libdir)/libc.so
$(libdir)/libc.so: $(common-objpfx)libc.so$(libc.so-version) \
$(elfobjdir)/$(rtld-installed-name) \
$(common-objpfx)libc.a
(echo '/* Use the shared library, but some functions are only in';\
echo ' the static library, so try that secondarily.'; \
echo ' The dynamic linker defines some functions used by $(<F),';\
echo ' but ld uses definitions from libc.a before examining the';\
echo ' dependencies of $(<F) to find $(rtld-installed-name). */';\
echo 'GROUP ( $(^F) )') > $@.new
mv -f $@.new $@
endif
else
install: $(slibdir)/libc.so
$(slibdir)/libc.so: $(common-objpfx)libc.so; $(do-install-program)
endif
ifneq (,$(versioned))
# Produce three sets of rules as above for all the smaller versioned libraries.
define o-iterator-doit
$(libdir)/$o: $(libdir)/$o$($o-version); $$(make-link)
endef
object-suffixes-left := $(versioned)
include $(o-iterator)
# Make symlinks in the build directory, because the versioned names might
# be referenced by a DT_NEEDED in another library.
define o-iterator-doit
$(objpfx)$o$($o-version): $(objpfx)$o; $$(make-link)
endef
object-suffixes-left := $(versioned)
include $(o-iterator)
ifeq (,$($(subdir)-version))
define o-iterator-doit
$(libdir)/$o$($o-version): $(libdir)/$(o:.so=)-$(version).so; $$(make-link)
endef
object-suffixes-left := $(versioned)
include $(o-iterator)
define o-iterator-doit
$(libdir)/$(o:.so=)-$(version).so: $(objpfx)$o; $$(do-install-program)
endef
object-suffixes-left := $(versioned)
include $(o-iterator)
else
define o-iterator-doit
$(libdir)/$o$($o-version): $(libdir)/$(o:.so=)-$($(subdir)-version).so;
$$(make-link)
endef
object-suffixes-left := $(versioned)
include $(o-iterator)
define o-iterator-doit
$(libdir)/$(o:.so=)-$($(subdir)-version).so: $(objpfx)$o;
$$(do-install-program)
endef
object-suffixes-left := $(versioned)
include $(o-iterator)
endif
endif
define do-install-so
$(do-install-program)
$(patsubst %,ln -s -f $(@F) $(@D)/$(patsubst %$*.so,%,$(<F))$(libprefix)$*.so,\
$(filter-out %.so,$@))
endef
so-versions := $(sort $(foreach so,$(install-lib.so),.so$($(so)-version)))
$(foreach v,$(so-versions),\
$(libdir)/lib$(libprefix)%$v): $(common-objpfx)lib%.so
$(do-install-program)
$(foreach v,$(sort $(foreach so,$(install-lib.so),.so$($(so)-version))),\
$(do-install-so)
$(foreach v,$(so-versions),\
$(libdir)/$(libprefix)%$v): $(common-objpfx)%.so
$(do-install-program)
$(do-install-so)
endif
ifdef install-bin
@@ -548,28 +751,6 @@ install-no-libc.a-nosubdir: install-headers-nosubdir install-data-nosubdir\
install-others-nosubdir install-sbin-nosubdir
install: install-no-libc.a-nosubdir
ifeq (yes,$(build-shared))
# Pattern rule to build a shared object from an archive of PIC objects.
# This must come after the installation rules so Make doesn't try to
# build shared libraries in place from the installed *_pic.a files.
# $(LDLIBS-%.so) may contain -l switches to generate run-time dependencies
# on other shared objects.
lib%.so: lib%_pic.a
$(LINK.o) -shared -o $@ -Wl,-soname \
-Wl,lib$(libprefix)$(notdir $*).so$($(@F)-version) \
$(LDFLAGS.so) $(LDFLAGS-$(notdir $*).so) \
-L$(firstword $(objdir) .) -L$(common-objpfx:%/=%) \
$(LDLIBS-$(notdir $*).so) -Wl,--whole-archive $< \
# Don't try to use -lc when making libc.so itself.
# Also omits crti.o and crtn.o, which we do not want
# since we define our own `.init' section specially.
LDFLAGS-c.so = -nostdlib -nostartfiles
# Give libc.so an entry point and make it directly runnable itself.
LDFLAGS-c.so += -Wl,-dynamic-linker -Wl,/lib/ld.so -e __libc_print_version
endif
# Command to compile $< in $(objdir) using the native libraries.
define native-compile
cwd=`pwd`; cd $(@D); $(BUILD_CC) $(BUILD_CFLAGS) \
@@ -589,8 +770,13 @@ BUILD_CFLAGS = -include $(common-objpfx)config.h
check: tests
.PHONY: TAGS
TAGS: distinfo $(..)MakeTAGS
$(MAKE) $(addprefix -f ,$^)
TAGS: $(common-objpfx)distinfo-$(subdir) $(..)MakeTAGS
$(MAKE) $(addprefix -f ,$^) $@
$(..)po/%.pot: $(common-objpfx)distinfo-$(subdir) $(..)MakeTAGS FORCE
$(MAKE) $(addprefix -f ,$(filter-out FORCE,$^)) $@
FORCE:
.PHONY: echo-headers
echo-headers:
@@ -609,17 +795,18 @@ common-mostlyclean:
$(addsuffix .o,$(tests) $(others)) \
$(addsuffix .out,$(tests)))
-rm -f $(addprefix $(objpfx),$(extra-objs) $(install-lib))
-rm -f core $(objpfx)stub-$(subdir)
-rm -f core $(common-objpfx)stub-$(subdir)
$(rmobjs)
define rmobjs
$(foreach o,$(object-suffixes),
-rm -f $(addprefix $(objpfx),stamp$o-$(subdir)) $(objects:.o=$o))
-rm -f $(addprefix $(objpfx),stamp$o-$(subdir)) $(o-objects))
endef
# Also remove the dependencies and generated source files.
common-clean: common-mostlyclean
-rm -f $(objpfx)depend-$(subdir) $(+depfiles)
-rm -f $(addprefix $(objpfx),$(generated))
-rm -f $(addprefix $(objpfx),$(generated)) $(+depfiles)
-rm -f $(addprefix $(common-objpfx),$(common-generated))
-rm -f $(common-objpfx)distinfo-$(subdir)
# Produce a file `stub-$(subdir)' which contains `#define __stub_FUNCTION'
# for each function which is a stub. We grovel over all the .d files
@@ -631,18 +818,18 @@ stubs: $(common-objpfx)stub-$(subdir)
s = $(sysdep_dir)/stub
$(common-objpfx)stub-$(subdir): $(+depfiles)
# Use /dev/null since `...` might expand to empty.
s=`cd $s; /bin/pwd`; \
$(patsubst %,cd %;,$(objdir)) \
sed -n 's/^stub_warning *(\([^)]*\).*$$/#define __stub_\1/p' \
`sed -n 's@^.*$s/\([a-z0-9_-]*\.c\).*$$@'"$$s"/'\1@p' \
$(patsubst $(objpfx)%,%,$^) /dev/null` \
/dev/null > $@T
(s=`cd $s; /bin/pwd`; \
$(patsubst %/,cd %;,$(objpfx)) \
sed -n 's/^stub_warning *(\([^)]*\).*$$/#define __stub_\1/p' \
`sed -n 's@^.*$s/\([a-z0-9_-]*\.c\).*$$@'"$$s"/'\1@p' \
$(patsubst $(objpfx)%,%,$^) /dev/null` \
/dev/null) > $@T
mv -f $@T $@
# Make the distribution tar file.
.PHONY: dist
dist: distinfo $(..)Make-dist
dist: $(common-objpfx)distinfo-$(subdir) $(..)Make-dist
$(MAKE) -f $< -f $(word 2,$^) $(Make-dist-args)
# Avoid depending on source files found in sysdeps dirs,
@@ -653,16 +840,23 @@ dist: $(filter-out %.c %.S %.s,$(distribute))
# environment get too large. Instead, we write all the information into
# a generated makefile fragment `distinfo', and then include it with -f in
# the sub-make that makes the distribution (above).
distinfo: Makefile $(..)Makerules
$(common-objpfx)distinfo-$(subdir): Makefile $(..)Makerules
$(distinfo-vars)
mv -f $@.new $@
.PHONY: subdir_distinfo distinfo
subdir_distinfo: distinfo
distinfo: $(common-objpfx)distinfo-$(subdir)
define distinfo-vars
rm -f $@.new
$(foreach var,subdir sources elided-routines headers distribute \
dont_distribute generated others tests,
echo >> $@.new '$(var) := $($(var))')
echo >> $@.new 'sources := $$(sources) $$(addsuffix .c,$$(elided-routines))'
echo > $@.new 'subdir := $(subdir)'
$(foreach var,subdir-dirs sources elided-routines sysdep_routines \
headers sysdep_headers distribute dont_distribute generated \
others tests extra-libs $(extra-libs:%=%-routines) \
versioned \
$(addprefix install-,lib lib.so data bin sbin others),
echo >> $@.new '$(subdir)-$(var) := $($(var))'
echo >> $@.new '$(var) = $$($(subdir)-$(var))')
endef
ifneq (,$(strip $(gpl2lgpl)))
+134 -15
View File
@@ -1,11 +1,15 @@
GNU C Library NEWS -- history of user-visible changes. 27 March 1995
GNU C Library NEWS -- history of user-visible changes. 25 August 1996
Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
See the end for copying conditions.
Please send GNU C library bug reports to bug-glibc@prep.ai.mit.edu.
Version 1.10
Version 2.0
* GNU extensions are no longer declared by default. To enable them you
must define the macro `_GNU_SOURCE' in your program or compile with
`-D_GNU_SOURCE'.
* The library has changed from using GNU ld symbol aliases to using weak
symbols where available. The ELF object file format supports weak
@@ -16,17 +20,41 @@ Version 1.10
of many files which contained only symbol aliases, reducing the size of
the source and the compiled library; many other files were renamed to
less cryptic names previously occupied by the symbol alias files.
There is a new header file <elf.h> and new library `-lelf' for
programs which operate on files in the ELF format.
There is a new header file <elf.h> for programs which operate on
files in the ELF format.
* Converted to Autoconf version 2, so `configure' has more options.
Run `configure --help' to see the details.
* The library can now be configured to build profiling, highly-optimized
(but undebuggable), and/or shared libraries (ELF with GNU ld only).
The `--enable-profile', `--enable-omitfp', and `--enable-shared'
options to `configure' enable building these extra libraries.
The shared library is built by default when using both ELF and GNU ld.
(but undebuggable), and/or shared libraries (ELF with GNU ld only). The
`--enable-profile', `--enable-omitfp', and `--enable-shared' options to
`configure' enable building these extra libraries. The shared library is
built by default when using both ELF and GNU ld. When shared libraries
are enabled, the new library `-ldl' is available for arbitrary run-time
loading of shared objects; its interface is defined in <dlfcn.h>. The
new header file <link.h> gives access to the internals of the run-time
dynamic linker, `ld.so'.
* The C library now provides the run-time support code for profiling
executables compiled with `-pg'. Programs can control the profiling code
through the interface in <sys/gmon.h>. The `gmon.out' files written by
the GNU C library can be read only by GNU `gprof' (from GNU binutils);
the support for this file format was contributed by David Mosberger-Tang.
* The math code has been replaced with a math library based on fdlibm from
Sun, and modified by JT Conklin with i387 support and by Ian Taylor with
`float' functions. The math functions now reside in a separate library,
so programs using them will need to use `-lm' their linking commands.
* Ulrich Drepper has contributed support for an `/etc/nsswitch.conf'
mechanism similar to that found in Solaris 2. This is now used for the
group, passwd, hosts, networks, services, protocols, and rpc databases.
The `nsswitch.conf' file controls what services are used for each
individual database. This works by loading shared libraries with names
specified in `nsswitch.conf', so service modules can be changed or added at
any time without even relinking any program. A future release of the
separate NYS package will provide NIS/YP and NIS+ modules for this interface.
* The new functions `strtoq' and `strtouq' parse integer values from
strings, like `strtol' and `strtoul', but they return `long long int' and
@@ -44,7 +72,12 @@ Version 1.10
* The new header <langinfo.h> defines an interface for accessing
various locale-dependent data (using the locale chosen with `setlocale').
* You can now use positional parameter specifications in format strings
* Ulrich Drepper has contributed a new suite of functions for operation on
wide-character and multibyte-character strings, in <wcstr.h> and <mbstr.h>;
and classification and case conversion of wide characters, in <wctype.h>.
These new functions are intended to conform to the ISO C specification.
* You can now use positional parameter specifications in format strings
for the `printf' and `scanf' families of functions. For example,
`printf ("Number %2$d, Mr %1$s\n", "Jones", 6);'' prints
``Number 6, Mr Jones''. This is mainly useful when providing different
@@ -71,11 +104,13 @@ Version 1.10
* The new header file <fts.h> and suite of functions simplify programs that
operate on directory trees. This code comes from 4.4 BSD.
* The resolver code has been updated from the BIND-4.9.3-BETA14 release.
* The resolver code has been updated from the BIND 4.9.5-T4B release.
* The new function `malloc_find_object_address' finds the starting address
of a malloc'd block, given any address within the block. This can be
useful for debugging.
of a malloc'd block, given any address within the block;
`malloc_object_allocated_size' returns the size of an allocated block;
and `malloc_walk' lets you walk through all allocated blocks. These can
be useful for debugging; see <malloc.h> for the interfaces.
* There is a new malloc debugging hook `__memalign_hook'.
@@ -103,6 +138,90 @@ Version 1.10
functions for maintaining the login-record files (primarily of use to
system programs such as `login'), and convenient functions for
allocating and initializing a pseudo-terminal (pty) device.
* Ulrich Drepper has contributed new support for System V style
shared memory and IPC on systems that support it.
* Ulrich Drepper has contributed several miscellaneous new functions found
in System V: The `hsearch' family of functions provide an effective
implementation of hash tables; `a64l' and `l64a' provide a very simple
binary to ASCII mapping; `drand48' and friends provide a 48-bit random
number generator.
* Ulrich Drepper has contributed new reentrant counterparts for the
`random' and `hsearch' families of functions; `random_r', `hsearch_r', etc.
* Ulrich Drepper has contributed new, highly-optimized versions of several
string functions for the i486/Pentium family of processors.
* Ulrich Drepper has updated the Linux-specific code, based largely
on work done in Hongjiu Lu's version of GNU libc for Linux.
The GNU library now supports Linux versions 1.3.29 and later,
using the ELF object file format (i[345]86-*-linux).
* Andreas Schwab has ported the C library to Linux/m68k (m68k-*-linux).
* David Mosberger-Tang has ported the C library to Linux/Alpha (alpha-*-linux).
Richard Henderson contributed the dynamic linking support for ELF/Alpha.
* Ulrich Drepper has contributed a new set of message catalog functions to
support multiple languages using the <libintl.h> interface, for use with
his new package GNU gettext. Translation volunteers have contributed
catalogs of the library's messages in Spanish, German, and Korean.
* For compatibility with XPG4, Ulrich Drepper has contributed the `gencat'
program and the `catgets' function for reading the catalog files it
creates. (The <libintl.h> interface is preferred; we include the
<nl_types.h> interface using `catgets' only for source compatibility with
programs already written to use it.)
* New header file <values.h> gives SVID-compatible names for <limits.h>
constants.
* Various new macros, declarations, and small header files for compatibility
with 4.4 BSD.
* New function `group_member' is a convenient way to check if a process has
a given effective group ID.
* When using GCC 2.7 and later, the socket functions are now declared in a
special way so that passing an argument of type `struct sockaddr_in *',
`struct sockaddr_ns *', or `struct sockaddr_un *' instead of the generic
`struct sockaddr *' type, does not generate a type-clash warning.
* New function `error' declared in header file <error.h> is a convenient
function for printing error messages and optionally exitting; this is the
canonical function used in GNU programs. The new functions `err', `warn',
and friends in header file <err.h> are the canonical 4.4 BSD interface for
doing the same thing.
* The <glob.h> interface has several new flags from 4.4 BSD that extend the
POSIX.2 `glob' function to do ~ and {...} expansion.
* New function `unsetenv' complements `setenv' for compatibility with 4.4 BSD.
* New function `getsid' returns session ID number on systems that support it.
* We have incorporated the 4.4 BSD `db' library (version 1.85). New header
files <db.h> and <mpool.h> provide a rich set of functions for several
types of simple databases stored in memory and in files, and <ndbm.h> is
an old `ndbm'-compatbile interface using the `db' functions. Link with
`-ldb' to get these functions.
* New macro `strdupa' copies a string like `strdup', but uses local stack
space from `alloca' instead of dynamic heap space from `malloc'.
* New function `strnlen' is like `strlen' but searches only a given maximum
number of characters for the null terminator.
* New function `statfs' in header <sys/statfs.h>.
* The new <argz.h> and <envz.h> interfaces contributed by Miles Bader
provide convenient functions for operating on blocks of null-terminated
strings.
* A new suite of functions in <utmp.h> handle all the details of reading
and writing the utmp file.
Version 1.09
@@ -335,7 +454,7 @@ Version 1.04
compiler, so the C library should now work with C++ code.
* The header file <bstring.h> is gone. <string.h> now declares bcopy,
bcmp, bzero, and ffs.
bcmp, bzero, and ffs.
* Mike Haertel (of GNU e?grep and malloc fame) has written a new sorting
function which uses the `merge sort' algorithm, and is said to be
@@ -361,7 +480,7 @@ Version 1.04
----------------------------------------------------------------------
Copyright information:
Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
Permission is granted to anyone to make or distribute verbatim copies
of this document as received, in any medium, provided that the
+88
View File
@@ -0,0 +1,88 @@
Open jobs for finishing GNU libc:
---------------------------------
Status: August 1996
If you have time and talent to take over any of the jobs below please
contact <bug-glibc@prep.ai.mit.edu>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 1] Port to new platforms or test current version on formerly supported
platforms.
[ 2] Test compliance with standards. If you have access to recent
standards (IEEE, ISO, ANSI, X/Open, ...) and/or test suites you
could do some checks as the goal is to be compliant with all
standards if they do not contradict each other.
[ 3] Write translations for the GNU libc message for the so far
unsupported languages. GNU libc is fully internationalized and
users can immediately benefit from this.
Take a look at the matrix in
ftp://prep.ai.mit.edu/pub/gnu/ABOUT-NLS
for the current status (of course better use a mirror of prep).
[ 4] Write wordexp() function; this is described in POSIX.2, The
header <wordexp.h> already exists.
Implementation idea: use some functions from bash.
[ 5] Write `long double' versions of the math functions. This should be
done in collaboration with the NetBSD and FreeBSD people.
The libm is in fact fdlibm (not the same as in Linux libc).
**** Partly done. But we need someone with numerical experiences for
the rest.
[ 6] If you enjoy assembler programming (as I do --drepper :-) you might
be interested in writing optimized versions for some functions.
Especially the string handling functions can be optimized a lot.
Take a look at
Faster String Functions
Henry Spencer, University of Toronto
Usenix Winter '92, pp. 419--428
or just ask. Currently mostly i?86 optimized versions exist.
Alpha versions are on their way, so please ask before working
on this.
[ 7] Write nftw() function. Perhaps it might be good to reimplement the
ftw() function as well to share most of the code.
**** Almost done!
[ 8] Write AVL-tree based tsearch() et.al. functions. Currently only
a very simple algorithm is used.
There is a public domain version but using this would cause problems
with the assignment.
[ 9] Extend regex and/or rx to work with wide characters.
[10] Add mmap() support to malloc().
Doug Lea's malloc implementation might give some ideas. Perhaps
switching completly to his implementation is an option if it
a) can work without mmap() support (not all system GNU libc
is running on have mmap)
b) is without mmap support at least as fast as the current
implementation
c) will be extended with the current hooks and additional functions
Please contact bug-glibc@prep.ai.mit.edu before starting to avoid
duplicated work.
[11] Write access function for netmasks, bootparams, publickey, automount,
and aliases databases for nss_files and nss_db module.
The functions should be embedded in the nss scheme. This is not
hard and not all services must be supported at once.
+24 -15
View File
@@ -1,21 +1,29 @@
This directory contains the version 1.09.6 test release of the GNU C Library.
This directory contains the version 1.94 test release of the GNU C Library.
Many bugs have been fixed since the last release.
Some bugs surely remain.
As of this release, the GNU C library has been ported to the following
As of this release, the GNU C library is known to run on the following
configurations:
*-*-gnu GNU Hurd
i[3456]86-*-linux Linux-2.0 on Intel
m68k-*-linux Linux-2.0 on Motorola 680x0
alpha-*-linux Linux-2.0 on DEC Alpha
Former releases of this library (version 1.09.1 and perhaps earlier
versions) used to run on the following configurations:
alpha-dec-osf1
i386-bsd4.3
i386-force_cpu386-none
i386-gnu (for Hurd development only)
i386-isc2.2
i386-isc3
i386-sco3.2
i386-sco3.2v4
i386-sequent-bsd
i386-sysv
i386-sysv4
i[3456]86-*-bsd4.3
i[3456]86-*-isc2.2
i[3456]86-*-isc3
i[3456]86-*-sco3.2
i[3456]86-*-sco3.2v4
i[3456]86-*-sysv
i[3456]86-*-sysv4
i[3456]86-force_cpu386-none
i[3456]86-sequent-bsd
i960-nindy960-none
m68k-hp-bsd4.3
m68k-mvme135-none
@@ -28,8 +36,9 @@ configurations:
sparc-sun-solaris2
sparc-sun-sunos4
Porting the library is not hard. If you are interested in doing a port,
please get on the mailing list by sending electronic mail to
Whether this is still true for this release is unknown. Porting the
library is not hard. If you are interested in doing a port, please
get on the mailing list by sending electronic mail to
bug-glibc-request@prep.ai.mit.edu.
The GNU C library now includes Michael Glad's Ultra Fast Crypt, which
@@ -37,7 +46,7 @@ provides the Unix `crypt' function, plus some other entry points.
Because of the United States export restriction on DES implementations,
we are distributing this code separately from the rest of the C
library. There is an extra distribution tar file just for crypt; it is
called `glibc-1.09.6-crypt.tar.gz'. You can just unpack the crypt
called `glibc-1.94-crypt.tar.gz'. You can just unpack the crypt
distribution along with the rest of the C library and build; you can
also build the library without getting crypt. Users outside the USA
can get the crypt distribution via anonymous FTP from ftp.uni-c.dk
+29
View File
@@ -0,0 +1,29 @@
The following functions for the `long double' versions of the libm
function have to be written:
e_acosl.c
e_asinl.c
e_atan2l.c
e_expl.c
e_fmodl.c
e_hypotl.c
e_j0l.c
e_j1l.c
e_jnl.c
e_lgammal_r.c
e_logl.c
e_log10l.c
e_powl.c
e_rem_pio2l.c
e_sinhl.c
e_sqrtl.c
k_cosl.c
k_rem_pio2l.c
k_sinl.c
k_tanl.c
s_atanl.c
s_erfl.c
s_expm1l.c
s_log1pl.c
+22 -13
View File
@@ -2,20 +2,28 @@ This directory contains the version VERSION test release of the GNU C Library.
Many bugs have been fixed since the last release.
Some bugs surely remain.
As of this release, the GNU C library has been ported to the following
As of this release, the GNU C library is known to run on the following
configurations:
*-*-gnu GNU Hurd
i[3456]86-*-linux Linux-2.0 on Intel
m68k-*-linux Linux-2.0 on Motorola 680x0
alpha-*-linux Linux-2.0 on DEC Alpha
Former releases of this library (version 1.09.1 and perhaps earlier
versions) used to run on the following configurations:
alpha-dec-osf1
i386-bsd4.3
i386-force_cpu386-none
i386-gnu (for Hurd development only)
i386-isc2.2
i386-isc3
i386-sco3.2
i386-sco3.2v4
i386-sequent-bsd
i386-sysv
i386-sysv4
i[3456]86-*-bsd4.3
i[3456]86-*-isc2.2
i[3456]86-*-isc3
i[3456]86-*-sco3.2
i[3456]86-*-sco3.2v4
i[3456]86-*-sysv
i[3456]86-*-sysv4
i[3456]86-force_cpu386-none
i[3456]86-sequent-bsd
i960-nindy960-none
m68k-hp-bsd4.3
m68k-mvme135-none
@@ -28,8 +36,9 @@ configurations:
sparc-sun-solaris2
sparc-sun-sunos4
Porting the library is not hard. If you are interested in doing a port,
please get on the mailing list by sending electronic mail to
Whether this is still true for this release is unknown. Porting the
library is not hard. If you are interested in doing a port, please
get on the mailing list by sending electronic mail to
bug-glibc-request@prep.ai.mit.edu.
The GNU C library now includes Michael Glad's Ultra Fast Crypt, which
+44 -20
View File
@@ -1,4 +1,4 @@
# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
# Copyright (C) 1991, 92, 93, 94, 95, 96 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
@@ -38,6 +38,9 @@ export subdir := $(subdir)
.PHONY: all
all: objs lib others
others: $(addprefix $(objpfx),$(extra-objs) \
$(install-lib) $(install-bin) $(install-sbin))
ifneq "$(findstring env,$(origin headers))" ""
headers :=
endif
@@ -46,6 +49,10 @@ ifneq "$(findstring env,$(origin generated))" ""
generated :=
endif
ifneq "$(findstring env,$(origin common-generated))" ""
common-generated :=
endif
ifeq "$(strip $(headers))" ""
ifneq "$(wildcard $(subdir).h)" ""
override headers := $(subdir).h
@@ -55,24 +62,25 @@ endif
include ../Makerules
.PHONY: subdir_lib
subdir_lib: objs lib-noranlib
subdir_lib: lib-noranlib
# Some subdirs need to install a dummy library.
# They can use "$(objpfx)libfnord.a: $(dep-dummy-lib); $(make-dummy-lib)".
dep-dummy-lib = $(objpfx)dummy.o
dep-dummy-lib = $(common-objpfx)dummy.o
define make-dummy-lib
$(AR) cr$(verbose) $@ $<
endef
$(objpfx)dummy.o:
@rm -f $(@:.o=.c)
echo 'void __dummy__ () { }' > $(@:.o=.c)
$(CC) -c $(@:.o=.c) -o $@
generated := $(generated) dummy.o dummy.c
$(common-objpfx)dummy.c:
rm -f $@
echo 'void __dummy__ () { }' > $@
$(common-objpfx)empty.c:
cp -f /dev/null $@
common-generated := $(common-generated) dummy.o dummy.c empty.c empty.o
# This makes all the auxilliary and test programs.
.PHONY: others tests
others: $(addprefix $(objpfx),$(others))
others: $(addprefix $(objpfx),$(others) $(extra-objs))
ifeq ($(cross-compiling),yes)
tests: $(addprefix $(objpfx),$(tests))
else
@@ -80,21 +88,23 @@ tests: $(tests:%=$(objpfx)%.out)
endif
ifneq "$(strip $(others) $(tests))" ""
$(addprefix $(objpfx),$(others) $(tests)): %: %.o $(common-objpfx)libc.a
$(addprefix $(objpfx),$(others) $(tests)): %: %.o \
$(sort $(filter $(common-objpfx)libc%,$(link-libc))) \
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
$(+link)
endif
ifneq "$(strip $(tests))" ""
# These are the implicit rules for making test outputs
# from the test programs and whatever input files are present.
$(objpfx)%.out: $(objpfx)% %.args %.input
$(dir $<)$(notdir $<) `cat $(word 2,$^)` < $(word 3,$^) > $@
$(objpfx)%.out: $(objpfx)% %.args
$(dir $<)$(notdir $<) `cat $(word 2,$^)` > $@
$(objpfx)%.out: $(objpfx)% %.input
$(dir $<)$(notdir $<) < $(word 2,$^) > $@
$(objpfx)%.out: $(objpfx)%
$(dir $<)$(notdir $<) > $@
$(objpfx)%.out: %.args $(objpfx)% %.input
$($*-ENV) $(built-program-cmd) `cat $(word 1,$^)` < $(word 3,$^) > $@
$(objpfx)%.out: %.args $(objpfx)%
$($*-ENV) $(built-program-cmd) `cat $(word 1,$^)` > $@
$(objpfx)%.out: %.input $(objpfx)%
$($*-ENV) $(built-program-cmd) < $(word 1,$^) > $@
$(objpfx)%.out: /dev/null $(objpfx)% # Make it 2nd arg for canned sequence.
$($*-ENV) $(built-program-cmd) > $@
endif # tests
.PHONY: distclean realclean subdir_distclean subdir_realclean \
@@ -112,7 +122,7 @@ subdir_echo-headers: echo-headers
.PHONY: subdir_echo-distinfo
subdir_echo-distinfo:
@echo $(addprefix +header+,$(headers)) \
$(addprefix +nodist+,$(generated) $(dont_distribute))
$(addprefix +nodist+,$(generated) $(common-generated) $(dont_distribute))
# We want to install everything except the library itself, but update all
# our portions of the library because the parent make will install it later
@@ -126,4 +136,18 @@ subdir_dist: dist
# Convenient target to update all the generated source files.
.PHONY: generated
generated: $(addprefix $(objpfx),$(generated))
generated: $(addprefix $(common-objpfx),$(common-generated)) \
$(addprefix $(objpfx),$(generated))
ifndef libc.so-version
# Undefine this because it can't work when we libc.so is unversioned.
static-only-routines =
endif
ifdef static-only-routines
# These routines are to be omitted from the shared library object,
# so we replace the PIC objects for them with the empty object file.
$(static-only-routines:%=$(objpfx)%.so): %.so: $(common-objpfx)empty.o
rm -f $@
ln $< $@
endif
Vendored
+3 -2
View File
@@ -3,7 +3,8 @@ dnl which appears in configure.in before the sysdep configure scripts are run.
dnl Each sysdep configure.in does GLIBC_PROVIDES first, to avoid any
dnl AC_REQUIREs or AC_BEFOREs duplicating their code.
dnl
define(AC_FD_MSG,4)dnl Autoconf lossage.
define(AC_FD_MSG,6)dnl Autoconf lossage.
define(AC_FD_CC,5)dnl Autoconf lossage.
AC_DEFUN([GLIBC_PROVIDES], [dnl
AC_PROVIDE([AC_PROG_INSTALL])dnl
AC_PROVIDE([AC_PROG_RANLIB])dnl
@@ -17,7 +18,7 @@ dnl
AC_DEFUN(AC_CHECK_SYMBOL, [dnl
AC_MSG_CHECKING(for $1)
AC_CACHE_VAL(ac_cv_check_symbol_$1, [dnl
AC_TRY_LINK(,
AC_TRY_LINK(,
changequote(,)dnl
extern char *$1[]; puts(*$1);,
changequote([,])dnl
+1
View File
@@ -0,0 +1 @@
#include <string/argz.h>
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+1 -1
View File
@@ -43,7 +43,7 @@ __assert_perror_fail (int errnum,
#endif
/* Print the message. */
(void) fprintf (stderr, "%s%s%s:%u: %s%sUnexpected error: %s.\n",
(void) fprintf (stderr, _("%s%s%s:%u: %s%sUnexpected error: %s.\n"),
__assert_program_name ? __assert_program_name : "",
__assert_program_name ? ": " : "",
file, line,
+2 -2
View File
@@ -38,14 +38,14 @@ CONST char *__assert_program_name;
void
DEFUN(__assert_fail, (assertion, file, line, function),
CONST char *assertion AND
CONST char *file AND unsigned int line AND CONST char *function)
CONST char *file AND unsigned int line AND CONST char *function)
{
#ifdef FATAL_PREPARE
FATAL_PREPARE;
#endif
/* Print the message. */
(void) fprintf (stderr, "%s%s%s:%u: %s%sAssertion `%s' failed.\n",
(void) fprintf (stderr, _("%s%s%s:%u: %s%sAssertion `%s' failed.\n"),
__assert_program_name ? __assert_program_name : "",
__assert_program_name ? ": " : "",
file, line,
+2 -3
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1994, 1995 Free Software Foundation, Inc.
/* Copyright (C) 1991, 92, 94, 95, 96 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
@@ -13,7 +13,7 @@ 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, 1992 Free Software Foundation, Inc., 675 Mass Ave,
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
/*
@@ -95,4 +95,3 @@ __END_DECLS
#endif /* NDEBUG. */
Executable
+45
View File
@@ -0,0 +1,45 @@
#! /bin/sh
# interlock - wrap program invocation in lock to allow
# parallel builds to work.
# Written by Tom Tromey <tromey@cygnus.com>, Aug 10 1996
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Usage:
# interlock lock-dir-name program args-to-program...
dirname="$1"
program="$2"
shift
shift
while (mkdir $dirname > /dev/null 2>&1 && exit 1 || exit 0); do
# Wait a bit.
sleep 1
done
# Race condition here: if interrupted after the loop but before this
# trap, the lock can be left around.
trap "rmdir $dirname > /dev/null 2>&1" 1 2 3 15
# We have the lock, so run the program.
$program ${1+"$@"}
ret=$?
# Release the lock.
rmdir $dirname > /dev/null 2>&1
exit $ret
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+1 -1
View File
@@ -48,7 +48,7 @@ $(objpfx)lib$(config-vendor).a: $(bare-routines:%=$(objpfx)%.o)
# from scratch each time.
rm -f $@
ifdef objdir
cd $(objdir); $(AR) cq$(verbose) $@ $(^:$(objpfx)%=%)
cd $(objpfx); $(AR) cq$(verbose) $(@:$(objpfx)%=%) $(^:$(objpfx)%=%)
else
$(AR) cq$(verbose) $@ $^
endif
+41
View File
@@ -0,0 +1,41 @@
# Copyright (C) 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.
#
# Makefile for catgets.
#
subdir := catgets
headers = nl_types.h
distribute = catgetsinfo.h config.h
routines = catgets open_catalog
others = gencat
install-bin = gencat
gencat-modules = xmalloc
# To find xmalloc.c
vpath %.c ../locale/programs
include ../Rules
$(objpfx)gencat: $(gencat-modules:%=$(objpfx)%.o)
CPPFLAGS := -DNLSPATH='"$(localedir)/%L/%N:$(localedir)/%L/LC_MESSAGES/%N:"' \
-DHAVE_CONFIG_H $(CPPFLAGS)
+163
View File
@@ -0,0 +1,163 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
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 <alloca.h>
#include <nl_types.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#include "catgetsinfo.h"
/* Open the catalog and return a descriptor for the catalog. */
nl_catd
catopen (const char *cat_name, int flag)
{
__nl_catd result;
const char *env_var;
result = (__nl_catd) malloc (sizeof (*result));
if (result == NULL)
/* We cannot get enough memory. */
return (nl_catd) -1;
result->status = closed;
result->cat_name = __strdup (cat_name);
if (result->cat_name == NULL)
{
free (result);
return (nl_catd) -1;
}
if (strchr (cat_name, '/') == NULL)
{
if (flag == NL_CAT_LOCALE)
{
env_var = getenv ("LC_ALL");
if (env_var == NULL)
{
env_var = getenv ("LC_MESSAGES");
if (env_var == NULL)
{
env_var = getenv ("LANG");
if (env_var == NULL)
env_var = "C";
}
}
}
else
{
env_var = getenv ("LANG");
if (env_var == NULL)
env_var = "C";
}
result->env_var = __strdup (env_var);
if (result->env_var == NULL)
{
free ((void *) result->cat_name);
free ((void *) result);
return (nl_catd) -1;
}
if (__secure_getenv ("NLSPATH") != NULL)
result->nlspath = __strdup (getenv ("NLSPATH"));
else
result->nlspath = __strdup (NLSPATH);
if (result->nlspath == NULL)
{
free ((void *) result->cat_name);
free ((void *) result->env_var);
free ((void *) result);
return (nl_catd) -1;
}
}
else
{
result->env_var = NULL;
result->nlspath = NULL;
}
return (nl_catd) result;
}
/* Return message from message catalog. */
char *
catgets (nl_catd catalog_desc, int set, int message, const char *string)
{
__nl_catd catalog;
size_t idx;
size_t cnt;
/* Be generous if catalog which failed to be open is used. */
if (catalog_desc == (nl_catd) -1 || ++set <= 0 || message < 0)
return (char *) string;
catalog = (__nl_catd) catalog_desc;
if (catalog->status == closed)
__open_catalog (catalog, 1);
if (catalog->status == nonexisting)
return (char *) string;
idx = ((set * message) % catalog->plane_size) * 3;
cnt = 0;
do
{
if (catalog->name_ptr[idx + 0] == (u_int32_t) set
&& catalog->name_ptr[idx + 1] == (u_int32_t) message)
return (char *) &catalog->strings[catalog->name_ptr[idx + 2]];
idx += catalog->plane_size * 3;
}
while (++cnt < catalog->plane_depth);
return (char *) string;
}
/* Return resources used for loaded message catalog. */
int
catclose (nl_catd catalog_desc)
{
__nl_catd catalog;
catalog = (__nl_catd) catalog_desc;
if (catalog->status == mmaped)
munmap ((void *) catalog->file_ptr, catalog->file_size);
else if (catalog->status == malloced)
free ((void *) catalog->file_ptr);
else if (catalog->status != closed && catalog->status != nonexisting)
return -1;
if (catalog->nlspath)
free ((void *) catalog->nlspath);
if (catalog->env_var)
free ((void *) catalog->env_var);
free ((void *) catalog);
return 0;
}
+59
View File
@@ -0,0 +1,59 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <sys/types.h>
struct catalog_obj
{
u_int32_t magic;
u_int32_t plane_size;
u_int32_t plane_depth;
/* This is in fact two arrays in one: always a pair of name and
pointer into the data area. */
u_int32_t name_ptr[0];
};
/* This structure will be filled after loading the catalog. */
typedef struct catalog_info
{
enum { closed, nonexisting, mmaped, malloced } status;
const char *cat_name;
const char *env_var;
const char *nlspath;
size_t plane_size;
size_t plane_depth;
u_int32_t *name_ptr;
const char *strings;
struct catalog_obj *file_ptr;
size_t file_size;
} *__nl_catd;
/* The magic number to signal we really have a catalog file. */
#define CATGETS_MAGIC 0x960408de
/* Prototypes for helper functions. */
void __open_catalog (__nl_catd __catalog, int __with_path);
+14
View File
@@ -0,0 +1,14 @@
#ifndef _CG_CONFIG_H
#define _CG_CONFIG_H
/* Use the internal textdomain used for libc messages. */
#define PACKAGE _libc_intl_domainname
#ifndef VERSION
/* Get libc version number. */
#include "../version.h"
#endif
#include_next <config.h>
#endif
+1041
View File
File diff suppressed because it is too large Load Diff
+48
View File
@@ -0,0 +1,48 @@
/* Copyright (C) 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. */
#ifndef _NL_TYPES_H
#define _NL_TYPES_H 1
#include <features.h>
/* The default message set used by the gencat program. */
#define NL_SETD 1
/* Value for FLAG parameter of `catgets' to say we want XPG4 compliance. */
#define NL_CAT_LOCALE 1
/* Message catalog descriptor type. */
typedef void *nl_catd;
__BEGIN_DECLS
/* Open message catalog for later use, returning descriptor. */
extern nl_catd catopen __P ((__const char *__cat_name, int __flag));
/* Return translation with NUMBER in SET of CATALOG; if not found
return STRING. */
extern char *catgets __P ((nl_catd __catalog, int __set, int __number,
__const char *__string));
/* Close message CATALOG. */
extern int catclose __P ((nl_catd __catalog));
__END_DECLS
#endif /* nl_types.h */
+263
View File
@@ -0,0 +1,263 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
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 <endian.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include "catgetsinfo.h"
#define SWAPU32(w) \
(((w) << 24) | (((w) & 0xff00) << 8) | (((w) >> 8) & 0xff00) | ((w) >> 24))
void
__open_catalog (__nl_catd catalog, int with_path)
{
int fd;
struct stat st;
int swapping;
if (strchr (catalog->cat_name, '/') != NULL || !with_path)
fd = open (catalog->cat_name, O_RDONLY);
else
{
const char *run_nlspath = catalog->nlspath;
#define ENOUGH(n) \
if (bufact + (n) >=bufmax) \
{ \
char *old_buf = buf; \
bufmax += 256 + (n); \
buf = (char *) alloca (bufmax); \
memcpy (buf, old_buf, bufact); \
}
/* The RUN_NLSPATH variable contains a colon separated list of
descriptions where we expect to find catalogs. We have to
recognize certain % substitutions and stop when we found the
first existing file. */
char *buf;
size_t bufact;
size_t bufmax;
buf = NULL;
bufmax = 0;
fd = -1;
while (*run_nlspath != '\0')
{
bufact = 0;
while (*run_nlspath != ':' && *run_nlspath != '\0')
if (*run_nlspath == '%')
{
const char *tmp;
++run_nlspath; /* We have seen the `%'. */
switch (*run_nlspath++)
{
case 'N':
/* Use the catalog name. */
ENOUGH (strlen (catalog->cat_name));
bufact = __stpcpy (&buf[bufact], catalog->cat_name) - buf;
break;
case 'L':
/* Use the current locale category value. */
ENOUGH (strlen (catalog->env_var));
bufact = __stpcpy (&buf[bufact], catalog->env_var) - buf;
break;
case 'l':
/* Use language element of locale category value. */
tmp = catalog->env_var;
do
{
ENOUGH (1);
buf[bufact++] = *tmp++;
}
while (*tmp != '\0' && *tmp != '_' && *tmp != '.');
break;
case 't':
/* Use territory element of locale category value. */
tmp = catalog->env_var;
do
++tmp;
while (*tmp != '\0' && *tmp != '_' && *tmp != '.');
if (*tmp == '_')
{
++tmp;
do
{
ENOUGH (1);
buf[bufact++] = *tmp;
}
while (*tmp != '\0' && *tmp != '.');
}
break;
case 'c':
/* Use code set element of locale category value. */
tmp = catalog->env_var;
do
++tmp;
while (*tmp != '\0' && *tmp != '.');
if (*tmp == '.')
{
++tmp;
do
{
ENOUGH (1);
buf[bufact++] = *tmp;
}
while (*tmp != '\0');
}
break;
case '%':
ENOUGH (1);
buf[bufact++] = '%';
break;
default:
/* Unknown variable: ignore this path element. */
bufact = 0;
while (*run_nlspath != '\0' && *run_nlspath != ':')
++run_nlspath;
break;
}
}
else
{
ENOUGH (1);
buf[bufact++] = *run_nlspath++;
}
ENOUGH (1);
buf[bufact] = '\0';
if (bufact != 0)
{
fd = __open (buf, O_RDONLY);
if (fd >= 0)
break;
}
++run_nlspath;
}
}
if (fd < 0 || __fstat (fd, &st) < 0)
{
catalog->status = nonexisting;
return;
}
#ifndef MAP_COPY
/* Linux seems to lack read-only copy-on-write. */
#define MAP_COPY MAP_PRIVATE
#endif
#ifndef MAP_FILE
/* Some systems do not have this flag; it is superfluous. */
#define MAP_FILE 0
#endif
#ifndef MAP_INHERIT
/* Some systems might lack this; they lose. */
#define MAP_INHERIT 0
#endif
catalog->file_size = st.st_size;
catalog->file_ptr =
(struct catalog_obj *) __mmap (NULL, st.st_size, PROT_READ,
MAP_FILE|MAP_COPY|MAP_INHERIT, fd, 0);
if (catalog->file_ptr != (struct catalog_obj *) -1)
/* Tell the world we managed to mmap the file. */
catalog->status = mmaped;
else
{
/* mmap failed perhaps because the system call is not
implemented. Try to load the file. */
size_t todo;
catalog->file_ptr = malloc (st.st_size);
if (catalog->file_ptr == NULL)
{
catalog->status = nonexisting;
return;
}
todo = st.st_size;
/* Save read, handle partial reads. */
do
{
size_t now = __read (fd, (((char *) &catalog->file_ptr)
+ (st.st_size - todo)), todo);
if (now == 0)
{
free ((void *) catalog->file_ptr);
catalog->status = nonexisting;
return;
}
todo -= now;
}
while (todo > 0);
catalog->status = malloced;
}
/* We don't need the file anymore. */
__close (fd);
/* Determine whether the file is a catalog file and if yes whether
it is written using the correct byte order. Else we have to swap
the values. */
if (catalog->file_ptr->magic == CATGETS_MAGIC)
swapping = 0;
else if (catalog->file_ptr->magic == SWAPU32 (CATGETS_MAGIC))
swapping = 1;
else
{
/* Illegal file. Free he resources and mark catalog as not
usable. */
if (catalog->status == mmaped)
__munmap ((void *) catalog->file_ptr, catalog->file_size);
else
free (catalog->file_ptr);
catalog->status = nonexisting;
return;
}
#define SWAP(x) (swapping ? SWAPU32 (x) : (x))
/* Get dimensions of the used hashing table. */
catalog->plane_size = SWAP (catalog->file_ptr->plane_size);
catalog->plane_depth = SWAP (catalog->file_ptr->plane_depth);
/* The file contains two versions of the pointer tables. Pick the
right one for the local byte order. */
#if __BYTE_ORDER == __LITTLE_ENDIAN
catalog->name_ptr = &catalog->file_ptr->name_ptr[0];
#elif __BYTE_ORDER == __BIG_ENDIAN
catalog->name_ptr = &catalog->file_ptr->name_ptr[catalog->plane_size
* catalog->plane_depth
* 3];
#else
# error Cannot handle __BYTE_ORDER byte order
#endif
/* The rest of the file contains all the strings. They are
addressed relative to the position of the first string. */
catalog->strings =
(const char *) &catalog->file_ptr->name_ptr[catalog->plane_size
* catalog->plane_depth * 3 * 2];
}
+6
View File
@@ -18,3 +18,9 @@
#ifdef sun. */
#undef sun
/* The source code copied from BIND for inet_addr/inet_aton
doesn't actually define the functions without these macros. */
#define NEED_INETADDR 1
#define NEED_INETATON 1
+117 -44
View File
@@ -1,6 +1,6 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
# Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -14,7 +14,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@@ -51,17 +51,19 @@ trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
# Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
alpha:OSF1:V*:*)
# After 1.2, OSF1 uses "V1.3" for uname -r.
echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'`
exit 0 ;;
alpha:OSF1:*:*)
# A Vn.n version is a released version.
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
echo alpha-dec-osf${UNAME_RELEASE}
exit 0 ;;
echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
exit 0 ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
exit 0 ;;
Amiga*:UNIX_System_V:4.0:*)
echo m68k-cbm-sysv4
exit 0;;
amiga:NetBSD:*:*)
echo m68k-cbm-netbsd${UNAME_RELEASE}
exit 0 ;;
@@ -79,7 +81,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
i86pc:SunOS:5.*:*)
echo i386-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
sun4*:SunOS:6*:*)
# According to config.sub, this is the proper way to canonicalize
@@ -114,12 +116,31 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
VAX*:ULTRIX*:*:*)
echo vax-dec-ultrix${UNAME_RELEASE}
exit 0 ;;
mips:*:4*:UMIPS)
echo mips-mips-riscos4sysv
exit 0 ;;
mips:*:5*:RISCos)
mips:*:*:UMIPS | mips:*:*:RISCos)
sed 's/^ //' << EOF >dummy.c
int main (argc, argv) int argc; char **argv; {
#if defined (host_mips) && defined (MIPSEB)
#if defined (SYSTYPE_SYSV)
printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
#endif
#if defined (SYSTYPE_SVR4)
printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
#endif
#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
#endif
#endif
exit (-1);
}
EOF
${CC-cc} dummy.c -o dummy && ./dummy "${UNAME_RELEASE}" \
&& rm dummy.c dummy && exit 0
rm -f dummy.c dummy
echo mips-mips-riscos${UNAME_RELEASE}
exit 0 ;;
Night_Hawk:Power_UNIX:*:*)
echo powerpc-harris-powerunix
exit 0 ;;
m88k:CX/UX:7*:*)
echo m88k-harris-cxux7
exit 0 ;;
@@ -130,12 +151,17 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
echo m88k-motorola-sysv3
exit 0 ;;
AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures
UNAME_PROCESSOR=`/usr/bin/uname -p`
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then
echo m88k-dg-dgux${UNAME_RELEASE}
else
echo m88k-dg-dguxbcs${UNAME_RELEASE}
fi
else echo i586-dg-dgux${UNAME_RELEASE}
fi
exit 0 ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
echo m88k-dolphin-sysv3
@@ -201,7 +227,7 @@ EOF
echo romp-ibm-bsd4.4
exit 0 ;;
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
exit 0 ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*)
echo rs6000-bull-bosx
@@ -219,7 +245,7 @@ EOF
case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;;
9000/7?? | 9000/8?7 ) HP_ARCH=hppa1.1 ;;
9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
9000/8?? ) HP_ARCH=hppa1.0 ;;
esac
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
@@ -255,13 +281,13 @@ EOF
rm -f dummy.c dummy
echo unknown-hitachi-hiuxwe2
exit 0 ;;
9000/7??:4.3bsd:*:* | 9000/8?7:4.3bsd:*:* )
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
echo hppa1.1-hp-bsd
exit 0 ;;
9000/8??:4.3bsd:*:*)
echo hppa1.0-hp-bsd
exit 0 ;;
hp7??:OSF1:*:* | hp8?7:OSF1:*:* )
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
echo hppa1.1-hp-osf
exit 0 ;;
hp8??:OSF1:*:*)
@@ -294,8 +320,10 @@ EOF
CRAY*Y-MP:*:*:*)
echo ymp-cray-unicos${UNAME_RELEASE}
exit 0 ;;
CRAY*C90:*:*:*)
echo c90-cray-unicos${UNAME_RELEASE}
CRAY*[A-Z]90:*:*:*)
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
exit 0 ;;
CRAY-2:*:*:*)
echo cray2-cray-unicos
@@ -304,7 +332,7 @@ EOF
echo m68k-hp-netbsd${UNAME_RELEASE}
exit 0 ;;
i[34]86:BSD/386:*:* | *:BSD/OS:*:*)
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
exit 0 ;;
*:FreeBSD:*:*)
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
@@ -312,33 +340,60 @@ EOF
*:NetBSD:*:*)
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
exit 0 ;;
i*:CYGWIN*:*)
echo i386-pc-cygwin32
exit 0 ;;
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin32
exit 0 ;;
prep*:SunOS:5.*:*)
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
*:GNU:*:*)
echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit 0 ;;
*:Linux:*:*)
# Systems without a BFD linker
if test -d /usr/lib/ldscripts/. ; then
:
# The BFD linker knows what the default object file format is, so
# first see if it will tell us.
ld_help_string=`ld --help 2>&1`
if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then
echo "${UNAME_MACHINE}-pc-linux-gnu" ; exit 0
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then
echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then
echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then
echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then
echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf32ppc"; then
echo "powerpc-unknown-linux-gnu" ; exit 0
elif test "${UNAME_MACHINE}" = "alpha" ; then
echo alpha-unknown-linux-gnu ; exit 0
elif test "${UNAME_MACHINE}" = "sparc" ; then
echo sparc-unknown-linux-gnu ; exit 0
else
echo "${UNAME_MACHINE}-unknown-linuxoldld"
exit 0
fi
# Determine whether the default compiler is a.out or elf
cat >dummy.c <<EOF
# Either a pre-BFD a.out linker (linux-gnuoldld) or one that does not give us
# useful --help. Gcc wants to distinguish between linux-gnuoldld and linux-gnuaout.
test ! -d /usr/lib/ldscripts/. \
&& echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
# Determine whether the default compiler is a.out or elf
cat >dummy.c <<EOF
main(argc, argv)
int argc;
char *argv[];
{
#ifdef __ELF__
printf ("%s-unknown-linux\n", argv[1]);
printf ("%s-pc-linux-gnu\n", argv[1]);
#else
printf ("%s-unknown-linuxaout\n", argv[1]);
printf ("%s-pc-linux-gnuaout\n", argv[1]);
#endif
return 0;
}
EOF
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
rm -f dummy.c dummy;;
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
rm -f dummy.c dummy
fi ;;
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
# are messed up and put the nodename in both sysname and nodename.
i[34]86:DYNIX/ptx:4*:*)
@@ -348,23 +403,25 @@ EOF
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
else
echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
fi
exit 0 ;;
i[34]86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
echo ${UNAME_MACHINE}-unknown-isc$UNAME_REL
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
elif /bin/uname -X 2>/dev/null >/dev/null ; then
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
else
echo ${UNAME_MACHINE}-unknown-sysv32
echo ${UNAME_MACHINE}-pc-sysv32
fi
exit 0 ;;
Intel:Mach:3*:*)
echo i386-unknown-mach3
echo i386-pc-mach3
exit 0 ;;
paragon:*:*:*)
echo i860-intel-osf1
@@ -382,25 +439,31 @@ EOF
exit 0 ;;
M680[234]0:*:R3V[567]*:*)
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
UNAME_REL=4.3
if test -f /etc/.relid; then
UNAME_REL=4.3.`awk '{ print $3 }' /etc/.relid`
fi
uname -p 2>/dev/null | grep 86 >/dev/null \
&& echo i486-ncr-sysv4.3 && exit 0 ;;
&& echo i486-ncr-sysv$UNAME_REL && exit 0
uname -p 2>/dev/null | /bin/grep entium >/dev/null \
&& echo i586-ncr-sysv$UNAME_REL && exit 0 ;;
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
uname -p 2>/dev/null | grep 86 >/dev/null \
&& echo i486-ncr-sysv4 && exit 0 ;;
m680[234]0:LynxOS:2.2*:*)
m680[234]0:LynxOS:2.[23]*:*)
echo m68k-lynx-lynxos${UNAME_RELEASE}
exit 0 ;;
mc68030:UNIX_System_V:4.*:*)
echo m68k-atari-sysv4
exit 0 ;;
i[34]86:LynxOS:2.2*:*)
i[34]86:LynxOS:2.[23]*:*)
echo i386-lynx-lynxos${UNAME_RELEASE}
exit 0 ;;
TSUNAMI:LynxOS:2.2*:*)
TSUNAMI:LynxOS:2.[23]*:*)
echo sparc-lynx-lynxos${UNAME_RELEASE}
exit 0 ;;
rs6000:LynxOS:2.2*:*)
rs6000:LynxOS:2.[23]*:*)
echo rs6000-lynx-lynxos${UNAME_RELEASE}
exit 0 ;;
RM*:SINIX-*:*:*)
@@ -414,6 +477,16 @@ EOF
echo ns32k-sni-sysv
fi
exit 0 ;;
mc68*:A/UX:*:*)
echo m68k-apple-aux${UNAME_RELEASE}
exit 0 ;;
R3000:*System_V*:*:*)
if [ -d /usr/nec ]; then
echo mips-nec-sysv${UNAME_RELEASE}
else
echo mips-unknown-sysv${UNAME_RELEASE}
fi
exit 0 ;;
esac
#echo '(No uname command or uname output not recognized.)' 1>&2
@@ -474,7 +547,7 @@ main ()
#endif
#if defined (__386BSD__)
printf ("i386-unknown-bsd\n"); exit (0);
printf ("i386-pc-bsd\n"); exit (0);
#endif
#if defined (sequent)
+46 -12
View File
@@ -4,12 +4,22 @@
#undef HAVE_GNU_LD
/* Define if using ELF, which supports weak symbols.
This implies HAVE_WEAK_SYMBOLS; set by --with-elf. */
This implies HAVE_ASM_WEAK_DIRECTIVE and NO_UNDERSCORES; set by
--with-elf. */
#undef HAVE_ELF
/* Define if weak symbols are available in the assembler and
linker being used. Set by --with-weak-symbols. */
#undef HAVE_WEAK_SYMBOLS
/* Define if C symbols are asm symbols. Don't define if C symbols
have a `_' prepended to make the asm symbol. */
#undef NO_UNDERSCORES
/* Define if weak symbols are available via the `.weak' directive. */
#undef HAVE_ASM_WEAK_DIRECTIVE
/* Define if weak symbols are available via the `.weakext' directive. */
#undef HAVE_ASM_WEAKEXT_DIRECTIVE
/* Define if not using ELF, but `.init' and `.fini' sections are available. */
#undef HAVE_INITFINI
/* Define if using the GNU assembler, gas. */
#undef HAVE_GNU_AS
@@ -21,18 +31,25 @@
declaring a symbol global (default `.globl'). */
#undef ASM_GLOBAL_DIRECTIVE
/* ELF has weak symbols, and with GNU ld a.out does too. */
#ifndef HAVE_WEAK_SYMBOLS
#if defined (HAVE_ELF) || defined (HAVE_GNU_LD)
#define HAVE_WEAK_SYMBOLS
#endif
#endif
/* */
/* These symbols might be defined by some sysdeps configures. */
/* Define to use GNU libio instead of GNU stdio.
This is defined by configure under --enable-libio. */
#undef USE_IN_LIBIO
/*
*/
#ifndef _LIBC
/* These symbols might be defined by some sysdeps configures.
They are used only in miscellaneous generator programs, not
in compiling libc itself. */
/* sysdeps/generic/configure.in */
#undef HAVE_PSIGNAL
/* sysdeps/unix/configure.in */
#undef HAVE_STRERROR
/* sysdeps/unix/common/configure.in */
#undef HAVE_SYS_SIGLIST
#undef HAVE__SYS_SIGLIST
@@ -42,3 +59,20 @@
#undef HAVE__CTYPE__
#undef HAVE__CTYPE
#undef HAVE__LOCP
#endif
/*
*/
#ifdef _LIBC
/* The zic and zdump programs need these definitions. */
#define HAVE_STRERROR 1
/* The locale code needs these definitions. */
#define HAVE_REGEX 1
#endif
+15 -3
View File
@@ -8,29 +8,41 @@ exec_prefix = @exec_prefix@
# System configuration.
config-machine = @host_cpu@
base-machine = @base_machine@
config-vendor = @host_vendor@
config-os = @host_os@
config-sysdirs = @sysnames@
config-defines = @DEFS@
defines = @DEFINES@
elf = @elf@
have-initfini = @libc_cv_have_initfini@
have-no-whole-archive = @libc_cv_ld_no_whole_archive@
have-no-exceptions = @libc_cv_gcc_no_exceptions@
# Configuration options.
gnu-as = @gnu_as@
gnu-ld = @gnu_ld@
elf = @elf@
weak-symbols = @weak@
build-shared = @shared@
build-profile = @profile@
build-omitfp = @omitfp@
stdio = @stdio@
add-ons = @subdirs@
# Build tools.
CC = @CC@
BUILD_CC = @BUILD_CC@
CFLAGS = @CFLAGS@
AR = @AR@
RANLIB = @RANLIB@
AS = $(CC) -c
# Installation tools.
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
LN_S = @LN_S@
MSGFMT = @MSGFMT@
# More variables may be inserted below by configure.
Vendored
+92 -38
View File
@@ -1,9 +1,9 @@
#! /bin/sh
# Configuration validation subroutine script, version 1.1.
# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
# Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
# can handle that machine. It does not imply ALL GNU software can.
# can handle that machine. It does not imply ALL GNU software can.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -41,6 +41,8 @@
# The goal of this file is to map all the various variations of a given
# machine specification into a single specification in the form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or in some cases, the newer four-part form:
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.
if [ x$1 = x ]
@@ -62,11 +64,21 @@ case $1 in
;;
esac
# Separate what the user gave into CPU-COMPANY and OS (if any).
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
if [ $basic_machine != $1 ]
then os=`echo $1 | sed 's/.*-/-/'`
else os=; fi
# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
linux-gnu*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;;
*)
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
if [ $basic_machine != $1 ]
then os=`echo $1 | sed 's/.*-/-/'`
else os=; fi
;;
esac
### Let's recognize common machines as not being operating systems so
### that things like config.sub decstation-3100 work. We also
@@ -81,38 +93,43 @@ case $os in
-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp )
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-apple)
os=
basic_machine=$1
;;
-hiux*)
os=-hiuxwe2
;;
-sco5)
os=sco3.2v5
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco4)
os=-sco3.2v4
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco3.2.[4-9]*)
os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco3.2v[4-9]*)
# Don't forget version if it is 3.2v4 or newer.
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco*)
os=-sco3.2v2
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-isc)
os=-isc2.2
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-clix*)
basic_machine=clipper-intergraph
;;
-isc*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-lynx*)
os=-lynxos
@@ -123,28 +140,37 @@ case $os in
-windowsnt*)
os=`echo $os | sed -e 's/windowsnt/winnt/'`
;;
-psos*)
os=-psos
;;
esac
# Decode aliases for certain CPU-COMPANY combinations.
case $basic_machine in
# Recognize the basic CPU types without company name.
# Some are omitted here because they have special meanings below.
tahoe | i[345]86 | i860 | m68k | m68000 | m88k | ns32k | arm \
tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \
| arme[lb] | pyramid \
| tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \
| alpha | we32k | ns16k | clipper | sparclite | i370 | sh \
| powerpc | powerpcle | sparc64 | 1750a | dsp16xx | mips64 | mipsel \
| alpha | we32k | ns16k | clipper | i370 | sh \
| powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \
| pdp11 | mips64el | mips64orion | mips64orionel \
| sparc)
| sparc | sparclet | sparclite | sparc64)
basic_machine=$basic_machine-unknown
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
# (2) the word "unknown" tends to confuse beginning users.
i[3456]86)
basic_machine=$basic_machine-pc
;;
# Object if more than one company name word.
*-*-*)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1
;;
# Recognize the basic CPU types with company name.
vax-* | tahoe-* | i[345]86-* | i860-* | m68k-* | m68000-* | m88k-* \
vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
| sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
| none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
@@ -190,6 +216,10 @@ case $basic_machine in
basic_machine=m68k-apollo
os=-sysv
;;
aux)
basic_machine=m68k-apple
os=-aux
;;
balance)
basic_machine=ns32k-sequent
os=-dynix
@@ -222,6 +252,10 @@ case $basic_machine in
basic_machine=cray2-cray
os=-unicos
;;
[ctj]90-cray)
basic_machine=c90-cray
os=-unicos
;;
crds | unos)
basic_machine=m68k-crds
;;
@@ -308,20 +342,20 @@ case $basic_machine in
os=-mvs
;;
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
i[345]86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
i[3456]86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv32
;;
i[345]86v4*)
basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
i[3456]86v4*)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv4
;;
i[345]86v)
basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
i[3456]86v)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv
;;
i[345]86sol2)
basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
i[3456]86sol2)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-solaris2
;;
iris | iris4d)
@@ -419,14 +453,18 @@ case $basic_machine in
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
pentium | p5 | p6)
# We don't have specific support for the Intel Pentium (p6) followon yet, so just call it a Pentium
pentium | p5)
basic_machine=i586-intel
;;
pentium-* | p5-* | p6-*)
# We don't have specific support for the Intel Pentium (p6) followon yet, so just call it a Pentium
pentiumpro | p6)
basic_machine=i686-intel
;;
pentium-* | p5-*)
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumpro-* | p6-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
k5)
# We don't have specific support for AMD's K5 yet, so just call it a Pentium
basic_machine=i586-amd
@@ -615,6 +653,8 @@ esac
if [ x"$os" != x"" ]
then
case $os in
# First match some system type aliases
# that might get confused with valid system types.
# -solaris* is a basic system type, with this one exception.
-solaris1 | -solaris1.*)
os=`echo $os | sed -e 's|solaris1|sunos4|'`
@@ -626,24 +666,29 @@ case $os in
os=-sysv4
;;
-gnu/linux*)
os=`echo $os | sed -e 's|gnu/linux|linux|'`
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
;;
# First accept the basic system types.
# The portable systems comes first.
# Each alternative MUST END IN A *, to match a version number.
# -sysv* is not here because it comes later, after sysvr4.
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[345]* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
| -amigados* | -msdos* | -newsos* | -unicos* | -aos* \
| -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \
| -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \
| -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -netbsd* | -freebsd* | -riscix* \
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* )
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -linux-gnu*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-linux*)
os=`echo $os | sed -e 's|linux|linux-gnu|'`
;;
-sunos5*)
os=`echo $os | sed -e 's|sunos5|solaris2|'`
;;
@@ -668,6 +713,9 @@ case $os in
-ctix* | -uts*)
os=-sysv
;;
-ns2 )
os=-nextstep2
;;
# Preserve the version number of sinix5.
-sinix5.*)
os=`echo $os | sed -e 's|sinix|sysv|'`
@@ -775,6 +823,9 @@ case $basic_machine in
m88k-omron*)
os=-luna
;;
*-next )
os=-nextstep
;;
*-sequent)
os=-ptx
;;
@@ -856,9 +907,12 @@ case $basic_machine in
-ptx*)
vendor=sequent
;;
-vxworks*)
-vxsim* | -vxworks*)
vendor=wrs
;;
-aux*)
vendor=apple
;;
esac
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
;;
Vendored
+840 -249
View File
File diff suppressed because it is too large Load Diff
+293 -115
View File
@@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script.
Dnl Process this file with autoconf to produce a configure script.
AC_REVISION([$CVSid$])
AC_PREREQ(2.2)dnl dnl Minimum Autoconf version required.
AC_PREREQ(2.10)dnl dnl Minimum Autoconf version required.
AC_INIT(features.h)
AC_CONFIG_HEADER(config.h)
@@ -18,10 +18,23 @@ yes) AC_MSG_ERROR(--with-gmp requires an argument; use --with-gmp=DIRECTORY) ;;
gmp-srcdir = $withval" ;;
esac
])
# Check for a --with-gettext argument and set gettext-srcdir in config.make.
AC_ARG_WITH(gettext, dnl
--with-gettext=DIR find GNU gettext source code in DIR (not needed),
[dnl
case "$with_gettext" in
yes)
AC_MSG_ERROR(--with-gettext requires an argument; use --with-gettext=DIR) ;;
''|no) ;;
*)
config_vars="$config_vars
gettext-srcdir = $withval" ;;
esac
])
dnl Arguments to specify presence of other packages/features.
AC_ARG_WITH(fp, dnl
--with-fp if using floating-point hardware,
--with-fp if using floating-point hardware [default=yes],
with_fp=$withval, with_fp=yes)
AC_ARG_WITH(gnu-binutils, dnl
--with-gnu-binutils if using GNU binutils (as and ld),
@@ -36,21 +49,40 @@ test $gnu_binutils = yes && gnu_as=yes gnu_ld=yes
AC_ARG_WITH(elf, dnl
--with-elf if using the ELF object format,
elf=$withval, elf=no)
AC_ARG_WITH(weak-symbols, dnl
--with-weak-symbols if weak symbols are available in as and ld,
weak=$withval, weak=no)
AC_ARG_ENABLE(libio, dnl
[ --enable-libio build in GNU libio instead of GNU stdio],
[if test $enableval = yes; then
stdio=libio
else
stdio=stdio
fi],
stdio=default)
dnl Arguments to enable or disable building the shared, profiled, and
dnl -fomit-frame-pointer libraries.
AC_ARG_ENABLE(shared, dnl
[ --enable-shared build shared library [default=yes if GNU ld & ELF]],
shared=$enableval, shared=default)
shared=$enableval, shared=default)
AC_ARG_ENABLE(profile, dnl
[ --enable-profile build profiled library [default=yes]],
profile=$enableval, profile=yes)
profile=$enableval, profile=yes)
AC_ARG_ENABLE(omitfp, dnl
[ --enable-omitfp build undebuggable optimized library [default=no]],
omitfp=$enableval, omitfp=no)
[ --enable-omitfp build undebuggable optimized library [default=no]],
omitfp=$enableval, omitfp=no)
dnl Generic infrastructure for drop-in additions to libc.
AC_ARG_ENABLE(add-ons, dnl
[ --enable-add-ons=DIR... configure and build named extra directories],
[add_ons=`echo "$enableval" | sed 's/,/ /g'`],
[add_ons=])
AC_CONFIG_SUBDIRS($add_ons)
add_ons_pfx=
if test x"$add_ons" != x; then
for f in $add_ons; do
add_ons_pfx="$add_ons_pfx $f/"
done
fi
AC_CANONICAL_HOST
# We keep the original values in `$config_*' and never modify them, so we
@@ -62,18 +94,17 @@ config_machine=$host_cpu config_vendor=$host_vendor config_os=$host_os
case "$host_os" in
gnu* | linux* | bsd4.4* | netbsd* | freebsd*)
# These systems always use GNU tools.
gnu_ld=yes gnu_as=yes
gnu_ld=yes gnu_as=yes ;;
esac
case "$host_os" in
linux*ecoff*)
;;
gnu* | linux* | sysv4* | solaris2*)
# These systems always use the ELF format.
# These systems (almost) always use the ELF format.
elf=yes
;;
esac
# Compute the list of sysdep directories for this configuration.
sysdep_dir=$srcdir/sysdeps
AC_MSG_CHECKING(sysdep dirs)
AC_CACHE_VAL(libc_cv_sysdirs, [dnl
machine=$config_machine
vendor=$config_vendor
os=$config_os
@@ -83,24 +114,28 @@ changequote(,)dnl
# Expand the configuration machine name into a subdirectory by architecture
# type and particular chip.
case "$machine" in
i[345]86)
machine=i386/$machine ;;
sparc[6789])
machine=sparc/$machine ;;
m68k)
machine=m68k/m68020 ;;
m680?0)
machine=m68k/$machine ;;
m88k)
machine=m88k/m88100 ;;
m88???)
machine=m88k/$machine ;;
mips64*)
machine=mips/mips64/$machine ;;
mips*)
machine=mips/$machine ;;
a29k | am29000) base_machine=a29k machine=a29k ;;
alpha*) base_machine=alpha machine=alpha/$machine ;;
hppa*) base_machine=hppa machine=hppa/$machine ;;
i[3456]86) base_machine=i386 machine=i386/$machine ;;
m680?0) base_machine=m68k machine=m68k/$machine ;;
m68k) base_machine=m68k machine=m68k/m68020 ;;
m88???) base_machine=m88k machine=m88k/$machine ;;
m88k) base_machine=m88k machine=m88k/m88100 ;;
mips*) base_machine=mips machine=mips/$machine ;;
mips64*) base_machine=mips64 machine=mips/mips64/$machine ;;
sparc[6789]) base_machine=sparc machine=sparc/$machine ;;
supersparc) base_machine=sparc machine=sparc/sparc8 ;;
esac
changequote([,])dnl
AC_SUBST(base_machine)
# Compute the list of sysdep directories for this configuration.
# This can take a while to compute.
sysdep_dir=$srcdir/sysdeps
AC_MSG_CHECKING(sysdep dirs)
dnl We need to use [ and ] for other purposes for a while now.
changequote(,)dnl
# 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'`"
@@ -111,9 +146,9 @@ netbsd* | 386bsd* | freebsd* | bsdi*)
base_os=unix/bsd/bsd4.4 ;;
osf* | sunos* | ultrix* | newsos* | dynix* | *bsd*)
base_os=unix/bsd ;;
sysv* | isc* | esix* | sco* | minix* | irix4*)
sysv* | isc* | esix* | sco* | minix* | irix4* | linux*)
base_os=unix/sysv ;;
linux* | solaris[2-9]*)
solaris[2-9]*)
base_os=unix/sysv/sysv4 ;;
none)
base_os=standalone ;;
@@ -127,11 +162,16 @@ ostry=$os
while o=`echo $tail | sed 's/\.[^.]*$//'`; test $o != $tail; do
ostry="$ostry /$o"
tail=$o
done
done
o=`echo $tail | sed 's/[0-9]*$//'`
if test $o != $tail; then
ostry="$ostry /$o"
fi
# For linux-gnu, try linux-gnu, then linux.
o=`echo $tail | sed 's/-.*$//'`
if test $o != $tail; then
ostry="$ostry /$o"
fi
# For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
base=
@@ -160,23 +200,34 @@ changequote([,])dnl
# Find what sysdep directories exist.
sysnames=
for b in $base ''; do
for m0 in $mach ''; do
for v in /$vendor ''; do
for o in /$ostry ''; do
for m in $mach ''; do
try="$m0$b$v$o$m"
test -n "$enable_debug_configure" && echo "$0 [DEBUG]: try $try" >&2
if test -d $sysdep_dir$try; then
sysnames="$sysnames $try"
{ test -n "$o" || test -n "$b"; } && os_used=t
{ test -n "$m" || test -n "$m0"; } && machine_used=t
fi
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
for d in $add_ons_pfx ''; do
for b in $base ''; do
for m0 in $mach ''; do
for v in /$vendor ''; do
for o in /$ostry ''; do
for m in $mach ''; do
if test "$m0$b$v$o$m"; then
try="${d}sysdeps$m0$b$v$o$m"
test -n "$enable_debug_configure" &&
echo "$0 [DEBUG]: try $try" >&2
case $try in
/*) dest=$try ;;
*) dest=$srcdir/$try ;;
esac
if test -d $dest; then
sysnames="$sysnames $try"
{ test -n "$o" || test -n "$b"; } && os_used=t
{ test -n "$m" || test -n "$m0"; } && machine_used=t
fi
fi
done
done
done
done
done
done
IFS="$ac_save_ifs"
if test -z "$os_used" && test "$os" != none; then
AC_MSG_ERROR(Operating system $os is not supported.)
@@ -195,31 +246,56 @@ fi
# machine (otherwise what's the point of an ABI?).
if test "$elf" = yes; then
elf_dirs=
for m in $mach; do
if test -d $sysdep_dir$m/elf; then
elf_dirs="$elf_dirs $m/elf"
fi
for d in $add_ons_pfx ''; do
case $d in
/*) xsrcdir= ;;
*) xsrcdir=$srcdir/ ;;
esac
for m in $mach; do
if test -d $xsrcdir${d}sysdeps$m/elf; then
elf_dirs="$elf_dirs ${d}sysdeps$m/elf"
fi
done
done
sysnames="`echo $elf_dirs | sed -e 's,^/,,' -e 's, /,,g'` $sysnames"
sysnames="`echo $elf_dirs | sed -e 's,//,/,g'` $sysnames"
fi
# Remove the leading slashes.
sysnames="`echo $sysnames | sed -e 's@^/@@' -e 's@ /@ @g'`"
# Expand the list of system names into a full list of directories
# from each element's parent name and Implies file (if present).
set $sysnames
names=
while test $# -gt 0; do
name=$1
shift
if test -f $sysdep_dir/$name/Implies; then
case " $names " in *" $name "*)
# Already in the list.
continue
esac
# Report each name as we discover it, so there is no long pause in output.
echo $ac_n "$name $ac_c" >&AC_FD_MSG
name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
case $name in
/*) xsrcdir= ;;
*) xsrcdir=$srcdir/ ;;
esac
test -n "$enable_debug_configure" &&
echo "[DEBUG]: name/Implies $xsrcdir$name/Implies" >&2
if test -f $xsrcdir$name/Implies; then
# Collect more names from the `Implies' file (removing comments).
implied="`sed 's/#.*$//' < $sysdep_dir/$name/Implies`"
for x in $implied; do
test -d $sysdep_dir/$x || echo "Warning: $name implies nonexistent $x">&2
implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/Implies`"
implied=
for x in $implied_candidate; do
if test -d $xsrcdir$name_base/$x; then
implied="$implied $name_base/$x";
else
AC_MSG_WARN($name/Implies specifies nonexistent $x)
fi
done
else
implied=
@@ -230,7 +306,7 @@ while test $# -gt 0; do
# Find the parent of NAME, using the empty string if it has none.
changequote(,)dnl
parent="`echo $name | sed -n -e '/\//!q' -e 's=/[^/]*$==p'`"
parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
changequote([,])dnl
# Add the names implied by NAME, and NAME's parent (if it has one), to
@@ -245,43 +321,31 @@ changequote([,])dnl
done
# Add the default directories.
names="$names generic stub"
sysnames="$names sysdeps/generic sysdeps/stub"
AC_SUBST(sysnames)
# The other names were emitted during the scan.
AC_MSG_RESULT(sysdeps/generic sysdeps/stub)
# Now uniquize the list.
seen=
sysnames=
for name in $names; do
if echo "$seen" | fgrep -x $name >/dev/null; then
# Already in the list.
true;
else
# A new one.
if test -z "$seen"; then
seen="$name" sysnames="$name"
else
seen="$seen
$name"
sysnames="$sysnames $name"
fi
fi
done
libc_cv_sysdirs="$sysnames"])
AC_SUBST(sysnames) sysnames="$libc_cv_sysdirs"
AC_MSG_RESULT(${sysnames})
### Locate tools.
AC_PROG_INSTALL
if test "$INSTALL" = "${srcdir}/install-sh"; then
# The makefiles need to use a different form to find it in $srcdir.
INSTALL='$(..)./install-sh'
fi
AC_PROG_LN_S
AC_CHECK_PROGS(MSGFMT, msgfmt gmsgfmt, :)
AC_CHECK_TOOL(CC, gcc)
if test $host != $build; then
AC_CHECK_PROG(BUILD_CC, gcc cc)
fi
AC_PROG_CPP
AC_CHECK_TOOL(AR, ar)
AC_CHECK_TOOL(RANLIB, ranlib, :)
AC_PROG_CPP
AC_MSG_CHECKING(signed size_t type)
AC_CACHE_VAL(libc_cv_signed_size_t, [dnl
AC_CACHE_CHECK(for signed size_t type, libc_cv_signed_size_t, [dnl
echo '#include <stddef.h>
FOOBAR __SIZE_TYPE__ FOOBAR' > conftest.c
if eval "$ac_cpp conftest.c 2>/dev/null" \
@@ -291,7 +355,6 @@ else
libc_cv_signed_size_t=yes
fi
rm -f conftest*])
AC_MSG_RESULT($libc_cv_signed_size_t)
if test $libc_cv_signed_size_t = yes; then
dnl Do this by hand instead of AC_DEFINE so can add #undef to avoid warnings.
cat >> confdefs.h <<\EOF
@@ -300,8 +363,7 @@ if test $libc_cv_signed_size_t = yes; then
EOF
fi
AC_MSG_CHECKING(libc-friendly stddef.h)
AC_CACHE_VAL(libc_cv_friendly_stddef, [dnl
AC_CACHE_CHECK(for libc-friendly stddef.h, libc_cv_friendly_stddef, [dnl
AC_TRY_COMPILE(dnl
[#define __need_size_t
#define __need_wchar_t
@@ -314,14 +376,13 @@ AC_TRY_COMPILE(dnl
if (&size == NULL || &wchar == NULL) abort ();],
libc_cv_friendly_stddef=yes,
libc_cv_friendly_stddef=no)])
AC_MSG_RESULT($libc_cv_friendly_stddef)
if test $libc_cv_friendly_stddef = yes; then
config_vars="$config_vars
override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
fi
AC_MSG_CHECKING(whether we need to use -P to assemble .S files)
AC_CACHE_VAL(libc_cv_need_minus_P, [dnl
AC_CACHE_CHECK(whether we need to use -P to assemble .S files,
libc_cv_need_minus_P, [dnl
cat > conftest.S <<EOF
#include "confdefs.h"
/* Nothing whatsoever. */
@@ -332,14 +393,13 @@ else
libc_cv_need_minus_P=yes
fi
rm -f conftest*])
AC_MSG_RESULT($libc_cv_need_minus_P)
if test $libc_cv_need_minus_P = yes; then
config_vars="$config_vars
asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
fi
AC_MSG_CHECKING(for assembler global-symbol directive)
AC_CACHE_VAL(libc_cv_asm_global_directive, [dnl
AC_CACHE_CHECK(for assembler global-symbol directive,
libc_cv_asm_global_directive, [dnl
libc_cv_asm_global_directive=UNKNOWN
for ac_globl in .globl .global; do
cat > conftest.s <<EOF
@@ -353,15 +413,13 @@ EOF
rm -f conftest*
test $libc_cv_asm_global_directive != UNKNOWN && break
done])
AC_MSG_RESULT($libc_cv_asm_global_directive)
if test $libc_cv_asm_global_directive = UNKNOWN; then
AC_MSG_ERROR(cannot determine asm global directive)
else
AC_DEFINE_UNQUOTED(ASM_GLOBAL_DIRECTIVE, ${libc_cv_asm_global_directive})
fi
AC_MSG_CHECKING(for .set assembler directive)
AC_CACHE_VAL(libc_cv_asm_set_directive, [dnl
AC_CACHE_CHECK(for .set assembler directive, libc_cv_asm_set_directive, [dnl
cat > conftest.s <<EOF
.text
foo: .long 0
@@ -375,17 +433,125 @@ extern int glibc_conftest_frobozz;
main () { printf ("%d\n", glibc_conftest_frobozz); }
EOF
if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
conftest.s conftest1.c 1>&AC_FD_CC 2>&AC_FD_CC; then
-o conftest conftest.s conftest1.c 1>&AC_FD_CC 2>&AC_FD_CC; then
libc_cv_asm_set_directive=yes
else
libc_cv_asm_set_directive=no
fi
rm -f conftest*])
AC_MSG_RESULT($libc_cv_asm_set_directive)
if test $libc_cv_asm_set_directive = yes; then
AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
fi
if test $elf != yes; then
AC_CACHE_CHECK(for .init and .fini sections, libc_cv_have_initfini,
[AC_TRY_COMPILE(, [asm (".section .init");
asm (".section .fini");
asm (".text");],
libc_cv_have_initfini=yes,
libc_cv_have_initfini=no)])
AC_SUBST(libc_cv_have_initfini)dnl
if test $libc_cv_have_initfini = yes; then
AC_DEFINE(HAVE_INITFINI)
fi
fi
if test $elf = yes; then
libc_cv_asm_underscores=no
else
AC_CACHE_CHECK(for _ prefix on C symbol names, libc_cv_asm_underscores,
[AC_TRY_LINK([asm ("_glibc_foobar:");], [glibc_foobar ();],
libc_cv_asm_underscores=yes,
libc_cv_asm_underscores=no)])
fi
if test $libc_cv_asm_underscores = no; then
AC_DEFINE(NO_UNDERSCORES)
fi
if test $elf = yes; then
libc_cv_weak_symbols=yes
libc_cv_asm_weak_directive=yes
libc_cv_asm_weakext_directive=no
else
AC_CACHE_CHECK(for assembler .weak directive, libc_cv_asm_weak_directive,
[dnl
cat > conftest.s <<EOF
.text
${libc_cv_asm_global_directive} foo
foo: .long 0
.weak foo
.weak bar; bar = foo
EOF
if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
libc_cv_asm_weak_directive=yes
else
libc_cv_asm_weak_directive=no
fi
rm -f conftest*])
if test $libc_cv_asm_weak_directive = no; then
AC_CACHE_CHECK(for assembler .weakext directive,
libc_cv_asm_weakext_directive,
[dnl
cat > conftest.s <<EOF
.text
${libc_cv_asm_global_directive} foo
foo: .long 0
.weakext foo
.weakext foo, bar
EOF
if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
libc_cv_asm_weakext_directive=yes
else
libc_cv_asm_weakext_directive=no
fi
rm -f conftest*])
fi # no .weak
fi # not ELF
if test $libc_cv_asm_weak_directive = yes; then
AC_DEFINE(HAVE_ASM_WEAK_DIRECTIVE)
elif test $libc_cv_asm_weakext_directive = yes; then
AC_DEFINE(HAVE_ASM_WEAKEXT_DIRECTIVE)
fi
AC_CACHE_CHECK(for ld --no-whole-archive, libc_cv_ld_no_whole_archive, [dnl
cat > conftest.c <<\EOF
_start () {}
int __eh_pc;
__throw () {}
EOF
dnl No \ in command here because it ends up inside ''.
if AC_TRY_COMMAND([${CC-cc} $CFLAGS
-nostdlib -nostartfiles -Wl,--no-whole-archive
-o conftest conftest.c]); then
libc_cv_ld_no_whole_archive=yes
else
libc_cv_ld_no_whole_archive=no
fi
rm -f conftest*])
AC_SUBST(libc_cv_ld_no_whole_archive)dnl
AC_CACHE_CHECK(for gcc -fno-exceptions, libc_cv_gcc_no_exceptions, [dnl
cat > conftest.c <<\EOF
_start () {}
int __eh_pc;
__throw () {}
EOF
dnl No \ in command here because it ends up inside ''.
if AC_TRY_COMMAND([${CC-cc} $CFLAGS
-nostdlib -nostartfiles -fno-exceptions
-o conftest conftest.c]); then
libc_cv_gcc_no_exceptions=yes
else
libc_cv_gcc_no_exceptions=no
fi
rm -f conftest*])
AC_SUBST(libc_cv_gcc_no_exceptions)dnl
### End of automated tests.
### Now run sysdeps configure fragments.
# sysdeps configure fragments may set these with files to be linked below.
libc_link_dests=
@@ -395,14 +561,24 @@ libc_link_sources=
# configure fragments, and looking for a uname implementation.
uname=
for dir in $sysnames; do
if test -r $sysdep_dir/$dir/configure; then
AC_MSG_RESULT(running configure fragment for $dir)
. $sysdep_dir/$dir/configure
case $dir in
/*) dest=$dir ;;
*) dest=$srcdir/$dir ;;
esac
if test -r $dest/configure; then
AC_MSG_RESULT(running configure fragment for $dest)
. $dest/configure
fi
[
if test -z "$uname"; then
{ test -r $sysdep_dir/$dir/uname.c || test -r $sysdep_dir/$dir/uname.S; } \
&& uname=$dir
if test -r $sysdep_dir/$dir/uname.c ||
test -r $sysdep_dir/$dir/uname.S ||
{ test -r $sysdep_dir/$dir/syscalls.list &&
grep '^uname[ ]' $sysdep_dir/$dir/syscalls.list >/dev/null; }; then
uname=$dir
fi
fi
]dnl
done
AC_LINK_FILES(`echo $libc_link_sources`, `echo $libc_link_dests`)
@@ -428,8 +604,7 @@ AC_DEFUN(LIBC_KERNEL_ID, [dnl
fi
])dnl
AC_MSG_CHECKING(OS release for uname)
AC_CACHE_VAL(libc_cv_uname_release, [dnl
AC_CACHE_CHECK(OS release for uname, libc_cv_uname_release, [dnl
AC_REQUIRE([LIBC_KERNEL_ID])dnl
changequote(,)dnl
kernel_release=`echo "$kernel_id" | sed 's/^[^0-9.]*\([0-9.]*\).*$/\1/'`
@@ -445,11 +620,9 @@ changequote([,])dnl
else
libc_cv_uname_release=unknown
fi])
AC_MSG_RESULT($libc_cv_uname_release)
uname_release="$libc_cv_uname_release"
AC_MSG_CHECKING(OS version for uname)
AC_CACHE_VAL(libc_cv_uname_version, [dnl
AC_CACHE_CHECK(OS version for uname, libc_cv_uname_version, [dnl
AC_REQUIRE([LIBC_KERNEL_ID])dnl
changequote(,)dnl
kernel_version=`echo "$kernel_id" | sed 's/^[^#]*#\([0-9]*\).*$/\1/'`
@@ -459,7 +632,6 @@ changequote([,])dnl
else
libc_cv_uname_version=unknown
fi])
AC_MSG_RESULT($libc_cv_uname_version)
uname_version="$libc_cv_uname_version"
AC_SUBST(uname_sysname) AC_SUBST(uname_release) AC_SUBST(uname_version)dnl
@@ -469,7 +641,15 @@ else
config_uname=
fi
AC_SUBST(gnu_ld) AC_SUBST(gnu_as) AC_SUBST(elf) AC_SUBST(weak)
AC_MSG_CHECKING(stdio selection)
AC_SUBST(stdio)
case $stdio in
libio) AC_DEFINE(USE_IN_LIBIO) ;;
default) stdio=stdio ;;
esac
AC_MSG_RESULT($stdio)
AC_SUBST(gnu_ld) AC_SUBST(gnu_as) AC_SUBST(elf)
if test $gnu_ld = yes; then
AC_DEFINE(HAVE_GNU_LD)
fi
@@ -479,9 +659,6 @@ fi
if test $elf = yes; then
AC_DEFINE(HAVE_ELF)
fi
if test $weak = yes; then
AC_DEFINE(HAVE_WEAK_SYMBOLS)
fi
AC_SUBST(shared)
if test $shared = default; then
@@ -492,6 +669,7 @@ fi
AC_SUBST(profile)
AC_SUBST(omitfp)
AC_SUBST(DEFINES)
if test "`(cd $srcdir; pwd)`" = "`pwd`"; then
config_makefile=
-14
View File
@@ -1,14 +0,0 @@
The GNU C library now includes Michael Glad's Ultra Fast Crypt, which
provides the Unix `crypt' function, plus some other entry points. Because
of the United States export restriction on DES implementations, we are
distributing this code separately from the rest of the C library. There is
an extra distribution tar file just for crypt; it is called
`glibc-1.07-crypt.tar.gz'. You can just unpack the crypt distribution
along with the rest of the C library and build; you can also build the
library without getting crypt. Users outside the USA can get the crypt
distribution via anonymous FTP from ftp.uni-c.dk [129.142.6.74], or another
archive site outside the USA. Archive maintainers are encouraged to copy
this distribution to their archives outside the USA. Please get it from
ftp.uni-c.dk; transferring this distribution from prep.ai.mit.edu (or any
other site in the USA) to a site outside the USA is in violation of US
export laws.
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+34 -20
View File
@@ -1,6 +1,6 @@
# Makefile for csu code for GNU C library.
# Copyright (C) 1995 Free Software Foundation, Inc.
# Copyright (C) 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
@@ -20,19 +20,23 @@
# This directory contains the C startup code (that which calls main). This
# consists of the startfile, built from start.c and installed as crt0.o
# (traditionally) or crt1.o (for ELF); and some initialization code which
# is in the C library itself. In ELF we also install crti.o and crtn.o,
# special "initializer" and "finalizer" files in used in the link to make
# the .init and .fini sections work right; both these files are built (in
# an arcane manner) from initfini.c.
# (traditionally) or crt1.o (for ELF). In ELF we also install crti.o and
# crtn.o, special "initializer" and "finalizer" files in used in the link
# to make the .init and .fini sections work right; both these files are
# built (in an arcane manner) from initfini.c.
subdir := csu
routines = init-first
csu-dummies = $(filter-out $(start-installed-name),crt1.o Mcrt1.o)
extra-objs = start.o $(start-installed-name) $(csu-dummies)
omit-deps = $(patsubst %.o,%,$(start-installed-name) $(csu-dummies))
install-lib = $(start-installed-name) $(csu-dummies)
distribute = initfini.c
extra-objs = start.o gmon-start.o \
$(start-installed-name) g$(start-installed-name) \
$(csu-dummies)
omit-deps = $(patsubst %.o,%,$(start-installed-name) g$(start-installed-name) \
$(csu-dummies))
install-lib = $(start-installed-name) g$(start-installed-name) \
$(csu-dummies)
distribute = initfini.c gmon-start.c start.c
all: # Make this the default target; it will be defined in Rules.
@@ -45,17 +49,21 @@ start-installed-name = crt0.o
else
# In the ELF universe, crt0.o is called crt1.o, and there are
# In the ELF universe, crt0.o is called crt1.o, and there are
# some additional bizarre files.
start-installed-name = crt1.o
have-initfini = yes
endif
ifeq (yes,$(have-initfini))
CPPFLAGS += -DHAVE_INITFINI
# These are the special initializer/finalizer files. They are always the
# first and last file in the link. crti.o ... crtn.o are used for normal
# linking; they define the global "functions" _init and _fini to run the
# .init and .fini sections. crti_s.o ... crtn_s.o are for making shared
# library objects; they put the prologue/epilogue code into the .init and
# .fini sections, but define no global symbols.
crtstuff = crti crtn crti_s crtn_s
# first and last file in the link. crti.o ... crtn.o define the global
# "functions" _init and _fini to run the .init and .fini sections.
crtstuff = crti crtn
install-lib += $(crtstuff:=.o)
extra-objs += $(crtstuff:=.o)
@@ -67,14 +75,12 @@ omit-deps += $(crtstuff)
# disable emission of .size directives and debugging information, since
# they will get confused by the splitting of the output we do.
$(objpfx)cr%i.s $(objpfx)cr%n.s: initfini.c; $(initfini)
$(objpfx)cr%i_s.s $(objpfx)cr%n_s.s: initfini.c; $(initfini)
define initfini
-rm -f $(objpfx)crtcommon.tmp
(echo 'cat > crtcommon.tmp <<\EOF_common'; \
$(CC) $< $(CPPFLAGS) $(CFLAGS) \
$(patsubst %,-DGLOBAL=static,$(filter %_s.s,$@)) \
-finhibit-size-directive -g0 -S -o -; \
-fPIC -finhibit-size-directive $(no-exceptions) -g0 -S -o -; \
echo 'EOF_common') | (cd $(@D); $(SHELL))
cat $(objpfx)crtcommon.tmp >> $(objpfx)crti.s-new
cat $(objpfx)crtcommon.tmp >> $(objpfx)crtn.s-new
@@ -87,11 +93,19 @@ endif
include ../Rules
ifndef start-installed-name-rule
# The startfile is installed under different names, so we just call our
# source file `start.c' and copy to the installed name after compiling.
$(objpfx)$(start-installed-name): $(objpfx)start.o
-rm -f $@
ln $< $@
endif
# The profiling startfile is made by linking together the normal
# startfile with gmon-start.o, which defines a constructor function
# to turn on profiling code at startup.
$(objpfx)g$(start-installed-name): $(objpfx)start.o $(objpfx)gmon-start.o
$(CC) -nostdlib -nostartfiles -r -o $@ $^
# These extra files are sometimes expected by system standard linking
# procedures, but we have nothing for them to do. So compile empty files.
+58
View File
@@ -0,0 +1,58 @@
/* Code to enable profiling at program startup.
Copyright (C) 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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <sys/types.h>
#include <sys/gmon.h>
#include <stdlib.h>
#include <unistd.h>
/* Beginning and end of our code segment. */
extern void _start (void), etext (void);
#ifndef HAVE_INITFINI
/* This function gets called at startup by the normal constructor
mechanism. We link this file together with start.o to produce gcrt1.o,
so this constructor will be first in the list. */
void __gmon_start__ (void) __attribute__ ((constructor));
#else
/* In ELF and COFF, we cannot use the normal constructor mechanism to call
__gmon_start__ because gcrt1.o appears before crtbegin.o in the link.
Instead crti.o calls it specially (see initfini.c). */
#endif
void
__gmon_start__ (void)
{
#ifdef HAVE_INITFINI
/* Protect from being called more than once. Since crti.o is linked
into every shared library, each of their init functions will call us. */
static int called;
if (called++)
return;
#endif
/* Start keeping profiling records. */
monstartup ((u_long) &_start, (u_long) &etext);
/* Call _mcleanup before exitting; it will write out gmon.out from the
collected data. */
atexit (&_mcleanup);
}
+70 -20
View File
@@ -1,5 +1,5 @@
/* Special .init and .fini section support.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 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
@@ -34,38 +34,75 @@ Cambridge, MA 02139, USA. */
#include <stdlib.h>
/* We are compiled with -DGLOBAL=static to generate the versions used for
shared libraries' .init and .fini sections, which do not have entry
point symbols. */
#ifndef GLOBAL
#define GLOBAL
#endif
#ifdef HAVE_ELF
/* These declarations make the functions go in the right sections when
we define them below. GCC syntax does not allow the attribute
specifications to be in the function definitions themselves. */
GLOBAL void _init (void) __attribute__ ((section (".init")));
GLOBAL void _fini (void) __attribute__ ((section (".fini")));
void _init (void) __attribute__ ((section (".init")));
void _fini (void) __attribute__ ((section (".fini")));
#define SECTION(x) /* Put nothing extra before the defn. */
#else
/* Some non-ELF systems support .init and .fini sections,
but the __attribute__ syntax only works for ELF. */
#define SECTION(x) asm (".section " x);
#endif
/* End the here document containing the initial common code.
Then move the output file crtcommon.tmp to crti.s-new and crtn.s-new. */
asm ("\nEOF_common\n\
mv -f crtcommon.tmp crti.s-new\n\
cp -f crti.s-new crtn.s-new");
rm -f crti.s-new crtn.s-new\n\
mv crtcommon.tmp crti.s-new\n\
cp crti.s-new crtn.s-new");
/* Extract a `.end' if one is produced by the compiler. */
asm ("fgrep .end >/dev/null 2>&1 <<\\EOF.end && need_end=yes");
void
useless_function (void)
{
return;
}
asm ("\nEOF.end\n");
/* Find out how much alignment is produced by the compiler. */
asm ("align=`awk '$1==\".align\" { if ($2>max) max=$2; } END { print max; }' \
<<\\EOF.align");
void
useless_function2 (void (*foo) (void))
{
if (foo)
(*foo) ();
}
asm ("\nEOF.align\n`\n");
/* Append the .init prologue to crti.s-new. */
asm ("cat >> crti.s-new <<\\EOF.crti.init");
GLOBAL void
SECTION (".init")
void
_init (void)
{
(void) &_init; /* Don't optimize out the function! */
/* We cannot use the normal constructor mechanism in gcrt1.o because it
appears before crtbegin.o in the link, so the header elt of .ctors
would come after the elt for __gmon_start__. One approach is for
gcrt1.o to reference a symbol which would be defined by some library
module which has a constructor; but then user code's constructors
would come first, and not be profiled. */
extern void __gmon_start__ (void); weak_extern (__gmon_start__)
if (__gmon_start__)
__gmon_start__ ();
/* End the here document containing the .init prologue code.
Then fetch the .section directive just written and append that
to crtn.s-new, followed by the function epilogue. */
asm ("\nEOF.crti.init
\n\
asm ("\n\
EOF.crti.init\n\
test -n \"$align\" && echo .align $align >> crti.s-new\n\
test -n \"$need_end\" && echo .end _init >> crti.s-new\n\
fgrep .init crti.s-new >>crtn.s-new\n\
cat >> crtn.s-new <<\\EOF.crtn.init");
fgrep -v .end >> crtn.s-new <<\\EOF.crtn.init");
}
/* End the here document containing the .init epilogue code.
@@ -74,17 +111,30 @@ asm ("\nEOF.crtn.init\
\n\
cat >> crti.s-new <<\\EOF.crti.fini");
GLOBAL void
SECTION (".fini")
void
_fini (void)
{
(void) &_fini; /* Don't optimize out the function! */
/* End the here document containing the .fini prologue code.
Then fetch the .section directive just written and append that
to crtn.s-new, followed by the function epilogue. */
asm ("\nEOF.crti.fini\
asm ("\nEOF.crti.fini\n\
test -n \"$align\" && echo .align $align >> crti.s-new\n\
test -n \"$need_end\" && echo .end _fini >> crti.s-new\n\
cat > /dev/null <<\\EOF.fini.skip");
{
/* Let GCC know that _fini is not a leaf function by having a dummy
function call here. We arrange for this call to be omitted from
either crt file. */
extern void i_am_not_a_leaf (void);
i_am_not_a_leaf ();
}
asm ("\nEOF.fini.skip\
\n\
fgrep .fini crti.s-new >>crtn.s-new\n\
cat >> crtn.s-new <<\\EOF.crtn.fini");
fgrep -v .end >> crtn.s-new <<\\EOF.crtn.fini");
}
/* End the here document containing the .fini epilogue code.
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+11 -5
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1995 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1992, 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
@@ -21,11 +21,17 @@ Cambridge, MA 02139, USA. */
/* Defined in locale/C-ctype.c. */
extern const char _nl_C_LC_CTYPE_class[];
extern const char _nl_C_LC_CTYPE_class32[];
extern const char _nl_C_LC_CTYPE_toupper[];
extern const char _nl_C_LC_CTYPE_tolower[];
extern const char _nl_C_LC_CTYPE_names[];
extern const char _nl_C_LC_CTYPE_width[];
#define b(u,x) (((u int *) _nl_C_LC_CTYPE_##x) + 128);
#define b(t,x,o) (((const t *) _nl_C_LC_CTYPE_##x) + o);
const unsigned short int *__ctype_b = b(unsigned short, class);
const int *__ctype_tolower = b(, tolower);
const int *__ctype_toupper = b(, toupper);
const unsigned short int *__ctype_b = b (unsigned short int, class, 128);
const unsigned int *__ctype32_b = b (unsigned int, class32, 0);
const int *__ctype_tolower = b (int, tolower, 128);
const int *__ctype_toupper = b (int, toupper, 128);
const unsigned int *__ctype_names = b (unsigned int, names, 0);
const unsigned char *__ctype_width = b (unsigned char, width, 0);
+7 -7
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1993, 1995 Free Software Foundation, Inc.
/* Copyright (C) 1991, 92, 93, 95, 96 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
@@ -13,7 +13,7 @@ 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, 1992 Free Software Foundation, Inc., 675 Mass Ave,
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
/*
@@ -27,6 +27,7 @@ Cambridge, MA 02139, USA. */
__BEGIN_DECLS
#ifndef _ISbit
/* These are all the characteristics of characters.
If there get to be more than 16 distinct characteristics,
many things must be changed that use `unsigned short int's.
@@ -55,11 +56,9 @@ enum
_ISblank = _ISbit (8), /* Blank (usually SPC and TAB). */
_IScntrl = _ISbit (9), /* Control character. */
_ISpunct = _ISbit (10), /* Punctuation. */
/* The following are defined in POSIX.2 as being combinations of the
classes above. */
_ISalnum = _ISalpha | _ISdigit /* Alphanumeric. */
_ISalnum = _ISbit (11) /* Alphanumeric. */
};
#endif /* ! _ISbit */
/* These are defined in ctype-info.c.
The declarations here must match those in localeinfo.h.
@@ -70,7 +69,8 @@ enum
char' values and for EOF; we also support negative `signed char' values
for broken old programs. The case conversion arrays are of `int's
rather than `unsigned char's because tolower (EOF) must be EOF, which
doesn't fit into an `unsigned char'. */
doesn't fit into an `unsigned char'. But today more important is that
the arrays are also used for multi-byte character sets. */
extern __const unsigned short int *__ctype_b; /* Characteristics. */
extern __const int *__ctype_tolower; /* Case conversions. */
extern __const int *__ctype_toupper; /* Case conversions. */
+37 -27
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1994 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1994, 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
@@ -45,6 +45,22 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
register unsigned short int c;
int lose = 0;
#define TRYEM do { \
TRY (isascii); \
TRY (isalnum); \
TRY (isalpha); \
TRY (iscntrl); \
TRY (isdigit); \
TRY (isgraph); \
TRY (islower); \
TRY (isprint); \
TRY (ispunct); \
TRY (isspace); \
TRY (isupper); \
TRY (isxdigit); \
TRY (isblank); \
} while (0)
for (c = 0; c <= UCHAR_MAX; ++c)
{
print_char (c);
@@ -55,32 +71,10 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
++lose;
}
if (isascii(c))
fputs(" isascii", stdout);
if (isalnum(c))
fputs(" isalnum", stdout);
if (isalpha(c))
fputs(" isalpha", stdout);
if (iscntrl(c))
fputs(" iscntrl", stdout);
if (isdigit(c))
fputs(" isdigit", stdout);
if (isgraph(c))
fputs(" isgraph", stdout);
if (islower(c))
fputs(" islower", stdout);
if (isprint(c))
fputs(" isprint", stdout);
if (ispunct(c))
fputs(" ispunct", stdout);
if (isspace(c))
fputs(" isspace", stdout);
if (isupper(c))
fputs(" isupper", stdout);
if (isxdigit(c))
fputs(" isxdigit", stdout);
if (isblank(c))
fputs(" isblank", stdout);
#define TRY(isfoo) if (isfoo (c)) fputs (" " #isfoo, stdout)
TRYEM;
#undef TRY
fputs("; lower = ", stdout);
print_char(tolower(c));
fputs("; upper = ", stdout);
@@ -88,5 +82,21 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
putchar('\n');
}
fputs ("EOF", stdout);
if (tolower (EOF) != EOF)
{
++lose;
printf (" tolower BOGUS %d;", tolower (EOF));
}
if (toupper (EOF) != EOF)
{
++lose;
printf (" toupper BOGUS %d;", toupper (EOF));
}
#define TRY(isfoo) if (isfoo (EOF)) fputs (" " #isfoo, stdout), ++lose
TRYEM;
#undef TRY
exit (lose ? EXIT_FAILURE : EXIT_SUCCESS);
}
+1
View File
@@ -0,0 +1 @@
#include <db/db.h>
+6
View File
@@ -0,0 +1,6 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
glibc-*
distinfo
+47
View File
@@ -0,0 +1,47 @@
# Makefile for 4.4BSD db code in GNU C library.
# This code is taken verbatim from the BSD db 1.85 package. Only this
# Makefile and compat.h were written for GNU libc, and the header files
# moved up to this directory.
subdir = db
subdir-dirs = btree db hash mpool recno
vpath %.c $(subdir-dirs)
extra-libs := libdb
extra-libs-others := $(extra-libs)
libdb-routines := bt_close bt_conv bt_debug bt_delete bt_get \
bt_open bt_overflow bt_page bt_put bt_search \
bt_seq bt_split bt_utils \
db \
hash hash_bigkey hash_buf hash_func hash_log2 hash_page \
ndbm \
mpool \
rec_close rec_delete rec_get rec_open rec_put rec_search \
rec_seq rec_utils
headers := db.h mpool.h ndbm.h
distribute := compat.h \
btree/btree.h btree/extern.h \
hash/extern.h hash/hash.h hash/page.h \
recno/extern.h recno/recno.h
others := makedb
install-bin := makedb
include ../Rules
CPPFLAGS += -D__DBINTERFACE_PRIVATE
# This file defines some static functions for alternative hash algorithms
# that are not actually used.
CFLAGS-hash_func.c := -Wno-unused
# The db code outsmarts the compiler frequently.
override CFLAGS += -Wno-uninitialized
ifeq ($(build-shared),yes)
$(objpfx)makedb: $(objpfx)libdb.so$(libdb.so-version)
else
$(objpfx)makedb: $(objpfx)libdb.a
endif
+182
View File
@@ -0,0 +1,182 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)bt_close.c 8.7 (Berkeley) 8/17/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/param.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <db.h>
#include "btree.h"
static int bt_meta __P((BTREE *));
/*
* BT_CLOSE -- Close a btree.
*
* Parameters:
* dbp: pointer to access method
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
int
__bt_close(dbp)
DB *dbp;
{
BTREE *t;
int fd;
t = dbp->internal;
/* Toss any page pinned across calls. */
if (t->bt_pinned != NULL) {
mpool_put(t->bt_mp, t->bt_pinned, 0);
t->bt_pinned = NULL;
}
/* Sync the tree. */
if (__bt_sync(dbp, 0) == RET_ERROR)
return (RET_ERROR);
/* Close the memory pool. */
if (mpool_close(t->bt_mp) == RET_ERROR)
return (RET_ERROR);
/* Free random memory. */
if (t->bt_cursor.key.data != NULL) {
free(t->bt_cursor.key.data);
t->bt_cursor.key.size = 0;
t->bt_cursor.key.data = NULL;
}
if (t->bt_rkey.data) {
free(t->bt_rkey.data);
t->bt_rkey.size = 0;
t->bt_rkey.data = NULL;
}
if (t->bt_rdata.data) {
free(t->bt_rdata.data);
t->bt_rdata.size = 0;
t->bt_rdata.data = NULL;
}
fd = t->bt_fd;
free(t);
free(dbp);
return (close(fd) ? RET_ERROR : RET_SUCCESS);
}
/*
* BT_SYNC -- sync the btree to disk.
*
* Parameters:
* dbp: pointer to access method
*
* Returns:
* RET_SUCCESS, RET_ERROR.
*/
int
__bt_sync(dbp, flags)
const DB *dbp;
u_int flags;
{
BTREE *t;
int status;
t = dbp->internal;
/* Toss any page pinned across calls. */
if (t->bt_pinned != NULL) {
mpool_put(t->bt_mp, t->bt_pinned, 0);
t->bt_pinned = NULL;
}
/* Sync doesn't currently take any flags. */
if (flags != 0) {
errno = EINVAL;
return (RET_ERROR);
}
if (F_ISSET(t, B_INMEM | B_RDONLY) || !F_ISSET(t, B_MODIFIED))
return (RET_SUCCESS);
if (F_ISSET(t, B_METADIRTY) && bt_meta(t) == RET_ERROR)
return (RET_ERROR);
if ((status = mpool_sync(t->bt_mp)) == RET_SUCCESS)
F_CLR(t, B_MODIFIED);
return (status);
}
/*
* BT_META -- write the tree meta data to disk.
*
* Parameters:
* t: tree
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
static int
bt_meta(t)
BTREE *t;
{
BTMETA m;
void *p;
if ((p = mpool_get(t->bt_mp, P_META, 0)) == NULL)
return (RET_ERROR);
/* Fill in metadata. */
m.magic = BTREEMAGIC;
m.version = BTREEVERSION;
m.psize = t->bt_psize;
m.free = t->bt_free;
m.nrecs = t->bt_nrecs;
m.flags = F_ISSET(t, SAVEMETA);
memmove(p, &m, sizeof(BTMETA));
mpool_put(t->bt_mp, p, MPOOL_DIRTY);
return (RET_SUCCESS);
}
+221
View File
@@ -0,0 +1,221 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)bt_conv.c 8.5 (Berkeley) 8/17/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/param.h>
#include <stdio.h>
#include <db.h>
#include "btree.h"
static void mswap __P((PAGE *));
/*
* __BT_BPGIN, __BT_BPGOUT --
* Convert host-specific number layout to/from the host-independent
* format stored on disk.
*
* Parameters:
* t: tree
* pg: page number
* h: page to convert
*/
void
__bt_pgin(t, pg, pp)
void *t;
pgno_t pg;
void *pp;
{
PAGE *h;
indx_t i, top;
u_char flags;
char *p;
if (!F_ISSET(((BTREE *)t), B_NEEDSWAP))
return;
if (pg == P_META) {
mswap(pp);
return;
}
h = pp;
M_32_SWAP(h->pgno);
M_32_SWAP(h->prevpg);
M_32_SWAP(h->nextpg);
M_32_SWAP(h->flags);
M_16_SWAP(h->lower);
M_16_SWAP(h->upper);
top = NEXTINDEX(h);
if ((h->flags & P_TYPE) == P_BINTERNAL)
for (i = 0; i < top; i++) {
M_16_SWAP(h->linp[i]);
p = (char *)GETBINTERNAL(h, i);
P_32_SWAP(p);
p += sizeof(u_int32_t);
P_32_SWAP(p);
p += sizeof(pgno_t);
if (*(u_char *)p & P_BIGKEY) {
p += sizeof(u_char);
P_32_SWAP(p);
p += sizeof(pgno_t);
P_32_SWAP(p);
}
}
else if ((h->flags & P_TYPE) == P_BLEAF)
for (i = 0; i < top; i++) {
M_16_SWAP(h->linp[i]);
p = (char *)GETBLEAF(h, i);
P_32_SWAP(p);
p += sizeof(u_int32_t);
P_32_SWAP(p);
p += sizeof(u_int32_t);
flags = *(u_char *)p;
if (flags & (P_BIGKEY | P_BIGDATA)) {
p += sizeof(u_char);
if (flags & P_BIGKEY) {
P_32_SWAP(p);
p += sizeof(pgno_t);
P_32_SWAP(p);
}
if (flags & P_BIGDATA) {
p += sizeof(u_int32_t);
P_32_SWAP(p);
p += sizeof(pgno_t);
P_32_SWAP(p);
}
}
}
}
void
__bt_pgout(t, pg, pp)
void *t;
pgno_t pg;
void *pp;
{
PAGE *h;
indx_t i, top;
u_char flags;
char *p;
if (!F_ISSET(((BTREE *)t), B_NEEDSWAP))
return;
if (pg == P_META) {
mswap(pp);
return;
}
h = pp;
top = NEXTINDEX(h);
if ((h->flags & P_TYPE) == P_BINTERNAL)
for (i = 0; i < top; i++) {
p = (char *)GETBINTERNAL(h, i);
P_32_SWAP(p);
p += sizeof(u_int32_t);
P_32_SWAP(p);
p += sizeof(pgno_t);
if (*(u_char *)p & P_BIGKEY) {
p += sizeof(u_char);
P_32_SWAP(p);
p += sizeof(pgno_t);
P_32_SWAP(p);
}
M_16_SWAP(h->linp[i]);
}
else if ((h->flags & P_TYPE) == P_BLEAF)
for (i = 0; i < top; i++) {
p = (char *)GETBLEAF(h, i);
P_32_SWAP(p);
p += sizeof(u_int32_t);
P_32_SWAP(p);
p += sizeof(u_int32_t);
flags = *(u_char *)p;
if (flags & (P_BIGKEY | P_BIGDATA)) {
p += sizeof(u_char);
if (flags & P_BIGKEY) {
P_32_SWAP(p);
p += sizeof(pgno_t);
P_32_SWAP(p);
}
if (flags & P_BIGDATA) {
p += sizeof(u_int32_t);
P_32_SWAP(p);
p += sizeof(pgno_t);
P_32_SWAP(p);
}
}
M_16_SWAP(h->linp[i]);
}
M_32_SWAP(h->pgno);
M_32_SWAP(h->prevpg);
M_32_SWAP(h->nextpg);
M_32_SWAP(h->flags);
M_16_SWAP(h->lower);
M_16_SWAP(h->upper);
}
/*
* MSWAP -- Actually swap the bytes on the meta page.
*
* Parameters:
* p: page to convert
*/
static void
mswap(pg)
PAGE *pg;
{
char *p;
p = (char *)pg;
P_32_SWAP(p); /* magic */
p += sizeof(u_int32_t);
P_32_SWAP(p); /* version */
p += sizeof(u_int32_t);
P_32_SWAP(p); /* psize */
p += sizeof(u_int32_t);
P_32_SWAP(p); /* free */
p += sizeof(u_int32_t);
P_32_SWAP(p); /* nrecs */
p += sizeof(u_int32_t);
P_32_SWAP(p); /* flags */
p += sizeof(u_int32_t);
}
+329
View File
@@ -0,0 +1,329 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)bt_debug.c 8.5 (Berkeley) 8/17/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/param.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <db.h>
#include "btree.h"
#ifdef DEBUG
/*
* BT_DUMP -- Dump the tree
*
* Parameters:
* dbp: pointer to the DB
*/
void
__bt_dump(dbp)
DB *dbp;
{
BTREE *t;
PAGE *h;
pgno_t i;
char *sep;
t = dbp->internal;
(void)fprintf(stderr, "%s: pgsz %d",
F_ISSET(t, B_INMEM) ? "memory" : "disk", t->bt_psize);
if (F_ISSET(t, R_RECNO))
(void)fprintf(stderr, " keys %lu", t->bt_nrecs);
#undef X
#define X(flag, name) \
if (F_ISSET(t, flag)) { \
(void)fprintf(stderr, "%s%s", sep, name); \
sep = ", "; \
}
if (t->flags != 0) {
sep = " flags (";
X(R_FIXLEN, "FIXLEN");
X(B_INMEM, "INMEM");
X(B_NODUPS, "NODUPS");
X(B_RDONLY, "RDONLY");
X(R_RECNO, "RECNO");
X(B_METADIRTY,"METADIRTY");
(void)fprintf(stderr, ")\n");
}
#undef X
for (i = P_ROOT; (h = mpool_get(t->bt_mp, i, 0)) != NULL; ++i) {
__bt_dpage(h);
(void)mpool_put(t->bt_mp, h, 0);
}
}
/*
* BT_DMPAGE -- Dump the meta page
*
* Parameters:
* h: pointer to the PAGE
*/
void
__bt_dmpage(h)
PAGE *h;
{
BTMETA *m;
char *sep;
m = (BTMETA *)h;
(void)fprintf(stderr, "magic %lx\n", m->magic);
(void)fprintf(stderr, "version %lu\n", m->version);
(void)fprintf(stderr, "psize %lu\n", m->psize);
(void)fprintf(stderr, "free %lu\n", m->free);
(void)fprintf(stderr, "nrecs %lu\n", m->nrecs);
(void)fprintf(stderr, "flags %lu", m->flags);
#undef X
#define X(flag, name) \
if (m->flags & flag) { \
(void)fprintf(stderr, "%s%s", sep, name); \
sep = ", "; \
}
if (m->flags) {
sep = " (";
X(B_NODUPS, "NODUPS");
X(R_RECNO, "RECNO");
(void)fprintf(stderr, ")");
}
}
/*
* BT_DNPAGE -- Dump the page
*
* Parameters:
* n: page number to dump.
*/
void
__bt_dnpage(dbp, pgno)
DB *dbp;
pgno_t pgno;
{
BTREE *t;
PAGE *h;
t = dbp->internal;
if ((h = mpool_get(t->bt_mp, pgno, 0)) != NULL) {
__bt_dpage(h);
(void)mpool_put(t->bt_mp, h, 0);
}
}
/*
* BT_DPAGE -- Dump the page
*
* Parameters:
* h: pointer to the PAGE
*/
void
__bt_dpage(h)
PAGE *h;
{
BINTERNAL *bi;
BLEAF *bl;
RINTERNAL *ri;
RLEAF *rl;
indx_t cur, top;
char *sep;
(void)fprintf(stderr, " page %d: (", h->pgno);
#undef X
#define X(flag, name) \
if (h->flags & flag) { \
(void)fprintf(stderr, "%s%s", sep, name); \
sep = ", "; \
}
sep = "";
X(P_BINTERNAL, "BINTERNAL") /* types */
X(P_BLEAF, "BLEAF")
X(P_RINTERNAL, "RINTERNAL") /* types */
X(P_RLEAF, "RLEAF")
X(P_OVERFLOW, "OVERFLOW")
X(P_PRESERVE, "PRESERVE");
(void)fprintf(stderr, ")\n");
#undef X
(void)fprintf(stderr, "\tprev %2d next %2d", h->prevpg, h->nextpg);
if (h->flags & P_OVERFLOW)
return;
top = NEXTINDEX(h);
(void)fprintf(stderr, " lower %3d upper %3d nextind %d\n",
h->lower, h->upper, top);
for (cur = 0; cur < top; cur++) {
(void)fprintf(stderr, "\t[%03d] %4d ", cur, h->linp[cur]);
switch (h->flags & P_TYPE) {
case P_BINTERNAL:
bi = GETBINTERNAL(h, cur);
(void)fprintf(stderr,
"size %03d pgno %03d", bi->ksize, bi->pgno);
if (bi->flags & P_BIGKEY)
(void)fprintf(stderr, " (indirect)");
else if (bi->ksize)
(void)fprintf(stderr,
" {%.*s}", (int)bi->ksize, bi->bytes);
break;
case P_RINTERNAL:
ri = GETRINTERNAL(h, cur);
(void)fprintf(stderr, "entries %03d pgno %03d",
ri->nrecs, ri->pgno);
break;
case P_BLEAF:
bl = GETBLEAF(h, cur);
if (bl->flags & P_BIGKEY)
(void)fprintf(stderr,
"big key page %lu size %u/",
*(pgno_t *)bl->bytes,
*(u_int32_t *)(bl->bytes + sizeof(pgno_t)));
else if (bl->ksize)
(void)fprintf(stderr, "%s/", bl->bytes);
if (bl->flags & P_BIGDATA)
(void)fprintf(stderr,
"big data page %lu size %u",
*(pgno_t *)(bl->bytes + bl->ksize),
*(u_int32_t *)(bl->bytes + bl->ksize +
sizeof(pgno_t)));
else if (bl->dsize)
(void)fprintf(stderr, "%.*s",
(int)bl->dsize, bl->bytes + bl->ksize);
break;
case P_RLEAF:
rl = GETRLEAF(h, cur);
if (rl->flags & P_BIGDATA)
(void)fprintf(stderr,
"big data page %lu size %u",
*(pgno_t *)rl->bytes,
*(u_int32_t *)(rl->bytes + sizeof(pgno_t)));
else if (rl->dsize)
(void)fprintf(stderr,
"%.*s", (int)rl->dsize, rl->bytes);
break;
}
(void)fprintf(stderr, "\n");
}
}
#endif
#ifdef STATISTICS
/*
* BT_STAT -- Gather/print the tree statistics
*
* Parameters:
* dbp: pointer to the DB
*/
void
__bt_stat(dbp)
DB *dbp;
{
extern u_long bt_cache_hit, bt_cache_miss, bt_pfxsaved, bt_rootsplit;
extern u_long bt_sortsplit, bt_split;
BTREE *t;
PAGE *h;
pgno_t i, pcont, pinternal, pleaf;
u_long ifree, lfree, nkeys;
int levels;
t = dbp->internal;
pcont = pinternal = pleaf = 0;
nkeys = ifree = lfree = 0;
for (i = P_ROOT; (h = mpool_get(t->bt_mp, i, 0)) != NULL; ++i) {
switch (h->flags & P_TYPE) {
case P_BINTERNAL:
case P_RINTERNAL:
++pinternal;
ifree += h->upper - h->lower;
break;
case P_BLEAF:
case P_RLEAF:
++pleaf;
lfree += h->upper - h->lower;
nkeys += NEXTINDEX(h);
break;
case P_OVERFLOW:
++pcont;
break;
}
(void)mpool_put(t->bt_mp, h, 0);
}
/* Count the levels of the tree. */
for (i = P_ROOT, levels = 0 ;; ++levels) {
h = mpool_get(t->bt_mp, i, 0);
if (h->flags & (P_BLEAF|P_RLEAF)) {
if (levels == 0)
levels = 1;
(void)mpool_put(t->bt_mp, h, 0);
break;
}
i = F_ISSET(t, R_RECNO) ?
GETRINTERNAL(h, 0)->pgno :
GETBINTERNAL(h, 0)->pgno;
(void)mpool_put(t->bt_mp, h, 0);
}
(void)fprintf(stderr, "%d level%s with %ld keys",
levels, levels == 1 ? "" : "s", nkeys);
if (F_ISSET(t, R_RECNO))
(void)fprintf(stderr, " (%ld header count)", t->bt_nrecs);
(void)fprintf(stderr,
"\n%lu pages (leaf %ld, internal %ld, overflow %ld)\n",
pinternal + pleaf + pcont, pleaf, pinternal, pcont);
(void)fprintf(stderr, "%ld cache hits, %ld cache misses\n",
bt_cache_hit, bt_cache_miss);
(void)fprintf(stderr, "%ld splits (%ld root splits, %ld sort splits)\n",
bt_split, bt_rootsplit, bt_sortsplit);
pleaf *= t->bt_psize - BTDATAOFF;
if (pleaf)
(void)fprintf(stderr,
"%.0f%% leaf fill (%ld bytes used, %ld bytes free)\n",
((double)(pleaf - lfree) / pleaf) * 100,
pleaf - lfree, lfree);
pinternal *= t->bt_psize - BTDATAOFF;
if (pinternal)
(void)fprintf(stderr,
"%.0f%% internal fill (%ld bytes used, %ld bytes free\n",
((double)(pinternal - ifree) / pinternal) * 100,
pinternal - ifree, ifree);
if (bt_pfxsaved)
(void)fprintf(stderr, "prefix checking removed %lu bytes.\n",
bt_pfxsaved);
}
#endif
+657
View File
@@ -0,0 +1,657 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)bt_delete.c 8.13 (Berkeley) 7/28/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <db.h>
#include "btree.h"
static int __bt_bdelete __P((BTREE *, const DBT *));
static int __bt_curdel __P((BTREE *, const DBT *, PAGE *, u_int));
static int __bt_pdelete __P((BTREE *, PAGE *));
static int __bt_relink __P((BTREE *, PAGE *));
static int __bt_stkacq __P((BTREE *, PAGE **, CURSOR *));
/*
* __bt_delete
* Delete the item(s) referenced by a key.
*
* Return RET_SPECIAL if the key is not found.
*/
int
__bt_delete(dbp, key, flags)
const DB *dbp;
const DBT *key;
u_int flags;
{
BTREE *t;
CURSOR *c;
PAGE *h;
int status;
t = dbp->internal;
/* Toss any page pinned across calls. */
if (t->bt_pinned != NULL) {
mpool_put(t->bt_mp, t->bt_pinned, 0);
t->bt_pinned = NULL;
}
/* Check for change to a read-only tree. */
if (F_ISSET(t, B_RDONLY)) {
errno = EPERM;
return (RET_ERROR);
}
switch (flags) {
case 0:
status = __bt_bdelete(t, key);
break;
case R_CURSOR:
/*
* If flags is R_CURSOR, delete the cursor. Must already
* have started a scan and not have already deleted it.
*/
c = &t->bt_cursor;
if (F_ISSET(c, CURS_INIT)) {
if (F_ISSET(c, CURS_ACQUIRE | CURS_AFTER | CURS_BEFORE))
return (RET_SPECIAL);
if ((h = mpool_get(t->bt_mp, c->pg.pgno, 0)) == NULL)
return (RET_ERROR);
/*
* If the page is about to be emptied, we'll need to
* delete it, which means we have to acquire a stack.
*/
if (NEXTINDEX(h) == 1)
if (__bt_stkacq(t, &h, &t->bt_cursor))
return (RET_ERROR);
status = __bt_dleaf(t, NULL, h, c->pg.index);
if (NEXTINDEX(h) == 0 && status == RET_SUCCESS) {
if (__bt_pdelete(t, h))
return (RET_ERROR);
} else
mpool_put(t->bt_mp,
h, status == RET_SUCCESS ? MPOOL_DIRTY : 0);
break;
}
/* FALLTHROUGH */
default:
errno = EINVAL;
return (RET_ERROR);
}
if (status == RET_SUCCESS)
F_SET(t, B_MODIFIED);
return (status);
}
/*
* __bt_stkacq --
* Acquire a stack so we can delete a cursor entry.
*
* Parameters:
* t: tree
* hp: pointer to current, pinned PAGE pointer
* c: pointer to the cursor
*
* Returns:
* 0 on success, 1 on failure
*/
static int
__bt_stkacq(t, hp, c)
BTREE *t;
PAGE **hp;
CURSOR *c;
{
BINTERNAL *bi;
EPG *e;
EPGNO *parent;
PAGE *h;
indx_t index;
pgno_t pgno;
recno_t nextpg, prevpg;
int exact, level;
/*
* Find the first occurrence of the key in the tree. Toss the
* currently locked page so we don't hit an already-locked page.
*/
h = *hp;
mpool_put(t->bt_mp, h, 0);
if ((e = __bt_search(t, &c->key, &exact)) == NULL)
return (1);
h = e->page;
/* See if we got it in one shot. */
if (h->pgno == c->pg.pgno)
goto ret;
/*
* Move right, looking for the page. At each move we have to move
* up the stack until we don't have to move to the next page. If
* we have to change pages at an internal level, we have to fix the
* stack back up.
*/
while (h->pgno != c->pg.pgno) {
if ((nextpg = h->nextpg) == P_INVALID)
break;
mpool_put(t->bt_mp, h, 0);
/* Move up the stack. */
for (level = 0; (parent = BT_POP(t)) != NULL; ++level) {
/* Get the parent page. */
if ((h = mpool_get(t->bt_mp, parent->pgno, 0)) == NULL)
return (1);
/* Move to the next index. */
if (parent->index != NEXTINDEX(h) - 1) {
index = parent->index + 1;
BT_PUSH(t, h->pgno, index);
break;
}
mpool_put(t->bt_mp, h, 0);
}
/* Restore the stack. */
while (level--) {
/* Push the next level down onto the stack. */
bi = GETBINTERNAL(h, index);
pgno = bi->pgno;
BT_PUSH(t, pgno, 0);
/* Lose the currently pinned page. */
mpool_put(t->bt_mp, h, 0);
/* Get the next level down. */
if ((h = mpool_get(t->bt_mp, pgno, 0)) == NULL)
return (1);
index = 0;
}
mpool_put(t->bt_mp, h, 0);
if ((h = mpool_get(t->bt_mp, nextpg, 0)) == NULL)
return (1);
}
if (h->pgno == c->pg.pgno)
goto ret;
/* Reacquire the original stack. */
mpool_put(t->bt_mp, h, 0);
if ((e = __bt_search(t, &c->key, &exact)) == NULL)
return (1);
h = e->page;
/*
* Move left, looking for the page. At each move we have to move
* up the stack until we don't have to change pages to move to the
* next page. If we have to change pages at an internal level, we
* have to fix the stack back up.
*/
while (h->pgno != c->pg.pgno) {
if ((prevpg = h->prevpg) == P_INVALID)
break;
mpool_put(t->bt_mp, h, 0);
/* Move up the stack. */
for (level = 0; (parent = BT_POP(t)) != NULL; ++level) {
/* Get the parent page. */
if ((h = mpool_get(t->bt_mp, parent->pgno, 0)) == NULL)
return (1);
/* Move to the next index. */
if (parent->index != 0) {
index = parent->index - 1;
BT_PUSH(t, h->pgno, index);
break;
}
mpool_put(t->bt_mp, h, 0);
}
/* Restore the stack. */
while (level--) {
/* Push the next level down onto the stack. */
bi = GETBINTERNAL(h, index);
pgno = bi->pgno;
/* Lose the currently pinned page. */
mpool_put(t->bt_mp, h, 0);
/* Get the next level down. */
if ((h = mpool_get(t->bt_mp, pgno, 0)) == NULL)
return (1);
index = NEXTINDEX(h) - 1;
BT_PUSH(t, pgno, index);
}
mpool_put(t->bt_mp, h, 0);
if ((h = mpool_get(t->bt_mp, prevpg, 0)) == NULL)
return (1);
}
ret: mpool_put(t->bt_mp, h, 0);
return ((*hp = mpool_get(t->bt_mp, c->pg.pgno, 0)) == NULL);
}
/*
* __bt_bdelete --
* Delete all key/data pairs matching the specified key.
*
* Parameters:
* t: tree
* key: key to delete
*
* Returns:
* RET_ERROR, RET_SUCCESS and RET_SPECIAL if the key not found.
*/
static int
__bt_bdelete(t, key)
BTREE *t;
const DBT *key;
{
EPG *e;
PAGE *h;
int deleted, exact, redo;
deleted = 0;
/* Find any matching record; __bt_search pins the page. */
loop: if ((e = __bt_search(t, key, &exact)) == NULL)
return (deleted ? RET_SUCCESS : RET_ERROR);
if (!exact) {
mpool_put(t->bt_mp, e->page, 0);
return (deleted ? RET_SUCCESS : RET_SPECIAL);
}
/*
* Delete forward, then delete backward, from the found key. If
* there are duplicates and we reach either side of the page, do
* the key search again, so that we get them all.
*/
redo = 0;
h = e->page;
do {
if (__bt_dleaf(t, key, h, e->index)) {
mpool_put(t->bt_mp, h, 0);
return (RET_ERROR);
}
if (F_ISSET(t, B_NODUPS)) {
if (NEXTINDEX(h) == 0) {
if (__bt_pdelete(t, h))
return (RET_ERROR);
} else
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
return (RET_SUCCESS);
}
deleted = 1;
} while (e->index < NEXTINDEX(h) && __bt_cmp(t, key, e) == 0);
/* Check for right-hand edge of the page. */
if (e->index == NEXTINDEX(h))
redo = 1;
/* Delete from the key to the beginning of the page. */
while (e->index-- > 0) {
if (__bt_cmp(t, key, e) != 0)
break;
if (__bt_dleaf(t, key, h, e->index) == RET_ERROR) {
mpool_put(t->bt_mp, h, 0);
return (RET_ERROR);
}
if (e->index == 0)
redo = 1;
}
/* Check for an empty page. */
if (NEXTINDEX(h) == 0) {
if (__bt_pdelete(t, h))
return (RET_ERROR);
goto loop;
}
/* Put the page. */
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
if (redo)
goto loop;
return (RET_SUCCESS);
}
/*
* __bt_pdelete --
* Delete a single page from the tree.
*
* Parameters:
* t: tree
* h: leaf page
*
* Returns:
* RET_SUCCESS, RET_ERROR.
*
* Side-effects:
* mpool_put's the page
*/
static int
__bt_pdelete(t, h)
BTREE *t;
PAGE *h;
{
BINTERNAL *bi;
PAGE *pg;
EPGNO *parent;
indx_t cnt, index, *ip, offset;
u_int32_t nksize;
char *from;
/*
* Walk the parent page stack -- a LIFO stack of the pages that were
* traversed when we searched for the page where the delete occurred.
* Each stack entry is a page number and a page index offset. The
* offset is for the page traversed on the search. We've just deleted
* a page, so we have to delete the key from the parent page.
*
* If the delete from the parent page makes it empty, this process may
* continue all the way up the tree. We stop if we reach the root page
* (which is never deleted, it's just not worth the effort) or if the
* delete does not empty the page.
*/
while ((parent = BT_POP(t)) != NULL) {
/* Get the parent page. */
if ((pg = mpool_get(t->bt_mp, parent->pgno, 0)) == NULL)
return (RET_ERROR);
index = parent->index;
bi = GETBINTERNAL(pg, index);
/* Free any overflow pages. */
if (bi->flags & P_BIGKEY &&
__ovfl_delete(t, bi->bytes) == RET_ERROR) {
mpool_put(t->bt_mp, pg, 0);
return (RET_ERROR);
}
/*
* Free the parent if it has only the one key and it's not the
* root page. If it's the rootpage, turn it back into an empty
* leaf page.
*/
if (NEXTINDEX(pg) == 1)
if (pg->pgno == P_ROOT) {
pg->lower = BTDATAOFF;
pg->upper = t->bt_psize;
pg->flags = P_BLEAF;
} else {
if (__bt_relink(t, pg) || __bt_free(t, pg))
return (RET_ERROR);
continue;
}
else {
/* Pack remaining key items at the end of the page. */
nksize = NBINTERNAL(bi->ksize);
from = (char *)pg + pg->upper;
memmove(from + nksize, from, (char *)bi - from);
pg->upper += nksize;
/* Adjust indices' offsets, shift the indices down. */
offset = pg->linp[index];
for (cnt = index, ip = &pg->linp[0]; cnt--; ++ip)
if (ip[0] < offset)
ip[0] += nksize;
for (cnt = NEXTINDEX(pg) - index; --cnt; ++ip)
ip[0] = ip[1] < offset ? ip[1] + nksize : ip[1];
pg->lower -= sizeof(indx_t);
}
mpool_put(t->bt_mp, pg, MPOOL_DIRTY);
break;
}
/* Free the leaf page, as long as it wasn't the root. */
if (h->pgno == P_ROOT) {
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
return (RET_SUCCESS);
}
return (__bt_relink(t, h) || __bt_free(t, h));
}
/*
* __bt_dleaf --
* Delete a single record from a leaf page.
*
* Parameters:
* t: tree
* key: referenced key
* h: page
* index: index on page to delete
*
* Returns:
* RET_SUCCESS, RET_ERROR.
*/
int
__bt_dleaf(t, key, h, index)
BTREE *t;
const DBT *key;
PAGE *h;
u_int index;
{
BLEAF *bl;
indx_t cnt, *ip, offset;
u_int32_t nbytes;
void *to;
char *from;
/* If this record is referenced by the cursor, delete the cursor. */
if (F_ISSET(&t->bt_cursor, CURS_INIT) &&
!F_ISSET(&t->bt_cursor, CURS_ACQUIRE) &&
t->bt_cursor.pg.pgno == h->pgno && t->bt_cursor.pg.index == index &&
__bt_curdel(t, key, h, index))
return (RET_ERROR);
/* If the entry uses overflow pages, make them available for reuse. */
to = bl = GETBLEAF(h, index);
if (bl->flags & P_BIGKEY && __ovfl_delete(t, bl->bytes) == RET_ERROR)
return (RET_ERROR);
if (bl->flags & P_BIGDATA &&
__ovfl_delete(t, bl->bytes + bl->ksize) == RET_ERROR)
return (RET_ERROR);
/* Pack the remaining key/data items at the end of the page. */
nbytes = NBLEAF(bl);
from = (char *)h + h->upper;
memmove(from + nbytes, from, (char *)to - from);
h->upper += nbytes;
/* Adjust the indices' offsets, shift the indices down. */
offset = h->linp[index];
for (cnt = index, ip = &h->linp[0]; cnt--; ++ip)
if (ip[0] < offset)
ip[0] += nbytes;
for (cnt = NEXTINDEX(h) - index; --cnt; ++ip)
ip[0] = ip[1] < offset ? ip[1] + nbytes : ip[1];
h->lower -= sizeof(indx_t);
/* If the cursor is on this page, adjust it as necessary. */
if (F_ISSET(&t->bt_cursor, CURS_INIT) &&
!F_ISSET(&t->bt_cursor, CURS_ACQUIRE) &&
t->bt_cursor.pg.pgno == h->pgno && t->bt_cursor.pg.index > index)
--t->bt_cursor.pg.index;
return (RET_SUCCESS);
}
/*
* __bt_curdel --
* Delete the cursor.
*
* Parameters:
* t: tree
* key: referenced key (or NULL)
* h: page
* index: index on page to delete
*
* Returns:
* RET_SUCCESS, RET_ERROR.
*/
static int
__bt_curdel(t, key, h, index)
BTREE *t;
const DBT *key;
PAGE *h;
u_int index;
{
CURSOR *c;
EPG e;
PAGE *pg;
int curcopy, status;
/*
* If there are duplicates, move forward or backward to one.
* Otherwise, copy the key into the cursor area.
*/
c = &t->bt_cursor;
F_CLR(c, CURS_AFTER | CURS_BEFORE | CURS_ACQUIRE);
curcopy = 0;
if (!F_ISSET(t, B_NODUPS)) {
/*
* We're going to have to do comparisons. If we weren't
* provided a copy of the key, i.e. the user is deleting
* the current cursor position, get one.
*/
if (key == NULL) {
e.page = h;
e.index = index;
if ((status = __bt_ret(t, &e,
&c->key, &c->key, NULL, NULL, 1)) != RET_SUCCESS)
return (status);
curcopy = 1;
key = &c->key;
}
/* Check previous key, if not at the beginning of the page. */
if (index > 0) {
e.page = h;
e.index = index - 1;
if (__bt_cmp(t, key, &e) == 0) {
F_SET(c, CURS_BEFORE);
goto dup2;
}
}
/* Check next key, if not at the end of the page. */
if (index < NEXTINDEX(h) - 1) {
e.page = h;
e.index = index + 1;
if (__bt_cmp(t, key, &e) == 0) {
F_SET(c, CURS_AFTER);
goto dup2;
}
}
/* Check previous key if at the beginning of the page. */
if (index == 0 && h->prevpg != P_INVALID) {
if ((pg = mpool_get(t->bt_mp, h->prevpg, 0)) == NULL)
return (RET_ERROR);
e.page = pg;
e.index = NEXTINDEX(pg) - 1;
if (__bt_cmp(t, key, &e) == 0) {
F_SET(c, CURS_BEFORE);
goto dup1;
}
mpool_put(t->bt_mp, pg, 0);
}
/* Check next key if at the end of the page. */
if (index == NEXTINDEX(h) - 1 && h->nextpg != P_INVALID) {
if ((pg = mpool_get(t->bt_mp, h->nextpg, 0)) == NULL)
return (RET_ERROR);
e.page = pg;
e.index = 0;
if (__bt_cmp(t, key, &e) == 0) {
F_SET(c, CURS_AFTER);
dup1: mpool_put(t->bt_mp, pg, 0);
dup2: c->pg.pgno = e.page->pgno;
c->pg.index = e.index;
return (RET_SUCCESS);
}
mpool_put(t->bt_mp, pg, 0);
}
}
e.page = h;
e.index = index;
if (curcopy || (status =
__bt_ret(t, &e, &c->key, &c->key, NULL, NULL, 1)) == RET_SUCCESS) {
F_SET(c, CURS_ACQUIRE);
return (RET_SUCCESS);
}
return (status);
}
/*
* __bt_relink --
* Link around a deleted page.
*
* Parameters:
* t: tree
* h: page to be deleted
*/
static int
__bt_relink(t, h)
BTREE *t;
PAGE *h;
{
PAGE *pg;
if (h->nextpg != P_INVALID) {
if ((pg = mpool_get(t->bt_mp, h->nextpg, 0)) == NULL)
return (RET_ERROR);
pg->prevpg = h->prevpg;
mpool_put(t->bt_mp, pg, MPOOL_DIRTY);
}
if (h->prevpg != P_INVALID) {
if ((pg = mpool_get(t->bt_mp, h->prevpg, 0)) == NULL)
return (RET_ERROR);
pg->nextpg = h->nextpg;
mpool_put(t->bt_mp, pg, MPOOL_DIRTY);
}
return (0);
}
+105
View File
@@ -0,0 +1,105 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)bt_get.c 8.6 (Berkeley) 7/20/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <errno.h>
#include <stddef.h>
#include <stdio.h>
#include <db.h>
#include "btree.h"
/*
* __BT_GET -- Get a record from the btree.
*
* Parameters:
* dbp: pointer to access method
* key: key to find
* data: data to return
* flag: currently unused
*
* Returns:
* RET_ERROR, RET_SUCCESS and RET_SPECIAL if the key not found.
*/
int
__bt_get(dbp, key, data, flags)
const DB *dbp;
const DBT *key;
DBT *data;
u_int flags;
{
BTREE *t;
EPG *e;
int exact, status;
t = dbp->internal;
/* Toss any page pinned across calls. */
if (t->bt_pinned != NULL) {
mpool_put(t->bt_mp, t->bt_pinned, 0);
t->bt_pinned = NULL;
}
/* Get currently doesn't take any flags. */
if (flags) {
errno = EINVAL;
return (RET_ERROR);
}
if ((e = __bt_search(t, key, &exact)) == NULL)
return (RET_ERROR);
if (!exact) {
mpool_put(t->bt_mp, e->page, 0);
return (RET_SPECIAL);
}
status = __bt_ret(t, e, NULL, NULL, data, &t->bt_rdata, 0);
/*
* If the user is doing concurrent access, we copied the
* key/data, toss the page.
*/
if (F_ISSET(t, B_DB_LOCK))
mpool_put(t->bt_mp, e->page, 0);
else
t->bt_pinned = e->page;
return (status);
}
+456
View File
@@ -0,0 +1,456 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)bt_open.c 8.10 (Berkeley) 8/17/94";
#endif /* LIBC_SCCS and not lint */
/*
* Implementation of btree access method for 4.4BSD.
*
* The design here was originally based on that of the btree access method
* used in the Postgres database system at UC Berkeley. This implementation
* is wholly independent of the Postgres code.
*/
#include <sys/param.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <db.h>
#include "btree.h"
#ifdef DEBUG
#undef MINPSIZE
#define MINPSIZE 128
#endif
static int byteorder __P((void));
static int nroot __P((BTREE *));
static int tmp __P((void));
/*
* __BT_OPEN -- Open a btree.
*
* Creates and fills a DB struct, and calls the routine that actually
* opens the btree.
*
* Parameters:
* fname: filename (NULL for in-memory trees)
* flags: open flag bits
* mode: open permission bits
* b: BTREEINFO pointer
*
* Returns:
* NULL on failure, pointer to DB on success.
*
*/
DB *
__bt_open(fname, flags, mode, openinfo, dflags)
const char *fname;
int flags, mode, dflags;
const BTREEINFO *openinfo;
{
struct stat sb;
BTMETA m;
BTREE *t;
BTREEINFO b;
DB *dbp;
pgno_t ncache;
ssize_t nr;
int machine_lorder;
t = NULL;
/*
* Intention is to make sure all of the user's selections are okay
* here and then use them without checking. Can't be complete, since
* we don't know the right page size, lorder or flags until the backing
* file is opened. Also, the file's page size can cause the cachesize
* to change.
*/
machine_lorder = byteorder();
if (openinfo) {
b = *openinfo;
/* Flags: R_DUP. */
if (b.flags & ~(R_DUP))
goto einval;
/*
* Page size must be indx_t aligned and >= MINPSIZE. Default
* page size is set farther on, based on the underlying file
* transfer size.
*/
if (b.psize &&
(b.psize < MINPSIZE || b.psize > MAX_PAGE_OFFSET + 1 ||
b.psize & sizeof(indx_t) - 1))
goto einval;
/* Minimum number of keys per page; absolute minimum is 2. */
if (b.minkeypage) {
if (b.minkeypage < 2)
goto einval;
} else
b.minkeypage = DEFMINKEYPAGE;
/* If no comparison, use default comparison and prefix. */
if (b.compare == NULL) {
b.compare = __bt_defcmp;
if (b.prefix == NULL)
b.prefix = __bt_defpfx;
}
if (b.lorder == 0)
b.lorder = machine_lorder;
} else {
b.compare = __bt_defcmp;
b.cachesize = 0;
b.flags = 0;
b.lorder = machine_lorder;
b.minkeypage = DEFMINKEYPAGE;
b.prefix = __bt_defpfx;
b.psize = 0;
}
/* Check for the ubiquitous PDP-11. */
if (b.lorder != BIG_ENDIAN && b.lorder != LITTLE_ENDIAN)
goto einval;
/* Allocate and initialize DB and BTREE structures. */
if ((t = (BTREE *)malloc(sizeof(BTREE))) == NULL)
goto err;
memset(t, 0, sizeof(BTREE));
t->bt_fd = -1; /* Don't close unopened fd on error. */
t->bt_lorder = b.lorder;
t->bt_order = NOT;
t->bt_cmp = b.compare;
t->bt_pfx = b.prefix;
t->bt_rfd = -1;
if ((t->bt_dbp = dbp = (DB *)malloc(sizeof(DB))) == NULL)
goto err;
memset(t->bt_dbp, 0, sizeof(DB));
if (t->bt_lorder != machine_lorder)
F_SET(t, B_NEEDSWAP);
dbp->type = DB_BTREE;
dbp->internal = t;
dbp->close = __bt_close;
dbp->del = __bt_delete;
dbp->fd = __bt_fd;
dbp->get = __bt_get;
dbp->put = __bt_put;
dbp->seq = __bt_seq;
dbp->sync = __bt_sync;
/*
* If no file name was supplied, this is an in-memory btree and we
* open a backing temporary file. Otherwise, it's a disk-based tree.
*/
if (fname) {
switch (flags & O_ACCMODE) {
case O_RDONLY:
F_SET(t, B_RDONLY);
break;
case O_RDWR:
break;
case O_WRONLY:
default:
goto einval;
}
if ((t->bt_fd = open(fname, flags, mode)) < 0)
goto err;
} else {
if ((flags & O_ACCMODE) != O_RDWR)
goto einval;
if ((t->bt_fd = tmp()) == -1)
goto err;
F_SET(t, B_INMEM);
}
if (fcntl(t->bt_fd, F_SETFD, 1) == -1)
goto err;
if (fstat(t->bt_fd, &sb))
goto err;
if (sb.st_size) {
if ((nr = read(t->bt_fd, &m, sizeof(BTMETA))) < 0)
goto err;
if (nr != sizeof(BTMETA))
goto eftype;
/*
* Read in the meta-data. This can change the notion of what
* the lorder, page size and flags are, and, when the page size
* changes, the cachesize value can change too. If the user
* specified the wrong byte order for an existing database, we
* don't bother to return an error, we just clear the NEEDSWAP
* bit.
*/
if (m.magic == BTREEMAGIC)
F_CLR(t, B_NEEDSWAP);
else {
F_SET(t, B_NEEDSWAP);
M_32_SWAP(m.magic);
M_32_SWAP(m.version);
M_32_SWAP(m.psize);
M_32_SWAP(m.free);
M_32_SWAP(m.nrecs);
M_32_SWAP(m.flags);
}
if (m.magic != BTREEMAGIC || m.version != BTREEVERSION)
goto eftype;
if (m.psize < MINPSIZE || m.psize > MAX_PAGE_OFFSET + 1 ||
m.psize & sizeof(indx_t) - 1)
goto eftype;
if (m.flags & ~SAVEMETA)
goto eftype;
b.psize = m.psize;
F_SET(t, m.flags);
t->bt_free = m.free;
t->bt_nrecs = m.nrecs;
} else {
/*
* Set the page size to the best value for I/O to this file.
* Don't overflow the page offset type.
*/
if (b.psize == 0) {
b.psize = sb.st_blksize;
if (b.psize < MINPSIZE)
b.psize = MINPSIZE;
if (b.psize > MAX_PAGE_OFFSET + 1)
b.psize = MAX_PAGE_OFFSET + 1;
}
/* Set flag if duplicates permitted. */
if (!(b.flags & R_DUP))
F_SET(t, B_NODUPS);
t->bt_free = P_INVALID;
t->bt_nrecs = 0;
F_SET(t, B_METADIRTY);
}
t->bt_psize = b.psize;
/* Set the cache size; must be a multiple of the page size. */
if (b.cachesize && b.cachesize & b.psize - 1)
b.cachesize += (~b.cachesize & b.psize - 1) + 1;
if (b.cachesize < b.psize * MINCACHE)
b.cachesize = b.psize * MINCACHE;
/* Calculate number of pages to cache. */
ncache = (b.cachesize + t->bt_psize - 1) / t->bt_psize;
/*
* The btree data structure requires that at least two keys can fit on
* a page, but other than that there's no fixed requirement. The user
* specified a minimum number per page, and we translated that into the
* number of bytes a key/data pair can use before being placed on an
* overflow page. This calculation includes the page header, the size
* of the index referencing the leaf item and the size of the leaf item
* structure. Also, don't let the user specify a minkeypage such that
* a key/data pair won't fit even if both key and data are on overflow
* pages.
*/
t->bt_ovflsize = (t->bt_psize - BTDATAOFF) / b.minkeypage -
(sizeof(indx_t) + NBLEAFDBT(0, 0));
if (t->bt_ovflsize < NBLEAFDBT(NOVFLSIZE, NOVFLSIZE) + sizeof(indx_t))
t->bt_ovflsize =
NBLEAFDBT(NOVFLSIZE, NOVFLSIZE) + sizeof(indx_t);
/* Initialize the buffer pool. */
if ((t->bt_mp =
mpool_open(NULL, t->bt_fd, t->bt_psize, ncache)) == NULL)
goto err;
if (!F_ISSET(t, B_INMEM))
mpool_filter(t->bt_mp, __bt_pgin, __bt_pgout, t);
/* Create a root page if new tree. */
if (nroot(t) == RET_ERROR)
goto err;
/* Global flags. */
if (dflags & DB_LOCK)
F_SET(t, B_DB_LOCK);
if (dflags & DB_SHMEM)
F_SET(t, B_DB_SHMEM);
if (dflags & DB_TXN)
F_SET(t, B_DB_TXN);
return (dbp);
einval: errno = EINVAL;
goto err;
eftype: errno = EFTYPE;
goto err;
err: if (t) {
if (t->bt_dbp)
free(t->bt_dbp);
if (t->bt_fd != -1)
(void)close(t->bt_fd);
free(t);
}
return (NULL);
}
/*
* NROOT -- Create the root of a new tree.
*
* Parameters:
* t: tree
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
static int
nroot(t)
BTREE *t;
{
PAGE *meta, *root;
pgno_t npg;
if ((meta = mpool_get(t->bt_mp, 0, 0)) != NULL) {
mpool_put(t->bt_mp, meta, 0);
return (RET_SUCCESS);
}
if (errno != EINVAL) /* It's OK to not exist. */
return (RET_ERROR);
errno = 0;
if ((meta = mpool_new(t->bt_mp, &npg)) == NULL)
return (RET_ERROR);
if ((root = mpool_new(t->bt_mp, &npg)) == NULL)
return (RET_ERROR);
if (npg != P_ROOT)
return (RET_ERROR);
root->pgno = npg;
root->prevpg = root->nextpg = P_INVALID;
root->lower = BTDATAOFF;
root->upper = t->bt_psize;
root->flags = P_BLEAF;
memset(meta, 0, t->bt_psize);
mpool_put(t->bt_mp, meta, MPOOL_DIRTY);
mpool_put(t->bt_mp, root, MPOOL_DIRTY);
return (RET_SUCCESS);
}
static int
tmp()
{
sigset_t set, oset;
int fd;
const char *envtmp;
char *path;
static const char fmt[] = "%s/bt.XXXXXX";
size_t n;
envtmp = getenv("TMPDIR");
if (!envtmp)
envtmp = "/tmp";
n = strlen (envtmp) + sizeof fmt;
#ifdef __GNUC__
path = __builtin_alloca(n);
#else
path = malloc(n);
#endif
(void)snprintf(path, n, fmt, envtmp ? envtmp : "/tmp");
(void)sigfillset(&set);
(void)sigprocmask(SIG_BLOCK, &set, &oset);
if ((fd = mkstemp(path)) != -1)
(void)unlink(path);
(void)sigprocmask(SIG_SETMASK, &oset, NULL);
#ifndef __GNUC__
free(path);
#endif
return(fd);
}
static int
byteorder()
{
u_int32_t x;
u_char *p;
x = 0x01020304;
p = (u_char *)&x;
switch (*p) {
case 1:
return (BIG_ENDIAN);
case 4:
return (LITTLE_ENDIAN);
default:
return (0);
}
}
int
__bt_fd(dbp)
const DB *dbp;
{
BTREE *t;
t = dbp->internal;
/* Toss any page pinned across calls. */
if (t->bt_pinned != NULL) {
mpool_put(t->bt_mp, t->bt_pinned, 0);
t->bt_pinned = NULL;
}
/* In-memory database can't have a file descriptor. */
if (F_ISSET(t, B_INMEM)) {
errno = ENOENT;
return (-1);
}
return (t->bt_fd);
}
+228
View File
@@ -0,0 +1,228 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)bt_overflow.c 8.5 (Berkeley) 7/16/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/param.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <db.h>
#include "btree.h"
/*
* Big key/data code.
*
* Big key and data entries are stored on linked lists of pages. The initial
* reference is byte string stored with the key or data and is the page number
* and size. The actual record is stored in a chain of pages linked by the
* nextpg field of the PAGE header.
*
* The first page of the chain has a special property. If the record is used
* by an internal page, it cannot be deleted and the P_PRESERVE bit will be set
* in the header.
*
* XXX
* A single DBT is written to each chain, so a lot of space on the last page
* is wasted. This is a fairly major bug for some data sets.
*/
/*
* __OVFL_GET -- Get an overflow key/data item.
*
* Parameters:
* t: tree
* p: pointer to { pgno_t, u_int32_t }
* buf: storage address
* bufsz: storage size
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
int
__ovfl_get(t, p, ssz, buf, bufsz)
BTREE *t;
void *p;
size_t *ssz;
void **buf;
size_t *bufsz;
{
PAGE *h;
pgno_t pg;
size_t nb, plen;
u_int32_t sz;
memmove(&pg, p, sizeof(pgno_t));
memmove(&sz, (char *)p + sizeof(pgno_t), sizeof(u_int32_t));
*ssz = sz;
#ifdef DEBUG
if (pg == P_INVALID || sz == 0)
abort();
#endif
/* Make the buffer bigger as necessary. */
if (*bufsz < sz) {
*buf = (char *)(*buf == NULL ? malloc(sz) : realloc(*buf, sz));
if (*buf == NULL)
return (RET_ERROR);
*bufsz = sz;
}
/*
* Step through the linked list of pages, copying the data on each one
* into the buffer. Never copy more than the data's length.
*/
plen = t->bt_psize - BTDATAOFF;
for (p = *buf;; p = (char *)p + nb, pg = h->nextpg) {
if ((h = mpool_get(t->bt_mp, pg, 0)) == NULL)
return (RET_ERROR);
nb = MIN(sz, plen);
memmove(p, (char *)h + BTDATAOFF, nb);
mpool_put(t->bt_mp, h, 0);
if ((sz -= nb) == 0)
break;
}
return (RET_SUCCESS);
}
/*
* __OVFL_PUT -- Store an overflow key/data item.
*
* Parameters:
* t: tree
* data: DBT to store
* pgno: storage page number
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
int
__ovfl_put(t, dbt, pg)
BTREE *t;
const DBT *dbt;
pgno_t *pg;
{
PAGE *h, *last;
void *p;
pgno_t npg;
size_t nb, plen;
u_int32_t sz;
/*
* Allocate pages and copy the key/data record into them. Store the
* number of the first page in the chain.
*/
plen = t->bt_psize - BTDATAOFF;
for (last = NULL, p = dbt->data, sz = dbt->size;;
p = (char *)p + plen, last = h) {
if ((h = __bt_new(t, &npg)) == NULL)
return (RET_ERROR);
h->pgno = npg;
h->nextpg = h->prevpg = P_INVALID;
h->flags = P_OVERFLOW;
h->lower = h->upper = 0;
nb = MIN(sz, plen);
memmove((char *)h + BTDATAOFF, p, nb);
if (last) {
last->nextpg = h->pgno;
mpool_put(t->bt_mp, last, MPOOL_DIRTY);
} else
*pg = h->pgno;
if ((sz -= nb) == 0) {
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
break;
}
}
return (RET_SUCCESS);
}
/*
* __OVFL_DELETE -- Delete an overflow chain.
*
* Parameters:
* t: tree
* p: pointer to { pgno_t, u_int32_t }
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
int
__ovfl_delete(t, p)
BTREE *t;
void *p;
{
PAGE *h;
pgno_t pg;
size_t plen;
u_int32_t sz;
memmove(&pg, p, sizeof(pgno_t));
memmove(&sz, (char *)p + sizeof(pgno_t), sizeof(u_int32_t));
#ifdef DEBUG
if (pg == P_INVALID || sz == 0)
abort();
#endif
if ((h = mpool_get(t->bt_mp, pg, 0)) == NULL)
return (RET_ERROR);
/* Don't delete chains used by internal pages. */
if (h->flags & P_PRESERVE) {
mpool_put(t->bt_mp, h, 0);
return (RET_SUCCESS);
}
/* Step through the chain, calling the free routine for each page. */
for (plen = t->bt_psize - BTDATAOFF;; sz -= plen) {
pg = h->nextpg;
__bt_free(t, h);
if (sz <= plen)
break;
if ((h = mpool_get(t->bt_mp, pg, 0)) == NULL)
return (RET_ERROR);
}
return (RET_SUCCESS);
}
+55 -29
View File
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1988, 1993
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,41 +32,67 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)logout.c 8.1 (Berkeley) 6/4/93";
static char sccsid[] = "@(#)bt_page.c 8.3 (Berkeley) 7/14/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <sys/time.h>
#include <fcntl.h>
#include <utmp.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
typedef struct utmp UTMP;
#include <db.h>
#include "btree.h"
/*
* __bt_free --
* Put a page on the freelist.
*
* Parameters:
* t: tree
* h: page to free
*
* Returns:
* RET_ERROR, RET_SUCCESS
*
* Side-effect:
* mpool_put's the page.
*/
int
logout(line)
register char *line;
__bt_free(t, h)
BTREE *t;
PAGE *h;
{
register int fd;
UTMP ut;
int rval;
/* Insert the page at the head of the free list. */
h->prevpg = P_INVALID;
h->nextpg = t->bt_free;
t->bt_free = h->pgno;
if ((fd = open(_PATH_UTMP, O_RDWR, 0)) < 0)
return(0);
rval = 0;
while (read(fd, &ut, sizeof(UTMP)) == sizeof(UTMP)) {
if (!ut.ut_name[0] || strncmp(ut.ut_line, line, UT_LINESIZE))
continue;
bzero(ut.ut_name, UT_NAMESIZE);
bzero(ut.ut_host, UT_HOSTSIZE);
(void)time(&ut.ut_time);
(void)lseek(fd, -(off_t)sizeof(UTMP), L_INCR);
(void)write(fd, &ut, sizeof(UTMP));
rval = 1;
/* Make sure the page gets written back. */
return (mpool_put(t->bt_mp, h, MPOOL_DIRTY));
}
/*
* __bt_new --
* Get a new page, preferably from the freelist.
*
* Parameters:
* t: tree
* npg: storage for page number.
*
* Returns:
* Pointer to a page, NULL on error.
*/
PAGE *
__bt_new(t, npg)
BTREE *t;
pgno_t *npg;
{
PAGE *h;
if (t->bt_free != P_INVALID &&
(h = mpool_get(t->bt_mp, t->bt_free, 0)) != NULL) {
*npg = t->bt_free;
t->bt_free = h->nextpg;
return (h);
}
(void)close(fd);
return(rval);
return (mpool_new(t->bt_mp, npg));
}
+320
View File
@@ -0,0 +1,320 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)bt_put.c 8.8 (Berkeley) 7/26/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <db.h>
#include "btree.h"
static EPG *bt_fast __P((BTREE *, const DBT *, const DBT *, int *));
/*
* __BT_PUT -- Add a btree item to the tree.
*
* Parameters:
* dbp: pointer to access method
* key: key
* data: data
* flag: R_NOOVERWRITE
*
* Returns:
* RET_ERROR, RET_SUCCESS and RET_SPECIAL if the key is already in the
* tree and R_NOOVERWRITE specified.
*/
int
__bt_put(dbp, key, data, flags)
const DB *dbp;
DBT *key;
const DBT *data;
u_int flags;
{
BTREE *t;
DBT tkey, tdata;
EPG *e;
PAGE *h;
indx_t index, nxtindex;
pgno_t pg;
u_int32_t nbytes;
int dflags, exact, status;
char *dest, db[NOVFLSIZE], kb[NOVFLSIZE];
t = dbp->internal;
/* Toss any page pinned across calls. */
if (t->bt_pinned != NULL) {
mpool_put(t->bt_mp, t->bt_pinned, 0);
t->bt_pinned = NULL;
}
/* Check for change to a read-only tree. */
if (F_ISSET(t, B_RDONLY)) {
errno = EPERM;
return (RET_ERROR);
}
switch (flags) {
case 0:
case R_NOOVERWRITE:
break;
case R_CURSOR:
/*
* If flags is R_CURSOR, put the cursor. Must already
* have started a scan and not have already deleted it.
*/
if (F_ISSET(&t->bt_cursor, CURS_INIT) &&
!F_ISSET(&t->bt_cursor,
CURS_ACQUIRE | CURS_AFTER | CURS_BEFORE))
break;
/* FALLTHROUGH */
default:
errno = EINVAL;
return (RET_ERROR);
}
/*
* If the key/data pair won't fit on a page, store it on overflow
* pages. Only put the key on the overflow page if the pair are
* still too big after moving the data to an overflow page.
*
* XXX
* If the insert fails later on, the overflow pages aren't recovered.
*/
dflags = 0;
if (key->size + data->size > t->bt_ovflsize) {
if (key->size > t->bt_ovflsize) {
storekey: if (__ovfl_put(t, key, &pg) == RET_ERROR)
return (RET_ERROR);
tkey.data = kb;
tkey.size = NOVFLSIZE;
memmove(kb, &pg, sizeof(pgno_t));
memmove(kb + sizeof(pgno_t),
&key->size, sizeof(u_int32_t));
dflags |= P_BIGKEY;
key = &tkey;
}
if (key->size + data->size > t->bt_ovflsize) {
if (__ovfl_put(t, data, &pg) == RET_ERROR)
return (RET_ERROR);
tdata.data = db;
tdata.size = NOVFLSIZE;
memmove(db, &pg, sizeof(pgno_t));
memmove(db + sizeof(pgno_t),
&data->size, sizeof(u_int32_t));
dflags |= P_BIGDATA;
data = &tdata;
}
if (key->size + data->size > t->bt_ovflsize)
goto storekey;
}
/* Replace the cursor. */
if (flags == R_CURSOR) {
if ((h = mpool_get(t->bt_mp, t->bt_cursor.pg.pgno, 0)) == NULL)
return (RET_ERROR);
index = t->bt_cursor.pg.index;
goto delete;
}
/*
* Find the key to delete, or, the location at which to insert.
* Bt_fast and __bt_search both pin the returned page.
*/
if (t->bt_order == NOT || (e = bt_fast(t, key, data, &exact)) == NULL)
if ((e = __bt_search(t, key, &exact)) == NULL)
return (RET_ERROR);
h = e->page;
index = e->index;
/*
* Add the key/data pair to the tree. If an identical key is already
* in the tree, and R_NOOVERWRITE is set, an error is returned. If
* R_NOOVERWRITE is not set, the key is either added (if duplicates are
* permitted) or an error is returned.
*/
switch (flags) {
case R_NOOVERWRITE:
if (!exact)
break;
mpool_put(t->bt_mp, h, 0);
return (RET_SPECIAL);
default:
if (!exact || !F_ISSET(t, B_NODUPS))
break;
/*
* !!!
* Note, the delete may empty the page, so we need to put a
* new entry into the page immediately.
*/
delete: if (__bt_dleaf(t, key, h, index) == RET_ERROR) {
mpool_put(t->bt_mp, h, 0);
return (RET_ERROR);
}
break;
}
/*
* If not enough room, or the user has put a ceiling on the number of
* keys permitted in the page, split the page. The split code will
* insert the key and data and unpin the current page. If inserting
* into the offset array, shift the pointers up.
*/
nbytes = NBLEAFDBT(key->size, data->size);
if (h->upper - h->lower < nbytes + sizeof(indx_t)) {
if ((status = __bt_split(t, h, key,
data, dflags, nbytes, index)) != RET_SUCCESS)
return (status);
goto success;
}
if (index < (nxtindex = NEXTINDEX(h)))
memmove(h->linp + index + 1, h->linp + index,
(nxtindex - index) * sizeof(indx_t));
h->lower += sizeof(indx_t);
h->linp[index] = h->upper -= nbytes;
dest = (char *)h + h->upper;
WR_BLEAF(dest, key, data, dflags);
/* If the cursor is on this page, adjust it as necessary. */
if (F_ISSET(&t->bt_cursor, CURS_INIT) &&
!F_ISSET(&t->bt_cursor, CURS_ACQUIRE) &&
t->bt_cursor.pg.pgno == h->pgno && t->bt_cursor.pg.index >= index)
++t->bt_cursor.pg.index;
if (t->bt_order == NOT)
if (h->nextpg == P_INVALID) {
if (index == NEXTINDEX(h) - 1) {
t->bt_order = FORWARD;
t->bt_last.index = index;
t->bt_last.pgno = h->pgno;
}
} else if (h->prevpg == P_INVALID) {
if (index == 0) {
t->bt_order = BACK;
t->bt_last.index = 0;
t->bt_last.pgno = h->pgno;
}
}
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
success:
if (flags == R_SETCURSOR)
__bt_setcur(t, e->page->pgno, e->index);
F_SET(t, B_MODIFIED);
return (RET_SUCCESS);
}
#ifdef STATISTICS
u_long bt_cache_hit, bt_cache_miss;
#endif
/*
* BT_FAST -- Do a quick check for sorted data.
*
* Parameters:
* t: tree
* key: key to insert
*
* Returns:
* EPG for new record or NULL if not found.
*/
static EPG *
bt_fast(t, key, data, exactp)
BTREE *t;
const DBT *key, *data;
int *exactp;
{
PAGE *h;
u_int32_t nbytes;
int cmp;
if ((h = mpool_get(t->bt_mp, t->bt_last.pgno, 0)) == NULL) {
t->bt_order = NOT;
return (NULL);
}
t->bt_cur.page = h;
t->bt_cur.index = t->bt_last.index;
/*
* If won't fit in this page or have too many keys in this page,
* have to search to get split stack.
*/
nbytes = NBLEAFDBT(key->size, data->size);
if (h->upper - h->lower < nbytes + sizeof(indx_t))
goto miss;
if (t->bt_order == FORWARD) {
if (t->bt_cur.page->nextpg != P_INVALID)
goto miss;
if (t->bt_cur.index != NEXTINDEX(h) - 1)
goto miss;
if ((cmp = __bt_cmp(t, key, &t->bt_cur)) < 0)
goto miss;
t->bt_last.index = cmp ? ++t->bt_cur.index : t->bt_cur.index;
} else {
if (t->bt_cur.page->prevpg != P_INVALID)
goto miss;
if (t->bt_cur.index != 0)
goto miss;
if ((cmp = __bt_cmp(t, key, &t->bt_cur)) > 0)
goto miss;
t->bt_last.index = 0;
}
*exactp = cmp == 0;
#ifdef STATISTICS
++bt_cache_hit;
#endif
return (&t->bt_cur);
miss:
#ifdef STATISTICS
++bt_cache_miss;
#endif
t->bt_order = NOT;
mpool_put(t->bt_mp, h, 0);
return (NULL);
}
+213
View File
@@ -0,0 +1,213 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)bt_search.c 8.8 (Berkeley) 7/31/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <stdio.h>
#include <db.h>
#include "btree.h"
static int __bt_snext __P((BTREE *, PAGE *, const DBT *, int *));
static int __bt_sprev __P((BTREE *, PAGE *, const DBT *, int *));
/*
* __bt_search --
* Search a btree for a key.
*
* Parameters:
* t: tree to search
* key: key to find
* exactp: pointer to exact match flag
*
* Returns:
* The EPG for matching record, if any, or the EPG for the location
* of the key, if it were inserted into the tree, is entered into
* the bt_cur field of the tree. A pointer to the field is returned.
*/
EPG *
__bt_search(t, key, exactp)
BTREE *t;
const DBT *key;
int *exactp;
{
PAGE *h;
indx_t base, index, lim;
pgno_t pg;
int cmp;
BT_CLR(t);
for (pg = P_ROOT;;) {
if ((h = mpool_get(t->bt_mp, pg, 0)) == NULL)
return (NULL);
/* Do a binary search on the current page. */
t->bt_cur.page = h;
for (base = 0, lim = NEXTINDEX(h); lim; lim >>= 1) {
t->bt_cur.index = index = base + (lim >> 1);
if ((cmp = __bt_cmp(t, key, &t->bt_cur)) == 0) {
if (h->flags & P_BLEAF) {
*exactp = 1;
return (&t->bt_cur);
}
goto next;
}
if (cmp > 0) {
base = index + 1;
--lim;
}
}
/*
* If it's a leaf page, we're almost done. If no duplicates
* are allowed, or we have an exact match, we're done. Else,
* it's possible that there were matching keys on this page,
* which later deleted, and we're on a page with no matches
* while there are matches on other pages. If at the start or
* end of a page, check the adjacent page.
*/
if (h->flags & P_BLEAF) {
if (!F_ISSET(t, B_NODUPS)) {
if (base == 0 &&
h->prevpg != P_INVALID &&
__bt_sprev(t, h, key, exactp))
return (&t->bt_cur);
if (base == NEXTINDEX(h) &&
h->nextpg != P_INVALID &&
__bt_snext(t, h, key, exactp))
return (&t->bt_cur);
}
*exactp = 0;
t->bt_cur.index = base;
return (&t->bt_cur);
}
/*
* No match found. Base is the smallest index greater than
* key and may be zero or a last + 1 index. If it's non-zero,
* decrement by one, and record the internal page which should
* be a parent page for the key. If a split later occurs, the
* inserted page will be to the right of the saved page.
*/
index = base ? base - 1 : base;
next: BT_PUSH(t, h->pgno, index);
pg = GETBINTERNAL(h, index)->pgno;
mpool_put(t->bt_mp, h, 0);
}
}
/*
* __bt_snext --
* Check for an exact match after the key.
*
* Parameters:
* t: tree
* h: current page
* key: key
* exactp: pointer to exact match flag
*
* Returns:
* If an exact match found.
*/
static int
__bt_snext(t, h, key, exactp)
BTREE *t;
PAGE *h;
const DBT *key;
int *exactp;
{
EPG e;
/*
* Get the next page. The key is either an exact
* match, or not as good as the one we already have.
*/
if ((e.page = mpool_get(t->bt_mp, h->nextpg, 0)) == NULL)
return (0);
e.index = 0;
if (__bt_cmp(t, key, &e) == 0) {
mpool_put(t->bt_mp, h, 0);
t->bt_cur = e;
*exactp = 1;
return (1);
}
mpool_put(t->bt_mp, e.page, 0);
return (0);
}
/*
* __bt_sprev --
* Check for an exact match before the key.
*
* Parameters:
* t: tree
* h: current page
* key: key
* exactp: pointer to exact match flag
*
* Returns:
* If an exact match found.
*/
static int
__bt_sprev(t, h, key, exactp)
BTREE *t;
PAGE *h;
const DBT *key;
int *exactp;
{
EPG e;
/*
* Get the previous page. The key is either an exact
* match, or not as good as the one we already have.
*/
if ((e.page = mpool_get(t->bt_mp, h->prevpg, 0)) == NULL)
return (0);
e.index = NEXTINDEX(e.page) - 1;
if (__bt_cmp(t, key, &e) == 0) {
mpool_put(t->bt_mp, h, 0);
t->bt_cur = e;
*exactp = 1;
return (1);
}
mpool_put(t->bt_mp, e.page, 0);
return (0);
}
+460
View File
@@ -0,0 +1,460 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)bt_seq.c 8.7 (Berkeley) 7/20/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <errno.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <db.h>
#include "btree.h"
static int __bt_first __P((BTREE *, const DBT *, EPG *, int *));
static int __bt_seqadv __P((BTREE *, EPG *, int));
static int __bt_seqset __P((BTREE *, EPG *, DBT *, int));
/*
* Sequential scan support.
*
* The tree can be scanned sequentially, starting from either end of the
* tree or from any specific key. A scan request before any scanning is
* done is initialized as starting from the least node.
*/
/*
* __bt_seq --
* Btree sequential scan interface.
*
* Parameters:
* dbp: pointer to access method
* key: key for positioning and return value
* data: data return value
* flags: R_CURSOR, R_FIRST, R_LAST, R_NEXT, R_PREV.
*
* Returns:
* RET_ERROR, RET_SUCCESS or RET_SPECIAL if there's no next key.
*/
int
__bt_seq(dbp, key, data, flags)
const DB *dbp;
DBT *key, *data;
u_int flags;
{
BTREE *t;
EPG e;
int status;
t = dbp->internal;
/* Toss any page pinned across calls. */
if (t->bt_pinned != NULL) {
mpool_put(t->bt_mp, t->bt_pinned, 0);
t->bt_pinned = NULL;
}
/*
* If scan unitialized as yet, or starting at a specific record, set
* the scan to a specific key. Both __bt_seqset and __bt_seqadv pin
* the page the cursor references if they're successful.
*/
switch (flags) {
case R_NEXT:
case R_PREV:
if (F_ISSET(&t->bt_cursor, CURS_INIT)) {
status = __bt_seqadv(t, &e, flags);
break;
}
/* FALLTHROUGH */
case R_FIRST:
case R_LAST:
case R_CURSOR:
status = __bt_seqset(t, &e, key, flags);
break;
default:
errno = EINVAL;
return (RET_ERROR);
}
if (status == RET_SUCCESS) {
__bt_setcur(t, e.page->pgno, e.index);
status =
__bt_ret(t, &e, key, &t->bt_rkey, data, &t->bt_rdata, 0);
/*
* If the user is doing concurrent access, we copied the
* key/data, toss the page.
*/
if (F_ISSET(t, B_DB_LOCK))
mpool_put(t->bt_mp, e.page, 0);
else
t->bt_pinned = e.page;
}
return (status);
}
/*
* __bt_seqset --
* Set the sequential scan to a specific key.
*
* Parameters:
* t: tree
* ep: storage for returned key
* key: key for initial scan position
* flags: R_CURSOR, R_FIRST, R_LAST, R_NEXT, R_PREV
*
* Side effects:
* Pins the page the cursor references.
*
* Returns:
* RET_ERROR, RET_SUCCESS or RET_SPECIAL if there's no next key.
*/
static int
__bt_seqset(t, ep, key, flags)
BTREE *t;
EPG *ep;
DBT *key;
int flags;
{
PAGE *h;
pgno_t pg;
int exact;
/*
* Find the first, last or specific key in the tree and point the
* cursor at it. The cursor may not be moved until a new key has
* been found.
*/
switch (flags) {
case R_CURSOR: /* Keyed scan. */
/*
* Find the first instance of the key or the smallest key
* which is greater than or equal to the specified key.
*/
if (key->data == NULL || key->size == 0) {
errno = EINVAL;
return (RET_ERROR);
}
return (__bt_first(t, key, ep, &exact));
case R_FIRST: /* First record. */
case R_NEXT:
/* Walk down the left-hand side of the tree. */
for (pg = P_ROOT;;) {
if ((h = mpool_get(t->bt_mp, pg, 0)) == NULL)
return (RET_ERROR);
/* Check for an empty tree. */
if (NEXTINDEX(h) == 0) {
mpool_put(t->bt_mp, h, 0);
return (RET_SPECIAL);
}
if (h->flags & (P_BLEAF | P_RLEAF))
break;
pg = GETBINTERNAL(h, 0)->pgno;
mpool_put(t->bt_mp, h, 0);
}
ep->page = h;
ep->index = 0;
break;
case R_LAST: /* Last record. */
case R_PREV:
/* Walk down the right-hand side of the tree. */
for (pg = P_ROOT;;) {
if ((h = mpool_get(t->bt_mp, pg, 0)) == NULL)
return (RET_ERROR);
/* Check for an empty tree. */
if (NEXTINDEX(h) == 0) {
mpool_put(t->bt_mp, h, 0);
return (RET_SPECIAL);
}
if (h->flags & (P_BLEAF | P_RLEAF))
break;
pg = GETBINTERNAL(h, NEXTINDEX(h) - 1)->pgno;
mpool_put(t->bt_mp, h, 0);
}
ep->page = h;
ep->index = NEXTINDEX(h) - 1;
break;
}
return (RET_SUCCESS);
}
/*
* __bt_seqadvance --
* Advance the sequential scan.
*
* Parameters:
* t: tree
* flags: R_NEXT, R_PREV
*
* Side effects:
* Pins the page the new key/data record is on.
*
* Returns:
* RET_ERROR, RET_SUCCESS or RET_SPECIAL if there's no next key.
*/
static int
__bt_seqadv(t, ep, flags)
BTREE *t;
EPG *ep;
int flags;
{
CURSOR *c;
PAGE *h;
indx_t index;
pgno_t pg;
int exact;
/*
* There are a couple of states that we can be in. The cursor has
* been initialized by the time we get here, but that's all we know.
*/
c = &t->bt_cursor;
/*
* The cursor was deleted where there weren't any duplicate records,
* so the key was saved. Find out where that key would go in the
* current tree. It doesn't matter if the returned key is an exact
* match or not -- if it's an exact match, the record was added after
* the delete so we can just return it. If not, as long as there's
* a record there, return it.
*/
if (F_ISSET(c, CURS_ACQUIRE))
return (__bt_first(t, &c->key, ep, &exact));
/* Get the page referenced by the cursor. */
if ((h = mpool_get(t->bt_mp, c->pg.pgno, 0)) == NULL)
return (RET_ERROR);
/*
* Find the next/previous record in the tree and point the cursor at
* it. The cursor may not be moved until a new key has been found.
*/
switch (flags) {
case R_NEXT: /* Next record. */
/*
* The cursor was deleted in duplicate records, and moved
* forward to a record that has yet to be returned. Clear
* that flag, and return the record.
*/
if (F_ISSET(c, CURS_AFTER))
goto usecurrent;
index = c->pg.index;
if (++index == NEXTINDEX(h)) {
pg = h->nextpg;
mpool_put(t->bt_mp, h, 0);
if (pg == P_INVALID)
return (RET_SPECIAL);
if ((h = mpool_get(t->bt_mp, pg, 0)) == NULL)
return (RET_ERROR);
index = 0;
}
break;
case R_PREV: /* Previous record. */
/*
* The cursor was deleted in duplicate records, and moved
* backward to a record that has yet to be returned. Clear
* that flag, and return the record.
*/
if (F_ISSET(c, CURS_BEFORE)) {
usecurrent: F_CLR(c, CURS_AFTER | CURS_BEFORE);
ep->page = h;
ep->index = c->pg.index;
return (RET_SUCCESS);
}
index = c->pg.index;
if (index == 0) {
pg = h->prevpg;
mpool_put(t->bt_mp, h, 0);
if (pg == P_INVALID)
return (RET_SPECIAL);
if ((h = mpool_get(t->bt_mp, pg, 0)) == NULL)
return (RET_ERROR);
index = NEXTINDEX(h) - 1;
} else
--index;
break;
}
ep->page = h;
ep->index = index;
return (RET_SUCCESS);
}
/*
* __bt_first --
* Find the first entry.
*
* Parameters:
* t: the tree
* key: the key
* erval: return EPG
* exactp: pointer to exact match flag
*
* Returns:
* The first entry in the tree greater than or equal to key,
* or RET_SPECIAL if no such key exists.
*/
static int
__bt_first(t, key, erval, exactp)
BTREE *t;
const DBT *key;
EPG *erval;
int *exactp;
{
PAGE *h;
EPG *ep, save;
pgno_t pg;
/*
* Find any matching record; __bt_search pins the page.
*
* If it's an exact match and duplicates are possible, walk backwards
* in the tree until we find the first one. Otherwise, make sure it's
* a valid key (__bt_search may return an index just past the end of a
* page) and return it.
*/
if ((ep = __bt_search(t, key, exactp)) == NULL)
return (RET_SPECIAL);
if (*exactp) {
if (F_ISSET(t, B_NODUPS)) {
*erval = *ep;
return (RET_SUCCESS);
}
/*
* Walk backwards, as long as the entry matches and there are
* keys left in the tree. Save a copy of each match in case
* we go too far.
*/
save = *ep;
h = ep->page;
do {
if (save.page->pgno != ep->page->pgno) {
mpool_put(t->bt_mp, save.page, 0);
save = *ep;
} else
save.index = ep->index;
/*
* Don't unpin the page the last (or original) match
* was on, but make sure it's unpinned if an error
* occurs.
*/
if (ep->index == 0) {
if (h->prevpg == P_INVALID)
break;
if (h->pgno != save.page->pgno)
mpool_put(t->bt_mp, h, 0);
if ((h = mpool_get(t->bt_mp,
h->prevpg, 0)) == NULL) {
if (h->pgno == save.page->pgno)
mpool_put(t->bt_mp,
save.page, 0);
return (RET_ERROR);
}
ep->page = h;
ep->index = NEXTINDEX(h);
}
--ep->index;
} while (__bt_cmp(t, key, ep) == 0);
/*
* Reach here with the last page that was looked at pinned,
* which may or may not be the same as the last (or original)
* match page. If it's not useful, release it.
*/
if (h->pgno != save.page->pgno)
mpool_put(t->bt_mp, h, 0);
*erval = save;
return (RET_SUCCESS);
}
/* If at the end of a page, find the next entry. */
if (ep->index == NEXTINDEX(ep->page)) {
h = ep->page;
pg = h->nextpg;
mpool_put(t->bt_mp, h, 0);
if (pg == P_INVALID)
return (RET_SPECIAL);
if ((h = mpool_get(t->bt_mp, pg, 0)) == NULL)
return (RET_ERROR);
ep->index = 0;
ep->page = h;
}
*erval = *ep;
return (RET_SUCCESS);
}
/*
* __bt_setcur --
* Set the cursor to an entry in the tree.
*
* Parameters:
* t: the tree
* pgno: page number
* index: page index
*/
void
__bt_setcur(t, pgno, index)
BTREE *t;
pgno_t pgno;
u_int index;
{
/* Lose any already deleted key. */
if (t->bt_cursor.key.data != NULL) {
free(t->bt_cursor.key.data);
t->bt_cursor.key.size = 0;
t->bt_cursor.key.data = NULL;
}
F_CLR(&t->bt_cursor, CURS_ACQUIRE | CURS_AFTER | CURS_BEFORE);
/* Update the cursor. */
t->bt_cursor.pg.pgno = pgno;
t->bt_cursor.pg.index = index;
F_SET(&t->bt_cursor, CURS_INIT);
}
+827
View File
@@ -0,0 +1,827 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)bt_split.c 8.9 (Berkeley) 7/26/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <db.h>
#include "btree.h"
static int bt_broot __P((BTREE *, PAGE *, PAGE *, PAGE *));
static PAGE *bt_page
__P((BTREE *, PAGE *, PAGE **, PAGE **, indx_t *, size_t));
static int bt_preserve __P((BTREE *, pgno_t));
static PAGE *bt_psplit
__P((BTREE *, PAGE *, PAGE *, PAGE *, indx_t *, size_t));
static PAGE *bt_root
__P((BTREE *, PAGE *, PAGE **, PAGE **, indx_t *, size_t));
static int bt_rroot __P((BTREE *, PAGE *, PAGE *, PAGE *));
static recno_t rec_total __P((PAGE *));
#ifdef STATISTICS
u_long bt_rootsplit, bt_split, bt_sortsplit, bt_pfxsaved;
#endif
/*
* __BT_SPLIT -- Split the tree.
*
* Parameters:
* t: tree
* sp: page to split
* key: key to insert
* data: data to insert
* flags: BIGKEY/BIGDATA flags
* ilen: insert length
* skip: index to leave open
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
int
__bt_split(t, sp, key, data, flags, ilen, argskip)
BTREE *t;
PAGE *sp;
const DBT *key, *data;
int flags;
size_t ilen;
u_int32_t argskip;
{
BINTERNAL *bi;
BLEAF *bl, *tbl;
DBT a, b;
EPGNO *parent;
PAGE *h, *l, *r, *lchild, *rchild;
indx_t nxtindex;
u_int16_t skip;
u_int32_t n, nbytes, nksize;
int parentsplit;
char *dest;
/*
* Split the page into two pages, l and r. The split routines return
* a pointer to the page into which the key should be inserted and with
* skip set to the offset which should be used. Additionally, l and r
* are pinned.
*/
skip = argskip;
h = sp->pgno == P_ROOT ?
bt_root(t, sp, &l, &r, &skip, ilen) :
bt_page(t, sp, &l, &r, &skip, ilen);
if (h == NULL)
return (RET_ERROR);
/*
* Insert the new key/data pair into the leaf page. (Key inserts
* always cause a leaf page to split first.)
*/
h->linp[skip] = h->upper -= ilen;
dest = (char *)h + h->upper;
if (F_ISSET(t, R_RECNO))
WR_RLEAF(dest, data, flags)
else
WR_BLEAF(dest, key, data, flags)
/* If the root page was split, make it look right. */
if (sp->pgno == P_ROOT &&
(F_ISSET(t, R_RECNO) ?
bt_rroot(t, sp, l, r) : bt_broot(t, sp, l, r)) == RET_ERROR)
goto err2;
/*
* Now we walk the parent page stack -- a LIFO stack of the pages that
* were traversed when we searched for the page that split. Each stack
* entry is a page number and a page index offset. The offset is for
* the page traversed on the search. We've just split a page, so we
* have to insert a new key into the parent page.
*
* If the insert into the parent page causes it to split, may have to
* continue splitting all the way up the tree. We stop if the root
* splits or the page inserted into didn't have to split to hold the
* new key. Some algorithms replace the key for the old page as well
* as the new page. We don't, as there's no reason to believe that the
* first key on the old page is any better than the key we have, and,
* in the case of a key being placed at index 0 causing the split, the
* key is unavailable.
*
* There are a maximum of 5 pages pinned at any time. We keep the left
* and right pages pinned while working on the parent. The 5 are the
* two children, left parent and right parent (when the parent splits)
* and the root page or the overflow key page when calling bt_preserve.
* This code must make sure that all pins are released other than the
* root page or overflow page which is unlocked elsewhere.
*/
while ((parent = BT_POP(t)) != NULL) {
lchild = l;
rchild = r;
/* Get the parent page. */
if ((h = mpool_get(t->bt_mp, parent->pgno, 0)) == NULL)
goto err2;
/*
* The new key goes ONE AFTER the index, because the split
* was to the right.
*/
skip = parent->index + 1;
/*
* Calculate the space needed on the parent page.
*
* Prefix trees: space hack when inserting into BINTERNAL
* pages. Retain only what's needed to distinguish between
* the new entry and the LAST entry on the page to its left.
* If the keys compare equal, retain the entire key. Note,
* we don't touch overflow keys, and the entire key must be
* retained for the next-to-left most key on the leftmost
* page of each level, or the search will fail. Applicable
* ONLY to internal pages that have leaf pages as children.
* Further reduction of the key between pairs of internal
* pages loses too much information.
*/
switch (rchild->flags & P_TYPE) {
case P_BINTERNAL:
bi = GETBINTERNAL(rchild, 0);
nbytes = NBINTERNAL(bi->ksize);
break;
case P_BLEAF:
bl = GETBLEAF(rchild, 0);
nbytes = NBINTERNAL(bl->ksize);
if (t->bt_pfx && !(bl->flags & P_BIGKEY) &&
(h->prevpg != P_INVALID || skip > 1)) {
tbl = GETBLEAF(lchild, NEXTINDEX(lchild) - 1);
a.size = tbl->ksize;
a.data = tbl->bytes;
b.size = bl->ksize;
b.data = bl->bytes;
nksize = t->bt_pfx(&a, &b);
n = NBINTERNAL(nksize);
if (n < nbytes) {
#ifdef STATISTICS
bt_pfxsaved += nbytes - n;
#endif
nbytes = n;
} else
nksize = 0;
} else
nksize = 0;
break;
case P_RINTERNAL:
case P_RLEAF:
nbytes = NRINTERNAL;
break;
default:
abort();
}
/* Split the parent page if necessary or shift the indices. */
if (h->upper - h->lower < nbytes + sizeof(indx_t)) {
sp = h;
h = h->pgno == P_ROOT ?
bt_root(t, h, &l, &r, &skip, nbytes) :
bt_page(t, h, &l, &r, &skip, nbytes);
if (h == NULL)
goto err1;
parentsplit = 1;
} else {
if (skip < (nxtindex = NEXTINDEX(h)))
memmove(h->linp + skip + 1, h->linp + skip,
(nxtindex - skip) * sizeof(indx_t));
h->lower += sizeof(indx_t);
parentsplit = 0;
}
/* Insert the key into the parent page. */
switch (rchild->flags & P_TYPE) {
case P_BINTERNAL:
h->linp[skip] = h->upper -= nbytes;
dest = (char *)h + h->linp[skip];
memmove(dest, bi, nbytes);
((BINTERNAL *)dest)->pgno = rchild->pgno;
break;
case P_BLEAF:
h->linp[skip] = h->upper -= nbytes;
dest = (char *)h + h->linp[skip];
WR_BINTERNAL(dest, nksize ? nksize : bl->ksize,
rchild->pgno, bl->flags & P_BIGKEY);
memmove(dest, bl->bytes, nksize ? nksize : bl->ksize);
if (bl->flags & P_BIGKEY &&
bt_preserve(t, *(pgno_t *)bl->bytes) == RET_ERROR)
goto err1;
break;
case P_RINTERNAL:
/*
* Update the left page count. If split
* added at index 0, fix the correct page.
*/
if (skip > 0)
dest = (char *)h + h->linp[skip - 1];
else
dest = (char *)l + l->linp[NEXTINDEX(l) - 1];
((RINTERNAL *)dest)->nrecs = rec_total(lchild);
((RINTERNAL *)dest)->pgno = lchild->pgno;
/* Update the right page count. */
h->linp[skip] = h->upper -= nbytes;
dest = (char *)h + h->linp[skip];
((RINTERNAL *)dest)->nrecs = rec_total(rchild);
((RINTERNAL *)dest)->pgno = rchild->pgno;
break;
case P_RLEAF:
/*
* Update the left page count. If split
* added at index 0, fix the correct page.
*/
if (skip > 0)
dest = (char *)h + h->linp[skip - 1];
else
dest = (char *)l + l->linp[NEXTINDEX(l) - 1];
((RINTERNAL *)dest)->nrecs = NEXTINDEX(lchild);
((RINTERNAL *)dest)->pgno = lchild->pgno;
/* Update the right page count. */
h->linp[skip] = h->upper -= nbytes;
dest = (char *)h + h->linp[skip];
((RINTERNAL *)dest)->nrecs = NEXTINDEX(rchild);
((RINTERNAL *)dest)->pgno = rchild->pgno;
break;
default:
abort();
}
/* Unpin the held pages. */
if (!parentsplit) {
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
break;
}
/* If the root page was split, make it look right. */
if (sp->pgno == P_ROOT &&
(F_ISSET(t, R_RECNO) ?
bt_rroot(t, sp, l, r) : bt_broot(t, sp, l, r)) == RET_ERROR)
goto err1;
mpool_put(t->bt_mp, lchild, MPOOL_DIRTY);
mpool_put(t->bt_mp, rchild, MPOOL_DIRTY);
}
/* Unpin the held pages. */
mpool_put(t->bt_mp, l, MPOOL_DIRTY);
mpool_put(t->bt_mp, r, MPOOL_DIRTY);
/* Clear any pages left on the stack. */
return (RET_SUCCESS);
/*
* If something fails in the above loop we were already walking back
* up the tree and the tree is now inconsistent. Nothing much we can
* do about it but release any memory we're holding.
*/
err1: mpool_put(t->bt_mp, lchild, MPOOL_DIRTY);
mpool_put(t->bt_mp, rchild, MPOOL_DIRTY);
err2: mpool_put(t->bt_mp, l, 0);
mpool_put(t->bt_mp, r, 0);
__dbpanic(t->bt_dbp);
return (RET_ERROR);
}
/*
* BT_PAGE -- Split a non-root page of a btree.
*
* Parameters:
* t: tree
* h: root page
* lp: pointer to left page pointer
* rp: pointer to right page pointer
* skip: pointer to index to leave open
* ilen: insert length
*
* Returns:
* Pointer to page in which to insert or NULL on error.
*/
static PAGE *
bt_page(t, h, lp, rp, skip, ilen)
BTREE *t;
PAGE *h, **lp, **rp;
indx_t *skip;
size_t ilen;
{
PAGE *l, *r, *tp;
pgno_t npg;
#ifdef STATISTICS
++bt_split;
#endif
/* Put the new right page for the split into place. */
if ((r = __bt_new(t, &npg)) == NULL)
return (NULL);
r->pgno = npg;
r->lower = BTDATAOFF;
r->upper = t->bt_psize;
r->nextpg = h->nextpg;
r->prevpg = h->pgno;
r->flags = h->flags & P_TYPE;
/*
* If we're splitting the last page on a level because we're appending
* a key to it (skip is NEXTINDEX()), it's likely that the data is
* sorted. Adding an empty page on the side of the level is less work
* and can push the fill factor much higher than normal. If we're
* wrong it's no big deal, we'll just do the split the right way next
* time. It may look like it's equally easy to do a similar hack for
* reverse sorted data, that is, split the tree left, but it's not.
* Don't even try.
*/
if (h->nextpg == P_INVALID && *skip == NEXTINDEX(h)) {
#ifdef STATISTICS
++bt_sortsplit;
#endif
h->nextpg = r->pgno;
r->lower = BTDATAOFF + sizeof(indx_t);
*skip = 0;
*lp = h;
*rp = r;
return (r);
}
/* Put the new left page for the split into place. */
if ((l = (PAGE *)malloc(t->bt_psize)) == NULL) {
mpool_put(t->bt_mp, r, 0);
return (NULL);
}
#ifdef PURIFY
memset(l, 0xff, t->bt_psize);
#endif
l->pgno = h->pgno;
l->nextpg = r->pgno;
l->prevpg = h->prevpg;
l->lower = BTDATAOFF;
l->upper = t->bt_psize;
l->flags = h->flags & P_TYPE;
/* Fix up the previous pointer of the page after the split page. */
if (h->nextpg != P_INVALID) {
if ((tp = mpool_get(t->bt_mp, h->nextpg, 0)) == NULL) {
free(l);
/* XXX mpool_free(t->bt_mp, r->pgno); */
return (NULL);
}
tp->prevpg = r->pgno;
mpool_put(t->bt_mp, tp, MPOOL_DIRTY);
}
/*
* Split right. The key/data pairs aren't sorted in the btree page so
* it's simpler to copy the data from the split page onto two new pages
* instead of copying half the data to the right page and compacting
* the left page in place. Since the left page can't change, we have
* to swap the original and the allocated left page after the split.
*/
tp = bt_psplit(t, h, l, r, skip, ilen);
/* Move the new left page onto the old left page. */
memmove(h, l, t->bt_psize);
if (tp == l)
tp = h;
free(l);
*lp = h;
*rp = r;
return (tp);
}
/*
* BT_ROOT -- Split the root page of a btree.
*
* Parameters:
* t: tree
* h: root page
* lp: pointer to left page pointer
* rp: pointer to right page pointer
* skip: pointer to index to leave open
* ilen: insert length
*
* Returns:
* Pointer to page in which to insert or NULL on error.
*/
static PAGE *
bt_root(t, h, lp, rp, skip, ilen)
BTREE *t;
PAGE *h, **lp, **rp;
indx_t *skip;
size_t ilen;
{
PAGE *l, *r, *tp;
pgno_t lnpg, rnpg;
#ifdef STATISTICS
++bt_split;
++bt_rootsplit;
#endif
/* Put the new left and right pages for the split into place. */
if ((l = __bt_new(t, &lnpg)) == NULL ||
(r = __bt_new(t, &rnpg)) == NULL)
return (NULL);
l->pgno = lnpg;
r->pgno = rnpg;
l->nextpg = r->pgno;
r->prevpg = l->pgno;
l->prevpg = r->nextpg = P_INVALID;
l->lower = r->lower = BTDATAOFF;
l->upper = r->upper = t->bt_psize;
l->flags = r->flags = h->flags & P_TYPE;
/* Split the root page. */
tp = bt_psplit(t, h, l, r, skip, ilen);
*lp = l;
*rp = r;
return (tp);
}
/*
* BT_RROOT -- Fix up the recno root page after it has been split.
*
* Parameters:
* t: tree
* h: root page
* l: left page
* r: right page
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
static int
bt_rroot(t, h, l, r)
BTREE *t;
PAGE *h, *l, *r;
{
char *dest;
/* Insert the left and right keys, set the header information. */
h->linp[0] = h->upper = t->bt_psize - NRINTERNAL;
dest = (char *)h + h->upper;
WR_RINTERNAL(dest,
l->flags & P_RLEAF ? NEXTINDEX(l) : rec_total(l), l->pgno);
h->linp[1] = h->upper -= NRINTERNAL;
dest = (char *)h + h->upper;
WR_RINTERNAL(dest,
r->flags & P_RLEAF ? NEXTINDEX(r) : rec_total(r), r->pgno);
h->lower = BTDATAOFF + 2 * sizeof(indx_t);
/* Unpin the root page, set to recno internal page. */
h->flags &= ~P_TYPE;
h->flags |= P_RINTERNAL;
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
return (RET_SUCCESS);
}
/*
* BT_BROOT -- Fix up the btree root page after it has been split.
*
* Parameters:
* t: tree
* h: root page
* l: left page
* r: right page
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
static int
bt_broot(t, h, l, r)
BTREE *t;
PAGE *h, *l, *r;
{
BINTERNAL *bi;
BLEAF *bl;
u_int32_t nbytes;
char *dest;
/*
* If the root page was a leaf page, change it into an internal page.
* We copy the key we split on (but not the key's data, in the case of
* a leaf page) to the new root page.
*
* The btree comparison code guarantees that the left-most key on any
* level of the tree is never used, so it doesn't need to be filled in.
*/
nbytes = NBINTERNAL(0);
h->linp[0] = h->upper = t->bt_psize - nbytes;
dest = (char *)h + h->upper;
WR_BINTERNAL(dest, 0, l->pgno, 0);
switch (h->flags & P_TYPE) {
case P_BLEAF:
bl = GETBLEAF(r, 0);
nbytes = NBINTERNAL(bl->ksize);
h->linp[1] = h->upper -= nbytes;
dest = (char *)h + h->upper;
WR_BINTERNAL(dest, bl->ksize, r->pgno, 0);
memmove(dest, bl->bytes, bl->ksize);
/*
* If the key is on an overflow page, mark the overflow chain
* so it isn't deleted when the leaf copy of the key is deleted.
*/
if (bl->flags & P_BIGKEY &&
bt_preserve(t, *(pgno_t *)bl->bytes) == RET_ERROR)
return (RET_ERROR);
break;
case P_BINTERNAL:
bi = GETBINTERNAL(r, 0);
nbytes = NBINTERNAL(bi->ksize);
h->linp[1] = h->upper -= nbytes;
dest = (char *)h + h->upper;
memmove(dest, bi, nbytes);
((BINTERNAL *)dest)->pgno = r->pgno;
break;
default:
abort();
}
/* There are two keys on the page. */
h->lower = BTDATAOFF + 2 * sizeof(indx_t);
/* Unpin the root page, set to btree internal page. */
h->flags &= ~P_TYPE;
h->flags |= P_BINTERNAL;
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
return (RET_SUCCESS);
}
/*
* BT_PSPLIT -- Do the real work of splitting the page.
*
* Parameters:
* t: tree
* h: page to be split
* l: page to put lower half of data
* r: page to put upper half of data
* pskip: pointer to index to leave open
* ilen: insert length
*
* Returns:
* Pointer to page in which to insert.
*/
static PAGE *
bt_psplit(t, h, l, r, pskip, ilen)
BTREE *t;
PAGE *h, *l, *r;
indx_t *pskip;
size_t ilen;
{
BINTERNAL *bi;
BLEAF *bl;
CURSOR *c;
RLEAF *rl;
PAGE *rval;
void *src;
indx_t full, half, nxt, off, skip, top, used;
u_int32_t nbytes;
int bigkeycnt, isbigkey;
/*
* Split the data to the left and right pages. Leave the skip index
* open. Additionally, make some effort not to split on an overflow
* key. This makes internal page processing faster and can save
* space as overflow keys used by internal pages are never deleted.
*/
bigkeycnt = 0;
skip = *pskip;
full = t->bt_psize - BTDATAOFF;
half = full / 2;
used = 0;
for (nxt = off = 0, top = NEXTINDEX(h); nxt < top; ++off) {
if (skip == off) {
nbytes = ilen;
isbigkey = 0; /* XXX: not really known. */
} else
switch (h->flags & P_TYPE) {
case P_BINTERNAL:
src = bi = GETBINTERNAL(h, nxt);
nbytes = NBINTERNAL(bi->ksize);
isbigkey = bi->flags & P_BIGKEY;
break;
case P_BLEAF:
src = bl = GETBLEAF(h, nxt);
nbytes = NBLEAF(bl);
isbigkey = bl->flags & P_BIGKEY;
break;
case P_RINTERNAL:
src = GETRINTERNAL(h, nxt);
nbytes = NRINTERNAL;
isbigkey = 0;
break;
case P_RLEAF:
src = rl = GETRLEAF(h, nxt);
nbytes = NRLEAF(rl);
isbigkey = 0;
break;
default:
abort();
}
/*
* If the key/data pairs are substantial fractions of the max
* possible size for the page, it's possible to get situations
* where we decide to try and copy too much onto the left page.
* Make sure that doesn't happen.
*/
if (skip <= off && used + nbytes >= full) {
--off;
break;
}
/* Copy the key/data pair, if not the skipped index. */
if (skip != off) {
++nxt;
l->linp[off] = l->upper -= nbytes;
memmove((char *)l + l->upper, src, nbytes);
}
used += nbytes;
if (used >= half) {
if (!isbigkey || bigkeycnt == 3)
break;
else
++bigkeycnt;
}
}
/*
* Off is the last offset that's valid for the left page.
* Nxt is the first offset to be placed on the right page.
*/
l->lower += (off + 1) * sizeof(indx_t);
/*
* If splitting the page that the cursor was on, the cursor has to be
* adjusted to point to the same record as before the split. If the
* cursor is at or past the skipped slot, the cursor is incremented by
* one. If the cursor is on the right page, it is decremented by the
* number of records split to the left page.
*/
c = &t->bt_cursor;
if (F_ISSET(c, CURS_INIT) && c->pg.pgno == h->pgno) {
if (c->pg.index >= skip)
++c->pg.index;
if (c->pg.index < nxt) /* Left page. */
c->pg.pgno = l->pgno;
else { /* Right page. */
c->pg.pgno = r->pgno;
c->pg.index -= nxt;
}
}
/*
* If the skipped index was on the left page, just return that page.
* Otherwise, adjust the skip index to reflect the new position on
* the right page.
*/
if (skip <= off) {
skip = 0;
rval = l;
} else {
rval = r;
*pskip -= nxt;
}
for (off = 0; nxt < top; ++off) {
if (skip == nxt) {
++off;
skip = 0;
}
switch (h->flags & P_TYPE) {
case P_BINTERNAL:
src = bi = GETBINTERNAL(h, nxt);
nbytes = NBINTERNAL(bi->ksize);
break;
case P_BLEAF:
src = bl = GETBLEAF(h, nxt);
nbytes = NBLEAF(bl);
break;
case P_RINTERNAL:
src = GETRINTERNAL(h, nxt);
nbytes = NRINTERNAL;
break;
case P_RLEAF:
src = rl = GETRLEAF(h, nxt);
nbytes = NRLEAF(rl);
break;
default:
abort();
}
++nxt;
r->linp[off] = r->upper -= nbytes;
memmove((char *)r + r->upper, src, nbytes);
}
r->lower += off * sizeof(indx_t);
/* If the key is being appended to the page, adjust the index. */
if (skip == top)
r->lower += sizeof(indx_t);
return (rval);
}
/*
* BT_PRESERVE -- Mark a chain of pages as used by an internal node.
*
* Chains of indirect blocks pointed to by leaf nodes get reclaimed when the
* record that references them gets deleted. Chains pointed to by internal
* pages never get deleted. This routine marks a chain as pointed to by an
* internal page.
*
* Parameters:
* t: tree
* pg: page number of first page in the chain.
*
* Returns:
* RET_SUCCESS, RET_ERROR.
*/
static int
bt_preserve(t, pg)
BTREE *t;
pgno_t pg;
{
PAGE *h;
if ((h = mpool_get(t->bt_mp, pg, 0)) == NULL)
return (RET_ERROR);
h->flags |= P_PRESERVE;
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
return (RET_SUCCESS);
}
/*
* REC_TOTAL -- Return the number of recno entries below a page.
*
* Parameters:
* h: page
*
* Returns:
* The number of recno entries below a page.
*
* XXX
* These values could be set by the bt_psplit routine. The problem is that the
* entry has to be popped off of the stack etc. or the values have to be passed
* all the way back to bt_split/bt_rroot and it's not very clean.
*/
static recno_t
rec_total(h)
PAGE *h;
{
recno_t recs;
indx_t nxt, top;
for (recs = 0, nxt = 0, top = NEXTINDEX(h); nxt < top; ++nxt)
recs += GETRINTERNAL(h, nxt)->nrecs;
return (recs);
}
+260
View File
@@ -0,0 +1,260 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)bt_utils.c 8.8 (Berkeley) 7/20/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/param.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <db.h>
#include "btree.h"
/*
* __bt_ret --
* Build return key/data pair.
*
* Parameters:
* t: tree
* e: key/data pair to be returned
* key: user's key structure (NULL if not to be filled in)
* rkey: memory area to hold key
* data: user's data structure (NULL if not to be filled in)
* rdata: memory area to hold data
* copy: always copy the key/data item
*
* Returns:
* RET_SUCCESS, RET_ERROR.
*/
int
__bt_ret(t, e, key, rkey, data, rdata, copy)
BTREE *t;
EPG *e;
DBT *key, *rkey, *data, *rdata;
int copy;
{
BLEAF *bl;
void *p;
bl = GETBLEAF(e->page, e->index);
/*
* We must copy big keys/data to make them contigous. Otherwise,
* leave the page pinned and don't copy unless the user specified
* concurrent access.
*/
if (key == NULL)
goto dataonly;
if (bl->flags & P_BIGKEY) {
if (__ovfl_get(t, bl->bytes,
&key->size, &rkey->data, &rkey->size))
return (RET_ERROR);
key->data = rkey->data;
} else if (copy || F_ISSET(t, B_DB_LOCK)) {
if (bl->ksize > rkey->size) {
p = (void *)(rkey->data == NULL ?
malloc(bl->ksize) : realloc(rkey->data, bl->ksize));
if (p == NULL)
return (RET_ERROR);
rkey->data = p;
rkey->size = bl->ksize;
}
memmove(rkey->data, bl->bytes, bl->ksize);
key->size = bl->ksize;
key->data = rkey->data;
} else {
key->size = bl->ksize;
key->data = bl->bytes;
}
dataonly:
if (data == NULL)
return (RET_SUCCESS);
if (bl->flags & P_BIGDATA) {
if (__ovfl_get(t, bl->bytes + bl->ksize,
&data->size, &rdata->data, &rdata->size))
return (RET_ERROR);
data->data = rdata->data;
} else if (copy || F_ISSET(t, B_DB_LOCK)) {
/* Use +1 in case the first record retrieved is 0 length. */
if (bl->dsize + 1 > rdata->size) {
p = (void *)(rdata->data == NULL ?
malloc(bl->dsize + 1) :
realloc(rdata->data, bl->dsize + 1));
if (p == NULL)
return (RET_ERROR);
rdata->data = p;
rdata->size = bl->dsize + 1;
}
memmove(rdata->data, bl->bytes + bl->ksize, bl->dsize);
data->size = bl->dsize;
data->data = rdata->data;
} else {
data->size = bl->dsize;
data->data = bl->bytes + bl->ksize;
}
return (RET_SUCCESS);
}
/*
* __BT_CMP -- Compare a key to a given record.
*
* Parameters:
* t: tree
* k1: DBT pointer of first arg to comparison
* e: pointer to EPG for comparison
*
* Returns:
* < 0 if k1 is < record
* = 0 if k1 is = record
* > 0 if k1 is > record
*/
int
__bt_cmp(t, k1, e)
BTREE *t;
const DBT *k1;
EPG *e;
{
BINTERNAL *bi;
BLEAF *bl;
DBT k2;
PAGE *h;
void *bigkey;
/*
* The left-most key on internal pages, at any level of the tree, is
* guaranteed by the following code to be less than any user key.
* This saves us from having to update the leftmost key on an internal
* page when the user inserts a new key in the tree smaller than
* anything we've yet seen.
*/
h = e->page;
if (e->index == 0 && h->prevpg == P_INVALID && !(h->flags & P_BLEAF))
return (1);
bigkey = NULL;
if (h->flags & P_BLEAF) {
bl = GETBLEAF(h, e->index);
if (bl->flags & P_BIGKEY)
bigkey = bl->bytes;
else {
k2.data = bl->bytes;
k2.size = bl->ksize;
}
} else {
bi = GETBINTERNAL(h, e->index);
if (bi->flags & P_BIGKEY)
bigkey = bi->bytes;
else {
k2.data = bi->bytes;
k2.size = bi->ksize;
}
}
if (bigkey) {
if (__ovfl_get(t, bigkey,
&k2.size, &t->bt_rdata.data, &t->bt_rdata.size))
return (RET_ERROR);
k2.data = t->bt_rdata.data;
}
return ((*t->bt_cmp)(k1, &k2));
}
/*
* __BT_DEFCMP -- Default comparison routine.
*
* Parameters:
* a: DBT #1
* b: DBT #2
*
* Returns:
* < 0 if a is < b
* = 0 if a is = b
* > 0 if a is > b
*/
int
__bt_defcmp(a, b)
const DBT *a, *b;
{
register size_t len;
register u_char *p1, *p2;
/*
* XXX
* If a size_t doesn't fit in an int, this routine can lose.
* What we need is a integral type which is guaranteed to be
* larger than a size_t, and there is no such thing.
*/
len = MIN(a->size, b->size);
for (p1 = a->data, p2 = b->data; len--; ++p1, ++p2)
if (*p1 != *p2)
return ((int)*p1 - (int)*p2);
return ((int)a->size - (int)b->size);
}
/*
* __BT_DEFPFX -- Default prefix routine.
*
* Parameters:
* a: DBT #1
* b: DBT #2
*
* Returns:
* Number of bytes needed to distinguish b from a.
*/
size_t
__bt_defpfx(a, b)
const DBT *a, *b;
{
register u_char *p1, *p2;
register size_t cnt, len;
cnt = 1;
len = MIN(a->size, b->size);
for (p1 = a->data, p2 = b->data; len--; ++p1, ++p2, ++cnt)
if (*p1 != *p2)
return (cnt);
/* a->size must be <= b->size, or they wouldn't be in this order. */
return (a->size < b->size ? a->size + 1 : a->size);
}
+383
View File
@@ -0,0 +1,383 @@
/*-
* Copyright (c) 1991, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*
* @(#)btree.h 8.11 (Berkeley) 8/17/94
*/
/* Macros to set/clear/test flags. */
#define F_SET(p, f) (p)->flags |= (f)
#define F_CLR(p, f) (p)->flags &= ~(f)
#define F_ISSET(p, f) ((p)->flags & (f))
#include <mpool.h>
#define DEFMINKEYPAGE (2) /* Minimum keys per page */
#define MINCACHE (5) /* Minimum cached pages */
#define MINPSIZE (512) /* Minimum page size */
/*
* Page 0 of a btree file contains a copy of the meta-data. This page is also
* used as an out-of-band page, i.e. page pointers that point to nowhere point
* to page 0. Page 1 is the root of the btree.
*/
#define P_INVALID 0 /* Invalid tree page number. */
#define P_META 0 /* Tree metadata page number. */
#define P_ROOT 1 /* Tree root page number. */
/*
* There are five page layouts in the btree: btree internal pages (BINTERNAL),
* btree leaf pages (BLEAF), recno internal pages (RINTERNAL), recno leaf pages
* (RLEAF) and overflow pages. All five page types have a page header (PAGE).
* This implementation requires that values within structures NOT be padded.
* (ANSI C permits random padding.) If your compiler pads randomly you'll have
* to do some work to get this package to run.
*/
typedef struct _page {
pgno_t pgno; /* this page's page number */
pgno_t prevpg; /* left sibling */
pgno_t nextpg; /* right sibling */
#define P_BINTERNAL 0x01 /* btree internal page */
#define P_BLEAF 0x02 /* leaf page */
#define P_OVERFLOW 0x04 /* overflow page */
#define P_RINTERNAL 0x08 /* recno internal page */
#define P_RLEAF 0x10 /* leaf page */
#define P_TYPE 0x1f /* type mask */
#define P_PRESERVE 0x20 /* never delete this chain of pages */
u_int32_t flags;
indx_t lower; /* lower bound of free space on page */
indx_t upper; /* upper bound of free space on page */
indx_t linp[1]; /* indx_t-aligned VAR. LENGTH DATA */
} PAGE;
/* First and next index. */
#define BTDATAOFF \
(sizeof(pgno_t) + sizeof(pgno_t) + sizeof(pgno_t) + \
sizeof(u_int32_t) + sizeof(indx_t) + sizeof(indx_t))
#define NEXTINDEX(p) (((p)->lower - BTDATAOFF) / sizeof(indx_t))
/*
* For pages other than overflow pages, there is an array of offsets into the
* rest of the page immediately following the page header. Each offset is to
* an item which is unique to the type of page. The h_lower offset is just
* past the last filled-in index. The h_upper offset is the first item on the
* page. Offsets are from the beginning of the page.
*
* If an item is too big to store on a single page, a flag is set and the item
* is a { page, size } pair such that the page is the first page of an overflow
* chain with size bytes of item. Overflow pages are simply bytes without any
* external structure.
*
* The page number and size fields in the items are pgno_t-aligned so they can
* be manipulated without copying. (This presumes that 32 bit items can be
* manipulated on this system.)
*/
#define LALIGN(n) (((n) + sizeof(pgno_t) - 1) & ~(sizeof(pgno_t) - 1))
#define NOVFLSIZE (sizeof(pgno_t) + sizeof(u_int32_t))
/*
* For the btree internal pages, the item is a key. BINTERNALs are {key, pgno}
* pairs, such that the key compares less than or equal to all of the records
* on that page. For a tree without duplicate keys, an internal page with two
* consecutive keys, a and b, will have all records greater than or equal to a
* and less than b stored on the page associated with a. Duplicate keys are
* somewhat special and can cause duplicate internal and leaf page records and
* some minor modifications of the above rule.
*/
typedef struct _binternal {
u_int32_t ksize; /* key size */
pgno_t pgno; /* page number stored on */
#define P_BIGDATA 0x01 /* overflow data */
#define P_BIGKEY 0x02 /* overflow key */
u_char flags;
char bytes[1]; /* data */
} BINTERNAL;
/* Get the page's BINTERNAL structure at index indx. */
#define GETBINTERNAL(pg, indx) \
((BINTERNAL *)((char *)(pg) + (pg)->linp[indx]))
/* Get the number of bytes in the entry. */
#define NBINTERNAL(len) \
LALIGN(sizeof(u_int32_t) + sizeof(pgno_t) + sizeof(u_char) + (len))
/* Copy a BINTERNAL entry to the page. */
#define WR_BINTERNAL(p, size, pgno, flags) { \
*(u_int32_t *)p = size; \
p += sizeof(u_int32_t); \
*(pgno_t *)p = pgno; \
p += sizeof(pgno_t); \
*(u_char *)p = flags; \
p += sizeof(u_char); \
}
/*
* For the recno internal pages, the item is a page number with the number of
* keys found on that page and below.
*/
typedef struct _rinternal {
recno_t nrecs; /* number of records */
pgno_t pgno; /* page number stored below */
} RINTERNAL;
/* Get the page's RINTERNAL structure at index indx. */
#define GETRINTERNAL(pg, indx) \
((RINTERNAL *)((char *)(pg) + (pg)->linp[indx]))
/* Get the number of bytes in the entry. */
#define NRINTERNAL \
LALIGN(sizeof(recno_t) + sizeof(pgno_t))
/* Copy a RINTERAL entry to the page. */
#define WR_RINTERNAL(p, nrecs, pgno) { \
*(recno_t *)p = nrecs; \
p += sizeof(recno_t); \
*(pgno_t *)p = pgno; \
}
/* For the btree leaf pages, the item is a key and data pair. */
typedef struct _bleaf {
u_int32_t ksize; /* size of key */
u_int32_t dsize; /* size of data */
u_char flags; /* P_BIGDATA, P_BIGKEY */
char bytes[1]; /* data */
} BLEAF;
/* Get the page's BLEAF structure at index indx. */
#define GETBLEAF(pg, indx) \
((BLEAF *)((char *)(pg) + (pg)->linp[indx]))
/* Get the number of bytes in the entry. */
#define NBLEAF(p) NBLEAFDBT((p)->ksize, (p)->dsize)
/* Get the number of bytes in the user's key/data pair. */
#define NBLEAFDBT(ksize, dsize) \
LALIGN(sizeof(u_int32_t) + sizeof(u_int32_t) + sizeof(u_char) + \
(ksize) + (dsize))
/* Copy a BLEAF entry to the page. */
#define WR_BLEAF(p, key, data, flags) { \
*(u_int32_t *)p = key->size; \
p += sizeof(u_int32_t); \
*(u_int32_t *)p = data->size; \
p += sizeof(u_int32_t); \
*(u_char *)p = flags; \
p += sizeof(u_char); \
memmove(p, key->data, key->size); \
p += key->size; \
memmove(p, data->data, data->size); \
}
/* For the recno leaf pages, the item is a data entry. */
typedef struct _rleaf {
u_int32_t dsize; /* size of data */
u_char flags; /* P_BIGDATA */
char bytes[1];
} RLEAF;
/* Get the page's RLEAF structure at index indx. */
#define GETRLEAF(pg, indx) \
((RLEAF *)((char *)(pg) + (pg)->linp[indx]))
/* Get the number of bytes in the entry. */
#define NRLEAF(p) NRLEAFDBT((p)->dsize)
/* Get the number of bytes from the user's data. */
#define NRLEAFDBT(dsize) \
LALIGN(sizeof(u_int32_t) + sizeof(u_char) + (dsize))
/* Copy a RLEAF entry to the page. */
#define WR_RLEAF(p, data, flags) { \
*(u_int32_t *)p = data->size; \
p += sizeof(u_int32_t); \
*(u_char *)p = flags; \
p += sizeof(u_char); \
memmove(p, data->data, data->size); \
}
/*
* A record in the tree is either a pointer to a page and an index in the page
* or a page number and an index. These structures are used as a cursor, stack
* entry and search returns as well as to pass records to other routines.
*
* One comment about searches. Internal page searches must find the largest
* record less than key in the tree so that descents work. Leaf page searches
* must find the smallest record greater than key so that the returned index
* is the record's correct position for insertion.
*/
typedef struct _epgno {
pgno_t pgno; /* the page number */
indx_t index; /* the index on the page */
} EPGNO;
typedef struct _epg {
PAGE *page; /* the (pinned) page */
indx_t index; /* the index on the page */
} EPG;
/*
* About cursors. The cursor (and the page that contained the key/data pair
* that it referenced) can be deleted, which makes things a bit tricky. If
* there are no duplicates of the cursor key in the tree (i.e. B_NODUPS is set
* or there simply aren't any duplicates of the key) we copy the key that it
* referenced when it's deleted, and reacquire a new cursor key if the cursor
* is used again. If there are duplicates keys, we move to the next/previous
* key, and set a flag so that we know what happened. NOTE: if duplicate (to
* the cursor) keys are added to the tree during this process, it is undefined
* if they will be returned or not in a cursor scan.
*
* The flags determine the possible states of the cursor:
*
* CURS_INIT The cursor references *something*.
* CURS_ACQUIRE The cursor was deleted, and a key has been saved so that
* we can reacquire the right position in the tree.
* CURS_AFTER, CURS_BEFORE
* The cursor was deleted, and now references a key/data pair
* that has not yet been returned, either before or after the
* deleted key/data pair.
* XXX
* This structure is broken out so that we can eventually offer multiple
* cursors as part of the DB interface.
*/
typedef struct _cursor {
EPGNO pg; /* B: Saved tree reference. */
DBT key; /* B: Saved key, or key.data == NULL. */
recno_t rcursor; /* R: recno cursor (1-based) */
#define CURS_ACQUIRE 0x01 /* B: Cursor needs to be reacquired. */
#define CURS_AFTER 0x02 /* B: Unreturned cursor after key. */
#define CURS_BEFORE 0x04 /* B: Unreturned cursor before key. */
#define CURS_INIT 0x08 /* RB: Cursor initialized. */
u_int8_t flags;
} CURSOR;
/*
* The metadata of the tree. The nrecs field is used only by the RECNO code.
* This is because the btree doesn't really need it and it requires that every
* put or delete call modify the metadata.
*/
typedef struct _btmeta {
u_int32_t magic; /* magic number */
u_int32_t version; /* version */
u_int32_t psize; /* page size */
u_int32_t free; /* page number of first free page */
u_int32_t nrecs; /* R: number of records */
#define SAVEMETA (B_NODUPS | R_RECNO)
u_int32_t flags; /* bt_flags & SAVEMETA */
} BTMETA;
/* The in-memory btree/recno data structure. */
typedef struct _btree {
MPOOL *bt_mp; /* memory pool cookie */
DB *bt_dbp; /* pointer to enclosing DB */
EPG bt_cur; /* current (pinned) page */
PAGE *bt_pinned; /* page pinned across calls */
CURSOR bt_cursor; /* cursor */
#define BT_PUSH(t, p, i) { \
t->bt_sp->pgno = p; \
t->bt_sp->index = i; \
++t->bt_sp; \
}
#define BT_POP(t) (t->bt_sp == t->bt_stack ? NULL : --t->bt_sp)
#define BT_CLR(t) (t->bt_sp = t->bt_stack)
EPGNO bt_stack[50]; /* stack of parent pages */
EPGNO *bt_sp; /* current stack pointer */
DBT bt_rkey; /* returned key */
DBT bt_rdata; /* returned data */
int bt_fd; /* tree file descriptor */
pgno_t bt_free; /* next free page */
u_int32_t bt_psize; /* page size */
indx_t bt_ovflsize; /* cut-off for key/data overflow */
int bt_lorder; /* byte order */
/* sorted order */
enum { NOT, BACK, FORWARD } bt_order;
EPGNO bt_last; /* last insert */
/* B: key comparison function */
int (*bt_cmp) __P((const DBT *, const DBT *));
/* B: prefix comparison function */
size_t (*bt_pfx) __P((const DBT *, const DBT *));
/* R: recno input function */
int (*bt_irec) __P((struct _btree *, recno_t));
FILE *bt_rfp; /* R: record FILE pointer */
int bt_rfd; /* R: record file descriptor */
caddr_t bt_cmap; /* R: current point in mapped space */
caddr_t bt_smap; /* R: start of mapped space */
caddr_t bt_emap; /* R: end of mapped space */
size_t bt_msize; /* R: size of mapped region. */
recno_t bt_nrecs; /* R: number of records */
size_t bt_reclen; /* R: fixed record length */
u_char bt_bval; /* R: delimiting byte/pad character */
/*
* NB:
* B_NODUPS and R_RECNO are stored on disk, and may not be changed.
*/
#define B_INMEM 0x00001 /* in-memory tree */
#define B_METADIRTY 0x00002 /* need to write metadata */
#define B_MODIFIED 0x00004 /* tree modified */
#define B_NEEDSWAP 0x00008 /* if byte order requires swapping */
#define B_RDONLY 0x00010 /* read-only tree */
#define B_NODUPS 0x00020 /* no duplicate keys permitted */
#define R_RECNO 0x00080 /* record oriented tree */
#define R_CLOSEFP 0x00040 /* opened a file pointer */
#define R_EOF 0x00100 /* end of input file reached. */
#define R_FIXLEN 0x00200 /* fixed length records */
#define R_MEMMAPPED 0x00400 /* memory mapped file. */
#define R_INMEM 0x00800 /* in-memory file */
#define R_MODIFIED 0x01000 /* modified file */
#define R_RDONLY 0x02000 /* read-only file */
#define B_DB_LOCK 0x04000 /* DB_LOCK specified. */
#define B_DB_SHMEM 0x08000 /* DB_SHMEM specified. */
#define B_DB_TXN 0x10000 /* DB_TXN specified. */
u_int32_t flags;
} BTREE;
#include "extern.h"
+70
View File
@@ -0,0 +1,70 @@
/*-
* Copyright (c) 1991, 1993, 1994
* The 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.
*
* @(#)extern.h 8.10 (Berkeley) 7/20/94
*/
int __bt_close __P((DB *));
int __bt_cmp __P((BTREE *, const DBT *, EPG *));
int __bt_crsrdel __P((BTREE *, EPGNO *));
int __bt_defcmp __P((const DBT *, const DBT *));
size_t __bt_defpfx __P((const DBT *, const DBT *));
int __bt_delete __P((const DB *, const DBT *, u_int));
int __bt_dleaf __P((BTREE *, const DBT *, PAGE *, u_int));
int __bt_fd __P((const DB *));
int __bt_free __P((BTREE *, PAGE *));
int __bt_get __P((const DB *, const DBT *, DBT *, u_int));
PAGE *__bt_new __P((BTREE *, pgno_t *));
void __bt_pgin __P((void *, pgno_t, void *));
void __bt_pgout __P((void *, pgno_t, void *));
int __bt_push __P((BTREE *, pgno_t, int));
int __bt_put __P((const DB *dbp, DBT *, const DBT *, u_int));
int __bt_ret __P((BTREE *, EPG *, DBT *, DBT *, DBT *, DBT *, int));
EPG *__bt_search __P((BTREE *, const DBT *, int *));
int __bt_seq __P((const DB *, DBT *, DBT *, u_int));
void __bt_setcur __P((BTREE *, pgno_t, u_int));
int __bt_split __P((BTREE *, PAGE *,
const DBT *, const DBT *, int, size_t, u_int32_t));
int __bt_sync __P((const DB *, u_int));
int __ovfl_delete __P((BTREE *, void *));
int __ovfl_get __P((BTREE *, void *, size_t *, void **, size_t *));
int __ovfl_put __P((BTREE *, const DBT *, pgno_t *));
#ifdef DEBUG
void __bt_dnpage __P((DB *, pgno_t));
void __bt_dpage __P((PAGE *));
void __bt_dump __P((DB *));
#endif
#ifdef STATISTICS
void __bt_stat __P((DB *));
#endif
+49
View File
@@ -0,0 +1,49 @@
/* Values for building 4.4 BSD db routines in the GNU C library. */
#ifndef _compat_h_
#define _compat_h_
#include <fcntl.h>
/*
* If you can't provide lock values in the open(2) call. Note, this
* allows races to happen.
*/
#ifndef O_EXLOCK /* 4.4BSD extension. */
#define O_EXLOCK 0
#endif
#ifndef O_SHLOCK /* 4.4BSD extension. */
#define O_SHLOCK 0
#endif
#include <errno.h>
#ifndef EFTYPE
#define EFTYPE EINVAL /* POSIX 1003.1 format errno. */
#endif
#include <unistd.h>
#include <limits.h>
#ifndef _POSIX_VDISABLE /* POSIX 1003.1 disabling char. */
#define _POSIX_VDISABLE 0 /* Some systems used 0. */
#endif
#include <termios.h>
#ifndef TCSASOFT /* 4.4BSD extension. */
#define TCSASOFT 0
#endif
#include <sys/param.h>
#ifndef MAX /* Usually found in <sys/param.h>. */
#define MAX(_a,_b) ((_a)<(_b)?(_b):(_a))
#endif
#ifndef MIN /* Usually found in <sys/param.h>. */
#define MIN(_a,_b) ((_a)<(_b)?(_a):(_b))
#endif
#endif /* compat.h */
+236
View File
@@ -0,0 +1,236 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The 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.
*
* @(#)db.h 8.7 (Berkeley) 6/16/94
*/
#ifndef _DB_H_
#define _DB_H_
#include <sys/types.h>
#include <sys/cdefs.h>
#include <limits.h>
#ifdef __DBINTERFACE_PRIVATE
#include <compat.h>
#endif
#define RET_ERROR -1 /* Return values. */
#define RET_SUCCESS 0
#define RET_SPECIAL 1
#ifndef __BIT_TYPES_DEFINED__
#define __BIT_TYPES_DEFINED__
typedef __signed char int8_t;
typedef unsigned char u_int8_t;
typedef short int16_t;
typedef unsigned short u_int16_t;
typedef int int32_t;
typedef unsigned int u_int32_t;
#ifdef WE_DONT_NEED_QUADS
typedef long long int64_t;
typedef unsigned long long u_int64_t;
#endif
#endif
#define MAX_PAGE_NUMBER 0xffffffff /* >= # of pages in a file */
typedef u_int32_t pgno_t;
#define MAX_PAGE_OFFSET 65535 /* >= # of bytes in a page */
typedef u_int16_t indx_t;
#define MAX_REC_NUMBER 0xffffffff /* >= # of records in a tree */
typedef u_int32_t recno_t;
/* Key/data structure -- a Data-Base Thang. */
typedef struct {
void *data; /* data */
size_t size; /* data length */
} DBT;
/* Routine flags. */
#define R_CURSOR 1 /* del, put, seq */
#define __R_UNUSED 2 /* UNUSED */
#define R_FIRST 3 /* seq */
#define R_IAFTER 4 /* put (RECNO) */
#define R_IBEFORE 5 /* put (RECNO) */
#define R_LAST 6 /* seq (BTREE, RECNO) */
#define R_NEXT 7 /* seq */
#define R_NOOVERWRITE 8 /* put */
#define R_PREV 9 /* seq (BTREE, RECNO) */
#define R_SETCURSOR 10 /* put (RECNO) */
#define R_RECNOSYNC 11 /* sync (RECNO) */
typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE;
/*
* !!!
* The following flags are included in the dbopen(3) call as part of the
* open(2) flags. In order to avoid conflicts with the open flags, start
* at the top of the 16 or 32-bit number space and work our way down. If
* the open flags were significantly expanded in the future, it could be
* a problem. Wish I'd left another flags word in the dbopen call.
*
* !!!
* None of this stuff is implemented yet. The only reason that it's here
* is so that the access methods can skip copying the key/data pair when
* the DB_LOCK flag isn't set.
*/
#if UINT_MAX > 65535
#define DB_LOCK 0x20000000 /* Do locking. */
#define DB_SHMEM 0x40000000 /* Use shared memory. */
#define DB_TXN 0x80000000 /* Do transactions. */
#else
#define DB_LOCK 0x2000 /* Do locking. */
#define DB_SHMEM 0x4000 /* Use shared memory. */
#define DB_TXN 0x8000 /* Do transactions. */
#endif
/* Access method description structure. */
typedef struct __db {
DBTYPE type; /* Underlying db type. */
int (*close) __P((struct __db *));
int (*del) __P((const struct __db *, const DBT *, u_int));
int (*get) __P((const struct __db *, const DBT *, DBT *, u_int));
int (*put) __P((const struct __db *, DBT *, const DBT *, u_int));
int (*seq) __P((const struct __db *, DBT *, DBT *, u_int));
int (*sync) __P((const struct __db *, u_int));
void *internal; /* Access method private. */
int (*fd) __P((const struct __db *));
} DB;
#define BTREEMAGIC 0x053162
#define BTREEVERSION 3
/* Structure used to pass parameters to the btree routines. */
typedef struct {
#define R_DUP 0x01 /* duplicate keys */
u_long flags;
u_int cachesize; /* bytes to cache */
int maxkeypage; /* maximum keys per page */
int minkeypage; /* minimum keys per page */
u_int psize; /* page size */
int (*compare) /* comparison function */
__P((const DBT *, const DBT *));
size_t (*prefix) /* prefix function */
__P((const DBT *, const DBT *));
int lorder; /* byte order */
} BTREEINFO;
#define HASHMAGIC 0x061561
#define HASHVERSION 2
/* Structure used to pass parameters to the hashing routines. */
typedef struct {
u_int bsize; /* bucket size */
u_int ffactor; /* fill factor */
u_int nelem; /* number of elements */
u_int cachesize; /* bytes to cache */
u_int32_t /* hash function */
(*hash) __P((const void *, size_t));
int lorder; /* byte order */
} HASHINFO;
/* Structure used to pass parameters to the record routines. */
typedef struct {
#define R_FIXEDLEN 0x01 /* fixed-length records */
#define R_NOKEY 0x02 /* key not required */
#define R_SNAPSHOT 0x04 /* snapshot the input */
u_long flags;
u_int cachesize; /* bytes to cache */
u_int psize; /* page size */
int lorder; /* byte order */
size_t reclen; /* record length (fixed-length records) */
u_char bval; /* delimiting byte (variable-length records */
char *bfname; /* btree file name */
} RECNOINFO;
#ifdef __DBINTERFACE_PRIVATE
/*
* Little endian <==> big endian 32-bit swap macros.
* M_32_SWAP swap a memory location
* P_32_SWAP swap a referenced memory location
* P_32_COPY swap from one location to another
*/
#define M_32_SWAP(a) { \
u_int32_t _tmp = a; \
((char *)&a)[0] = ((char *)&_tmp)[3]; \
((char *)&a)[1] = ((char *)&_tmp)[2]; \
((char *)&a)[2] = ((char *)&_tmp)[1]; \
((char *)&a)[3] = ((char *)&_tmp)[0]; \
}
#define P_32_SWAP(a) { \
u_int32_t _tmp = *(u_int32_t *)a; \
((char *)a)[0] = ((char *)&_tmp)[3]; \
((char *)a)[1] = ((char *)&_tmp)[2]; \
((char *)a)[2] = ((char *)&_tmp)[1]; \
((char *)a)[3] = ((char *)&_tmp)[0]; \
}
#define P_32_COPY(a, b) { \
((char *)&(b))[0] = ((char *)&(a))[3]; \
((char *)&(b))[1] = ((char *)&(a))[2]; \
((char *)&(b))[2] = ((char *)&(a))[1]; \
((char *)&(b))[3] = ((char *)&(a))[0]; \
}
/*
* Little endian <==> big endian 16-bit swap macros.
* M_16_SWAP swap a memory location
* P_16_SWAP swap a referenced memory location
* P_16_COPY swap from one location to another
*/
#define M_16_SWAP(a) { \
u_int16_t _tmp = a; \
((char *)&a)[0] = ((char *)&_tmp)[1]; \
((char *)&a)[1] = ((char *)&_tmp)[0]; \
}
#define P_16_SWAP(a) { \
u_int16_t _tmp = *(u_int16_t *)a; \
((char *)a)[0] = ((char *)&_tmp)[1]; \
((char *)a)[1] = ((char *)&_tmp)[0]; \
}
#define P_16_COPY(a, b) { \
((char *)&(b))[0] = ((char *)&(a))[1]; \
((char *)&(b))[1] = ((char *)&(a))[0]; \
}
#endif
__BEGIN_DECLS
DB *dbopen __P((const char *, int, int, DBTYPE, const void *));
#ifdef __DBINTERFACE_PRIVATE
DB *__bt_open __P((const char *, int, int, const BTREEINFO *, int));
DB *__hash_open __P((const char *, int, int, const HASHINFO *, int));
DB *__rec_open __P((const char *, int, int, const RECNOINFO *, int));
void __dbpanic __P((DB *dbp));
#endif
__END_DECLS
#endif /* !_DB_H_ */
+103
View File
@@ -0,0 +1,103 @@
/*-
* Copyright (c) 1991, 1993
* The 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)db.c 8.4 (Berkeley) 2/21/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <errno.h>
#include <fcntl.h>
#include <stddef.h>
#include <stdio.h>
#include <db.h>
DB *
dbopen(fname, flags, mode, type, openinfo)
const char *fname;
int flags, mode;
DBTYPE type;
const void *openinfo;
{
#define DB_FLAGS (DB_LOCK | DB_SHMEM | DB_TXN)
#define USE_OPEN_FLAGS \
(O_CREAT | O_EXCL | O_EXLOCK | O_NONBLOCK | O_RDONLY | \
O_RDWR | O_SHLOCK | O_TRUNC)
if ((flags & ~(USE_OPEN_FLAGS | DB_FLAGS)) == 0)
switch (type) {
case DB_BTREE:
return (__bt_open(fname, flags & USE_OPEN_FLAGS,
mode, openinfo, flags & DB_FLAGS));
case DB_HASH:
return (__hash_open(fname, flags & USE_OPEN_FLAGS,
mode, openinfo, flags & DB_FLAGS));
case DB_RECNO:
return (__rec_open(fname, flags & USE_OPEN_FLAGS,
mode, openinfo, flags & DB_FLAGS));
}
errno = EINVAL;
return (NULL);
}
static int
__dberr __P((void))
{
return (RET_ERROR);
}
/*
* __DBPANIC -- Stop.
*
* Parameters:
* dbp: pointer to the DB structure.
*/
void
__dbpanic(dbp)
DB *dbp;
{
/* The only thing that can succeed is a close. */
dbp->del = (int (*)__P((const struct __db *,
const DBT *, u_int))) __dberr;
dbp->get = (int (*)__P((const struct __db *,
const DBT *, DBT *, u_int))) __dberr;
dbp->put = (int (*)__P((const struct __db *,
DBT *, const DBT *, u_int))) __dberr;
dbp->seq = (int (*)__P((const struct __db *,
DBT *, DBT *, u_int))) __dberr;
dbp->sync = (int (*)__P((const struct __db *, u_int))) __dberr;
dbp->fd = (int (*)__P((const struct __db *))) __dberr;
}
+32 -50
View File
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1985, 1993
/*-
* Copyright (c) 1991, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,55 +29,37 @@
* 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.
*
* @(#)extern.h 8.4 (Berkeley) 6/16/94
*/
#ifndef lint
static char sccsid[] = "@(#)atanh.c 8.1 (Berkeley) 6/4/93";
#endif /* not lint */
BUFHEAD *__add_ovflpage __P((HTAB *, BUFHEAD *));
int __addel __P((HTAB *, BUFHEAD *, const DBT *, const DBT *));
int __big_delete __P((HTAB *, BUFHEAD *));
int __big_insert __P((HTAB *, BUFHEAD *, const DBT *, const DBT *));
int __big_keydata __P((HTAB *, BUFHEAD *, DBT *, DBT *, int));
int __big_return __P((HTAB *, BUFHEAD *, int, DBT *, int));
int __big_split __P((HTAB *, BUFHEAD *, BUFHEAD *, BUFHEAD *,
int, u_int32_t, SPLIT_RETURN *));
int __buf_free __P((HTAB *, int, int));
void __buf_init __P((HTAB *, int));
u_int32_t __call_hash __P((HTAB *, char *, int));
int __delpair __P((HTAB *, BUFHEAD *, int));
int __expand_table __P((HTAB *));
int __find_bigpair __P((HTAB *, BUFHEAD *, int, char *, int));
u_int16_t __find_last_page __P((HTAB *, BUFHEAD **));
void __free_ovflpage __P((HTAB *, BUFHEAD *));
BUFHEAD *__get_buf __P((HTAB *, u_int32_t, BUFHEAD *, int));
int __get_page __P((HTAB *, char *, u_int32_t, int, int, int));
int __ibitmap __P((HTAB *, int, int, int));
u_int32_t __log2 __P((u_int32_t));
int __put_page __P((HTAB *, char *, u_int32_t, int, int));
void __reclaim_buf __P((HTAB *, BUFHEAD *));
int __split_page __P((HTAB *, u_int32_t, u_int32_t));
/* ATANH(X)
* RETURN THE HYPERBOLIC ARC TANGENT OF X
* DOUBLE PRECISION (VAX D format 56 bits, IEEE DOUBLE 53 BITS)
* CODED IN C BY K.C. NG, 1/8/85;
* REVISED BY K.C. NG on 2/7/85, 3/7/85, 8/18/85.
*
* Required kernel function:
* log1p(x) ...return log(1+x)
*
* Method :
* Return
* 1 2x x
* atanh(x) = --- * log(1 + -------) = 0.5 * log1p(2 * --------)
* 2 1 - x 1 - x
*
* Special cases:
* atanh(x) is NaN if |x| > 1 with signal;
* atanh(NaN) is that NaN with no signal;
* atanh(+-1) is +-INF with signal.
*
* Accuracy:
* atanh(x) returns the exact hyperbolic arc tangent of x nearly rounded.
* In a test run with 512,000 random arguments on a VAX, the maximum
* observed error was 1.87 ulps (units in the last place) at
* x= -3.8962076028810414000e-03.
*/
#include "mathimpl.h"
/* Default hash routine. */
extern u_int32_t (*__default_hash) __P((const void *, size_t));
#if defined(vax)||defined(tahoe)
#include <errno.h>
#endif /* defined(vax)||defined(tahoe) */
double atanh(x)
double x;
{
double z;
z = copysign(0.5,x);
x = copysign(x,1.0);
#if defined(vax)||defined(tahoe)
if (x == 1.0) {
return(copysign(1.0,z)*infnan(ERANGE)); /* sign(x)*INF */
}
#endif /* defined(vax)||defined(tahoe) */
x = x/(1.0-x);
return( z*log1p(x+x) );
}
#ifdef HASH_STATISTICS
extern int hash_accesses, hash_collisions, hash_expansions, hash_overflows;
#endif
+994
View File
@@ -0,0 +1,994 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Margo Seltzer.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)hash.c 8.9 (Berkeley) 6/16/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/param.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#ifdef DEBUG
#include <assert.h>
#endif
#include <db.h>
#include "hash.h"
#include "page.h"
#include "extern.h"
static int alloc_segs __P((HTAB *, int));
static int flush_meta __P((HTAB *));
static int hash_access __P((HTAB *, ACTION, DBT *, DBT *));
static int hash_close __P((DB *));
static int hash_delete __P((const DB *, const DBT *, u_int32_t));
static int hash_fd __P((const DB *));
static int hash_get __P((const DB *, const DBT *, DBT *, u_int32_t));
static int hash_put __P((const DB *, DBT *, const DBT *, u_int32_t));
static void *hash_realloc __P((SEGMENT **, int, int));
static int hash_seq __P((const DB *, DBT *, DBT *, u_int32_t));
static int hash_sync __P((const DB *, u_int32_t));
static int hdestroy __P((HTAB *));
static HTAB *init_hash __P((HTAB *, const char *, HASHINFO *));
static int init_htab __P((HTAB *, int));
#if BYTE_ORDER == LITTLE_ENDIAN
static void swap_header __P((HTAB *));
static void swap_header_copy __P((HASHHDR *, HASHHDR *));
#endif
/* Fast arithmetic, relying on powers of 2, */
#define MOD(x, y) ((x) & ((y) - 1))
#define RETURN_ERROR(ERR, LOC) { save_errno = ERR; goto LOC; }
/* Return values */
#define SUCCESS (0)
#define ERROR (-1)
#define ABNORMAL (1)
#ifdef HASH_STATISTICS
int hash_accesses, hash_collisions, hash_expansions, hash_overflows;
#endif
/************************** INTERFACE ROUTINES ***************************/
/* OPEN/CLOSE */
extern DB *
__hash_open(file, flags, mode, info, dflags)
const char *file;
int flags, mode, dflags;
const HASHINFO *info; /* Special directives for create */
{
HTAB *hashp;
struct stat statbuf;
DB *dbp;
int bpages, hdrsize, new_table, nsegs, save_errno;
if ((flags & O_ACCMODE) == O_WRONLY) {
errno = EINVAL;
return (NULL);
}
if (!(hashp = (HTAB *)calloc(1, sizeof(HTAB))))
return (NULL);
hashp->fp = -1;
/*
* Even if user wants write only, we need to be able to read
* the actual file, so we need to open it read/write. But, the
* field in the hashp structure needs to be accurate so that
* we can check accesses.
*/
hashp->flags = flags;
new_table = 0;
if (!file || (flags & O_TRUNC) ||
(stat(file, &statbuf) && (errno == ENOENT))) {
if (errno == ENOENT)
errno = 0; /* Just in case someone looks at errno */
new_table = 1;
}
if (file) {
if ((hashp->fp = open(file, flags, mode)) == -1)
RETURN_ERROR(errno, error0);
(void)fcntl(hashp->fp, F_SETFD, 1);
}
if (new_table) {
if (!(hashp = init_hash(hashp, file, (HASHINFO *)info)))
RETURN_ERROR(errno, error1);
} else {
/* Table already exists */
if (info && info->hash)
hashp->hash = info->hash;
else
hashp->hash = __default_hash;
hdrsize = read(hashp->fp, &hashp->hdr, sizeof(HASHHDR));
#if BYTE_ORDER == LITTLE_ENDIAN
swap_header(hashp);
#endif
if (hdrsize == -1)
RETURN_ERROR(errno, error1);
if (hdrsize != sizeof(HASHHDR))
RETURN_ERROR(EFTYPE, error1);
/* Verify file type, versions and hash function */
if (hashp->MAGIC != HASHMAGIC)
RETURN_ERROR(EFTYPE, error1);
#define OLDHASHVERSION 1
if (hashp->VERSION != HASHVERSION &&
hashp->VERSION != OLDHASHVERSION)
RETURN_ERROR(EFTYPE, error1);
if (hashp->hash(CHARKEY, sizeof(CHARKEY)) != hashp->H_CHARKEY)
RETURN_ERROR(EFTYPE, error1);
/*
* Figure out how many segments we need. Max_Bucket is the
* maximum bucket number, so the number of buckets is
* max_bucket + 1.
*/
nsegs = (hashp->MAX_BUCKET + 1 + hashp->SGSIZE - 1) /
hashp->SGSIZE;
hashp->nsegs = 0;
if (alloc_segs(hashp, nsegs))
/*
* If alloc_segs fails, table will have been destroyed
* and errno will have been set.
*/
return (NULL);
/* Read in bitmaps */
bpages = (hashp->SPARES[hashp->OVFL_POINT] +
(hashp->BSIZE << BYTE_SHIFT) - 1) >>
(hashp->BSHIFT + BYTE_SHIFT);
hashp->nmaps = bpages;
(void)memset(&hashp->mapp[0], 0, bpages * sizeof(u_int32_t *));
}
/* Initialize Buffer Manager */
if (info && info->cachesize)
__buf_init(hashp, info->cachesize);
else
__buf_init(hashp, DEF_BUFSIZE);
hashp->new_file = new_table;
hashp->save_file = file && (hashp->flags & O_RDWR);
hashp->cbucket = -1;
if (!(dbp = (DB *)malloc(sizeof(DB)))) {
save_errno = errno;
hdestroy(hashp);
errno = save_errno;
return (NULL);
}
dbp->internal = hashp;
dbp->close = hash_close;
dbp->del = hash_delete;
dbp->fd = hash_fd;
dbp->get = hash_get;
dbp->put = hash_put;
dbp->seq = hash_seq;
dbp->sync = hash_sync;
dbp->type = DB_HASH;
#ifdef DEBUG
(void)fprintf(stderr,
"%s\n%s%x\n%s%d\n%s%d\n%s%d\n%s%d\n%s%d\n%s%d\n%s%d\n%s%d\n%s%d\n%s%x\n%s%x\n%s%d\n%s%d\n",
"init_htab:",
"TABLE POINTER ", hashp,
"BUCKET SIZE ", hashp->BSIZE,
"BUCKET SHIFT ", hashp->BSHIFT,
"DIRECTORY SIZE ", hashp->DSIZE,
"SEGMENT SIZE ", hashp->SGSIZE,
"SEGMENT SHIFT ", hashp->SSHIFT,
"FILL FACTOR ", hashp->FFACTOR,
"MAX BUCKET ", hashp->MAX_BUCKET,
"OVFL POINT ", hashp->OVFL_POINT,
"LAST FREED ", hashp->LAST_FREED,
"HIGH MASK ", hashp->HIGH_MASK,
"LOW MASK ", hashp->LOW_MASK,
"NSEGS ", hashp->nsegs,
"NKEYS ", hashp->NKEYS);
#endif
#ifdef HASH_STATISTICS
hash_overflows = hash_accesses = hash_collisions = hash_expansions = 0;
#endif
return (dbp);
error1:
if (hashp != NULL)
(void)close(hashp->fp);
error0:
free(hashp);
errno = save_errno;
return (NULL);
}
static int
hash_close(dbp)
DB *dbp;
{
HTAB *hashp;
int retval;
if (!dbp)
return (ERROR);
hashp = (HTAB *)dbp->internal;
retval = hdestroy(hashp);
free(dbp);
return (retval);
}
static int
hash_fd(dbp)
const DB *dbp;
{
HTAB *hashp;
if (!dbp)
return (ERROR);
hashp = (HTAB *)dbp->internal;
if (hashp->fp == -1) {
errno = ENOENT;
return (-1);
}
return (hashp->fp);
}
/************************** LOCAL CREATION ROUTINES **********************/
static HTAB *
init_hash(hashp, file, info)
HTAB *hashp;
const char *file;
HASHINFO *info;
{
struct stat statbuf;
int nelem;
nelem = 1;
hashp->NKEYS = 0;
hashp->LORDER = BYTE_ORDER;
hashp->BSIZE = DEF_BUCKET_SIZE;
hashp->BSHIFT = DEF_BUCKET_SHIFT;
hashp->SGSIZE = DEF_SEGSIZE;
hashp->SSHIFT = DEF_SEGSIZE_SHIFT;
hashp->DSIZE = DEF_DIRSIZE;
hashp->FFACTOR = DEF_FFACTOR;
hashp->hash = __default_hash;
memset(hashp->SPARES, 0, sizeof(hashp->SPARES));
memset(hashp->BITMAPS, 0, sizeof (hashp->BITMAPS));
/* Fix bucket size to be optimal for file system */
if (file != NULL) {
if (stat(file, &statbuf))
return (NULL);
hashp->BSIZE = statbuf.st_blksize;
hashp->BSHIFT = __log2(hashp->BSIZE);
}
if (info) {
if (info->bsize) {
/* Round pagesize up to power of 2 */
hashp->BSHIFT = __log2(info->bsize);
hashp->BSIZE = 1 << hashp->BSHIFT;
if (hashp->BSIZE > MAX_BSIZE) {
errno = EINVAL;
return (NULL);
}
}
if (info->ffactor)
hashp->FFACTOR = info->ffactor;
if (info->hash)
hashp->hash = info->hash;
if (info->nelem)
nelem = info->nelem;
if (info->lorder) {
if (info->lorder != BIG_ENDIAN &&
info->lorder != LITTLE_ENDIAN) {
errno = EINVAL;
return (NULL);
}
hashp->LORDER = info->lorder;
}
}
/* init_htab should destroy the table and set errno if it fails */
if (init_htab(hashp, nelem))
return (NULL);
else
return (hashp);
}
/*
* This calls alloc_segs which may run out of memory. Alloc_segs will destroy
* the table and set errno, so we just pass the error information along.
*
* Returns 0 on No Error
*/
static int
init_htab(hashp, nelem)
HTAB *hashp;
int nelem;
{
register int nbuckets, nsegs;
int l2;
/*
* Divide number of elements by the fill factor and determine a
* desired number of buckets. Allocate space for the next greater
* power of two number of buckets.
*/
nelem = (nelem - 1) / hashp->FFACTOR + 1;
l2 = __log2(MAX(nelem, 2));
nbuckets = 1 << l2;
hashp->SPARES[l2] = l2 + 1;
hashp->SPARES[l2 + 1] = l2 + 1;
hashp->OVFL_POINT = l2;
hashp->LAST_FREED = 2;
/* First bitmap page is at: splitpoint l2 page offset 1 */
if (__ibitmap(hashp, OADDR_OF(l2, 1), l2 + 1, 0))
return (-1);
hashp->MAX_BUCKET = hashp->LOW_MASK = nbuckets - 1;
hashp->HIGH_MASK = (nbuckets << 1) - 1;
hashp->HDRPAGES = ((MAX(sizeof(HASHHDR), MINHDRSIZE) - 1) >>
hashp->BSHIFT) + 1;
nsegs = (nbuckets - 1) / hashp->SGSIZE + 1;
nsegs = 1 << __log2(nsegs);
if (nsegs > hashp->DSIZE)
hashp->DSIZE = nsegs;
return (alloc_segs(hashp, nsegs));
}
/********************** DESTROY/CLOSE ROUTINES ************************/
/*
* Flushes any changes to the file if necessary and destroys the hashp
* structure, freeing all allocated space.
*/
static int
hdestroy(hashp)
HTAB *hashp;
{
int i, save_errno;
save_errno = 0;
#ifdef HASH_STATISTICS
(void)fprintf(stderr, "hdestroy: accesses %ld collisions %ld\n",
hash_accesses, hash_collisions);
(void)fprintf(stderr, "hdestroy: expansions %ld\n",
hash_expansions);
(void)fprintf(stderr, "hdestroy: overflows %ld\n",
hash_overflows);
(void)fprintf(stderr, "keys %ld maxp %d segmentcount %d\n",
hashp->NKEYS, hashp->MAX_BUCKET, hashp->nsegs);
for (i = 0; i < NCACHED; i++)
(void)fprintf(stderr,
"spares[%d] = %d\n", i, hashp->SPARES[i]);
#endif
/*
* Call on buffer manager to free buffers, and if required,
* write them to disk.
*/
if (__buf_free(hashp, 1, hashp->save_file))
save_errno = errno;
if (hashp->dir) {
free(*hashp->dir); /* Free initial segments */
/* Free extra segments */
while (hashp->exsegs--)
free(hashp->dir[--hashp->nsegs]);
free(hashp->dir);
}
if (flush_meta(hashp) && !save_errno)
save_errno = errno;
/* Free Bigmaps */
for (i = 0; i < hashp->nmaps; i++)
if (hashp->mapp[i])
free(hashp->mapp[i]);
if (hashp->fp != -1)
(void)close(hashp->fp);
free(hashp);
if (save_errno) {
errno = save_errno;
return (ERROR);
}
return (SUCCESS);
}
/*
* Write modified pages to disk
*
* Returns:
* 0 == OK
* -1 ERROR
*/
static int
hash_sync(dbp, flags)
const DB *dbp;
u_int32_t flags;
{
HTAB *hashp;
if (flags != 0) {
errno = EINVAL;
return (ERROR);
}
if (!dbp)
return (ERROR);
hashp = (HTAB *)dbp->internal;
if (!hashp->save_file)
return (0);
if (__buf_free(hashp, 0, 1) || flush_meta(hashp))
return (ERROR);
hashp->new_file = 0;
return (0);
}
/*
* Returns:
* 0 == OK
* -1 indicates that errno should be set
*/
static int
flush_meta(hashp)
HTAB *hashp;
{
HASHHDR *whdrp;
#if BYTE_ORDER == LITTLE_ENDIAN
HASHHDR whdr;
#endif
int fp, i, wsize;
if (!hashp->save_file)
return (0);
hashp->MAGIC = HASHMAGIC;
hashp->VERSION = HASHVERSION;
hashp->H_CHARKEY = hashp->hash(CHARKEY, sizeof(CHARKEY));
fp = hashp->fp;
whdrp = &hashp->hdr;
#if BYTE_ORDER == LITTLE_ENDIAN
whdrp = &whdr;
swap_header_copy(&hashp->hdr, whdrp);
#endif
if ((lseek(fp, (off_t)0, SEEK_SET) == -1) ||
((wsize = write(fp, whdrp, sizeof(HASHHDR))) == -1))
return (-1);
else
if (wsize != sizeof(HASHHDR)) {
errno = EFTYPE;
hashp->errnum = errno;
return (-1);
}
for (i = 0; i < NCACHED; i++)
if (hashp->mapp[i])
if (__put_page(hashp, (char *)hashp->mapp[i],
hashp->BITMAPS[i], 0, 1))
return (-1);
return (0);
}
/*******************************SEARCH ROUTINES *****************************/
/*
* All the access routines return
*
* Returns:
* 0 on SUCCESS
* 1 to indicate an external ERROR (i.e. key not found, etc)
* -1 to indicate an internal ERROR (i.e. out of memory, etc)
*/
static int
hash_get(dbp, key, data, flag)
const DB *dbp;
const DBT *key;
DBT *data;
u_int32_t flag;
{
HTAB *hashp;
hashp = (HTAB *)dbp->internal;
if (flag) {
hashp->errnum = errno = EINVAL;
return (ERROR);
}
return (hash_access(hashp, HASH_GET, (DBT *)key, data));
}
static int
hash_put(dbp, key, data, flag)
const DB *dbp;
DBT *key;
const DBT *data;
u_int32_t flag;
{
HTAB *hashp;
hashp = (HTAB *)dbp->internal;
if (flag && flag != R_NOOVERWRITE) {
hashp->errnum = errno = EINVAL;
return (ERROR);
}
if ((hashp->flags & O_ACCMODE) == O_RDONLY) {
hashp->errnum = errno = EPERM;
return (ERROR);
}
return (hash_access(hashp, flag == R_NOOVERWRITE ?
HASH_PUTNEW : HASH_PUT, (DBT *)key, (DBT *)data));
}
static int
hash_delete(dbp, key, flag)
const DB *dbp;
const DBT *key;
u_int32_t flag; /* Ignored */
{
HTAB *hashp;
hashp = (HTAB *)dbp->internal;
if (flag && flag != R_CURSOR) {
hashp->errnum = errno = EINVAL;
return (ERROR);
}
if ((hashp->flags & O_ACCMODE) == O_RDONLY) {
hashp->errnum = errno = EPERM;
return (ERROR);
}
return (hash_access(hashp, HASH_DELETE, (DBT *)key, NULL));
}
/*
* Assume that hashp has been set in wrapper routine.
*/
static int
hash_access(hashp, action, key, val)
HTAB *hashp;
ACTION action;
DBT *key, *val;
{
register BUFHEAD *rbufp;
BUFHEAD *bufp, *save_bufp;
register u_int16_t *bp;
register int n, ndx, off, size;
register char *kp;
u_int16_t pageno;
#ifdef HASH_STATISTICS
hash_accesses++;
#endif
off = hashp->BSIZE;
size = key->size;
kp = (char *)key->data;
rbufp = __get_buf(hashp, __call_hash(hashp, kp, size), NULL, 0);
if (!rbufp)
return (ERROR);
save_bufp = rbufp;
/* Pin the bucket chain */
rbufp->flags |= BUF_PIN;
for (bp = (u_int16_t *)rbufp->page, n = *bp++, ndx = 1; ndx < n;)
if (bp[1] >= REAL_KEY) {
/* Real key/data pair */
if (size == off - *bp &&
memcmp(kp, rbufp->page + *bp, size) == 0)
goto found;
off = bp[1];
#ifdef HASH_STATISTICS
hash_collisions++;
#endif
bp += 2;
ndx += 2;
} else if (bp[1] == OVFLPAGE) {
rbufp = __get_buf(hashp, *bp, rbufp, 0);
if (!rbufp) {
save_bufp->flags &= ~BUF_PIN;
return (ERROR);
}
/* FOR LOOP INIT */
bp = (u_int16_t *)rbufp->page;
n = *bp++;
ndx = 1;
off = hashp->BSIZE;
} else if (bp[1] < REAL_KEY) {
if ((ndx =
__find_bigpair(hashp, rbufp, ndx, kp, size)) > 0)
goto found;
if (ndx == -2) {
bufp = rbufp;
if (!(pageno =
__find_last_page(hashp, &bufp))) {
ndx = 0;
rbufp = bufp;
break; /* FOR */
}
rbufp = __get_buf(hashp, pageno, bufp, 0);
if (!rbufp) {
save_bufp->flags &= ~BUF_PIN;
return (ERROR);
}
/* FOR LOOP INIT */
bp = (u_int16_t *)rbufp->page;
n = *bp++;
ndx = 1;
off = hashp->BSIZE;
} else {
save_bufp->flags &= ~BUF_PIN;
return (ERROR);
}
}
/* Not found */
switch (action) {
case HASH_PUT:
case HASH_PUTNEW:
if (__addel(hashp, rbufp, key, val)) {
save_bufp->flags &= ~BUF_PIN;
return (ERROR);
} else {
save_bufp->flags &= ~BUF_PIN;
return (SUCCESS);
}
case HASH_GET:
case HASH_DELETE:
default:
save_bufp->flags &= ~BUF_PIN;
return (ABNORMAL);
}
found:
switch (action) {
case HASH_PUTNEW:
save_bufp->flags &= ~BUF_PIN;
return (ABNORMAL);
case HASH_GET:
bp = (u_int16_t *)rbufp->page;
if (bp[ndx + 1] < REAL_KEY) {
if (__big_return(hashp, rbufp, ndx, val, 0))
return (ERROR);
} else {
val->data = (u_char *)rbufp->page + (int)bp[ndx + 1];
val->size = bp[ndx] - bp[ndx + 1];
}
break;
case HASH_PUT:
if ((__delpair(hashp, rbufp, ndx)) ||
(__addel(hashp, rbufp, key, val))) {
save_bufp->flags &= ~BUF_PIN;
return (ERROR);
}
break;
case HASH_DELETE:
if (__delpair(hashp, rbufp, ndx))
return (ERROR);
break;
default:
abort();
}
save_bufp->flags &= ~BUF_PIN;
return (SUCCESS);
}
static int
hash_seq(dbp, key, data, flag)
const DB *dbp;
DBT *key, *data;
u_int32_t flag;
{
register u_int32_t bucket;
register BUFHEAD *bufp;
HTAB *hashp;
u_int16_t *bp, ndx;
hashp = (HTAB *)dbp->internal;
if (flag && flag != R_FIRST && flag != R_NEXT) {
hashp->errnum = errno = EINVAL;
return (ERROR);
}
#ifdef HASH_STATISTICS
hash_accesses++;
#endif
if ((hashp->cbucket < 0) || (flag == R_FIRST)) {
hashp->cbucket = 0;
hashp->cndx = 1;
hashp->cpage = NULL;
}
for (bp = NULL; !bp || !bp[0]; ) {
if (!(bufp = hashp->cpage)) {
for (bucket = hashp->cbucket;
bucket <= hashp->MAX_BUCKET;
bucket++, hashp->cndx = 1) {
bufp = __get_buf(hashp, bucket, NULL, 0);
if (!bufp)
return (ERROR);
hashp->cpage = bufp;
bp = (u_int16_t *)bufp->page;
if (bp[0])
break;
}
hashp->cbucket = bucket;
if (hashp->cbucket > hashp->MAX_BUCKET) {
hashp->cbucket = -1;
return (ABNORMAL);
}
} else
bp = (u_int16_t *)hashp->cpage->page;
#ifdef DEBUG
assert(bp);
assert(bufp);
#endif
while (bp[hashp->cndx + 1] == OVFLPAGE) {
bufp = hashp->cpage =
__get_buf(hashp, bp[hashp->cndx], bufp, 0);
if (!bufp)
return (ERROR);
bp = (u_int16_t *)(bufp->page);
hashp->cndx = 1;
}
if (!bp[0]) {
hashp->cpage = NULL;
++hashp->cbucket;
}
}
ndx = hashp->cndx;
if (bp[ndx + 1] < REAL_KEY) {
if (__big_keydata(hashp, bufp, key, data, 1))
return (ERROR);
} else {
key->data = (u_char *)hashp->cpage->page + bp[ndx];
key->size = (ndx > 1 ? bp[ndx - 1] : hashp->BSIZE) - bp[ndx];
data->data = (u_char *)hashp->cpage->page + bp[ndx + 1];
data->size = bp[ndx] - bp[ndx + 1];
ndx += 2;
if (ndx > bp[0]) {
hashp->cpage = NULL;
hashp->cbucket++;
hashp->cndx = 1;
} else
hashp->cndx = ndx;
}
return (SUCCESS);
}
/********************************* UTILITIES ************************/
/*
* Returns:
* 0 ==> OK
* -1 ==> Error
*/
extern int
__expand_table(hashp)
HTAB *hashp;
{
u_int32_t old_bucket, new_bucket;
int dirsize, new_segnum, spare_ndx;
#ifdef HASH_STATISTICS
hash_expansions++;
#endif
new_bucket = ++hashp->MAX_BUCKET;
old_bucket = (hashp->MAX_BUCKET & hashp->LOW_MASK);
new_segnum = new_bucket >> hashp->SSHIFT;
/* Check if we need a new segment */
if (new_segnum >= hashp->nsegs) {
/* Check if we need to expand directory */
if (new_segnum >= hashp->DSIZE) {
/* Reallocate directory */
dirsize = hashp->DSIZE * sizeof(SEGMENT *);
if (!hash_realloc(&hashp->dir, dirsize, dirsize << 1))
return (-1);
hashp->DSIZE = dirsize << 1;
}
if ((hashp->dir[new_segnum] =
(SEGMENT)calloc(hashp->SGSIZE, sizeof(SEGMENT))) == NULL)
return (-1);
hashp->exsegs++;
hashp->nsegs++;
}
/*
* If the split point is increasing (MAX_BUCKET's log base 2
* * increases), we need to copy the current contents of the spare
* split bucket to the next bucket.
*/
spare_ndx = __log2(hashp->MAX_BUCKET + 1);
if (spare_ndx > hashp->OVFL_POINT) {
hashp->SPARES[spare_ndx] = hashp->SPARES[hashp->OVFL_POINT];
hashp->OVFL_POINT = spare_ndx;
}
if (new_bucket > hashp->HIGH_MASK) {
/* Starting a new doubling */
hashp->LOW_MASK = hashp->HIGH_MASK;
hashp->HIGH_MASK = new_bucket | hashp->LOW_MASK;
}
/* Relocate records to the new bucket */
return (__split_page(hashp, old_bucket, new_bucket));
}
/*
* If realloc guarantees that the pointer is not destroyed if the realloc
* fails, then this routine can go away.
*/
static void *
hash_realloc(p_ptr, oldsize, newsize)
SEGMENT **p_ptr;
int oldsize, newsize;
{
register void *p;
if (p = malloc(newsize)) {
memmove(p, *p_ptr, oldsize);
memset((char *)p + oldsize, 0, newsize - oldsize);
free(*p_ptr);
*p_ptr = p;
}
return (p);
}
extern u_int32_t
__call_hash(hashp, k, len)
HTAB *hashp;
char *k;
int len;
{
int n, bucket;
n = hashp->hash(k, len);
bucket = n & hashp->HIGH_MASK;
if (bucket > hashp->MAX_BUCKET)
bucket = bucket & hashp->LOW_MASK;
return (bucket);
}
/*
* Allocate segment table. On error, destroy the table and set errno.
*
* Returns 0 on success
*/
static int
alloc_segs(hashp, nsegs)
HTAB *hashp;
int nsegs;
{
register int i;
register SEGMENT store;
int save_errno;
if ((hashp->dir =
(SEGMENT *)calloc(hashp->DSIZE, sizeof(SEGMENT *))) == NULL) {
save_errno = errno;
(void)hdestroy(hashp);
errno = save_errno;
return (-1);
}
/* Allocate segments */
if ((store =
(SEGMENT)calloc(nsegs << hashp->SSHIFT, sizeof(SEGMENT))) == NULL) {
save_errno = errno;
(void)hdestroy(hashp);
errno = save_errno;
return (-1);
}
for (i = 0; i < nsegs; i++, hashp->nsegs++)
hashp->dir[i] = &store[i << hashp->SSHIFT];
return (0);
}
#if BYTE_ORDER == LITTLE_ENDIAN
/*
* Hashp->hdr needs to be byteswapped.
*/
static void
swap_header_copy(srcp, destp)
HASHHDR *srcp, *destp;
{
int i;
P_32_COPY(srcp->magic, destp->magic);
P_32_COPY(srcp->version, destp->version);
P_32_COPY(srcp->lorder, destp->lorder);
P_32_COPY(srcp->bsize, destp->bsize);
P_32_COPY(srcp->bshift, destp->bshift);
P_32_COPY(srcp->dsize, destp->dsize);
P_32_COPY(srcp->ssize, destp->ssize);
P_32_COPY(srcp->sshift, destp->sshift);
P_32_COPY(srcp->ovfl_point, destp->ovfl_point);
P_32_COPY(srcp->last_freed, destp->last_freed);
P_32_COPY(srcp->max_bucket, destp->max_bucket);
P_32_COPY(srcp->high_mask, destp->high_mask);
P_32_COPY(srcp->low_mask, destp->low_mask);
P_32_COPY(srcp->ffactor, destp->ffactor);
P_32_COPY(srcp->nkeys, destp->nkeys);
P_32_COPY(srcp->hdrpages, destp->hdrpages);
P_32_COPY(srcp->h_charkey, destp->h_charkey);
for (i = 0; i < NCACHED; i++) {
P_32_COPY(srcp->spares[i], destp->spares[i]);
P_16_COPY(srcp->bitmaps[i], destp->bitmaps[i]);
}
}
static void
swap_header(hashp)
HTAB *hashp;
{
HASHHDR *hdrp;
int i;
hdrp = &hashp->hdr;
M_32_SWAP(hdrp->magic);
M_32_SWAP(hdrp->version);
M_32_SWAP(hdrp->lorder);
M_32_SWAP(hdrp->bsize);
M_32_SWAP(hdrp->bshift);
M_32_SWAP(hdrp->dsize);
M_32_SWAP(hdrp->ssize);
M_32_SWAP(hdrp->sshift);
M_32_SWAP(hdrp->ovfl_point);
M_32_SWAP(hdrp->last_freed);
M_32_SWAP(hdrp->max_bucket);
M_32_SWAP(hdrp->high_mask);
M_32_SWAP(hdrp->low_mask);
M_32_SWAP(hdrp->ffactor);
M_32_SWAP(hdrp->nkeys);
M_32_SWAP(hdrp->hdrpages);
M_32_SWAP(hdrp->h_charkey);
for (i = 0; i < NCACHED; i++) {
M_32_SWAP(hdrp->spares[i]);
M_16_SWAP(hdrp->bitmaps[i]);
}
}
#endif
+293
View File
@@ -0,0 +1,293 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Margo Seltzer.
*
* 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.
*
* @(#)hash.h 8.3 (Berkeley) 5/31/94
*/
/* Operations */
typedef enum {
HASH_GET, HASH_PUT, HASH_PUTNEW, HASH_DELETE, HASH_FIRST, HASH_NEXT
} ACTION;
/* Buffer Management structures */
typedef struct _bufhead BUFHEAD;
struct _bufhead {
BUFHEAD *prev; /* LRU links */
BUFHEAD *next; /* LRU links */
BUFHEAD *ovfl; /* Overflow page buffer header */
u_int32_t addr; /* Address of this page */
char *page; /* Actual page data */
char flags;
#define BUF_MOD 0x0001
#define BUF_DISK 0x0002
#define BUF_BUCKET 0x0004
#define BUF_PIN 0x0008
};
#define IS_BUCKET(X) ((X) & BUF_BUCKET)
typedef BUFHEAD **SEGMENT;
/* Hash Table Information */
typedef struct hashhdr { /* Disk resident portion */
int magic; /* Magic NO for hash tables */
int version; /* Version ID */
u_int32_t lorder; /* Byte Order */
int bsize; /* Bucket/Page Size */
int bshift; /* Bucket shift */
int dsize; /* Directory Size */
int ssize; /* Segment Size */
int sshift; /* Segment shift */
int ovfl_point; /* Where overflow pages are being
* allocated */
int last_freed; /* Last overflow page freed */
int max_bucket; /* ID of Maximum bucket in use */
int high_mask; /* Mask to modulo into entire table */
int low_mask; /* Mask to modulo into lower half of
* table */
int ffactor; /* Fill factor */
int nkeys; /* Number of keys in hash table */
int hdrpages; /* Size of table header */
int h_charkey; /* value of hash(CHARKEY) */
#define NCACHED 32 /* number of bit maps and spare
* points */
int spares[NCACHED];/* spare pages for overflow */
u_int16_t bitmaps[NCACHED]; /* address of overflow page
* bitmaps */
} HASHHDR;
typedef struct htab { /* Memory resident data structure */
HASHHDR hdr; /* Header */
int nsegs; /* Number of allocated segments */
int exsegs; /* Number of extra allocated
* segments */
u_int32_t /* Hash function */
(*hash)__P((const void *, size_t));
int flags; /* Flag values */
int fp; /* File pointer */
char *tmp_buf; /* Temporary Buffer for BIG data */
char *tmp_key; /* Temporary Buffer for BIG keys */
BUFHEAD *cpage; /* Current page */
int cbucket; /* Current bucket */
int cndx; /* Index of next item on cpage */
int errnum; /* Error Number -- for DBM
* compatability */
int new_file; /* Indicates if fd is backing store
* or no */
int save_file; /* Indicates whether we need to flush
* file at
* exit */
u_int32_t *mapp[NCACHED]; /* Pointers to page maps */
int nmaps; /* Initial number of bitmaps */
int nbufs; /* Number of buffers left to
* allocate */
BUFHEAD bufhead; /* Header of buffer lru list */
SEGMENT *dir; /* Hash Bucket directory */
} HTAB;
/*
* Constants
*/
#define MAX_BSIZE 65536 /* 2^16 */
#define MIN_BUFFERS 6
#define MINHDRSIZE 512
#define DEF_BUFSIZE 65536 /* 64 K */
#define DEF_BUCKET_SIZE 4096
#define DEF_BUCKET_SHIFT 12 /* log2(BUCKET) */
#define DEF_SEGSIZE 256
#define DEF_SEGSIZE_SHIFT 8 /* log2(SEGSIZE) */
#define DEF_DIRSIZE 256
#define DEF_FFACTOR 65536
#define MIN_FFACTOR 4
#define SPLTMAX 8
#define CHARKEY "%$sniglet^&"
#define NUMKEY 1038583
#define BYTE_SHIFT 3
#define INT_TO_BYTE 2
#define INT_BYTE_SHIFT 5
#define ALL_SET ((u_int32_t)0xFFFFFFFF)
#define ALL_CLEAR 0
#define PTROF(X) ((BUFHEAD *)((ptrdiff_t)(X)&~0x3))
#define ISMOD(X) ((u_int32_t)(ptrdiff_t)(X)&0x1)
#define DOMOD(X) ((X) = (char *)((ptrdiff_t)(X)|0x1))
#define ISDISK(X) ((u_int32_t)(ptrdiff_t)(X)&0x2)
#define DODISK(X) ((X) = (char *)((ptrdiff_t)(X)|0x2))
#define BITS_PER_MAP 32
/* Given the address of the beginning of a big map, clear/set the nth bit */
#define CLRBIT(A, N) ((A)[(N)/BITS_PER_MAP] &= ~(1<<((N)%BITS_PER_MAP)))
#define SETBIT(A, N) ((A)[(N)/BITS_PER_MAP] |= (1<<((N)%BITS_PER_MAP)))
#define ISSET(A, N) ((A)[(N)/BITS_PER_MAP] & (1<<((N)%BITS_PER_MAP)))
/* Overflow management */
/*
* Overflow page numbers are allocated per split point. At each doubling of
* the table, we can allocate extra pages. So, an overflow page number has
* the top 5 bits indicate which split point and the lower 11 bits indicate
* which page at that split point is indicated (pages within split points are
* numberered starting with 1).
*/
#define SPLITSHIFT 11
#define SPLITMASK 0x7FF
#define SPLITNUM(N) (((u_int32_t)(N)) >> SPLITSHIFT)
#define OPAGENUM(N) ((N) & SPLITMASK)
#define OADDR_OF(S,O) ((u_int32_t)((u_int32_t)(S) << SPLITSHIFT) + (O))
#define BUCKET_TO_PAGE(B) \
(B) + hashp->HDRPAGES + ((B) ? hashp->SPARES[__log2((B)+1)-1] : 0)
#define OADDR_TO_PAGE(B) \
BUCKET_TO_PAGE ( (1 << SPLITNUM((B))) -1 ) + OPAGENUM((B));
/*
* page.h contains a detailed description of the page format.
*
* Normally, keys and data are accessed from offset tables in the top of
* each page which point to the beginning of the key and data. There are
* four flag values which may be stored in these offset tables which indicate
* the following:
*
*
* OVFLPAGE Rather than a key data pair, this pair contains
* the address of an overflow page. The format of
* the pair is:
* OVERFLOW_PAGE_NUMBER OVFLPAGE
*
* PARTIAL_KEY This must be the first key/data pair on a page
* and implies that page contains only a partial key.
* That is, the key is too big to fit on a single page
* so it starts on this page and continues on the next.
* The format of the page is:
* KEY_OFF PARTIAL_KEY OVFL_PAGENO OVFLPAGE
*
* KEY_OFF -- offset of the beginning of the key
* PARTIAL_KEY -- 1
* OVFL_PAGENO - page number of the next overflow page
* OVFLPAGE -- 0
*
* FULL_KEY This must be the first key/data pair on the page. It
* is used in two cases.
*
* Case 1:
* There is a complete key on the page but no data
* (because it wouldn't fit). The next page contains
* the data.
*
* Page format it:
* KEY_OFF FULL_KEY OVFL_PAGENO OVFL_PAGE
*
* KEY_OFF -- offset of the beginning of the key
* FULL_KEY -- 2
* OVFL_PAGENO - page number of the next overflow page
* OVFLPAGE -- 0
*
* Case 2:
* This page contains no key, but part of a large
* data field, which is continued on the next page.
*
* Page format it:
* DATA_OFF FULL_KEY OVFL_PAGENO OVFL_PAGE
*
* KEY_OFF -- offset of the beginning of the data on
* this page
* FULL_KEY -- 2
* OVFL_PAGENO - page number of the next overflow page
* OVFLPAGE -- 0
*
* FULL_KEY_DATA
* This must be the first key/data pair on the page.
* There are two cases:
*
* Case 1:
* This page contains a key and the beginning of the
* data field, but the data field is continued on the
* next page.
*
* Page format is:
* KEY_OFF FULL_KEY_DATA OVFL_PAGENO DATA_OFF
*
* KEY_OFF -- offset of the beginning of the key
* FULL_KEY_DATA -- 3
* OVFL_PAGENO - page number of the next overflow page
* DATA_OFF -- offset of the beginning of the data
*
* Case 2:
* This page contains the last page of a big data pair.
* There is no key, only the tail end of the data
* on this page.
*
* Page format is:
* DATA_OFF FULL_KEY_DATA <OVFL_PAGENO> <OVFLPAGE>
*
* DATA_OFF -- offset of the beginning of the data on
* this page
* FULL_KEY_DATA -- 3
* OVFL_PAGENO - page number of the next overflow page
* OVFLPAGE -- 0
*
* OVFL_PAGENO and OVFLPAGE are optional (they are
* not present if there is no next page).
*/
#define OVFLPAGE 0
#define PARTIAL_KEY 1
#define FULL_KEY 2
#define FULL_KEY_DATA 3
#define REAL_KEY 4
/* Short hands for accessing structure */
#define BSIZE hdr.bsize
#define BSHIFT hdr.bshift
#define DSIZE hdr.dsize
#define SGSIZE hdr.ssize
#define SSHIFT hdr.sshift
#define LORDER hdr.lorder
#define OVFL_POINT hdr.ovfl_point
#define LAST_FREED hdr.last_freed
#define MAX_BUCKET hdr.max_bucket
#define FFACTOR hdr.ffactor
#define HIGH_MASK hdr.high_mask
#define LOW_MASK hdr.low_mask
#define NKEYS hdr.nkeys
#define HDRPAGES hdr.hdrpages
#define SPARES hdr.spares
#define BITMAPS hdr.bitmaps
#define VERSION hdr.version
#define MAGIC hdr.magic
#define NEXT_FREE hdr.next_free
#define H_CHARKEY hdr.h_charkey
+667
View File
@@ -0,0 +1,667 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Margo Seltzer.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)hash_bigkey.c 8.3 (Berkeley) 5/31/94";
#endif /* LIBC_SCCS and not lint */
/*
* PACKAGE: hash
* DESCRIPTION:
* Big key/data handling for the hashing package.
*
* ROUTINES:
* External
* __big_keydata
* __big_split
* __big_insert
* __big_return
* __big_delete
* __find_last_page
* Internal
* collect_key
* collect_data
*/
#include <sys/param.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef DEBUG
#include <assert.h>
#endif
#include <db.h>
#include "hash.h"
#include "page.h"
#include "extern.h"
static int collect_key __P((HTAB *, BUFHEAD *, int, DBT *, int));
static int collect_data __P((HTAB *, BUFHEAD *, int, int));
/*
* Big_insert
*
* You need to do an insert and the key/data pair is too big
*
* Returns:
* 0 ==> OK
*-1 ==> ERROR
*/
extern int
__big_insert(hashp, bufp, key, val)
HTAB *hashp;
BUFHEAD *bufp;
const DBT *key, *val;
{
register u_int16_t *p;
int key_size, n, val_size;
u_int16_t space, move_bytes, off;
char *cp, *key_data, *val_data;
cp = bufp->page; /* Character pointer of p. */
p = (u_int16_t *)cp;
key_data = (char *)key->data;
key_size = key->size;
val_data = (char *)val->data;
val_size = val->size;
/* First move the Key */
for (space = FREESPACE(p) - BIGOVERHEAD; key_size;
space = FREESPACE(p) - BIGOVERHEAD) {
move_bytes = MIN(space, key_size);
off = OFFSET(p) - move_bytes;
memmove(cp + off, key_data, move_bytes);
key_size -= move_bytes;
key_data += move_bytes;
n = p[0];
p[++n] = off;
p[0] = ++n;
FREESPACE(p) = off - PAGE_META(n);
OFFSET(p) = off;
p[n] = PARTIAL_KEY;
bufp = __add_ovflpage(hashp, bufp);
if (!bufp)
return (-1);
n = p[0];
if (!key_size)
if (FREESPACE(p)) {
move_bytes = MIN(FREESPACE(p), val_size);
off = OFFSET(p) - move_bytes;
p[n] = off;
memmove(cp + off, val_data, move_bytes);
val_data += move_bytes;
val_size -= move_bytes;
p[n - 2] = FULL_KEY_DATA;
FREESPACE(p) = FREESPACE(p) - move_bytes;
OFFSET(p) = off;
} else
p[n - 2] = FULL_KEY;
p = (u_int16_t *)bufp->page;
cp = bufp->page;
bufp->flags |= BUF_MOD;
}
/* Now move the data */
for (space = FREESPACE(p) - BIGOVERHEAD; val_size;
space = FREESPACE(p) - BIGOVERHEAD) {
move_bytes = MIN(space, val_size);
/*
* Here's the hack to make sure that if the data ends on the
* same page as the key ends, FREESPACE is at least one.
*/
if (space == val_size && val_size == val->size)
move_bytes--;
off = OFFSET(p) - move_bytes;
memmove(cp + off, val_data, move_bytes);
val_size -= move_bytes;
val_data += move_bytes;
n = p[0];
p[++n] = off;
p[0] = ++n;
FREESPACE(p) = off - PAGE_META(n);
OFFSET(p) = off;
if (val_size) {
p[n] = FULL_KEY;
bufp = __add_ovflpage(hashp, bufp);
if (!bufp)
return (-1);
cp = bufp->page;
p = (u_int16_t *)cp;
} else
p[n] = FULL_KEY_DATA;
bufp->flags |= BUF_MOD;
}
return (0);
}
/*
* Called when bufp's page contains a partial key (index should be 1)
*
* All pages in the big key/data pair except bufp are freed. We cannot
* free bufp because the page pointing to it is lost and we can't get rid
* of its pointer.
*
* Returns:
* 0 => OK
*-1 => ERROR
*/
extern int
__big_delete(hashp, bufp)
HTAB *hashp;
BUFHEAD *bufp;
{
register BUFHEAD *last_bfp, *rbufp;
u_int16_t *bp, pageno;
int key_done, n;
rbufp = bufp;
last_bfp = NULL;
bp = (u_int16_t *)bufp->page;
pageno = 0;
key_done = 0;
while (!key_done || (bp[2] != FULL_KEY_DATA)) {
if (bp[2] == FULL_KEY || bp[2] == FULL_KEY_DATA)
key_done = 1;
/*
* If there is freespace left on a FULL_KEY_DATA page, then
* the data is short and fits entirely on this page, and this
* is the last page.
*/
if (bp[2] == FULL_KEY_DATA && FREESPACE(bp))
break;
pageno = bp[bp[0] - 1];
rbufp->flags |= BUF_MOD;
rbufp = __get_buf(hashp, pageno, rbufp, 0);
if (last_bfp)
__free_ovflpage(hashp, last_bfp);
last_bfp = rbufp;
if (!rbufp)
return (-1); /* Error. */
bp = (u_int16_t *)rbufp->page;
}
/*
* If we get here then rbufp points to the last page of the big
* key/data pair. Bufp points to the first one -- it should now be
* empty pointing to the next page after this pair. Can't free it
* because we don't have the page pointing to it.
*/
/* This is information from the last page of the pair. */
n = bp[0];
pageno = bp[n - 1];
/* Now, bp is the first page of the pair. */
bp = (u_int16_t *)bufp->page;
if (n > 2) {
/* There is an overflow page. */
bp[1] = pageno;
bp[2] = OVFLPAGE;
bufp->ovfl = rbufp->ovfl;
} else
/* This is the last page. */
bufp->ovfl = NULL;
n -= 2;
bp[0] = n;
FREESPACE(bp) = hashp->BSIZE - PAGE_META(n);
OFFSET(bp) = hashp->BSIZE - 1;
bufp->flags |= BUF_MOD;
if (rbufp)
__free_ovflpage(hashp, rbufp);
if (last_bfp != rbufp)
__free_ovflpage(hashp, last_bfp);
hashp->NKEYS--;
return (0);
}
/*
* Returns:
* 0 = key not found
* -1 = get next overflow page
* -2 means key not found and this is big key/data
* -3 error
*/
extern int
__find_bigpair(hashp, bufp, ndx, key, size)
HTAB *hashp;
BUFHEAD *bufp;
int ndx;
char *key;
int size;
{
register u_int16_t *bp;
register char *p;
int ksize;
u_int16_t bytes;
char *kkey;
bp = (u_int16_t *)bufp->page;
p = bufp->page;
ksize = size;
kkey = key;
for (bytes = hashp->BSIZE - bp[ndx];
bytes <= size && bp[ndx + 1] == PARTIAL_KEY;
bytes = hashp->BSIZE - bp[ndx]) {
if (memcmp(p + bp[ndx], kkey, bytes))
return (-2);
kkey += bytes;
ksize -= bytes;
bufp = __get_buf(hashp, bp[ndx + 2], bufp, 0);
if (!bufp)
return (-3);
p = bufp->page;
bp = (u_int16_t *)p;
ndx = 1;
}
if (bytes != ksize || memcmp(p + bp[ndx], kkey, bytes)) {
#ifdef HASH_STATISTICS
++hash_collisions;
#endif
return (-2);
} else
return (ndx);
}
/*
* Given the buffer pointer of the first overflow page of a big pair,
* find the end of the big pair
*
* This will set bpp to the buffer header of the last page of the big pair.
* It will return the pageno of the overflow page following the last page
* of the pair; 0 if there isn't any (i.e. big pair is the last key in the
* bucket)
*/
extern u_int16_t
__find_last_page(hashp, bpp)
HTAB *hashp;
BUFHEAD **bpp;
{
BUFHEAD *bufp;
u_int16_t *bp, pageno;
int n;
bufp = *bpp;
bp = (u_int16_t *)bufp->page;
for (;;) {
n = bp[0];
/*
* This is the last page if: the tag is FULL_KEY_DATA and
* either only 2 entries OVFLPAGE marker is explicit there
* is freespace on the page.
*/
if (bp[2] == FULL_KEY_DATA &&
((n == 2) || (bp[n] == OVFLPAGE) || (FREESPACE(bp))))
break;
pageno = bp[n - 1];
bufp = __get_buf(hashp, pageno, bufp, 0);
if (!bufp)
return (0); /* Need to indicate an error! */
bp = (u_int16_t *)bufp->page;
}
*bpp = bufp;
if (bp[0] > 2)
return (bp[3]);
else
return (0);
}
/*
* Return the data for the key/data pair that begins on this page at this
* index (index should always be 1).
*/
extern int
__big_return(hashp, bufp, ndx, val, set_current)
HTAB *hashp;
BUFHEAD *bufp;
int ndx;
DBT *val;
int set_current;
{
BUFHEAD *save_p;
u_int16_t *bp, len, off, save_addr;
char *tp;
bp = (u_int16_t *)bufp->page;
while (bp[ndx + 1] == PARTIAL_KEY) {
bufp = __get_buf(hashp, bp[bp[0] - 1], bufp, 0);
if (!bufp)
return (-1);
bp = (u_int16_t *)bufp->page;
ndx = 1;
}
if (bp[ndx + 1] == FULL_KEY) {
bufp = __get_buf(hashp, bp[bp[0] - 1], bufp, 0);
if (!bufp)
return (-1);
bp = (u_int16_t *)bufp->page;
save_p = bufp;
save_addr = save_p->addr;
off = bp[1];
len = 0;
} else
if (!FREESPACE(bp)) {
/*
* This is a hack. We can't distinguish between
* FULL_KEY_DATA that contains complete data or
* incomplete data, so we require that if the data
* is complete, there is at least 1 byte of free
* space left.
*/
off = bp[bp[0]];
len = bp[1] - off;
save_p = bufp;
save_addr = bufp->addr;
bufp = __get_buf(hashp, bp[bp[0] - 1], bufp, 0);
if (!bufp)
return (-1);
bp = (u_int16_t *)bufp->page;
} else {
/* The data is all on one page. */
tp = (char *)bp;
off = bp[bp[0]];
val->data = (u_char *)tp + off;
val->size = bp[1] - off;
if (set_current) {
if (bp[0] == 2) { /* No more buckets in
* chain */
hashp->cpage = NULL;
hashp->cbucket++;
hashp->cndx = 1;
} else {
hashp->cpage = __get_buf(hashp,
bp[bp[0] - 1], bufp, 0);
if (!hashp->cpage)
return (-1);
hashp->cndx = 1;
if (!((u_int16_t *)
hashp->cpage->page)[0]) {
hashp->cbucket++;
hashp->cpage = NULL;
}
}
}
return (0);
}
val->size = collect_data(hashp, bufp, (int)len, set_current);
if (val->size == -1)
return (-1);
if (save_p->addr != save_addr) {
/* We are pretty short on buffers. */
errno = EINVAL; /* OUT OF BUFFERS */
return (-1);
}
memmove(hashp->tmp_buf, (save_p->page) + off, len);
val->data = (u_char *)hashp->tmp_buf;
return (0);
}
/*
* Count how big the total datasize is by recursing through the pages. Then
* allocate a buffer and copy the data as you recurse up.
*/
static int
collect_data(hashp, bufp, len, set)
HTAB *hashp;
BUFHEAD *bufp;
int len, set;
{
register u_int16_t *bp;
register char *p;
BUFHEAD *xbp;
u_int16_t save_addr;
int mylen, totlen;
p = bufp->page;
bp = (u_int16_t *)p;
mylen = hashp->BSIZE - bp[1];
save_addr = bufp->addr;
if (bp[2] == FULL_KEY_DATA) { /* End of Data */
totlen = len + mylen;
if (hashp->tmp_buf)
free(hashp->tmp_buf);
if ((hashp->tmp_buf = (char *)malloc(totlen)) == NULL)
return (-1);
if (set) {
hashp->cndx = 1;
if (bp[0] == 2) { /* No more buckets in chain */
hashp->cpage = NULL;
hashp->cbucket++;
} else {
hashp->cpage =
__get_buf(hashp, bp[bp[0] - 1], bufp, 0);
if (!hashp->cpage)
return (-1);
else if (!((u_int16_t *)hashp->cpage->page)[0]) {
hashp->cbucket++;
hashp->cpage = NULL;
}
}
}
} else {
xbp = __get_buf(hashp, bp[bp[0] - 1], bufp, 0);
if (!xbp || ((totlen =
collect_data(hashp, xbp, len + mylen, set)) < 1))
return (-1);
}
if (bufp->addr != save_addr) {
errno = EINVAL; /* Out of buffers. */
return (-1);
}
memmove(&hashp->tmp_buf[len], (bufp->page) + bp[1], mylen);
return (totlen);
}
/*
* Fill in the key and data for this big pair.
*/
extern int
__big_keydata(hashp, bufp, key, val, set)
HTAB *hashp;
BUFHEAD *bufp;
DBT *key, *val;
int set;
{
key->size = collect_key(hashp, bufp, 0, val, set);
if (key->size == -1)
return (-1);
key->data = (u_char *)hashp->tmp_key;
return (0);
}
/*
* Count how big the total key size is by recursing through the pages. Then
* collect the data, allocate a buffer and copy the key as you recurse up.
*/
static int
collect_key(hashp, bufp, len, val, set)
HTAB *hashp;
BUFHEAD *bufp;
int len;
DBT *val;
int set;
{
BUFHEAD *xbp;
char *p;
int mylen, totlen;
u_int16_t *bp, save_addr;
p = bufp->page;
bp = (u_int16_t *)p;
mylen = hashp->BSIZE - bp[1];
save_addr = bufp->addr;
totlen = len + mylen;
if (bp[2] == FULL_KEY || bp[2] == FULL_KEY_DATA) { /* End of Key. */
if (hashp->tmp_key != NULL)
free(hashp->tmp_key);
if ((hashp->tmp_key = (char *)malloc(totlen)) == NULL)
return (-1);
if (__big_return(hashp, bufp, 1, val, set))
return (-1);
} else {
xbp = __get_buf(hashp, bp[bp[0] - 1], bufp, 0);
if (!xbp || ((totlen =
collect_key(hashp, xbp, totlen, val, set)) < 1))
return (-1);
}
if (bufp->addr != save_addr) {
errno = EINVAL; /* MIS -- OUT OF BUFFERS */
return (-1);
}
memmove(&hashp->tmp_key[len], (bufp->page) + bp[1], mylen);
return (totlen);
}
/*
* Returns:
* 0 => OK
* -1 => error
*/
extern int
__big_split(hashp, op, np, big_keyp, addr, obucket, ret)
HTAB *hashp;
BUFHEAD *op; /* Pointer to where to put keys that go in old bucket */
BUFHEAD *np; /* Pointer to new bucket page */
/* Pointer to first page containing the big key/data */
BUFHEAD *big_keyp;
int addr; /* Address of big_keyp */
u_int32_t obucket;/* Old Bucket */
SPLIT_RETURN *ret;
{
register BUFHEAD *tmpp;
register u_int16_t *tp;
BUFHEAD *bp;
DBT key, val;
u_int32_t change;
u_int16_t free_space, n, off;
bp = big_keyp;
/* Now figure out where the big key/data goes */
if (__big_keydata(hashp, big_keyp, &key, &val, 0))
return (-1);
change = (__call_hash(hashp, key.data, key.size) != obucket);
if (ret->next_addr = __find_last_page(hashp, &big_keyp)) {
if (!(ret->nextp =
__get_buf(hashp, ret->next_addr, big_keyp, 0)))
return (-1);;
} else
ret->nextp = NULL;
/* Now make one of np/op point to the big key/data pair */
#ifdef DEBUG
assert(np->ovfl == NULL);
#endif
if (change)
tmpp = np;
else
tmpp = op;
tmpp->flags |= BUF_MOD;
#ifdef DEBUG1
(void)fprintf(stderr,
"BIG_SPLIT: %d->ovfl was %d is now %d\n", tmpp->addr,
(tmpp->ovfl ? tmpp->ovfl->addr : 0), (bp ? bp->addr : 0));
#endif
tmpp->ovfl = bp; /* one of op/np point to big_keyp */
tp = (u_int16_t *)tmpp->page;
#ifdef DEBUG
assert(FREESPACE(tp) >= OVFLSIZE);
#endif
n = tp[0];
off = OFFSET(tp);
free_space = FREESPACE(tp);
tp[++n] = (u_int16_t)addr;
tp[++n] = OVFLPAGE;
tp[0] = n;
OFFSET(tp) = off;
FREESPACE(tp) = free_space - OVFLSIZE;
/*
* Finally, set the new and old return values. BIG_KEYP contains a
* pointer to the last page of the big key_data pair. Make sure that
* big_keyp has no following page (2 elements) or create an empty
* following page.
*/
ret->newp = np;
ret->oldp = op;
tp = (u_int16_t *)big_keyp->page;
big_keyp->flags |= BUF_MOD;
if (tp[0] > 2) {
/*
* There may be either one or two offsets on this page. If
* there is one, then the overflow page is linked on normally
* and tp[4] is OVFLPAGE. If there are two, tp[4] contains
* the second offset and needs to get stuffed in after the
* next overflow page is added.
*/
n = tp[4];
free_space = FREESPACE(tp);
off = OFFSET(tp);
tp[0] -= 2;
FREESPACE(tp) = free_space + OVFLSIZE;
OFFSET(tp) = off;
tmpp = __add_ovflpage(hashp, big_keyp);
if (!tmpp)
return (-1);
tp[4] = n;
} else
tmpp = big_keyp;
if (change)
ret->newp = tmpp;
else
ret->oldp = tmpp;
return (0);
}
+355
View File
@@ -0,0 +1,355 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Margo Seltzer.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)hash_buf.c 8.5 (Berkeley) 7/15/94";
#endif /* LIBC_SCCS and not lint */
/*
* PACKAGE: hash
*
* DESCRIPTION:
* Contains buffer management
*
* ROUTINES:
* External
* __buf_init
* __get_buf
* __buf_free
* __reclaim_buf
* Internal
* newbuf
*/
#include <sys/param.h>
#include <errno.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#ifdef DEBUG
#include <assert.h>
#endif
#include <db.h>
#include "hash.h"
#include "page.h"
#include "extern.h"
static BUFHEAD *newbuf __P((HTAB *, u_int32_t, BUFHEAD *));
/* Unlink B from its place in the lru */
#define BUF_REMOVE(B) { \
(B)->prev->next = (B)->next; \
(B)->next->prev = (B)->prev; \
}
/* Insert B after P */
#define BUF_INSERT(B, P) { \
(B)->next = (P)->next; \
(B)->prev = (P); \
(P)->next = (B); \
(B)->next->prev = (B); \
}
#define MRU hashp->bufhead.next
#define LRU hashp->bufhead.prev
#define MRU_INSERT(B) BUF_INSERT((B), &hashp->bufhead)
#define LRU_INSERT(B) BUF_INSERT((B), LRU)
/*
* We are looking for a buffer with address "addr". If prev_bp is NULL, then
* address is a bucket index. If prev_bp is not NULL, then it points to the
* page previous to an overflow page that we are trying to find.
*
* CAVEAT: The buffer header accessed via prev_bp's ovfl field may no longer
* be valid. Therefore, you must always verify that its address matches the
* address you are seeking.
*/
extern BUFHEAD *
__get_buf(hashp, addr, prev_bp, newpage)
HTAB *hashp;
u_int32_t addr;
BUFHEAD *prev_bp;
int newpage; /* If prev_bp set, indicates a new overflow page. */
{
register BUFHEAD *bp;
register u_int32_t is_disk_mask;
register int is_disk, segment_ndx;
SEGMENT segp;
is_disk = 0;
is_disk_mask = 0;
if (prev_bp) {
bp = prev_bp->ovfl;
if (!bp || (bp->addr != addr))
bp = NULL;
if (!newpage)
is_disk = BUF_DISK;
} else {
/* Grab buffer out of directory */
segment_ndx = addr & (hashp->SGSIZE - 1);
/* valid segment ensured by __call_hash() */
segp = hashp->dir[addr >> hashp->SSHIFT];
#ifdef DEBUG
assert(segp != NULL);
#endif
bp = PTROF(segp[segment_ndx]);
is_disk_mask = ISDISK(segp[segment_ndx]);
is_disk = is_disk_mask || !hashp->new_file;
}
if (!bp) {
bp = newbuf(hashp, addr, prev_bp);
if (!bp ||
__get_page(hashp, bp->page, addr, !prev_bp, is_disk, 0))
return (NULL);
if (!prev_bp)
segp[segment_ndx] =
(BUFHEAD *)((ptrdiff_t)bp | is_disk_mask);
} else {
BUF_REMOVE(bp);
MRU_INSERT(bp);
}
return (bp);
}
/*
* We need a buffer for this page. Either allocate one, or evict a resident
* one (if we have as many buffers as we're allowed) and put this one in.
*
* If newbuf finds an error (returning NULL), it also sets errno.
*/
static BUFHEAD *
newbuf(hashp, addr, prev_bp)
HTAB *hashp;
u_int32_t addr;
BUFHEAD *prev_bp;
{
register BUFHEAD *bp; /* The buffer we're going to use */
register BUFHEAD *xbp; /* Temp pointer */
register BUFHEAD *next_xbp;
SEGMENT segp;
int segment_ndx;
u_int16_t oaddr, *shortp;
oaddr = 0;
bp = LRU;
/*
* If LRU buffer is pinned, the buffer pool is too small. We need to
* allocate more buffers.
*/
if (hashp->nbufs || (bp->flags & BUF_PIN)) {
/* Allocate a new one */
if ((bp = (BUFHEAD *)malloc(sizeof(BUFHEAD))) == NULL)
return (NULL);
#ifdef PURIFY
memset(bp, 0xff, sizeof(BUFHEAD));
#endif
if ((bp->page = (char *)malloc(hashp->BSIZE)) == NULL) {
free(bp);
return (NULL);
}
#ifdef PURIFY
memset(bp->page, 0xff, hashp->BSIZE);
#endif
if (hashp->nbufs)
hashp->nbufs--;
} else {
/* Kick someone out */
BUF_REMOVE(bp);
/*
* If this is an overflow page with addr 0, it's already been
* flushed back in an overflow chain and initialized.
*/
if ((bp->addr != 0) || (bp->flags & BUF_BUCKET)) {
/*
* Set oaddr before __put_page so that you get it
* before bytes are swapped.
*/
shortp = (u_int16_t *)bp->page;
if (shortp[0])
oaddr = shortp[shortp[0] - 1];
if ((bp->flags & BUF_MOD) && __put_page(hashp, bp->page,
bp->addr, (int)IS_BUCKET(bp->flags), 0))
return (NULL);
/*
* Update the pointer to this page (i.e. invalidate it).
*
* If this is a new file (i.e. we created it at open
* time), make sure that we mark pages which have been
* written to disk so we retrieve them from disk later,
* rather than allocating new pages.
*/
if (IS_BUCKET(bp->flags)) {
segment_ndx = bp->addr & (hashp->SGSIZE - 1);
segp = hashp->dir[bp->addr >> hashp->SSHIFT];
#ifdef DEBUG
assert(segp != NULL);
#endif
if (hashp->new_file &&
((bp->flags & BUF_MOD) ||
ISDISK(segp[segment_ndx])))
segp[segment_ndx] = (BUFHEAD *)BUF_DISK;
else
segp[segment_ndx] = NULL;
}
/*
* Since overflow pages can only be access by means of
* their bucket, free overflow pages associated with
* this bucket.
*/
for (xbp = bp; xbp->ovfl;) {
next_xbp = xbp->ovfl;
xbp->ovfl = 0;
xbp = next_xbp;
/* Check that ovfl pointer is up date. */
if (IS_BUCKET(xbp->flags) ||
(oaddr != xbp->addr))
break;
shortp = (u_int16_t *)xbp->page;
if (shortp[0])
/* set before __put_page */
oaddr = shortp[shortp[0] - 1];
if ((xbp->flags & BUF_MOD) && __put_page(hashp,
xbp->page, xbp->addr, 0, 0))
return (NULL);
xbp->addr = 0;
xbp->flags = 0;
BUF_REMOVE(xbp);
LRU_INSERT(xbp);
}
}
}
/* Now assign this buffer */
bp->addr = addr;
#ifdef DEBUG1
(void)fprintf(stderr, "NEWBUF1: %d->ovfl was %d is now %d\n",
bp->addr, (bp->ovfl ? bp->ovfl->addr : 0), 0);
#endif
bp->ovfl = NULL;
if (prev_bp) {
/*
* If prev_bp is set, this is an overflow page, hook it in to
* the buffer overflow links.
*/
#ifdef DEBUG1
(void)fprintf(stderr, "NEWBUF2: %d->ovfl was %d is now %d\n",
prev_bp->addr, (prev_bp->ovfl ? bp->ovfl->addr : 0),
(bp ? bp->addr : 0));
#endif
prev_bp->ovfl = bp;
bp->flags = 0;
} else
bp->flags = BUF_BUCKET;
MRU_INSERT(bp);
return (bp);
}
extern void
__buf_init(hashp, nbytes)
HTAB *hashp;
int nbytes;
{
BUFHEAD *bfp;
int npages;
bfp = &(hashp->bufhead);
npages = (nbytes + hashp->BSIZE - 1) >> hashp->BSHIFT;
npages = MAX(npages, MIN_BUFFERS);
hashp->nbufs = npages;
bfp->next = bfp;
bfp->prev = bfp;
/*
* This space is calloc'd so these are already null.
*
* bfp->ovfl = NULL;
* bfp->flags = 0;
* bfp->page = NULL;
* bfp->addr = 0;
*/
}
extern int
__buf_free(hashp, do_free, to_disk)
HTAB *hashp;
int do_free, to_disk;
{
BUFHEAD *bp;
/* Need to make sure that buffer manager has been initialized */
if (!LRU)
return (0);
for (bp = LRU; bp != &hashp->bufhead;) {
/* Check that the buffer is valid */
if (bp->addr || IS_BUCKET(bp->flags)) {
if (to_disk && (bp->flags & BUF_MOD) &&
__put_page(hashp, bp->page,
bp->addr, IS_BUCKET(bp->flags), 0))
return (-1);
}
/* Check if we are freeing stuff */
if (do_free) {
if (bp->page)
free(bp->page);
BUF_REMOVE(bp);
free(bp);
bp = LRU;
} else
bp = bp->prev;
}
return (0);
}
extern void
__reclaim_buf(hashp, bp)
HTAB *hashp;
BUFHEAD *bp;
{
bp->ovfl = 0;
bp->addr = 0;
bp->flags = 0;
BUF_REMOVE(bp);
LRU_INSERT(bp);
}
+212
View File
@@ -0,0 +1,212 @@
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Margo Seltzer.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)hash_func.c 8.2 (Berkeley) 2/21/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <db.h>
#include "hash.h"
#include "page.h"
#include "extern.h"
static u_int32_t hash1 __P((const void *, size_t));
static u_int32_t hash2 __P((const void *, size_t));
static u_int32_t hash3 __P((const void *, size_t));
static u_int32_t hash4 __P((const void *, size_t));
/* Global default hash function */
u_int32_t (*__default_hash) __P((const void *, size_t)) = hash4;
/*
* HASH FUNCTIONS
*
* Assume that we've already split the bucket to which this key hashes,
* calculate that bucket, and check that in fact we did already split it.
*
* This came from ejb's hsearch.
*/
#define PRIME1 37
#define PRIME2 1048583
static u_int32_t
hash1(keyarg, len)
const void *keyarg;
register size_t len;
{
register const u_char *key;
register u_int32_t h;
/* Convert string to integer */
for (key = keyarg, h = 0; len--;)
h = h * PRIME1 ^ (*key++ - ' ');
h %= PRIME2;
return (h);
}
/*
* Phong's linear congruential hash
*/
#define dcharhash(h, c) ((h) = 0x63c63cd9*(h) + 0x9c39c33d + (c))
static u_int32_t
hash2(keyarg, len)
const void *keyarg;
size_t len;
{
register const u_char *e, *key;
register u_int32_t h;
register u_char c;
key = keyarg;
e = key + len;
for (h = 0; key != e;) {
c = *key++;
if (!c && key > e)
break;
dcharhash(h, c);
}
return (h);
}
/*
* This is INCREDIBLY ugly, but fast. We break the string up into 8 byte
* units. On the first time through the loop we get the "leftover bytes"
* (strlen % 8). On every other iteration, we perform 8 HASHC's so we handle
* all 8 bytes. Essentially, this saves us 7 cmp & branch instructions. If
* this routine is heavily used enough, it's worth the ugly coding.
*
* OZ's original sdbm hash
*/
static u_int32_t
hash3(keyarg, len)
const void *keyarg;
register size_t len;
{
register const u_char *key;
register size_t loop;
register u_int32_t h;
#define HASHC h = *key++ + 65599 * h
h = 0;
key = keyarg;
if (len > 0) {
loop = (len + 8 - 1) >> 3;
switch (len & (8 - 1)) {
case 0:
do {
HASHC;
/* FALLTHROUGH */
case 7:
HASHC;
/* FALLTHROUGH */
case 6:
HASHC;
/* FALLTHROUGH */
case 5:
HASHC;
/* FALLTHROUGH */
case 4:
HASHC;
/* FALLTHROUGH */
case 3:
HASHC;
/* FALLTHROUGH */
case 2:
HASHC;
/* FALLTHROUGH */
case 1:
HASHC;
} while (--loop);
}
}
return (h);
}
/* Hash function from Chris Torek. */
static u_int32_t
hash4(keyarg, len)
const void *keyarg;
register size_t len;
{
register const u_char *key;
register size_t loop;
register u_int32_t h;
#define HASH4a h = (h << 5) - h + *key++;
#define HASH4b h = (h << 5) + h + *key++;
#define HASH4 HASH4b
h = 0;
key = keyarg;
if (len > 0) {
loop = (len + 8 - 1) >> 3;
switch (len & (8 - 1)) {
case 0:
do {
HASH4;
/* FALLTHROUGH */
case 7:
HASH4;
/* FALLTHROUGH */
case 6:
HASH4;
/* FALLTHROUGH */
case 5:
HASH4;
/* FALLTHROUGH */
case 4:
HASH4;
/* FALLTHROUGH */
case 3:
HASH4;
/* FALLTHROUGH */
case 2:
HASH4;
/* FALLTHROUGH */
case 1:
HASH4;
} while (--loop);
}
}
return (h);
}
+18 -19
View File
@@ -1,6 +1,9 @@
/*
* Copyright (c) 1983 Regents of the University of California.
* All rights reserved.
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Margo Seltzer.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -32,26 +35,22 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)getnetbyaddr.c 1.1 (Coimbra) 93/06/02";
static char rcsid[] = "$Id$";
static char sccsid[] = "@(#)hash_log2.c 8.2 (Berkeley) 5/31/94";
#endif /* LIBC_SCCS and not lint */
#include <netdb.h>
#include <sys/types.h>
extern int _net_stayopen;
#include <db.h>
struct netent *
_getnetbyaddr(net, type)
register long net;
register int type;
u_int32_t __log2 __P((u_int32_t));
u_int32_t
__log2(num)
u_int32_t num;
{
register struct netent *p;
register u_int32_t i, limit;
setnetent(_net_stayopen);
while (p = getnetent())
if (p->n_addrtype == type && p->n_net == net)
break;
if (!_net_stayopen)
endnetent();
return (p);
limit = 1;
for (i = 0; limit < num; limit = limit << 1, i++);
return (i);
}
+944
View File
@@ -0,0 +1,944 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Margo Seltzer.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)hash_page.c 8.7 (Berkeley) 8/16/94";
#endif /* LIBC_SCCS and not lint */
/*
* PACKAGE: hashing
*
* DESCRIPTION:
* Page manipulation for hashing package.
*
* ROUTINES:
*
* External
* __get_page
* __add_ovflpage
* Internal
* overflow_page
* open_temp
*/
#include <sys/types.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#ifdef DEBUG
#include <assert.h>
#endif
#include <db.h>
#include "hash.h"
#include "page.h"
#include "extern.h"
static u_int32_t *fetch_bitmap __P((HTAB *, int));
static u_int32_t first_free __P((u_int32_t));
static int open_temp __P((HTAB *));
static u_int16_t overflow_page __P((HTAB *));
static void putpair __P((char *, const DBT *, const DBT *));
static void squeeze_key __P((u_int16_t *, const DBT *, const DBT *));
static int ugly_split
__P((HTAB *, u_int32_t, BUFHEAD *, BUFHEAD *, int, int));
#define PAGE_INIT(P) { \
((u_int16_t *)(P))[0] = 0; \
((u_int16_t *)(P))[1] = hashp->BSIZE - 3 * sizeof(u_int16_t); \
((u_int16_t *)(P))[2] = hashp->BSIZE; \
}
/*
* This is called AFTER we have verified that there is room on the page for
* the pair (PAIRFITS has returned true) so we go right ahead and start moving
* stuff on.
*/
static void
putpair(p, key, val)
char *p;
const DBT *key, *val;
{
register u_int16_t *bp, n, off;
bp = (u_int16_t *)p;
/* Enter the key first. */
n = bp[0];
off = OFFSET(bp) - key->size;
memmove(p + off, key->data, key->size);
bp[++n] = off;
/* Now the data. */
off -= val->size;
memmove(p + off, val->data, val->size);
bp[++n] = off;
/* Adjust page info. */
bp[0] = n;
bp[n + 1] = off - ((n + 3) * sizeof(u_int16_t));
bp[n + 2] = off;
}
/*
* Returns:
* 0 OK
* -1 error
*/
extern int
__delpair(hashp, bufp, ndx)
HTAB *hashp;
BUFHEAD *bufp;
register int ndx;
{
register u_int16_t *bp, newoff;
register int n;
u_int16_t pairlen;
bp = (u_int16_t *)bufp->page;
n = bp[0];
if (bp[ndx + 1] < REAL_KEY)
return (__big_delete(hashp, bufp));
if (ndx != 1)
newoff = bp[ndx - 1];
else
newoff = hashp->BSIZE;
pairlen = newoff - bp[ndx + 1];
if (ndx != (n - 1)) {
/* Hard Case -- need to shuffle keys */
register int i;
register char *src = bufp->page + (int)OFFSET(bp);
register char *dst = src + (int)pairlen;
memmove(dst, src, bp[ndx + 1] - OFFSET(bp));
/* Now adjust the pointers */
for (i = ndx + 2; i <= n; i += 2) {
if (bp[i + 1] == OVFLPAGE) {
bp[i - 2] = bp[i];
bp[i - 1] = bp[i + 1];
} else {
bp[i - 2] = bp[i] + pairlen;
bp[i - 1] = bp[i + 1] + pairlen;
}
}
}
/* Finally adjust the page data */
bp[n] = OFFSET(bp) + pairlen;
bp[n - 1] = bp[n + 1] + pairlen + 2 * sizeof(u_int16_t);
bp[0] = n - 2;
hashp->NKEYS--;
bufp->flags |= BUF_MOD;
return (0);
}
/*
* Returns:
* 0 ==> OK
* -1 ==> Error
*/
extern int
__split_page(hashp, obucket, nbucket)
HTAB *hashp;
u_int32_t obucket, nbucket;
{
register BUFHEAD *new_bufp, *old_bufp;
register u_int16_t *ino;
register char *np;
DBT key, val;
int n, ndx, retval;
u_int16_t copyto, diff, off, moved;
char *op;
copyto = (u_int16_t)hashp->BSIZE;
off = (u_int16_t)hashp->BSIZE;
old_bufp = __get_buf(hashp, obucket, NULL, 0);
if (old_bufp == NULL)
return (-1);
new_bufp = __get_buf(hashp, nbucket, NULL, 0);
if (new_bufp == NULL)
return (-1);
old_bufp->flags |= (BUF_MOD | BUF_PIN);
new_bufp->flags |= (BUF_MOD | BUF_PIN);
ino = (u_int16_t *)(op = old_bufp->page);
np = new_bufp->page;
moved = 0;
for (n = 1, ndx = 1; n < ino[0]; n += 2) {
if (ino[n + 1] < REAL_KEY) {
retval = ugly_split(hashp, obucket, old_bufp, new_bufp,
(int)copyto, (int)moved);
old_bufp->flags &= ~BUF_PIN;
new_bufp->flags &= ~BUF_PIN;
return (retval);
}
key.data = (u_char *)op + ino[n];
key.size = off - ino[n];
if (__call_hash(hashp, key.data, key.size) == obucket) {
/* Don't switch page */
diff = copyto - off;
if (diff) {
copyto = ino[n + 1] + diff;
memmove(op + copyto, op + ino[n + 1],
off - ino[n + 1]);
ino[ndx] = copyto + ino[n] - ino[n + 1];
ino[ndx + 1] = copyto;
} else
copyto = ino[n + 1];
ndx += 2;
} else {
/* Switch page */
val.data = (u_char *)op + ino[n + 1];
val.size = ino[n] - ino[n + 1];
putpair(np, &key, &val);
moved += 2;
}
off = ino[n + 1];
}
/* Now clean up the page */
ino[0] -= moved;
FREESPACE(ino) = copyto - sizeof(u_int16_t) * (ino[0] + 3);
OFFSET(ino) = copyto;
#ifdef DEBUG3
(void)fprintf(stderr, "split %d/%d\n",
((u_int16_t *)np)[0] / 2,
((u_int16_t *)op)[0] / 2);
#endif
/* unpin both pages */
old_bufp->flags &= ~BUF_PIN;
new_bufp->flags &= ~BUF_PIN;
return (0);
}
/*
* Called when we encounter an overflow or big key/data page during split
* handling. This is special cased since we have to begin checking whether
* the key/data pairs fit on their respective pages and because we may need
* overflow pages for both the old and new pages.
*
* The first page might be a page with regular key/data pairs in which case
* we have a regular overflow condition and just need to go on to the next
* page or it might be a big key/data pair in which case we need to fix the
* big key/data pair.
*
* Returns:
* 0 ==> success
* -1 ==> failure
*/
static int
ugly_split(hashp, obucket, old_bufp, new_bufp, copyto, moved)
HTAB *hashp;
u_int32_t obucket; /* Same as __split_page. */
BUFHEAD *old_bufp, *new_bufp;
int copyto; /* First byte on page which contains key/data values. */
int moved; /* Number of pairs moved to new page. */
{
register BUFHEAD *bufp; /* Buffer header for ino */
register u_int16_t *ino; /* Page keys come off of */
register u_int16_t *np; /* New page */
register u_int16_t *op; /* Page keys go on to if they aren't moving */
BUFHEAD *last_bfp; /* Last buf header OVFL needing to be freed */
DBT key, val;
SPLIT_RETURN ret;
u_int16_t n, off, ov_addr, scopyto;
char *cino; /* Character value of ino */
bufp = old_bufp;
ino = (u_int16_t *)old_bufp->page;
np = (u_int16_t *)new_bufp->page;
op = (u_int16_t *)old_bufp->page;
last_bfp = NULL;
scopyto = (u_int16_t)copyto; /* ANSI */
n = ino[0] - 1;
while (n < ino[0]) {
if (ino[2] < REAL_KEY && ino[2] != OVFLPAGE) {
if (__big_split(hashp, old_bufp,
new_bufp, bufp, bufp->addr, obucket, &ret))
return (-1);
old_bufp = ret.oldp;
if (!old_bufp)
return (-1);
op = (u_int16_t *)old_bufp->page;
new_bufp = ret.newp;
if (!new_bufp)
return (-1);
np = (u_int16_t *)new_bufp->page;
bufp = ret.nextp;
if (!bufp)
return (0);
cino = (char *)bufp->page;
ino = (u_int16_t *)cino;
last_bfp = ret.nextp;
} else if (ino[n + 1] == OVFLPAGE) {
ov_addr = ino[n];
/*
* Fix up the old page -- the extra 2 are the fields
* which contained the overflow information.
*/
ino[0] -= (moved + 2);
FREESPACE(ino) =
scopyto - sizeof(u_int16_t) * (ino[0] + 3);
OFFSET(ino) = scopyto;
bufp = __get_buf(hashp, ov_addr, bufp, 0);
if (!bufp)
return (-1);
ino = (u_int16_t *)bufp->page;
n = 1;
scopyto = hashp->BSIZE;
moved = 0;
if (last_bfp)
__free_ovflpage(hashp, last_bfp);
last_bfp = bufp;
}
/* Move regular sized pairs of there are any */
off = hashp->BSIZE;
for (n = 1; (n < ino[0]) && (ino[n + 1] >= REAL_KEY); n += 2) {
cino = (char *)ino;
key.data = (u_char *)cino + ino[n];
key.size = off - ino[n];
val.data = (u_char *)cino + ino[n + 1];
val.size = ino[n] - ino[n + 1];
off = ino[n + 1];
if (__call_hash(hashp, key.data, key.size) == obucket) {
/* Keep on old page */
if (PAIRFITS(op, (&key), (&val)))
putpair((char *)op, &key, &val);
else {
old_bufp =
__add_ovflpage(hashp, old_bufp);
if (!old_bufp)
return (-1);
op = (u_int16_t *)old_bufp->page;
putpair((char *)op, &key, &val);
}
old_bufp->flags |= BUF_MOD;
} else {
/* Move to new page */
if (PAIRFITS(np, (&key), (&val)))
putpair((char *)np, &key, &val);
else {
new_bufp =
__add_ovflpage(hashp, new_bufp);
if (!new_bufp)
return (-1);
np = (u_int16_t *)new_bufp->page;
putpair((char *)np, &key, &val);
}
new_bufp->flags |= BUF_MOD;
}
}
}
if (last_bfp)
__free_ovflpage(hashp, last_bfp);
return (0);
}
/*
* Add the given pair to the page
*
* Returns:
* 0 ==> OK
* 1 ==> failure
*/
extern int
__addel(hashp, bufp, key, val)
HTAB *hashp;
BUFHEAD *bufp;
const DBT *key, *val;
{
register u_int16_t *bp, *sop;
int do_expand;
bp = (u_int16_t *)bufp->page;
do_expand = 0;
while (bp[0] && (bp[2] < REAL_KEY || bp[bp[0]] < REAL_KEY))
/* Exception case */
if (bp[2] == FULL_KEY_DATA && bp[0] == 2)
/* This is the last page of a big key/data pair
and we need to add another page */
break;
else if (bp[2] < REAL_KEY && bp[bp[0]] != OVFLPAGE) {
bufp = __get_buf(hashp, bp[bp[0] - 1], bufp, 0);
if (!bufp)
return (-1);
bp = (u_int16_t *)bufp->page;
} else
/* Try to squeeze key on this page */
if (FREESPACE(bp) > PAIRSIZE(key, val)) {
squeeze_key(bp, key, val);
return (0);
} else {
bufp = __get_buf(hashp, bp[bp[0] - 1], bufp, 0);
if (!bufp)
return (-1);
bp = (u_int16_t *)bufp->page;
}
if (PAIRFITS(bp, key, val))
putpair(bufp->page, key, val);
else {
do_expand = 1;
bufp = __add_ovflpage(hashp, bufp);
if (!bufp)
return (-1);
sop = (u_int16_t *)bufp->page;
if (PAIRFITS(sop, key, val))
putpair((char *)sop, key, val);
else
if (__big_insert(hashp, bufp, key, val))
return (-1);
}
bufp->flags |= BUF_MOD;
/*
* If the average number of keys per bucket exceeds the fill factor,
* expand the table.
*/
hashp->NKEYS++;
if (do_expand ||
(hashp->NKEYS / (hashp->MAX_BUCKET + 1) > hashp->FFACTOR))
return (__expand_table(hashp));
return (0);
}
/*
*
* Returns:
* pointer on success
* NULL on error
*/
extern BUFHEAD *
__add_ovflpage(hashp, bufp)
HTAB *hashp;
BUFHEAD *bufp;
{
register u_int16_t *sp;
u_int16_t ndx, ovfl_num;
#ifdef DEBUG1
int tmp1, tmp2;
#endif
sp = (u_int16_t *)bufp->page;
/* Check if we are dynamically determining the fill factor */
if (hashp->FFACTOR == DEF_FFACTOR) {
hashp->FFACTOR = sp[0] >> 1;
if (hashp->FFACTOR < MIN_FFACTOR)
hashp->FFACTOR = MIN_FFACTOR;
}
bufp->flags |= BUF_MOD;
ovfl_num = overflow_page(hashp);
#ifdef DEBUG1
tmp1 = bufp->addr;
tmp2 = bufp->ovfl ? bufp->ovfl->addr : 0;
#endif
if (!ovfl_num || !(bufp->ovfl = __get_buf(hashp, ovfl_num, bufp, 1)))
return (NULL);
bufp->ovfl->flags |= BUF_MOD;
#ifdef DEBUG1
(void)fprintf(stderr, "ADDOVFLPAGE: %d->ovfl was %d is now %d\n",
tmp1, tmp2, bufp->ovfl->addr);
#endif
ndx = sp[0];
/*
* Since a pair is allocated on a page only if there's room to add
* an overflow page, we know that the OVFL information will fit on
* the page.
*/
sp[ndx + 4] = OFFSET(sp);
sp[ndx + 3] = FREESPACE(sp) - OVFLSIZE;
sp[ndx + 1] = ovfl_num;
sp[ndx + 2] = OVFLPAGE;
sp[0] = ndx + 2;
#ifdef HASH_STATISTICS
hash_overflows++;
#endif
return (bufp->ovfl);
}
/*
* Returns:
* 0 indicates SUCCESS
* -1 indicates FAILURE
*/
extern int
__get_page(hashp, p, bucket, is_bucket, is_disk, is_bitmap)
HTAB *hashp;
char *p;
u_int32_t bucket;
int is_bucket, is_disk, is_bitmap;
{
register int fd, page, size;
int rsize;
u_int16_t *bp;
fd = hashp->fp;
size = hashp->BSIZE;
if ((fd == -1) || !is_disk) {
PAGE_INIT(p);
return (0);
}
if (is_bucket)
page = BUCKET_TO_PAGE(bucket);
else
page = OADDR_TO_PAGE(bucket);
if ((lseek(fd, (off_t)page << hashp->BSHIFT, SEEK_SET) == -1) ||
((rsize = read(fd, p, size)) == -1))
return (-1);
bp = (u_int16_t *)p;
if (!rsize)
bp[0] = 0; /* We hit the EOF, so initialize a new page */
else
if (rsize != size) {
errno = EFTYPE;
return (-1);
}
if (!is_bitmap && !bp[0]) {
PAGE_INIT(p);
} else
if (hashp->LORDER != BYTE_ORDER) {
register int i, max;
if (is_bitmap) {
max = hashp->BSIZE >> 2; /* divide by 4 */
for (i = 0; i < max; i++)
M_32_SWAP(((int *)p)[i]);
} else {
M_16_SWAP(bp[0]);
max = bp[0] + 2;
for (i = 1; i <= max; i++)
M_16_SWAP(bp[i]);
}
}
return (0);
}
/*
* Write page p to disk
*
* Returns:
* 0 ==> OK
* -1 ==>failure
*/
extern int
__put_page(hashp, p, bucket, is_bucket, is_bitmap)
HTAB *hashp;
char *p;
u_int32_t bucket;
int is_bucket, is_bitmap;
{
register int fd, page, size;
int wsize;
size = hashp->BSIZE;
if ((hashp->fp == -1) && open_temp(hashp))
return (-1);
fd = hashp->fp;
if (hashp->LORDER != BYTE_ORDER) {
register int i;
register int max;
if (is_bitmap) {
max = hashp->BSIZE >> 2; /* divide by 4 */
for (i = 0; i < max; i++)
M_32_SWAP(((int *)p)[i]);
} else {
max = ((u_int16_t *)p)[0] + 2;
for (i = 0; i <= max; i++)
M_16_SWAP(((u_int16_t *)p)[i]);
}
}
if (is_bucket)
page = BUCKET_TO_PAGE(bucket);
else
page = OADDR_TO_PAGE(bucket);
if ((lseek(fd, (off_t)page << hashp->BSHIFT, SEEK_SET) == -1) ||
((wsize = write(fd, p, size)) == -1))
/* Errno is set */
return (-1);
if (wsize != size) {
errno = EFTYPE;
return (-1);
}
return (0);
}
#define BYTE_MASK ((1 << INT_BYTE_SHIFT) -1)
/*
* Initialize a new bitmap page. Bitmap pages are left in memory
* once they are read in.
*/
extern int
__ibitmap(hashp, pnum, nbits, ndx)
HTAB *hashp;
int pnum, nbits, ndx;
{
u_int32_t *ip;
int clearbytes, clearints;
if ((ip = (u_int32_t *)malloc(hashp->BSIZE)) == NULL)
return (1);
hashp->nmaps++;
clearints = ((nbits - 1) >> INT_BYTE_SHIFT) + 1;
clearbytes = clearints << INT_TO_BYTE;
(void)memset((char *)ip, 0, clearbytes);
(void)memset(((char *)ip) + clearbytes, 0xFF,
hashp->BSIZE - clearbytes);
ip[clearints - 1] = ALL_SET << (nbits & BYTE_MASK);
SETBIT(ip, 0);
hashp->BITMAPS[ndx] = (u_int16_t)pnum;
hashp->mapp[ndx] = ip;
return (0);
}
static u_int32_t
first_free(map)
u_int32_t map;
{
register u_int32_t i, mask;
mask = 0x1;
for (i = 0; i < BITS_PER_MAP; i++) {
if (!(mask & map))
return (i);
mask = mask << 1;
}
return (i);
}
static u_int16_t
overflow_page(hashp)
HTAB *hashp;
{
register u_int32_t *freep;
register int max_free, offset, splitnum;
u_int16_t addr;
int bit, first_page, free_bit, free_page, i, in_use_bits, j;
#ifdef DEBUG2
int tmp1, tmp2;
#endif
splitnum = hashp->OVFL_POINT;
max_free = hashp->SPARES[splitnum];
free_page = (max_free - 1) >> (hashp->BSHIFT + BYTE_SHIFT);
free_bit = (max_free - 1) & ((hashp->BSIZE << BYTE_SHIFT) - 1);
/* Look through all the free maps to find the first free block */
first_page = hashp->LAST_FREED >>(hashp->BSHIFT + BYTE_SHIFT);
for ( i = first_page; i <= free_page; i++ ) {
if (!(freep = (u_int32_t *)hashp->mapp[i]) &&
!(freep = fetch_bitmap(hashp, i)))
return (0);
if (i == free_page)
in_use_bits = free_bit;
else
in_use_bits = (hashp->BSIZE << BYTE_SHIFT) - 1;
if (i == first_page) {
bit = hashp->LAST_FREED &
((hashp->BSIZE << BYTE_SHIFT) - 1);
j = bit / BITS_PER_MAP;
bit = bit & ~(BITS_PER_MAP - 1);
} else {
bit = 0;
j = 0;
}
for (; bit <= in_use_bits; j++, bit += BITS_PER_MAP)
if (freep[j] != ALL_SET)
goto found;
}
/* No Free Page Found */
hashp->LAST_FREED = hashp->SPARES[splitnum];
hashp->SPARES[splitnum]++;
offset = hashp->SPARES[splitnum] -
(splitnum ? hashp->SPARES[splitnum - 1] : 0);
#define OVMSG "HASH: Out of overflow pages. Increase page size\n"
if (offset > SPLITMASK) {
if (++splitnum >= NCACHED) {
(void)write(STDERR_FILENO, OVMSG, sizeof(OVMSG) - 1);
return (0);
}
hashp->OVFL_POINT = splitnum;
hashp->SPARES[splitnum] = hashp->SPARES[splitnum-1];
hashp->SPARES[splitnum-1]--;
offset = 1;
}
/* Check if we need to allocate a new bitmap page */
if (free_bit == (hashp->BSIZE << BYTE_SHIFT) - 1) {
free_page++;
if (free_page >= NCACHED) {
(void)write(STDERR_FILENO, OVMSG, sizeof(OVMSG) - 1);
return (0);
}
/*
* This is tricky. The 1 indicates that you want the new page
* allocated with 1 clear bit. Actually, you are going to
* allocate 2 pages from this map. The first is going to be
* the map page, the second is the overflow page we were
* looking for. The init_bitmap routine automatically, sets
* the first bit of itself to indicate that the bitmap itself
* is in use. We would explicitly set the second bit, but
* don't have to if we tell init_bitmap not to leave it clear
* in the first place.
*/
if (__ibitmap(hashp,
(int)OADDR_OF(splitnum, offset), 1, free_page))
return (0);
hashp->SPARES[splitnum]++;
#ifdef DEBUG2
free_bit = 2;
#endif
offset++;
if (offset > SPLITMASK) {
if (++splitnum >= NCACHED) {
(void)write(STDERR_FILENO, OVMSG,
sizeof(OVMSG) - 1);
return (0);
}
hashp->OVFL_POINT = splitnum;
hashp->SPARES[splitnum] = hashp->SPARES[splitnum-1];
hashp->SPARES[splitnum-1]--;
offset = 0;
}
} else {
/*
* Free_bit addresses the last used bit. Bump it to address
* the first available bit.
*/
free_bit++;
SETBIT(freep, free_bit);
}
/* Calculate address of the new overflow page */
addr = OADDR_OF(splitnum, offset);
#ifdef DEBUG2
(void)fprintf(stderr, "OVERFLOW_PAGE: ADDR: %d BIT: %d PAGE %d\n",
addr, free_bit, free_page);
#endif
return (addr);
found:
bit = bit + first_free(freep[j]);
SETBIT(freep, bit);
#ifdef DEBUG2
tmp1 = bit;
tmp2 = i;
#endif
/*
* Bits are addressed starting with 0, but overflow pages are addressed
* beginning at 1. Bit is a bit addressnumber, so we need to increment
* it to convert it to a page number.
*/
bit = 1 + bit + (i * (hashp->BSIZE << BYTE_SHIFT));
if (bit >= hashp->LAST_FREED)
hashp->LAST_FREED = bit - 1;
/* Calculate the split number for this page */
for (i = 0; (i < splitnum) && (bit > hashp->SPARES[i]); i++);
offset = (i ? bit - hashp->SPARES[i - 1] : bit);
if (offset >= SPLITMASK)
return (0); /* Out of overflow pages */
addr = OADDR_OF(i, offset);
#ifdef DEBUG2
(void)fprintf(stderr, "OVERFLOW_PAGE: ADDR: %d BIT: %d PAGE %d\n",
addr, tmp1, tmp2);
#endif
/* Allocate and return the overflow page */
return (addr);
}
/*
* Mark this overflow page as free.
*/
extern void
__free_ovflpage(hashp, obufp)
HTAB *hashp;
BUFHEAD *obufp;
{
register u_int16_t addr;
u_int32_t *freep;
int bit_address, free_page, free_bit;
u_int16_t ndx;
addr = obufp->addr;
#ifdef DEBUG1
(void)fprintf(stderr, "Freeing %d\n", addr);
#endif
ndx = (((u_int16_t)addr) >> SPLITSHIFT);
bit_address =
(ndx ? hashp->SPARES[ndx - 1] : 0) + (addr & SPLITMASK) - 1;
if (bit_address < hashp->LAST_FREED)
hashp->LAST_FREED = bit_address;
free_page = (bit_address >> (hashp->BSHIFT + BYTE_SHIFT));
free_bit = bit_address & ((hashp->BSIZE << BYTE_SHIFT) - 1);
if (!(freep = hashp->mapp[free_page]))
freep = fetch_bitmap(hashp, free_page);
#ifdef DEBUG
/*
* This had better never happen. It means we tried to read a bitmap
* that has already had overflow pages allocated off it, and we
* failed to read it from the file.
*/
if (!freep)
assert(0);
#endif
CLRBIT(freep, free_bit);
#ifdef DEBUG2
(void)fprintf(stderr, "FREE_OVFLPAGE: ADDR: %d BIT: %d PAGE %d\n",
obufp->addr, free_bit, free_page);
#endif
__reclaim_buf(hashp, obufp);
}
/*
* Returns:
* 0 success
* -1 failure
*/
static int
open_temp(hashp)
HTAB *hashp;
{
sigset_t set, oset;
static char namestr[] = "_hashXXXXXX";
/* Block signals; make sure file goes away at process exit. */
(void)sigfillset(&set);
(void)sigprocmask(SIG_BLOCK, &set, &oset);
if ((hashp->fp = mkstemp(namestr)) != -1) {
(void)unlink(namestr);
(void)fcntl(hashp->fp, F_SETFD, 1);
}
(void)sigprocmask(SIG_SETMASK, &oset, (sigset_t *)NULL);
return (hashp->fp != -1 ? 0 : -1);
}
/*
* We have to know that the key will fit, but the last entry on the page is
* an overflow pair, so we need to shift things.
*/
static void
squeeze_key(sp, key, val)
u_int16_t *sp;
const DBT *key, *val;
{
register char *p;
u_int16_t free_space, n, off, pageno;
p = (char *)sp;
n = sp[0];
free_space = FREESPACE(sp);
off = OFFSET(sp);
pageno = sp[n - 1];
off -= key->size;
sp[n - 1] = off;
memmove(p + off, key->data, key->size);
off -= val->size;
sp[n] = off;
memmove(p + off, val->data, val->size);
sp[0] = n + 2;
sp[n + 1] = pageno;
sp[n + 2] = OVFLPAGE;
FREESPACE(sp) = free_space - PAIRSIZE(key, val);
OFFSET(sp) = off;
}
static u_int32_t *
fetch_bitmap(hashp, ndx)
HTAB *hashp;
int ndx;
{
if (ndx >= hashp->nmaps)
return (NULL);
if ((hashp->mapp[ndx] = (u_int32_t *)malloc(hashp->BSIZE)) == NULL)
return (NULL);
if (__get_page(hashp,
(char *)hashp->mapp[ndx], hashp->BITMAPS[ndx], 0, 1, 1)) {
free(hashp->mapp[ndx]);
return (NULL);
}
return (hashp->mapp[ndx]);
}
#ifdef DEBUG4
int
print_chain(addr)
int addr;
{
BUFHEAD *bufp;
short *bp, oaddr;
(void)fprintf(stderr, "%d ", addr);
bufp = __get_buf(hashp, addr, NULL, 0);
bp = (short *)bufp->page;
while (bp[0] && ((bp[bp[0]] == OVFLPAGE) ||
((bp[0] > 2) && bp[2] < REAL_KEY))) {
oaddr = bp[bp[0] - 1];
(void)fprintf(stderr, "%d ", (int)oaddr);
bufp = __get_buf(hashp, (int)oaddr, bufp, 0);
bp = (short *)bufp->page;
}
(void)fprintf(stderr, "\n");
}
#endif
+215
View File
@@ -0,0 +1,215 @@
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Margo Seltzer.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)ndbm.c 8.4 (Berkeley) 7/21/94";
#endif /* LIBC_SCCS and not lint */
/*
* This package provides a dbm compatible interface to the new hashing
* package described in db(3).
*/
#include <sys/param.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ndbm.h>
#include "hash.h"
/*
* Returns:
* *DBM on success
* NULL on failure
*/
extern DBM *
dbm_open(file, flags, mode)
const char *file;
int flags, mode;
{
DBM *db;
HASHINFO info;
const size_t len = strlen(file) + sizeof (DBM_SUFFIX);
#ifdef __GNUC__
char path[len];
#else
char *path = malloc(len);
if (path == NULL)
return NULL;
#endif
info.bsize = 4096;
info.ffactor = 40;
info.nelem = 1;
info.cachesize = 0;
info.hash = NULL;
info.lorder = 0;
(void)strcpy(path, file);
(void)strcat(path, DBM_SUFFIX);
db = (DBM *)__hash_open(path, flags, mode, &info, 0);
#ifndef __GNUC__
free(path);
#endif
return db;
}
extern void
dbm_close(db)
DBM *db;
{
(void)(db->close)(db);
}
/*
* Returns:
* DATUM on success
* NULL on failure
*/
extern datum
dbm_fetch(db, key)
DBM *db;
datum key;
{
datum retval;
int status;
status = (db->get)(db, (DBT *)&key, (DBT *)&retval, 0);
if (status) {
retval.dptr = NULL;
retval.dsize = 0;
}
return (retval);
}
/*
* Returns:
* DATUM on success
* NULL on failure
*/
extern datum
dbm_firstkey(db)
DBM *db;
{
int status;
datum retdata, retkey;
status = (db->seq)(db, (DBT *)&retkey, (DBT *)&retdata, R_FIRST);
if (status)
retkey.dptr = NULL;
return (retkey);
}
/*
* Returns:
* DATUM on success
* NULL on failure
*/
extern datum
dbm_nextkey(db)
DBM *db;
{
int status;
datum retdata, retkey;
status = (db->seq)(db, (DBT *)&retkey, (DBT *)&retdata, R_NEXT);
if (status)
retkey.dptr = NULL;
return (retkey);
}
/*
* Returns:
* 0 on success
* <0 failure
*/
extern int
dbm_delete(db, key)
DBM *db;
datum key;
{
int status;
status = (db->del)(db, (DBT *)&key, 0);
if (status)
return (-1);
else
return (0);
}
/*
* Returns:
* 0 on success
* <0 failure
* 1 if DBM_INSERT and entry exists
*/
extern int
dbm_store(db, key, content, flags)
DBM *db;
datum key, content;
int flags;
{
return ((db->put)(db, (DBT *)&key, (DBT *)&content,
(flags == DBM_INSERT) ? R_NOOVERWRITE : 0));
}
extern int
dbm_error(db)
DBM *db;
{
HTAB *hp;
hp = (HTAB *)db->internal;
return (hp->errnum);
}
extern int
dbm_clearerr(db)
DBM *db;
{
HTAB *hp;
hp = (HTAB *)db->internal;
hp->errnum = 0;
return (0);
}
extern int
dbm_dirfno(db)
DBM *db;
{
return(((HTAB *)db->internal)->fp);
}
+92
View File
@@ -0,0 +1,92 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Margo Seltzer.
*
* 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.
*
* @(#)page.h 8.2 (Berkeley) 5/31/94
*/
/*
* Definitions for hashing page file format.
*/
/*
* routines dealing with a data page
*
* page format:
* +------------------------------+
* p | n | keyoff | datoff | keyoff |
* +------------+--------+--------+
* | datoff | free | ptr | --> |
* +--------+---------------------+
* | F R E E A R E A |
* +--------------+---------------+
* | <---- - - - | data |
* +--------+-----+----+----------+
* | key | data | key |
* +--------+----------+----------+
*
* Pointer to the free space is always: p[p[0] + 2]
* Amount of free space on the page is: p[p[0] + 1]
*/
/*
* How many bytes required for this pair?
* 2 shorts in the table at the top of the page + room for the
* key and room for the data
*
* We prohibit entering a pair on a page unless there is also room to append
* an overflow page. The reason for this it that you can get in a situation
* where a single key/data pair fits on a page, but you can't append an
* overflow page and later you'd have to split the key/data and handle like
* a big pair.
* You might as well do this up front.
*/
#define PAIRSIZE(K,D) (2*sizeof(u_int16_t) + (K)->size + (D)->size)
#define BIGOVERHEAD (4*sizeof(u_int16_t))
#define KEYSIZE(K) (4*sizeof(u_int16_t) + (K)->size);
#define OVFLSIZE (2*sizeof(u_int16_t))
#define FREESPACE(P) ((P)[(P)[0]+1])
#define OFFSET(P) ((P)[(P)[0]+2])
#define PAIRFITS(P,K,D) \
(((P)[2] >= REAL_KEY) && \
(PAIRSIZE((K),(D)) + OVFLSIZE) <= FREESPACE((P)))
#define PAGE_META(N) (((N)+3) * sizeof(u_int16_t))
typedef struct {
BUFHEAD *newp;
BUFHEAD *oldp;
BUFHEAD *nextp;
u_int16_t next_addr;
} SPLIT_RETURN;
+357
View File
@@ -0,0 +1,357 @@
/* makedb -- create simple DB database from textual input.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is 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 <db.h>
#include <ctype.h>
#include <errno.h>
#include <error.h>
#include <fcntl.h>
#include <getopt.h>
#include <libintl.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Get libc version number. */
#include "../version.h"
#define PACKAGE _libc_intl_domainname
/* Long options. */
static const struct option long_options[] =
{
{ "help", no_argument, NULL, 'h' },
{ "fold-case", no_argument, NULL, 'f' },
{ "output", required_argument, NULL, 'o' },
{ "quiet", no_argument, NULL, 'q' },
{ "undo", no_argument, NULL, 'u' },
{ "version", no_argument, NULL, 'V' },
{ NULL, 0, NULL, 0}
};
/* Prototypes for local functions. */
static void usage __P ((int status)) __attribute__ ((noreturn));
static int process_input __P ((FILE *input, const char *inname, DB *output,
int to_lowercase, int be_quiet));
static int print_database __P ((DB *db));
int
main (argc, argv)
int argc;
char *argv[];
{
const char *output_name;
const char *input_name;
FILE *input_file;
DB *db_file;
int do_help;
int do_version;
int to_lowercase;
int do_undo;
int be_quiet;
int status;
int opt;
/* Set locale via LC_ALL. */
setlocale (LC_ALL, "");
/* Set the text message domain. */
textdomain (_libc_intl_domainname);
/* Initialize local variables. */
do_help = 0;
do_version = 0;
to_lowercase = 0;
do_undo = 0;
be_quiet = 0;
output_name = NULL;
while ((opt = getopt_long (argc, argv, "fho:uV", long_options, NULL)) != EOF)
switch (opt)
{
case '\0': /* Long option. */
break;
case 'h':
do_help = 1;
break;
case 'f':
to_lowercase = 1;
break;
case 'o':
output_name = optarg;
break;
case 'q':
be_quiet = 1;
break;
case 'u':
do_undo = 1;
break;
case 'V':
do_version = 1;
break;
default:
usage (EXIT_FAILURE);
}
/* Version information is requested. */
if (do_version)
{
printf ("makedb (GNU %s) %s\n", PACKAGE, VERSION);
printf (_("\
Copyright (C) %s Free Software Foundation, Inc.\n\
This is free software; see the source for copying conditions. There is NO\n\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
"), "1996");
printf (_("Written by %s.\n"), "Ulrich Drepper");
exit (EXIT_SUCCESS);
}
/* Help is requested. */
if (do_help)
usage (EXIT_SUCCESS);
else if (do_version)
exit (EXIT_SUCCESS);
/* Determine file names. */
if (do_undo || output_name != NULL)
{
if (optind + 1 != argc)
{
wrong_arguments:
error (0, 0, gettext ("wrong number of arguments"));
usage (EXIT_FAILURE);
}
input_name = argv[optind];
}
else
{
if (optind + 2 != argc)
goto wrong_arguments;
input_name = argv[optind++];
output_name = argv[optind];
}
/* Special handling if we are asked to print the database. */
if (do_undo)
{
db_file = dbopen (input_name, O_RDONLY, 0666, DB_BTREE, NULL);
if (db_file == NULL)
error (EXIT_FAILURE, 0, gettext ("cannot open database file `%s': %s"),
input_name,
errno == EFTYPE ? gettext ("incorrectly formatted file")
: strerror (errno));
status = print_database (db_file);
db_file->close (db_file);
return status;
}
/* Open input file. */
if (strcmp (input_name, "-") == 0 || strcmp (input_name, "/dev/stdin") == 0)
input_file = stdin;
else
{
input_file = fopen (input_name, "r");
if (input_file == NULL)
error (EXIT_FAILURE, errno, gettext ("cannot open input file `%s'"),
input_name);
}
/* Open output file. This must not be standard output so we don't
handle "-" and "/dev/stdout" special. */
db_file = dbopen (output_name, O_CREAT | O_RDWR | O_TRUNC, 0666,
DB_BTREE, NULL);
if (db_file == NULL)
error (EXIT_FAILURE, errno, gettext ("cannot open output file `%s'"));
/* Start the real work. */
status = process_input (input_file, input_name, db_file, to_lowercase,
be_quiet);
/* Close files. */
if (input_file != stdin)
fclose (input_file);
db_file->close (db_file);
return status;
}
static void
usage (status)
int status;
{
if (status != EXIT_SUCCESS)
fprintf (stderr, gettext ("Try `%s --help' for more information.\n"),
program_invocation_name);
else
{
printf (gettext ("\
Usage: %s [OPTION]... INPUT-FILE OUTPUT-FILE\n\
%s [OPTION]... -o OUTPUT-FILE INPUT-FILE\n\
%s [OPTION]... -u INPUT-FILE\n\
Mandatory arguments to long options are mandatory for short options too.\n\
-f, --fold-case convert key to lower case\n\
-h, --help display this help and exit\n\
-o, --output=NAME write output to file NAME\n\
--quiet don't print messages while building database\n\
-u, --undo print content of database file, one entry a line\n\
-V, --version output version information and exit\n\
If INPUT-FILE is -, input is read from standard input.\n"),
program_invocation_name, program_invocation_name,
program_invocation_name);
fputs (gettext ("Report bugs to <bug-glibc@prep.ai.mit.edu>.\n"),
stdout);
}
exit (status);
}
static int
process_input (input, inname, output, to_lowercase, be_quiet)
FILE *input;
const char *inname;
DB *output;
int to_lowercase;
int be_quiet;
{
char *line;
size_t linelen;
int status;
size_t linenr;
line = NULL;
linelen = 0;
status = EXIT_SUCCESS;
linenr = 0;
while (!feof (input))
{
DBT key;
DBT val;
char *cp;
int n;
n = getline (&line, &linelen, input);
if (n < 0)
/* This means end of file or some bug. */
break;
if (n == 0)
/* Short read. Probably interrupted system call. */
continue;
++linenr;
if (line[n - 1] == '\n')
/* Remove trailing newline. */
line[--n] = '\0';
cp = line;
while (isspace (*cp))
++cp;
if (*cp == '#')
/* First non-space character in line '#': it's a comment. */
continue;
key.data = cp;
while (*cp != '\0' && !isspace (*cp))
{
if (to_lowercase)
*cp = tolower (*cp);
++cp;
}
if (key.data == cp)
/* It's an empty line. */
continue;
key.size = cp - (char *) key.data;
while (isspace (*cp))
++cp;
val.data = cp;
val.size = &line[n] - cp;
/* Store the value. */
status = output->put (output, &key, &val, R_NOOVERWRITE);
if (status != 0)
{
if (status == 1)
{
if (!be_quiet)
error_at_line (0, 0, inname, linenr,
gettext ("duplicate key"));
/* This is no real error. Just give a warning. */
status = 0;
}
else
error (0, errno, gettext ("while writing data base file"));
status = status ? EXIT_FAILURE : EXIT_SUCCESS;
clearerr (input);
break;
}
}
if (ferror (input))
{
error (0, 0, gettext ("problems while reading `%s'"));
status = EXIT_FAILURE;
}
return status;
}
static int
print_database (db)
DB *db;
{
DBT key;
DBT val;
int no_more;
no_more = db->seq (db, &key, &val, R_FIRST);
while (!no_more)
{
printf ("%.*s %.*s\n", (int) key.size, (char *) key.data, (int) val.size,
(char *) val.data);
no_more = db->seq (db, &key, &val, R_NEXT);
}
if (no_more == -1)
{
error (0, errno, gettext ("while reading database"));
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
+99
View File
@@ -0,0 +1,99 @@
/*-
* Copyright (c) 1991, 1993, 1994
* The 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.
*
* @(#)mpool.h 8.2 (Berkeley) 7/14/94
*/
#include <sys/queue.h>
/*
* The memory pool scheme is a simple one. Each in-memory page is referenced
* by a bucket which is threaded in up to two of three ways. All active pages
* are threaded on a hash chain (hashed by page number) and an lru chain.
* Inactive pages are threaded on a free chain. Each reference to a memory
* pool is handed an opaque MPOOL cookie which stores all of this information.
*/
#define HASHSIZE 128
#define HASHKEY(pgno) ((pgno - 1) % HASHSIZE)
/* The BKT structures are the elements of the queues. */
typedef struct _bkt {
CIRCLEQ_ENTRY(_bkt) hq; /* hash queue */
CIRCLEQ_ENTRY(_bkt) q; /* lru queue */
void *page; /* page */
pgno_t pgno; /* page number */
#define MPOOL_DIRTY 0x01 /* page needs to be written */
#define MPOOL_PINNED 0x02 /* page is pinned into memory */
u_int8_t flags; /* flags */
} BKT;
typedef struct MPOOL {
CIRCLEQ_HEAD(_lqh, _bkt) lqh; /* lru queue head */
/* hash queue array */
CIRCLEQ_HEAD(_hqh, _bkt) hqh[HASHSIZE];
pgno_t curcache; /* current number of cached pages */
pgno_t maxcache; /* max number of cached pages */
pgno_t npages; /* number of pages in the file */
u_long pagesize; /* file page size */
int fd; /* file descriptor */
/* page in conversion routine */
void (*pgin) __P((void *, pgno_t, void *));
/* page out conversion routine */
void (*pgout) __P((void *, pgno_t, void *));
void *pgcookie; /* cookie for page in/out routines */
#ifdef STATISTICS
u_long cachehit;
u_long cachemiss;
u_long pagealloc;
u_long pageflush;
u_long pageget;
u_long pagenew;
u_long pageput;
u_long pageread;
u_long pagewrite;
#endif
} MPOOL;
__BEGIN_DECLS
MPOOL *mpool_open __P((void *, int, pgno_t, pgno_t));
void mpool_filter __P((MPOOL *, void (*)(void *, pgno_t, void *),
void (*)(void *, pgno_t, void *), void *));
void *mpool_new __P((MPOOL *, pgno_t *));
void *mpool_get __P((MPOOL *, pgno_t, u_int));
int mpool_put __P((MPOOL *, void *, u_int));
int mpool_sync __P((MPOOL *));
int mpool_close __P((MPOOL *));
#ifdef STATISTICS
void mpool_stat __P((MPOOL *));
#endif
__END_DECLS
+463
View File
@@ -0,0 +1,463 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)mpool.c 8.5 (Berkeley) 7/26/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/param.h>
#include <sys/queue.h>
#include <sys/stat.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <db.h>
#define __MPOOLINTERFACE_PRIVATE
#include <mpool.h>
static BKT *mpool_bkt __P((MPOOL *));
static BKT *mpool_look __P((MPOOL *, pgno_t));
static int mpool_write __P((MPOOL *, BKT *));
/*
* mpool_open --
* Initialize a memory pool.
*/
MPOOL *
mpool_open(key, fd, pagesize, maxcache)
void *key;
int fd;
pgno_t pagesize, maxcache;
{
struct stat sb;
MPOOL *mp;
int entry;
/*
* Get information about the file.
*
* XXX
* We don't currently handle pipes, although we should.
*/
if (fstat(fd, &sb))
return (NULL);
if (!S_ISREG(sb.st_mode)) {
errno = ESPIPE;
return (NULL);
}
/* Allocate and initialize the MPOOL cookie. */
if ((mp = (MPOOL *)calloc(1, sizeof(MPOOL))) == NULL)
return (NULL);
CIRCLEQ_INIT(&mp->lqh);
for (entry = 0; entry < HASHSIZE; ++entry)
CIRCLEQ_INIT(&mp->hqh[entry]);
mp->maxcache = maxcache;
mp->npages = sb.st_size / pagesize;
mp->pagesize = pagesize;
mp->fd = fd;
return (mp);
}
/*
* mpool_filter --
* Initialize input/output filters.
*/
void
mpool_filter(mp, pgin, pgout, pgcookie)
MPOOL *mp;
void (*pgin) __P((void *, pgno_t, void *));
void (*pgout) __P((void *, pgno_t, void *));
void *pgcookie;
{
mp->pgin = pgin;
mp->pgout = pgout;
mp->pgcookie = pgcookie;
}
/*
* mpool_new --
* Get a new page of memory.
*/
void *
mpool_new(mp, pgnoaddr)
MPOOL *mp;
pgno_t *pgnoaddr;
{
struct _hqh *head;
BKT *bp;
if (mp->npages == MAX_PAGE_NUMBER) {
(void)fprintf(stderr, "mpool_new: page allocation overflow.\n");
abort();
}
#ifdef STATISTICS
++mp->pagenew;
#endif
/*
* Get a BKT from the cache. Assign a new page number, attach
* it to the head of the hash chain, the tail of the lru chain,
* and return.
*/
if ((bp = mpool_bkt(mp)) == NULL)
return (NULL);
*pgnoaddr = bp->pgno = mp->npages++;
bp->flags = MPOOL_PINNED;
head = &mp->hqh[HASHKEY(bp->pgno)];
CIRCLEQ_INSERT_HEAD(head, bp, hq);
CIRCLEQ_INSERT_TAIL(&mp->lqh, bp, q);
return (bp->page);
}
/*
* mpool_get
* Get a page.
*/
void *
mpool_get(mp, pgno, flags)
MPOOL *mp;
pgno_t pgno;
u_int flags; /* XXX not used? */
{
struct _hqh *head;
BKT *bp;
off_t off;
int nr;
/* Check for attempt to retrieve a non-existent page. */
if (pgno >= mp->npages) {
errno = EINVAL;
return (NULL);
}
#ifdef STATISTICS
++mp->pageget;
#endif
/* Check for a page that is cached. */
if ((bp = mpool_look(mp, pgno)) != NULL) {
#ifdef DEBUG
if (bp->flags & MPOOL_PINNED) {
(void)fprintf(stderr,
"mpool_get: page %d already pinned\n", bp->pgno);
abort();
}
#endif
/*
* Move the page to the head of the hash chain and the tail
* of the lru chain.
*/
head = &mp->hqh[HASHKEY(bp->pgno)];
CIRCLEQ_REMOVE(head, bp, hq);
CIRCLEQ_INSERT_HEAD(head, bp, hq);
CIRCLEQ_REMOVE(&mp->lqh, bp, q);
CIRCLEQ_INSERT_TAIL(&mp->lqh, bp, q);
/* Return a pinned page. */
bp->flags |= MPOOL_PINNED;
return (bp->page);
}
/* Get a page from the cache. */
if ((bp = mpool_bkt(mp)) == NULL)
return (NULL);
/* Read in the contents. */
#ifdef STATISTICS
++mp->pageread;
#endif
off = mp->pagesize * pgno;
if (lseek(mp->fd, off, SEEK_SET) != off)
return (NULL);
if ((nr = read(mp->fd, bp->page, mp->pagesize)) != mp->pagesize) {
if (nr >= 0)
errno = EFTYPE;
return (NULL);
}
/* Set the page number, pin the page. */
bp->pgno = pgno;
bp->flags = MPOOL_PINNED;
/*
* Add the page to the head of the hash chain and the tail
* of the lru chain.
*/
head = &mp->hqh[HASHKEY(bp->pgno)];
CIRCLEQ_INSERT_HEAD(head, bp, hq);
CIRCLEQ_INSERT_TAIL(&mp->lqh, bp, q);
/* Run through the user's filter. */
if (mp->pgin != NULL)
(mp->pgin)(mp->pgcookie, bp->pgno, bp->page);
return (bp->page);
}
/*
* mpool_put
* Return a page.
*/
int
mpool_put(mp, page, flags)
MPOOL *mp;
void *page;
u_int flags;
{
BKT *bp;
#ifdef STATISTICS
++mp->pageput;
#endif
bp = (BKT *)((char *)page - sizeof(BKT));
#ifdef DEBUG
if (!(bp->flags & MPOOL_PINNED)) {
(void)fprintf(stderr,
"mpool_put: page %d not pinned\n", bp->pgno);
abort();
}
#endif
bp->flags &= ~MPOOL_PINNED;
bp->flags |= flags & MPOOL_DIRTY;
return (RET_SUCCESS);
}
/*
* mpool_close
* Close the buffer pool.
*/
int
mpool_close(mp)
MPOOL *mp;
{
BKT *bp;
/* Free up any space allocated to the lru pages. */
while ((bp = mp->lqh.cqh_first) != (void *)&mp->lqh) {
CIRCLEQ_REMOVE(&mp->lqh, mp->lqh.cqh_first, q);
free(bp);
}
/* Free the MPOOL cookie. */
free(mp);
return (RET_SUCCESS);
}
/*
* mpool_sync
* Sync the pool to disk.
*/
int
mpool_sync(mp)
MPOOL *mp;
{
BKT *bp;
/* Walk the lru chain, flushing any dirty pages to disk. */
for (bp = mp->lqh.cqh_first;
bp != (void *)&mp->lqh; bp = bp->q.cqe_next)
if (bp->flags & MPOOL_DIRTY &&
mpool_write(mp, bp) == RET_ERROR)
return (RET_ERROR);
/* Sync the file descriptor. */
return (fsync(mp->fd) ? RET_ERROR : RET_SUCCESS);
}
/*
* mpool_bkt
* Get a page from the cache (or create one).
*/
static BKT *
mpool_bkt(mp)
MPOOL *mp;
{
struct _hqh *head;
BKT *bp;
/* If under the max cached, always create a new page. */
if (mp->curcache < mp->maxcache)
goto new;
/*
* If the cache is max'd out, walk the lru list for a buffer we
* can flush. If we find one, write it (if necessary) and take it
* off any lists. If we don't find anything we grow the cache anyway.
* The cache never shrinks.
*/
for (bp = mp->lqh.cqh_first;
bp != (void *)&mp->lqh; bp = bp->q.cqe_next)
if (!(bp->flags & MPOOL_PINNED)) {
/* Flush if dirty. */
if (bp->flags & MPOOL_DIRTY &&
mpool_write(mp, bp) == RET_ERROR)
return (NULL);
#ifdef STATISTICS
++mp->pageflush;
#endif
/* Remove from the hash and lru queues. */
head = &mp->hqh[HASHKEY(bp->pgno)];
CIRCLEQ_REMOVE(head, bp, hq);
CIRCLEQ_REMOVE(&mp->lqh, bp, q);
#ifdef DEBUG
{ void *spage;
spage = bp->page;
memset(bp, 0xff, sizeof(BKT) + mp->pagesize);
bp->page = spage;
}
#endif
return (bp);
}
new: if ((bp = (BKT *)malloc(sizeof(BKT) + mp->pagesize)) == NULL)
return (NULL);
#ifdef STATISTICS
++mp->pagealloc;
#endif
#if defined(DEBUG) || defined(PURIFY)
memset(bp, 0xff, sizeof(BKT) + mp->pagesize);
#endif
bp->page = (char *)bp + sizeof(BKT);
++mp->curcache;
return (bp);
}
/*
* mpool_write
* Write a page to disk.
*/
static int
mpool_write(mp, bp)
MPOOL *mp;
BKT *bp;
{
off_t off;
#ifdef STATISTICS
++mp->pagewrite;
#endif
/* Run through the user's filter. */
if (mp->pgout)
(mp->pgout)(mp->pgcookie, bp->pgno, bp->page);
off = mp->pagesize * bp->pgno;
if (lseek(mp->fd, off, SEEK_SET) != off)
return (RET_ERROR);
if (write(mp->fd, bp->page, mp->pagesize) != mp->pagesize)
return (RET_ERROR);
bp->flags &= ~MPOOL_DIRTY;
return (RET_SUCCESS);
}
/*
* mpool_look
* Lookup a page in the cache.
*/
static BKT *
mpool_look(mp, pgno)
MPOOL *mp;
pgno_t pgno;
{
struct _hqh *head;
BKT *bp;
head = &mp->hqh[HASHKEY(pgno)];
for (bp = head->cqh_first; bp != (void *)head; bp = bp->hq.cqe_next)
if (bp->pgno == pgno) {
#ifdef STATISTICS
++mp->cachehit;
#endif
return (bp);
}
#ifdef STATISTICS
++mp->cachemiss;
#endif
return (NULL);
}
#ifdef STATISTICS
/*
* mpool_stat
* Print out cache statistics.
*/
void
mpool_stat(mp)
MPOOL *mp;
{
BKT *bp;
int cnt;
char *sep;
(void)fprintf(stderr, "%lu pages in the file\n", mp->npages);
(void)fprintf(stderr,
"page size %lu, cacheing %lu pages of %lu page max cache\n",
mp->pagesize, mp->curcache, mp->maxcache);
(void)fprintf(stderr, "%lu page puts, %lu page gets, %lu page new\n",
mp->pageput, mp->pageget, mp->pagenew);
(void)fprintf(stderr, "%lu page allocs, %lu page flushes\n",
mp->pagealloc, mp->pageflush);
if (mp->cachehit + mp->cachemiss)
(void)fprintf(stderr,
"%.0f%% cache hit rate (%lu hits, %lu misses)\n",
((double)mp->cachehit / (mp->cachehit + mp->cachemiss))
* 100, mp->cachehit, mp->cachemiss);
(void)fprintf(stderr, "%lu page reads, %lu page writes\n",
mp->pageread, mp->pagewrite);
sep = "";
cnt = 0;
for (bp = mp->lqh.cqh_first;
bp != (void *)&mp->lqh; bp = bp->q.cqe_next) {
(void)fprintf(stderr, "%s%d", sep, bp->pgno);
if (bp->flags & MPOOL_DIRTY)
(void)fprintf(stderr, "d");
if (bp->flags & MPOOL_PINNED)
(void)fprintf(stderr, "P");
if (++cnt == 10) {
sep = "\n";
cnt = 0;
} else
sep = ", ";
}
(void)fprintf(stderr, "\n");
}
#endif
+44 -33
View File
@@ -1,7 +1,10 @@
/*
* Copyright (c) 1988, 1993
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Margo Seltzer.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -29,40 +32,48 @@
* 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.
*
* @(#)ndbm.h 8.1 (Berkeley) 6/2/93
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)logwtmp.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#ifndef _NDBM_H_
#define _NDBM_H_
#include <sys/types.h>
#include <sys/file.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <db.h>
#include <unistd.h>
#include <utmp.h>
/* Map dbm interface onto db(3). */
#define DBM_RDONLY O_RDONLY
void
logwtmp(line, name, host)
char *line, *name, *host;
{
struct utmp ut;
struct stat buf;
int fd;
time_t time();
char *strncpy();
/* Flags to dbm_store(). */
#define DBM_INSERT 0
#define DBM_REPLACE 1
if ((fd = open(_PATH_WTMP, O_WRONLY|O_APPEND, 0)) < 0)
return;
if (fstat(fd, &buf) == 0) {
(void) strncpy(ut.ut_line, line, sizeof(ut.ut_line));
(void) strncpy(ut.ut_name, name, sizeof(ut.ut_name));
(void) strncpy(ut.ut_host, host, sizeof(ut.ut_host));
(void) time(&ut.ut_time);
if (write(fd, (char *)&ut, sizeof(struct utmp)) !=
sizeof(struct utmp))
(void) ftruncate(fd, buf.st_size);
}
(void) close(fd);
}
/*
* The db(3) support for ndbm(3) always appends this suffix to the
* file name to avoid overwriting the user's original database.
*/
#define DBM_SUFFIX ".db"
typedef struct {
char *dptr;
int dsize;
} datum;
typedef DB DBM;
#define dbm_pagfno(a) DBM_PAGFNO_NOT_AVAILABLE
__BEGIN_DECLS
void dbm_close __P((DBM *));
int dbm_delete __P((DBM *, datum));
datum dbm_fetch __P((DBM *, datum));
datum dbm_firstkey __P((DBM *));
long dbm_forder __P((DBM *, datum));
datum dbm_nextkey __P((DBM *));
DBM *dbm_open __P((const char *, int, int));
int dbm_store __P((DBM *, datum, datum, int));
int dbm_dirfno __P((DBM *));
int dbm_error __P((DBM *));
int dbm_clearerr __P((DBM *));
__END_DECLS
#endif /* !_NDBM_H_ */
+21 -32
View File
@@ -1,11 +1,6 @@
/*
* Copyright (c) 1988, 1993
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
* (c) UNIX System Laboratories, Inc.
* All or some portions of this file are derived from material licensed
* to the University of California by American Telephone and Telegraph
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
* the permission of UNIX System Laboratories, Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -35,31 +30,25 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)utmp.h 8.2 (Berkeley) 1/21/94
* @(#)extern.h 8.3 (Berkeley) 6/4/94
*/
#ifndef _UTMP_H_
#define _UTMP_H_
#include "../btree/extern.h"
#define _PATH_UTMP "/var/run/utmp"
#define _PATH_WTMP "/var/log/wtmp"
#define _PATH_LASTLOG "/var/log/lastlog"
#define UT_NAMESIZE 8
#define UT_LINESIZE 8
#define UT_HOSTSIZE 16
struct lastlog {
time_t ll_time;
char ll_line[UT_LINESIZE];
char ll_host[UT_HOSTSIZE];
};
struct utmp {
char ut_line[UT_LINESIZE];
char ut_name[UT_NAMESIZE];
char ut_host[UT_HOSTSIZE];
long ut_time;
};
#endif /* !_UTMP_H_ */
int __rec_close __P((DB *));
int __rec_delete __P((const DB *, const DBT *, u_int));
int __rec_dleaf __P((BTREE *, PAGE *, u_int32_t));
int __rec_fd __P((const DB *));
int __rec_fmap __P((BTREE *, recno_t));
int __rec_fout __P((BTREE *));
int __rec_fpipe __P((BTREE *, recno_t));
int __rec_get __P((const DB *, const DBT *, DBT *, u_int));
int __rec_iput __P((BTREE *, recno_t, const DBT *, u_int));
int __rec_put __P((const DB *dbp, DBT *, const DBT *, u_int));
int __rec_ret __P((BTREE *, EPG *, recno_t, DBT *, DBT *));
EPG *__rec_search __P((BTREE *, recno_t, enum SRCHOP));
int __rec_seq __P((const DB *, DBT *, DBT *, u_int));
int __rec_sync __P((const DB *, u_int));
int __rec_vmap __P((BTREE *, recno_t));
int __rec_vout __P((BTREE *));
int __rec_vpipe __P((BTREE *, recno_t));
+182
View File
@@ -0,0 +1,182 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)rec_close.c 8.6 (Berkeley) 8/18/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <sys/uio.h>
#include <sys/mman.h>
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <unistd.h>
#include <db.h>
#include "recno.h"
/*
* __REC_CLOSE -- Close a recno tree.
*
* Parameters:
* dbp: pointer to access method
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
int
__rec_close(dbp)
DB *dbp;
{
BTREE *t;
int status;
t = dbp->internal;
/* Toss any page pinned across calls. */
if (t->bt_pinned != NULL) {
mpool_put(t->bt_mp, t->bt_pinned, 0);
t->bt_pinned = NULL;
}
if (__rec_sync(dbp, 0) == RET_ERROR)
return (RET_ERROR);
/* Committed to closing. */
status = RET_SUCCESS;
if (F_ISSET(t, R_MEMMAPPED) && munmap(t->bt_smap, t->bt_msize))
status = RET_ERROR;
if (!F_ISSET(t, R_INMEM))
if (F_ISSET(t, R_CLOSEFP)) {
if (fclose(t->bt_rfp))
status = RET_ERROR;
} else
if (close(t->bt_rfd))
status = RET_ERROR;
if (__bt_close(dbp) == RET_ERROR)
status = RET_ERROR;
return (status);
}
/*
* __REC_SYNC -- sync the recno tree to disk.
*
* Parameters:
* dbp: pointer to access method
*
* Returns:
* RET_SUCCESS, RET_ERROR.
*/
int
__rec_sync(dbp, flags)
const DB *dbp;
u_int flags;
{
struct iovec iov[2];
BTREE *t;
DBT data, key;
off_t off;
recno_t scursor, trec;
int status;
t = dbp->internal;
/* Toss any page pinned across calls. */
if (t->bt_pinned != NULL) {
mpool_put(t->bt_mp, t->bt_pinned, 0);
t->bt_pinned = NULL;
}
if (flags == R_RECNOSYNC)
return (__bt_sync(dbp, 0));
if (F_ISSET(t, R_RDONLY | R_INMEM) || !F_ISSET(t, R_MODIFIED))
return (RET_SUCCESS);
/* Read any remaining records into the tree. */
if (!F_ISSET(t, R_EOF) && t->bt_irec(t, MAX_REC_NUMBER) == RET_ERROR)
return (RET_ERROR);
/* Rewind the file descriptor. */
if (lseek(t->bt_rfd, (off_t)0, SEEK_SET) != 0)
return (RET_ERROR);
/* Save the cursor. */
scursor = t->bt_cursor.rcursor;
key.size = sizeof(recno_t);
key.data = &trec;
if (F_ISSET(t, R_FIXLEN)) {
/*
* We assume that fixed length records are all fixed length.
* Any that aren't are either EINVAL'd or corrected by the
* record put code.
*/
status = (dbp->seq)(dbp, &key, &data, R_FIRST);
while (status == RET_SUCCESS) {
if (write(t->bt_rfd, data.data, data.size) != data.size)
return (RET_ERROR);
status = (dbp->seq)(dbp, &key, &data, R_NEXT);
}
} else {
iov[1].iov_base = &t->bt_bval;
iov[1].iov_len = 1;
status = (dbp->seq)(dbp, &key, &data, R_FIRST);
while (status == RET_SUCCESS) {
iov[0].iov_base = data.data;
iov[0].iov_len = data.size;
if (writev(t->bt_rfd, iov, 2) != data.size + 1)
return (RET_ERROR);
status = (dbp->seq)(dbp, &key, &data, R_NEXT);
}
}
/* Restore the cursor. */
t->bt_cursor.rcursor = scursor;
if (status == RET_ERROR)
return (RET_ERROR);
if ((off = lseek(t->bt_rfd, (off_t)0, SEEK_CUR)) == -1)
return (RET_ERROR);
if (ftruncate(t->bt_rfd, off))
return (RET_ERROR);
F_CLR(t, R_MODIFIED);
return (RET_SUCCESS);
}
+197
View File
@@ -0,0 +1,197 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)rec_delete.c 8.7 (Berkeley) 7/14/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <db.h>
#include "recno.h"
static int rec_rdelete __P((BTREE *, recno_t));
/*
* __REC_DELETE -- Delete the item(s) referenced by a key.
*
* Parameters:
* dbp: pointer to access method
* key: key to delete
* flags: R_CURSOR if deleting what the cursor references
*
* Returns:
* RET_ERROR, RET_SUCCESS and RET_SPECIAL if the key not found.
*/
int
__rec_delete(dbp, key, flags)
const DB *dbp;
const DBT *key;
u_int flags;
{
BTREE *t;
recno_t nrec;
int status;
t = dbp->internal;
/* Toss any page pinned across calls. */
if (t->bt_pinned != NULL) {
mpool_put(t->bt_mp, t->bt_pinned, 0);
t->bt_pinned = NULL;
}
switch(flags) {
case 0:
if ((nrec = *(recno_t *)key->data) == 0)
goto einval;
if (nrec > t->bt_nrecs)
return (RET_SPECIAL);
--nrec;
status = rec_rdelete(t, nrec);
break;
case R_CURSOR:
if (!F_ISSET(&t->bt_cursor, CURS_INIT))
goto einval;
if (t->bt_nrecs == 0)
return (RET_SPECIAL);
status = rec_rdelete(t, t->bt_cursor.rcursor - 1);
if (status == RET_SUCCESS)
--t->bt_cursor.rcursor;
break;
default:
einval: errno = EINVAL;
return (RET_ERROR);
}
if (status == RET_SUCCESS)
F_SET(t, B_MODIFIED | R_MODIFIED);
return (status);
}
/*
* REC_RDELETE -- Delete the data matching the specified key.
*
* Parameters:
* tree: tree
* nrec: record to delete
*
* Returns:
* RET_ERROR, RET_SUCCESS and RET_SPECIAL if the key not found.
*/
static int
rec_rdelete(t, nrec)
BTREE *t;
recno_t nrec;
{
EPG *e;
PAGE *h;
int status;
/* Find the record; __rec_search pins the page. */
if ((e = __rec_search(t, nrec, SDELETE)) == NULL)
return (RET_ERROR);
/* Delete the record. */
h = e->page;
status = __rec_dleaf(t, h, e->index);
if (status != RET_SUCCESS) {
mpool_put(t->bt_mp, h, 0);
return (status);
}
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
return (RET_SUCCESS);
}
/*
* __REC_DLEAF -- Delete a single record from a recno leaf page.
*
* Parameters:
* t: tree
* index: index on current page to delete
*
* Returns:
* RET_SUCCESS, RET_ERROR.
*/
int
__rec_dleaf(t, h, index)
BTREE *t;
PAGE *h;
u_int32_t index;
{
RLEAF *rl;
indx_t *ip, cnt, offset;
u_int32_t nbytes;
char *from;
void *to;
/*
* Delete a record from a recno leaf page. Internal records are never
* deleted from internal pages, regardless of the records that caused
* them to be added being deleted. Pages made empty by deletion are
* not reclaimed. They are, however, made available for reuse.
*
* Pack the remaining entries at the end of the page, shift the indices
* down, overwriting the deleted record and its index. If the record
* uses overflow pages, make them available for reuse.
*/
to = rl = GETRLEAF(h, index);
if (rl->flags & P_BIGDATA && __ovfl_delete(t, rl->bytes) == RET_ERROR)
return (RET_ERROR);
nbytes = NRLEAF(rl);
/*
* Compress the key/data pairs. Compress and adjust the [BR]LEAF
* offsets. Reset the headers.
*/
from = (char *)h + h->upper;
memmove(from + nbytes, from, (char *)to - from);
h->upper += nbytes;
offset = h->linp[index];
for (cnt = &h->linp[index] - (ip = &h->linp[0]); cnt--; ++ip)
if (ip[0] < offset)
ip[0] += nbytes;
for (cnt = &h->linp[NEXTINDEX(h)] - ip; --cnt; ++ip)
ip[0] = ip[1] < offset ? ip[1] + nbytes : ip[1];
h->lower -= sizeof(indx_t);
--t->bt_nrecs;
return (RET_SUCCESS);
}
+311
View File
@@ -0,0 +1,311 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)rec_get.c 8.9 (Berkeley) 8/18/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <errno.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <db.h>
#include "recno.h"
/*
* __REC_GET -- Get a record from the btree.
*
* Parameters:
* dbp: pointer to access method
* key: key to find
* data: data to return
* flag: currently unused
*
* Returns:
* RET_ERROR, RET_SUCCESS and RET_SPECIAL if the key not found.
*/
int
__rec_get(dbp, key, data, flags)
const DB *dbp;
const DBT *key;
DBT *data;
u_int flags;
{
BTREE *t;
EPG *e;
recno_t nrec;
int status;
t = dbp->internal;
/* Toss any page pinned across calls. */
if (t->bt_pinned != NULL) {
mpool_put(t->bt_mp, t->bt_pinned, 0);
t->bt_pinned = NULL;
}
/* Get currently doesn't take any flags, and keys of 0 are illegal. */
if (flags || (nrec = *(recno_t *)key->data) == 0) {
errno = EINVAL;
return (RET_ERROR);
}
/*
* If we haven't seen this record yet, try to find it in the
* original file.
*/
if (nrec > t->bt_nrecs) {
if (F_ISSET(t, R_EOF | R_INMEM))
return (RET_SPECIAL);
if ((status = t->bt_irec(t, nrec)) != RET_SUCCESS)
return (status);
}
--nrec;
if ((e = __rec_search(t, nrec, SEARCH)) == NULL)
return (RET_ERROR);
status = __rec_ret(t, e, 0, NULL, data);
if (F_ISSET(t, B_DB_LOCK))
mpool_put(t->bt_mp, e->page, 0);
else
t->bt_pinned = e->page;
return (status);
}
/*
* __REC_FPIPE -- Get fixed length records from a pipe.
*
* Parameters:
* t: tree
* cnt: records to read
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
int
__rec_fpipe(t, top)
BTREE *t;
recno_t top;
{
DBT data;
recno_t nrec;
size_t len;
int ch;
u_char *p;
if (t->bt_rdata.size < t->bt_reclen) {
t->bt_rdata.data = t->bt_rdata.data == NULL ?
malloc(t->bt_reclen) :
realloc(t->bt_rdata.data, t->bt_reclen);
if (t->bt_rdata.data == NULL)
return (RET_ERROR);
t->bt_rdata.size = t->bt_reclen;
}
data.data = t->bt_rdata.data;
data.size = t->bt_reclen;
for (nrec = t->bt_nrecs; nrec < top;) {
len = t->bt_reclen;
for (p = t->bt_rdata.data;; *p++ = ch)
if ((ch = getc(t->bt_rfp)) == EOF || !--len) {
if (ch != EOF)
*p = ch;
if (len != 0)
memset(p, t->bt_bval, len);
if (__rec_iput(t,
nrec, &data, 0) != RET_SUCCESS)
return (RET_ERROR);
++nrec;
break;
}
if (ch == EOF)
break;
}
if (nrec < top) {
F_SET(t, R_EOF);
return (RET_SPECIAL);
}
return (RET_SUCCESS);
}
/*
* __REC_VPIPE -- Get variable length records from a pipe.
*
* Parameters:
* t: tree
* cnt: records to read
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
int
__rec_vpipe(t, top)
BTREE *t;
recno_t top;
{
DBT data;
recno_t nrec;
indx_t len;
size_t sz;
int bval, ch;
u_char *p;
bval = t->bt_bval;
for (nrec = t->bt_nrecs; nrec < top; ++nrec) {
for (p = t->bt_rdata.data,
sz = t->bt_rdata.size;; *p++ = ch, --sz) {
if ((ch = getc(t->bt_rfp)) == EOF || ch == bval) {
data.data = t->bt_rdata.data;
data.size = p - (u_char *)t->bt_rdata.data;
if (ch == EOF && data.size == 0)
break;
if (__rec_iput(t, nrec, &data, 0)
!= RET_SUCCESS)
return (RET_ERROR);
break;
}
if (sz == 0) {
len = p - (u_char *)t->bt_rdata.data;
t->bt_rdata.size += (sz = 256);
t->bt_rdata.data = t->bt_rdata.data == NULL ?
malloc(t->bt_rdata.size) :
realloc(t->bt_rdata.data, t->bt_rdata.size);
if (t->bt_rdata.data == NULL)
return (RET_ERROR);
p = (u_char *)t->bt_rdata.data + len;
}
}
if (ch == EOF)
break;
}
if (nrec < top) {
F_SET(t, R_EOF);
return (RET_SPECIAL);
}
return (RET_SUCCESS);
}
/*
* __REC_FMAP -- Get fixed length records from a file.
*
* Parameters:
* t: tree
* cnt: records to read
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
int
__rec_fmap(t, top)
BTREE *t;
recno_t top;
{
DBT data;
recno_t nrec;
u_char *sp, *ep, *p;
size_t len;
if (t->bt_rdata.size < t->bt_reclen) {
t->bt_rdata.data = t->bt_rdata.data == NULL ?
malloc(t->bt_reclen) :
realloc(t->bt_rdata.data, t->bt_reclen);
if (t->bt_rdata.data == NULL)
return (RET_ERROR);
t->bt_rdata.size = t->bt_reclen;
}
data.data = t->bt_rdata.data;
data.size = t->bt_reclen;
sp = (u_char *)t->bt_cmap;
ep = (u_char *)t->bt_emap;
for (nrec = t->bt_nrecs; nrec < top; ++nrec) {
if (sp >= ep) {
F_SET(t, R_EOF);
return (RET_SPECIAL);
}
len = t->bt_reclen;
for (p = t->bt_rdata.data;
sp < ep && len > 0; *p++ = *sp++, --len);
if (len != 0)
memset(p, t->bt_bval, len);
if (__rec_iput(t, nrec, &data, 0) != RET_SUCCESS)
return (RET_ERROR);
}
t->bt_cmap = (caddr_t)sp;
return (RET_SUCCESS);
}
/*
* __REC_VMAP -- Get variable length records from a file.
*
* Parameters:
* t: tree
* cnt: records to read
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
int
__rec_vmap(t, top)
BTREE *t;
recno_t top;
{
DBT data;
u_char *sp, *ep;
recno_t nrec;
int bval;
sp = (u_char *)t->bt_cmap;
ep = (u_char *)t->bt_emap;
bval = t->bt_bval;
for (nrec = t->bt_nrecs; nrec < top; ++nrec) {
if (sp >= ep) {
F_SET(t, R_EOF);
return (RET_SPECIAL);
}
for (data.data = sp; sp < ep && *sp != bval; ++sp);
data.size = sp - (u_char *)data.data;
if (__rec_iput(t, nrec, &data, 0) != RET_SUCCESS)
return (RET_ERROR);
++sp;
}
t->bt_cmap = (caddr_t)sp;
return (RET_SUCCESS);
}
+241
View File
@@ -0,0 +1,241 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mike Olson.
*
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)rec_open.c 8.10 (Berkeley) 9/1/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <stddef.h>
#include <stdio.h>
#include <unistd.h>
#include <db.h>
#include "recno.h"
DB *
__rec_open(fname, flags, mode, openinfo, dflags)
const char *fname;
int flags, mode, dflags;
const RECNOINFO *openinfo;
{
BTREE *t;
BTREEINFO btopeninfo;
DB *dbp;
PAGE *h;
struct stat sb;
int rfd, sverrno;
/* Open the user's file -- if this fails, we're done. */
if (fname != NULL && (rfd = open(fname, flags, mode)) < 0)
return (NULL);
/* Create a btree in memory (backed by disk). */
dbp = NULL;
if (openinfo) {
if (openinfo->flags & ~(R_FIXEDLEN | R_NOKEY | R_SNAPSHOT))
goto einval;
btopeninfo.flags = 0;
btopeninfo.cachesize = openinfo->cachesize;
btopeninfo.maxkeypage = 0;
btopeninfo.minkeypage = 0;
btopeninfo.psize = openinfo->psize;
btopeninfo.compare = NULL;
btopeninfo.prefix = NULL;
btopeninfo.lorder = openinfo->lorder;
dbp = __bt_open(openinfo->bfname,
O_RDWR, S_IRUSR | S_IWUSR, &btopeninfo, dflags);
} else
dbp = __bt_open(NULL, O_RDWR, S_IRUSR | S_IWUSR, NULL, dflags);
if (dbp == NULL)
goto err;
/*
* Some fields in the tree structure are recno specific. Fill them
* in and make the btree structure look like a recno structure. We
* don't change the bt_ovflsize value, it's close enough and slightly
* bigger.
*/
t = dbp->internal;
if (openinfo) {
if (openinfo->flags & R_FIXEDLEN) {
F_SET(t, R_FIXLEN);
t->bt_reclen = openinfo->reclen;
if (t->bt_reclen == 0)
goto einval;
}
t->bt_bval = openinfo->bval;
} else
t->bt_bval = '\n';
F_SET(t, R_RECNO);
if (fname == NULL)
F_SET(t, R_EOF | R_INMEM);
else
t->bt_rfd = rfd;
if (fname != NULL) {
/*
* In 4.4BSD, stat(2) returns true for ISSOCK on pipes.
* Unfortunately, that's not portable, so we use lseek
* and check the errno values.
*/
errno = 0;
if (lseek(rfd, (off_t)0, SEEK_CUR) == -1 && errno == ESPIPE) {
switch (flags & O_ACCMODE) {
case O_RDONLY:
F_SET(t, R_RDONLY);
break;
default:
goto einval;
}
slow: if ((t->bt_rfp = fdopen(rfd, "r")) == NULL)
goto err;
F_SET(t, R_CLOSEFP);
t->bt_irec =
F_ISSET(t, R_FIXLEN) ? __rec_fpipe : __rec_vpipe;
} else {
switch (flags & O_ACCMODE) {
case O_RDONLY:
F_SET(t, R_RDONLY);
break;
case O_RDWR:
break;
default:
goto einval;
}
if (fstat(rfd, &sb))
goto err;
/*
* Kluge -- we'd like to test to see if the file is too
* big to mmap. Since, we don't know what size or type
* off_t's or size_t's are, what the largest unsigned
* integral type is, or what random insanity the local
* C compiler will perpetrate, doing the comparison in
* a portable way is flatly impossible. Hope that mmap
* fails if the file is too large.
*/
if (sb.st_size == 0)
F_SET(t, R_EOF);
else {
#ifdef MMAP_NOT_AVAILABLE
/*
* XXX
* Mmap doesn't work correctly on many current
* systems. In particular, it can fail subtly,
* with cache coherency problems. Don't use it
* for now.
*/
t->bt_msize = sb.st_size;
if ((t->bt_smap = mmap(NULL, t->bt_msize,
PROT_READ, MAP_PRIVATE, rfd,
(off_t)0)) == (caddr_t)-1)
goto slow;
t->bt_cmap = t->bt_smap;
t->bt_emap = t->bt_smap + sb.st_size;
t->bt_irec = F_ISSET(t, R_FIXLEN) ?
__rec_fmap : __rec_vmap;
F_SET(t, R_MEMMAPPED);
#else
goto slow;
#endif
}
}
}
/* Use the recno routines. */
dbp->close = __rec_close;
dbp->del = __rec_delete;
dbp->fd = __rec_fd;
dbp->get = __rec_get;
dbp->put = __rec_put;
dbp->seq = __rec_seq;
dbp->sync = __rec_sync;
/* If the root page was created, reset the flags. */
if ((h = mpool_get(t->bt_mp, P_ROOT, 0)) == NULL)
goto err;
if ((h->flags & P_TYPE) == P_BLEAF) {
F_CLR(h, P_TYPE);
F_SET(h, P_RLEAF);
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
} else
mpool_put(t->bt_mp, h, 0);
if (openinfo && openinfo->flags & R_SNAPSHOT &&
!F_ISSET(t, R_EOF | R_INMEM) &&
t->bt_irec(t, MAX_REC_NUMBER) == RET_ERROR)
goto err;
return (dbp);
einval: errno = EINVAL;
err: sverrno = errno;
if (dbp != NULL)
(void)__bt_close(dbp);
if (fname != NULL)
(void)close(rfd);
errno = sverrno;
return (NULL);
}
int
__rec_fd(dbp)
const DB *dbp;
{
BTREE *t;
t = dbp->internal;
/* Toss any page pinned across calls. */
if (t->bt_pinned != NULL) {
mpool_put(t->bt_mp, t->bt_pinned, 0);
t->bt_pinned = NULL;
}
/* In-memory database can't have a file descriptor. */
if (F_ISSET(t, R_INMEM)) {
errno = ENOENT;
return (-1);
}
return (t->bt_rfd);
}
+280
View File
@@ -0,0 +1,280 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)rec_put.c 8.7 (Berkeley) 8/18/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <db.h>
#include "recno.h"
/*
* __REC_PUT -- Add a recno item to the tree.
*
* Parameters:
* dbp: pointer to access method
* key: key
* data: data
* flag: R_CURSOR, R_IAFTER, R_IBEFORE, R_NOOVERWRITE
*
* Returns:
* RET_ERROR, RET_SUCCESS and RET_SPECIAL if the key is
* already in the tree and R_NOOVERWRITE specified.
*/
int
__rec_put(dbp, key, data, flags)
const DB *dbp;
DBT *key;
const DBT *data;
u_int flags;
{
BTREE *t;
DBT fdata, tdata;
recno_t nrec;
int status;
t = dbp->internal;
/* Toss any page pinned across calls. */
if (t->bt_pinned != NULL) {
mpool_put(t->bt_mp, t->bt_pinned, 0);
t->bt_pinned = NULL;
}
/*
* If using fixed-length records, and the record is long, return
* EINVAL. If it's short, pad it out. Use the record data return
* memory, it's only short-term.
*/
if (F_ISSET(t, R_FIXLEN) && data->size != t->bt_reclen) {
if (data->size > t->bt_reclen)
goto einval;
if (t->bt_rdata.size < t->bt_reclen) {
t->bt_rdata.data = t->bt_rdata.data == NULL ?
malloc(t->bt_reclen) :
realloc(t->bt_rdata.data, t->bt_reclen);
if (t->bt_rdata.data == NULL)
return (RET_ERROR);
t->bt_rdata.size = t->bt_reclen;
}
memmove(t->bt_rdata.data, data->data, data->size);
memset((char *)t->bt_rdata.data + data->size,
t->bt_bval, t->bt_reclen - data->size);
fdata.data = t->bt_rdata.data;
fdata.size = t->bt_reclen;
} else {
fdata.data = data->data;
fdata.size = data->size;
}
switch (flags) {
case R_CURSOR:
if (!F_ISSET(&t->bt_cursor, CURS_INIT))
goto einval;
nrec = t->bt_cursor.rcursor;
break;
case R_SETCURSOR:
if ((nrec = *(recno_t *)key->data) == 0)
goto einval;
break;
case R_IAFTER:
if ((nrec = *(recno_t *)key->data) == 0) {
nrec = 1;
flags = R_IBEFORE;
}
break;
case 0:
case R_IBEFORE:
if ((nrec = *(recno_t *)key->data) == 0)
goto einval;
break;
case R_NOOVERWRITE:
if ((nrec = *(recno_t *)key->data) == 0)
goto einval;
if (nrec <= t->bt_nrecs)
return (RET_SPECIAL);
break;
default:
einval: errno = EINVAL;
return (RET_ERROR);
}
/*
* Make sure that records up to and including the put record are
* already in the database. If skipping records, create empty ones.
*/
if (nrec > t->bt_nrecs) {
if (!F_ISSET(t, R_EOF | R_INMEM) &&
t->bt_irec(t, nrec) == RET_ERROR)
return (RET_ERROR);
if (nrec > t->bt_nrecs + 1) {
if (F_ISSET(t, R_FIXLEN)) {
if ((tdata.data =
(void *)malloc(t->bt_reclen)) == NULL)
return (RET_ERROR);
tdata.size = t->bt_reclen;
memset(tdata.data, t->bt_bval, tdata.size);
} else {
tdata.data = NULL;
tdata.size = 0;
}
while (nrec > t->bt_nrecs + 1)
if (__rec_iput(t,
t->bt_nrecs, &tdata, 0) != RET_SUCCESS)
return (RET_ERROR);
if (F_ISSET(t, R_FIXLEN))
free(tdata.data);
}
}
if ((status = __rec_iput(t, nrec - 1, &fdata, flags)) != RET_SUCCESS)
return (status);
if (flags == R_SETCURSOR)
t->bt_cursor.rcursor = nrec;
F_SET(t, R_MODIFIED);
return (__rec_ret(t, NULL, nrec, key, NULL));
}
/*
* __REC_IPUT -- Add a recno item to the tree.
*
* Parameters:
* t: tree
* nrec: record number
* data: data
*
* Returns:
* RET_ERROR, RET_SUCCESS
*/
int
__rec_iput(t, nrec, data, flags)
BTREE *t;
recno_t nrec;
const DBT *data;
u_int flags;
{
DBT tdata;
EPG *e;
PAGE *h;
indx_t index, nxtindex;
pgno_t pg;
u_int32_t nbytes;
int dflags, status;
char *dest, db[NOVFLSIZE];
/*
* If the data won't fit on a page, store it on indirect pages.
*
* XXX
* If the insert fails later on, these pages aren't recovered.
*/
if (data->size > t->bt_ovflsize) {
if (__ovfl_put(t, data, &pg) == RET_ERROR)
return (RET_ERROR);
tdata.data = db;
tdata.size = NOVFLSIZE;
*(pgno_t *)db = pg;
*(u_int32_t *)(db + sizeof(pgno_t)) = data->size;
dflags = P_BIGDATA;
data = &tdata;
} else
dflags = 0;
/* __rec_search pins the returned page. */
if ((e = __rec_search(t, nrec,
nrec > t->bt_nrecs || flags == R_IAFTER || flags == R_IBEFORE ?
SINSERT : SEARCH)) == NULL)
return (RET_ERROR);
h = e->page;
index = e->index;
/*
* Add the specified key/data pair to the tree. The R_IAFTER and
* R_IBEFORE flags insert the key after/before the specified key.
*
* Pages are split as required.
*/
switch (flags) {
case R_IAFTER:
++index;
break;
case R_IBEFORE:
break;
default:
if (nrec < t->bt_nrecs &&
__rec_dleaf(t, h, index) == RET_ERROR) {
mpool_put(t->bt_mp, h, 0);
return (RET_ERROR);
}
break;
}
/*
* If not enough room, split the page. The split code will insert
* the key and data and unpin the current page. If inserting into
* the offset array, shift the pointers up.
*/
nbytes = NRLEAFDBT(data->size);
if (h->upper - h->lower < nbytes + sizeof(indx_t)) {
status = __bt_split(t, h, NULL, data, dflags, nbytes, index);
if (status == RET_SUCCESS)
++t->bt_nrecs;
return (status);
}
if (index < (nxtindex = NEXTINDEX(h)))
memmove(h->linp + index + 1, h->linp + index,
(nxtindex - index) * sizeof(indx_t));
h->lower += sizeof(indx_t);
h->linp[index] = h->upper -= nbytes;
dest = (char *)h + h->upper;
WR_RLEAF(dest, data, dflags);
++t->bt_nrecs;
F_SET(t, B_MODIFIED);
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
return (RET_SUCCESS);
}
+126
View File
@@ -0,0 +1,126 @@
/*-
* Copyright (c) 1990, 1993
* The 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)rec_search.c 8.4 (Berkeley) 7/14/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <errno.h>
#include <stdio.h>
#include <db.h>
#include "recno.h"
/*
* __REC_SEARCH -- Search a btree for a key.
*
* Parameters:
* t: tree to search
* recno: key to find
* op: search operation
*
* Returns:
* EPG for matching record, if any, or the EPG for the location of the
* key, if it were inserted into the tree.
*
* Returns:
* The EPG for matching record, if any, or the EPG for the location
* of the key, if it were inserted into the tree, is entered into
* the bt_cur field of the tree. A pointer to the field is returned.
*/
EPG *
__rec_search(t, recno, op)
BTREE *t;
recno_t recno;
enum SRCHOP op;
{
register indx_t index;
register PAGE *h;
EPGNO *parent;
RINTERNAL *r;
pgno_t pg;
indx_t top;
recno_t total;
int sverrno;
BT_CLR(t);
for (pg = P_ROOT, total = 0;;) {
if ((h = mpool_get(t->bt_mp, pg, 0)) == NULL)
goto err;
if (h->flags & P_RLEAF) {
t->bt_cur.page = h;
t->bt_cur.index = recno - total;
return (&t->bt_cur);
}
for (index = 0, top = NEXTINDEX(h);;) {
r = GETRINTERNAL(h, index);
if (++index == top || total + r->nrecs > recno)
break;
total += r->nrecs;
}
BT_PUSH(t, pg, index - 1);
pg = r->pgno;
switch (op) {
case SDELETE:
--GETRINTERNAL(h, (index - 1))->nrecs;
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
break;
case SINSERT:
++GETRINTERNAL(h, (index - 1))->nrecs;
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
break;
case SEARCH:
mpool_put(t->bt_mp, h, 0);
break;
}
}
/* Try and recover the tree. */
err: sverrno = errno;
if (op != SEARCH)
while ((parent = BT_POP(t)) != NULL) {
if ((h = mpool_get(t->bt_mp, parent->pgno, 0)) == NULL)
break;
if (op == SINSERT)
--GETRINTERNAL(h, parent->index)->nrecs;
else
++GETRINTERNAL(h, parent->index)->nrecs;
mpool_put(t->bt_mp, h, MPOOL_DIRTY);
}
errno = sverrno;
return (NULL);
}
+131
View File
@@ -0,0 +1,131 @@
/*-
* Copyright (c) 1991, 1993, 1994
* The 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)rec_seq.c 8.3 (Berkeley) 7/14/94";
#endif /* not lint */
#include <sys/types.h>
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <string.h>
#include <db.h>
#include "recno.h"
/*
* __REC_SEQ -- Recno sequential scan interface.
*
* Parameters:
* dbp: pointer to access method
* key: key for positioning and return value
* data: data return value
* flags: R_CURSOR, R_FIRST, R_LAST, R_NEXT, R_PREV.
*
* Returns:
* RET_ERROR, RET_SUCCESS or RET_SPECIAL if there's no next key.
*/
int
__rec_seq(dbp, key, data, flags)
const DB *dbp;
DBT *key, *data;
u_int flags;
{
BTREE *t;
EPG *e;
recno_t nrec;
int status;
t = dbp->internal;
/* Toss any page pinned across calls. */
if (t->bt_pinned != NULL) {
mpool_put(t->bt_mp, t->bt_pinned, 0);
t->bt_pinned = NULL;
}
switch(flags) {
case R_CURSOR:
if ((nrec = *(recno_t *)key->data) == 0)
goto einval;
break;
case R_NEXT:
if (F_ISSET(&t->bt_cursor, CURS_INIT)) {
nrec = t->bt_cursor.rcursor + 1;
break;
}
/* FALLTHROUGH */
case R_FIRST:
nrec = 1;
break;
case R_PREV:
if (F_ISSET(&t->bt_cursor, CURS_INIT)) {
if ((nrec = t->bt_cursor.rcursor - 1) == 0)
return (RET_SPECIAL);
break;
}
/* FALLTHROUGH */
case R_LAST:
if (!F_ISSET(t, R_EOF | R_INMEM) &&
t->bt_irec(t, MAX_REC_NUMBER) == RET_ERROR)
return (RET_ERROR);
nrec = t->bt_nrecs;
break;
default:
einval: errno = EINVAL;
return (RET_ERROR);
}
if (t->bt_nrecs == 0 || nrec > t->bt_nrecs) {
if (!F_ISSET(t, R_EOF | R_INMEM) &&
(status = t->bt_irec(t, nrec)) != RET_SUCCESS)
return (status);
if (t->bt_nrecs == 0 || nrec > t->bt_nrecs)
return (RET_SPECIAL);
}
if ((e = __rec_search(t, nrec - 1, SEARCH)) == NULL)
return (RET_ERROR);
F_SET(&t->bt_cursor, CURS_INIT);
t->bt_cursor.rcursor = nrec;
status = __rec_ret(t, e, nrec, key, data);
if (F_ISSET(t, B_DB_LOCK))
mpool_put(t->bt_mp, e->page, 0);
else
t->bt_pinned = e->page;
return (status);
}
+122
View File
@@ -0,0 +1,122 @@
/*-
* Copyright (c) 1990, 1993, 1994
* The 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)rec_utils.c 8.6 (Berkeley) 7/16/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/param.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <db.h>
#include "recno.h"
/*
* __rec_ret --
* Build return data.
*
* Parameters:
* t: tree
* e: key/data pair to be returned
* nrec: record number
* key: user's key structure
* data: user's data structure
*
* Returns:
* RET_SUCCESS, RET_ERROR.
*/
int
__rec_ret(t, e, nrec, key, data)
BTREE *t;
EPG *e;
recno_t nrec;
DBT *key, *data;
{
RLEAF *rl;
void *p;
if (key == NULL)
goto dataonly;
/* We have to copy the key, it's not on the page. */
if (sizeof(recno_t) > t->bt_rkey.size) {
p = (void *)(t->bt_rkey.data == NULL ?
malloc(sizeof(recno_t)) :
realloc(t->bt_rkey.data, sizeof(recno_t)));
if (p == NULL)
return (RET_ERROR);
t->bt_rkey.data = p;
t->bt_rkey.size = sizeof(recno_t);
}
memmove(t->bt_rkey.data, &nrec, sizeof(recno_t));
key->size = sizeof(recno_t);
key->data = t->bt_rkey.data;
dataonly:
if (data == NULL)
return (RET_SUCCESS);
/*
* We must copy big keys/data to make them contigous. Otherwise,
* leave the page pinned and don't copy unless the user specified
* concurrent access.
*/
rl = GETRLEAF(e->page, e->index);
if (rl->flags & P_BIGDATA) {
if (__ovfl_get(t, rl->bytes,
&data->size, &t->bt_rdata.data, &t->bt_rdata.size))
return (RET_ERROR);
data->data = t->bt_rdata.data;
} else if (F_ISSET(t, B_DB_LOCK)) {
/* Use +1 in case the first record retrieved is 0 length. */
if (rl->dsize + 1 > t->bt_rdata.size) {
p = (void *)(t->bt_rdata.data == NULL ?
malloc(rl->dsize + 1) :
realloc(t->bt_rdata.data, rl->dsize + 1));
if (p == NULL)
return (RET_ERROR);
t->bt_rdata.data = p;
t->bt_rdata.size = rl->dsize + 1;
}
memmove(t->bt_rdata.data, rl->bytes, rl->dsize);
data->size = rl->dsize;
data->data = t->bt_rdata.data;
} else {
data->size = rl->dsize;
data->data = rl->bytes;
}
return (RET_SUCCESS);
}
+8 -26
View File
@@ -1,6 +1,6 @@
/*
* Copyright (c) 1983 Regents of the University of California.
* All rights reserved.
/*-
* Copyright (c) 1991, 1993
* The 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
@@ -29,29 +29,11 @@
* 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.
*
* @(#)recno.h 8.1 (Berkeley) 6/4/93
*/
#if defined(LIBC_SCCS) && !defined(lint)
.asciz "@(#)bcmp.s 5.6 (Berkeley) 6/1/90"
#endif /* LIBC_SCCS and not lint */
enum SRCHOP { SDELETE, SINSERT, SEARCH}; /* Rec_search operation. */
/* bcmp(s1, s2, n) */
#include "DEFS.h"
ENTRY(bcmp, 0)
movl 4(ap),r1
movl 8(ap),r3
movl 12(ap),r4
1:
movzwl $65535,r0
cmpl r4,r0
jleq 2f
subl2 r0,r4
cmpc3 r0,(r1),(r3)
jeql 1b
addl2 r4,r0
ret
2:
cmpc3 r4,(r1),(r3)
ret
#include "../btree/btree.h"
#include "extern.h"
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+4 -4
View File
@@ -1,4 +1,4 @@
# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
# Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or
@@ -21,11 +21,11 @@
#
subdir := dirent
headers := dirent.h dirstream.h
routines := opendir closedir readdir rewinddir \
headers := dirent.h direntry.h
routines := opendir closedir readdir readdir_r rewinddir \
seekdir telldir scandir alphasort \
getdents dirfd
distribute := direct.h
distribute := dirstream.h
tests := list tst-seekdir
+54 -22
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
/* Copyright (C) 1991, 92, 93, 94, 95, 96 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
@@ -13,7 +13,7 @@ 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, 1992 Free Software Foundation, Inc., 675 Mass Ave,
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
/*
@@ -29,30 +29,52 @@ __BEGIN_DECLS
#include <gnu/types.h>
/* This file defines `struct dirent'.
/* Directory entry structure.
It defines the macro `_DIRENT_HAVE_D_NAMLEN' iff there is a `d_namlen'
member that gives the length of `d_name'.
This structure is laid out identically to the `struct direct' that
represents directory entries in the GNU Hurd and in BSD 4.4 (and
incidentally, on disk in the Berkeley fast file system). The `readdir'
implementations for GNU and BSD know this; you must change them if you
change this structure. */
It defines the macro `_DIRENT_HAVE_D_RECLEN' iff there is a `d_reclen'
member that gives the size of the entire directory entry.
struct dirent
{
__ino_t d_fileno; /* File serial number. */
unsigned short int d_reclen; /* Length of the whole `struct dirent'. */
unsigned char d_type; /* File type, possibly unknown. */
unsigned char d_namlen; /* Length of the file name. */
It defines the macro `_DIRENT_HAVE_D_OFF' iff there is a `d_off'
member that gives the file offset of the next directory entry.
*/
/* Only this member is in the POSIX standard. */
char d_name[1]; /* File name (actually longer). */
};
#include <direntry.h>
#if defined(__USE_BSD) || defined(__USE_MISC)
#define d_ino d_fileno /* Backward compatibility. */
#if (defined(__USE_BSD) || defined(__USE_MISC)) && !defined(d_fileno)
#define d_ino d_fileno /* Backward compatibility. */
#endif
/* These macros extract size information from a `struct dirent *'.
They may evaluate their argument multiple times, so it must not
have side effects. Each of these may involve a relatively costly
call to `strlen' on some systems, so these values should be cached.
_D_EXACT_NAMLEN (DP) returns the length of DP->d_name, not including
its terminating null character.
_D_ALLOC_NAMLEN (DP) returns a size at least (_D_EXACT_NAMLEN (DP) + 1);
that is, the allocation size needed to hold the DP->d_name string.
Use this macro when you don't need the exact length, just an upper bound.
This macro is less likely to require calling `strlen' than _D_EXACT_NAMLEN.
*/
#ifdef _DIRENT_HAVE_D_NAMLEN
#define _D_EXACT_NAMLEN(d) ((d)->d_namlen)
#define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1)
#else
#define _D_EXACT_NAMLEN(d) (strlen ((d)->d_name))
#ifdef _DIRENT_HAVE_D_RECLEN
#define _D_ALLOC_NAMLEN(d) (((char *) (d) + (d)->d_reclen) - &(d)->d_name[0])
#else
#define _D_ALLOC_NAMLEN(d) (sizeof (d)->d_name > 1 ? sizeof (d)->d_name : \
_D_EXACT_NAMLEN (d) + 1)
#endif
#endif
#ifdef __USE_BSD
/* File types for `d_type'. */
enum
@@ -73,24 +95,34 @@ enum
#endif
/* Get the system-dependent definition of `DIR',
the data type of directory stream objects. */
#include <dirstream.h>
/* This is the data type of directory stream objects.
The actual structure is opaque to users. */
typedef struct __dirstream DIR;
/* Open a directory stream on NAME.
Return a DIR stream on the directory, or NULL if it could not be opened. */
extern DIR *__opendir __P ((__const char *__name));
extern DIR *opendir __P ((__const char *__name));
/* Close the directory stream DIRP.
Return 0 if successful, -1 if not. */
extern int __closedir __P ((DIR * __dirp));
extern int closedir __P ((DIR * __dirp));
/* Read a directory entry from DIRP.
Return a pointer to a `struct dirent' describing the entry,
or NULL for EOF or error. The storage returned may be overwritten
by a later readdir call on the same DIR stream. */
extern struct dirent *__readdir __P ((DIR * __dirp));
extern struct dirent *readdir __P ((DIR * __dirp));
#ifdef __USE_REENTRANT
/* Reentrant versio of `readdir'. Return in RESULT a pointer to the
next entry. */
extern int readdir_r __P ((DIR *__dirp, struct dirent *entry,
struct dirent **result));
#endif
/* Rewind DIRP to the beginning of the directory. */
extern void rewinddir __P ((DIR * __dirp));
+17 -13
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
/* Copyright (C) 1992, 1993, 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
@@ -16,16 +16,17 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <dirent.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int
DEFUN(scandir, (dir, namelist, select, cmp),
CONST char *dir AND
struct dirent ***namelist AND
int EXFUN((*select), (struct dirent *)) AND
int EXFUN((*cmp), (CONST PTR, CONST PTR)))
scandir (dir, namelist, select, cmp)
const char *dir;
struct dirent ***namelist;
int (*select) __P ((struct dirent *));
int (*cmp) __P ((const void *, const void *));
{
DIR *dp = opendir (dir);
struct dirent **v = NULL;
@@ -37,12 +38,14 @@ DEFUN(scandir, (dir, namelist, select, cmp),
return -1;
save = errno;
errno = 0;
__set_errno (0);
i = 0;
while ((d = readdir (dp)) != NULL)
if (select == NULL || (*select) (d))
{
size_t dsize;
if (i == vsize)
{
struct dirent **new;
@@ -54,17 +57,18 @@ DEFUN(scandir, (dir, namelist, select, cmp),
if (new == NULL)
{
lose:
errno = ENOMEM;
__set_errno (ENOMEM);
break;
}
v = new;
}
v[i] = (struct dirent *) malloc (sizeof (**v));
dsize = &d->d_name[_D_ALLOC_NAMLEN (d)] - (char *) d;
v[i] = (struct dirent *) malloc (dsize);
if (v[i] == NULL)
goto lose;
*v[i++] = *d;
memcpy (v[i++], d, dsize);
}
if (errno != 0)
@@ -74,12 +78,12 @@ DEFUN(scandir, (dir, namelist, select, cmp),
while (i > 0)
free (v[--i]);
free (v);
errno = save;
__set_errno (save);
return -1;
}
(void) closedir (dp);
errno = save;
__set_errno (save);
/* Sort the list if we have a comparison function to sort with. */
if (cmp != NULL)
+5 -3
View File
@@ -3,7 +3,7 @@
#include <stdlib.h>
int
main ()
main (int argc, char *argv[])
{
DIR * dirp;
@@ -14,7 +14,7 @@ main ()
dirp = opendir(".");
for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
{
/* save position 3 (fourth entry) */
/* save position 3 (after fourth entry) */
if (i++ == 3)
save3 = telldir(dirp);
@@ -26,10 +26,12 @@ main ()
break;
}
printf("going back past 4-th entry...\n");
/* go back to saved entry */
seekdir (dirp, save3);
/* print remaining files (3-last) */
for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
printf("%s\n", dp->d_name);
+1
View File
@@ -0,0 +1 @@
#include <elf/dlfcn.h>
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*

Some files were not shown because too many files have changed in this diff Show More