Commit Graph

3435 Commits

Author SHA1 Message Date
Ulrich Drepper
b99a3e9a07 Update.
* sysdeps/powerpc/fpu/s_isnan.c: Pretty printing.
2000-04-17 18:10:46 +00:00
Ulrich Drepper
dc05182174 Update.
* elf/dl-reloc.c (_dl_relocate_object): Add more __builtin_expect.
	* elf/dl-lookup.c: Likewise.
	* elf/dl-init.c (_dl_init): Likewise.
	* elf/dl-fini.c (_dl_fini): Likewise.
	* elf/dl-deps.c (_dl_map_object_deps): Likewise.
	* elf/dl-close.c (_dl_close): Likewise.
	* elf/rtld.c (_dl_start_final): Likewise.
2000-04-17 15:59:51 +00:00
Ulrich Drepper
466a0ec998 Update.
* elf/dl-reloc.c (_dl_relocat_object): Add more __builtin_expect.
	* elf/dl-lookup.c: Add more __builtin_expect.
	* elf/dl-init.c (_dl_init): Add more __builtin_expect.
	* elf/dl-fini.c (_dl_fini): Add more __builtin_expect.
	* elf/dl-deps.c (_dl_map_object_deps): Add more __builtin_expect.
	* elf/dl-close.c (_dl_close): Add more __builtin_expect.
	* elf/rtld.c (_dl_start_final): Add more __builtin_expect.
2000-04-17 15:41:59 +00:00
Ulrich Drepper
e3265f5bc5 Update.
2000-04-17  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-lookup.c (add_dependency): Correct __builtin_expect use.
2000-04-17 07:09:10 +00:00
Ulrich Drepper
c269fdb42f Update.
* csu/Makefile ($(objpfx)version-info.h): Get OS name from uname and
	only fall back on using Linux.
2000-04-16 01:18:43 +00:00
Ulrich Drepper
145b84138f Update.
* elf/dl-version.c (_dl_check_map_versions): New argument trace_mode.
	Before testing versions check that we actually loaded the object
	and whether we are in trace mode.  If not loaded during tracing don't
	test versions in this object.
	(_dl_check_all_versions): Take new parameter and pass to
	_dl_check_map_versions.
	* sysdeps/generic/ldsodefs.h: Update prototypes for
	_dl_check_all_versions and _dl_check_map_versions.
	* elf/rtld.c (struct version_check_args): Add dotrace.
	(version_check_doit): Pass args->dotrace to _dl_check_all_versions.
	(dl_main): Pass info about trace mode to version_check_doit.
	* elf/dl-open.c (dl_open_worker): Pass zero as new argument to
	_dl_check_all_versions.

	* manual/users.texi (XPG Functions): Document utmpxname, getutmp,
	and getutmpx.
	Patch by Bryan Henderson <bryanh@giraffe-data.com>.
2000-04-15 22:26:34 +00:00
Ulrich Drepper
29094e4880 Update.
2000-04-15  Ulrich Drepper  <drepper@redhat.com>

	* manual/argp.texi: Document index parameter of argp_parse.
	Fix typo.
	Reported by Andrew Schulman <SCHULMAN.ANDREW@epamail.epa.gov>.
2000-04-15 19:38:00 +00:00
Ulrich Drepper
afdda55ad5 Update.
2000-04-14  Andreas Jaeger  <aj@suse.de>

	* sysdeps/unix/sysv/linux/shm_open.c: Include linux_fsinfo for
	SHMFS_SUPER_MAGIC.  Remove definition of SHMFS_SUPER_MAGIC.

	* sysdeps/unix/sysv/linux/linux_fsinfo.h (SHMFS_SUPER_MAGIC): Added.
2000-04-15 19:21:10 +00:00
Ulrich Drepper
150f740ace Update.
* sysdeps/unix/sysv/linux/alpha/adjtime.c: Fix typo in
	compat_symbol call for old adjtime.

	* sysdeps/alpha/dl-machine.h (RTLD_START): Rewrite for new init
2000-04-15 17:39:36 +00:00
Ulrich Drepper
ef187474bc Update.
* sysdeps/alpha/dl-machine.h (RTLD_START):Rewrite for new init
	function interface.  Patch by Richard Henderson <rth@cygnus.com>.
2000-04-15 17:15:10 +00:00
Ulrich Drepper
a5a6f9262e Update.
2000-04-15  Ulrich Drepper  <drepper@redhat.com>

	* posix/Makefile (headers): Add spawn.h.
	(distribute): Add spawn_int.h.
	(routines): Add spawn_faction_init, spawn_faction_destroy,
	spawn_faction_addclose, spawn_faction_addopen, spawn_faction_adddup2,
	spawnattr_init, spawnattr_destroy, spawnattr_getdefault,
	spawnattr_setdefault, spawnattr_getflags, spawnattr_setflags,
	spawnattr_getpgroup, spawnattr_setpgroup, spawn, spawnp, and spawni.
	* posix/Versions [libc] (GLIBC_2.2): Add posix_spawn_file_actions_init,
	posix_spawn_file_actions_destroy, posix_spawn_file_actions_addclose,
	posix_spawn_file_actions_addopen, posix_spawn_file_actions_adddup2,
	posix_spawnattr_init, posix_spawnattr_destroy,
	posix_spawnattr_getdefault, posix_spawnattr_setdefault,
	posix_spawnattr_getflags, posix_spawnattr_setflags,
	posix_spawnattr_getpgroup, posix_spawnattr_setpgroup, posix_spawn,
	and posix_spawnp.
	* posix/spawn.c: New file.
	* posix/spawn.h: New file.
	* posix/spawn_faction_addclose.c: New file.
	* posix/spawn_faction_adddup2.c: New file.
	* posix/spawn_faction_addopen.c: New file.
	* posix/spawn_faction_destroy.c: New file.
	* posix/spawn_faction_init.c: New file.
	* posix/spawn_int.h: New file.
	* posix/spawnattr_destroy.c: New file.
	* posix/spawnattr_getdefault.c: New file.
	* posix/spawnattr_getflags.c: New file.
	* posix/spawnattr_getpgroup.c: New file.
	* posix/spawnattr_getschedparam.c: New file.
	* posix/spawnattr_getschedpolicy.c: New file.
	* posix/spawnattr_getsigmask.c: New file.
	* posix/spawnattr_init.c: New file.
	* posix/spawnattr_setdefault.c: New file.
	* posix/spawnattr_setflags.c: New file.
	* posix/spawnattr_setpgroup.c: New file.
	* posix/spawnattr_setschedparam.c: New file.
	* posix/spawnattr_setschedpolicy.c: New file.
	* posix/spawnattr_setsigmask.c: New file.
	* posix/spawni.c: New file.
	* posix/spawnp.c: New file.

	* sysdeps/mach/hurd/bits/posix_opt.h: Add _POSIX_SPAWN.
	* sysdeps/unix/sysv/linux/bits/posix_opt.h: Likewise.
2000-04-15 16:51:16 +00:00
Andreas Jaeger
c84956c7a2 Update.
(elf_machine_got_rel): Cast sym correctly.
2000-04-15 04:34:14 +00:00
Andreas Jaeger
30c2f3c4e2 Update.
* sysdeps/mips/add_n.S: Use __PIC__, add end directive.
2000-04-15 03:57:39 +00:00
Andreas Jaeger
90bf0e0731 Update.
* sysdeps/mips/addmul_1.S: Likewise.
	* sysdeps/mips/lshift.S: Likewise.
	* sysdeps/mips/mul_1.S: Likewise.
	* sysdeps/mips/rshift.S: Likewise.
	* sysdeps/mips/sub_n.S: Likewise.
	* sysdeps/mips/submul_1.S: Likewise.
2000-04-15 03:54:55 +00:00
Andreas Jaeger
fe81e98863 Update.
* sysdeps/mips/dl-machine.h (elf_machine_got_rel): Initialize
	symidx correctly.

	* sysdeps/mips/add_n.S: Use __PIC__, add .end directive.
2000-04-15 03:45:32 +00:00
Andreas Jaeger
c8c73ac377 Update.
* stdlib/stdlib.h: Fix typo in comment.
2000-04-15 01:35:09 +00:00
Andreas Jaeger
d0a5dae4dc 2000-04-14 Andreas Jaeger <aj@suse.de>
* shlib-versions (mips.*-.*-linux.*): Support only GLIBC 2.0 and
	2.2 for libdl, ld and libm.
	* shlib-versions (mips.*-.*-linux.*): Support only GLIBC 2.0 and
	2.2 for libdl, ld and libm.
2000-04-14 22:42:52 +00:00
Ulrich Drepper
0758ea0cc3 Update.
2000-04-14  Ulrich Drepper  <drepper@redhat.com>

	* malloc/Versions [libc] (GLIBC_2.2): Add posix_memalign.
	* malloc/malloc.c: Implement posix_memalign for glibc.
	* include/stdlib.h: Add prototype for __posix_memalign.
	* stdlib/stdlib.h: Add prototype for posix_memalign.
2000-04-14 17:44:22 +00:00
Andreas Jaeger
12d3e57900 Update.
2000-04-14  Andreas Jaeger  <aj@suse.de>

	* sysdeps/generic/madvise.c: Fix typos.

	* sysdeps/unix/sysv/linux/mips/clone.S (error): Use __PIC__.

	* sysdeps/mips/bits/setjmp.h: Remove K&R compatibility.

	* sysdeps/mips/setjmp_aux.c (__sigsetjmp_aux): Silence gcc
	warnings.
2000-04-14 17:37:10 +00:00
Ulrich Drepper
bb8e0116cd update.
2000-04-14  Ulrich Drepper  <drepper@redhat.com>

	* include/sys/statfs.h: Add prototypes for __statfs64 and __fstatfs64.
	* sysdeps/generic/fstatfs64.c (__fstatfs64): Renamed to fstatfs64.
	Make old name weak alias.
	* sysdeps/unix/sysv/linux/fstatfs64.c: Likewise.
	* sysdeps/generic/statfs64.c (__statfs64): Renamed to statfs64.
	Make old name weak alias.
	* sysdeps/unix/sysv/linux/statfs64.c: Likewise.

	* io/Makefile (routines): Add posix_fadvise, posix_fadvise64,
	posix_fallocate, and posix_fallocate64.
	* io/Versions [libc] (GLIBC_2.2): Add posix_fadvise, posix_fadvise64,
	posix_fallocate, and posix_fallocate64.
	* io/fcntl.h: Declare posix_fadvise, posix_fadvise64,
	posix_fallocate, and posix_fallocate64.
	* sysdeps/generic/fadvise.c: New file.
	* sysdeps/generic/fadvise64.c: New file.
	* sysdeps/generic/fallocate.c: New file.
	* sysdeps/generic/fallocate64.c: New file.
	* sysdeps/posix/fallocate.c: New file.
	* sysdeps/posix/fallocate64.c: New file.
	* sysdeps/generic/bits/fcntl.h: Define POSIX_FADV_NORMAL,
	POSIX_FADV_RANDOM, POSIX_FADV_SEQUENTIAL, POSIX_FADV_WILLNEED,
	POSIX_FADV_DONTNEED, and POSIX_FADV_NOREUSE.
	* sysdeps/mach/hurd/bits/fcntl.h: Likewise.
	* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise.
	* sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise.
	* sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise.
	* sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise.

	* sysdeps/generic/madvise.c (__madvise): Renamed to posix_madvise.
	* sysdeps/unix/sysv/linux/syscalls.list: Likewise.
2000-04-14 07:51:02 +00:00
Ulrich Drepper
8f6f7a31c9 Update.
2000-04-13  Ulrich Drepper  <drepper@redhat.com>

	* misc/Versions [libc] (GLIBC_2.2): Add posix_madvice.
	* misc/sys/mman.h (posix_madvise): Add prototype.
	* sysdeps/generic/madvise.c (madvise): Renamed to __madvise.  Make
	old name and posix_madvise weak aliases.
	* sysdeps/unix/sysv/linux/syscalls.list: Likewise.
	* sysdeps/generic/bits/mman.h: Add POSIX_MADV_* constants.
	* sysdeps/unix/sysv/linux/alpha/bits/mman.h: Likewise.
	* sysdeps/unix/sysv/linux/arm/bits/mman.h: Likewise.
	* sysdeps/unix/sysv/linux/i386/bits/mman.h: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/bits/mman.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/bits/mman.h: Likewise.
2000-04-14 05:59:03 +00:00
Andreas Jaeger
68e1ab18ab Update.
(elf_machine_got_rel): Handle symbol versioning.
2000-04-14 00:35:47 +00:00
Andreas Jaeger
0fc9546475 Update.
(elf_machine_got_rel): Only add runtime display if needed.
2000-04-14 00:15:54 +00:00
Andreas Jaeger
490a9ab75c Update.
* sysdeps/mips/dl-machine.h (__dl_runtime_resolve): Handle symbol
	versioning.

2000-04-13  Andreas Jaeger  <aj@suse.de>
2000-04-13 23:55:40 +00:00
Andreas Jaeger
44a202c059 Update.
* sysdeps/unix/sysv/linux/mips/clone.S: Fix function.

	* sysdeps/unix/sysv/linux/mips/pipe.S: New file.
2000-04-13 20:13:42 +00:00
Andreas Jaeger
ab718a79c5 Update.
* sysdeps/unix/sysv/linux/mips/pipe.S: New file.
2000-04-13 19:53:31 +00:00
Andreas Jaeger
382e7b29f5 Update.
2000-04-13  Andreas Jaeger  <aj@suse.de>

	* sysdeps/unix/mips/pipe.S: Reorder instructions since .reorder is
	default.

	* sysdeps/mips/__longjmp.c (__longjmp): Use $25 to fix problems
	with some applications.
	Patches by Ralf Baechle <ralf@uni-koblenz.de>.

	* sysdeps/mips/bsd-setjmp.S: Use __PIC__.
	* sysdeps/mips/bsd-_setjmp.S: Likewise.
	* sysdeps/mips/setjmp.S: Likewise.
2000-04-13 19:46:23 +00:00
Ulrich Drepper
3737ff12bc Update.
2000-04-13  Ulrich Drepper  <drepper@redhat.com>

	* posix/globtest.sh: Work around inconsistency with expanding ~/
	in shell (PR libc/1690).  Reported by patsmith@pobox.com.
2000-04-13 07:30:27 +00:00
Ulrich Drepper
b3ae0650bc Update.
* posix/getconf.c: Add support for many more POSIX options.
	* sysdeps/posix/sysconf.c: Likewise.
	* sysdeps/generic/bits/confname.h: Add many more POSIX options.
	* sysdeps/mach/hurd/bits/posix_opt.h: Add _POSIX_REGEXP and
	_POSIX_SHELL.
	* sysdeps/unix/sysv/linux/bits/posix_opt.h: Likewise.
	* sysdeps/unix/sysv/linux/i386/bits/time.h: Rename __CLOCK_HIGHRES to
	CLOCK_PROCESS_CPUTIME_ID.  Add define CLOCK_MONOTONIC and
	CLOCK_THREAD_CPUTIME_ID.
	* sysdeps/unix/i386/clock_getcpuclockid.c: Set *clock_id to
	CLOCK_PROCESS_CPUTIME_ID.
	* sysdeps/unix/i386/i586/clock_getres.c: Change for renaming of
	__CLOCK_HIGHRES to CLOCK_PROCESS_CPUTIME_ID.  Handle
	CLOCK_THREAD_CPUTIME_ID and CLOCK_MONOTONIC the same.
	* sysdeps/unix/i386/i586/clock_gettime.c: Likewise.
2000-04-13 03:55:50 +00:00
Ulrich Drepper
aa780baba8 Update.
* malloc/Makefile (tests): Add tst-calloc.
	* malloc/tst-calloc.c: New file.
2000-04-12 23:53:40 +00:00
Ulrich Drepper
c49b2a4e55 Update.
* sysdeps/arm/libm-test-ulps: New file.
2000-04-12 23:40:28 +00:00
Ulrich Drepper
13f536d439 Update.
* malloc/malloc.c: Undo all of today's changes.
2000-04-12 23:17:05 +00:00
Ulrich Drepper
92d2e18fa4 Update.
* locale/programs/locale.c (show_info): Don't try to look into
	data for LC_ALL (there is none).
2000-04-12 21:39:32 +00:00
Ulrich Drepper
3ea1b82e6b Update.
* malloc/malloc.c (cALLOc): Clear only what the user asked for and
	avoid writing over boundary.
	Patch by Greg McGary <gkm@eng.ascend.com>.
2000-04-12 21:10:45 +00:00
Ulrich Drepper
aee4670499 Update.
2000-04-12  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/arm/memprof.h: New file.
2000-04-12 20:59:34 +00:00
Ulrich Drepper
4a1995267e Update.
2000-04-12  Andreas Jaeger  <aj@suse.de>

	* sysdeps/unix/i386/i586/clock_gettime.c: Fix typo.

	* sysdeps/unix/sysv/linux/i386/get_clockfreq.c: Include <string.h>
	for memmem declaration.

	* sysdeps/unix/clock_gettime.c (clock_gettime): Initialize retval
	to -1.
	* sysdeps/posix/clock_getres.c (clock_getres): Likewise.
2000-04-12 20:53:19 +00:00
Ulrich Drepper
a4dec43d31 Update.
* libio/iopopen.c (_IO_new_proc_open): Close pipes in case the
	mode is invalid.
	* libio/oldiopopen.c (_IO_old_proc_open): Likewise.
	Patch by Bart Veer <bartv@redhat.com>.
2000-04-12 20:45:32 +00:00
Ulrich Drepper
da240c6be0 Update.
2000-04-12  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/arm/dl-machine.h (RTLD_START): Rewrite for new init
	function interface.
2000-04-12 20:34:27 +00:00
Andreas Jaeger
bfe42f05a2 Update.
2000-04-11  Andreas Jaeger  <aj@suse.de>

	* sysdeps/mips/dl-machine.h: Update some comments.
	(ELF_MACHINE_ALIGN_MASK): Removed, it's not needed.
2000-04-12 17:59:36 +00:00
Ulrich Drepper
8a31d74288 Update.
* sysdeps/unix/sysv/linux/bits/posix_opt.h: Add
	_POSIX_SHARED_MEMORY_OBJECTS.
2000-04-12 06:53:41 +00:00
Ulrich Drepper
ca99b8a009 Update.
* rt/Makefile (tests): Add tst-shm.
	Add rules to generate tst-shm.
	* rt/tst-shm.c: New file.
2000-04-12 06:48:39 +00:00
Ulrich Drepper
fb125e0ced Update.
* sysdeps/unix/sysv/linux/shm_open.c (shm_open): Set FD_CLOEXEC
	for descriptor.
2000-04-12 06:08:31 +00:00
Ulrich Drepper
a63be9f777 Update.
* misc/sys/mman.h: Add prototypes for shm_open and shm_unlink.
	* rt/Makefile (librt-routines): Add shm_open and shm_unlink.
	* rt/Versions [librt] (GLIBC_2.2): Add shm_open and shm_unlink.
	* sysdeps/generic/shm_open.c: New file.
	* sysdeps/generic/shm_unlink.c: New file.
	* sysdeps/unix/sysv/linux/shm_open.c: New file.
	* sysdeps/unix/sysv/linux/shm_unlink.c: New file.
	* sysdeps/unix/sysv/linux/Versions [libc] (GLIBC_2.2): Export
	 __endmntent, __getmntent_r, __setmntent, and __statfs.
2000-04-12 04:59:33 +00:00
Ulrich Drepper
25728f0397 Update.
* libio/vasprintf.c (_IO_vasprintf): Try to avoid memory
	fragmentation by allocating new memory at the end instead of
	reallocating.
2000-04-11 17:54:09 +00:00
Ulrich Drepper
e7c036b39e Update.
2000-04-11  Ulrich Drepper  <drepper@redhat.com>

	* posix/globtest.sh: Fix last change.

2000-04-10  Philip Blundell  <philb@gnu.org>

	* sysdeps/unix/sysv/linux/bits/in.h (IPV6_JOIN_GROUP,
	IPV6_LEAVE_GROUP): New names for IPV6_ADD_MEMBERSHIP,
	IPV6_DROP_MEMBERSHIP.
	* sysdeps/generic/bits/in.h (IPV6_JOIN_GROUP, IPV6_LEAVE_GROUP):
	Likewise.

2000-04-11  Ulrich Drepper  <drepper@redhat.com>

	* elf/readlib (process_file): Close streams in case of an error.

2000-04-09  Andreas Jaeger  <aj@suse.de>

	* elf/readlib.c (process_file): Check if file is big enough to
	contain aout and ELF headers.
	Reported by Reinhard Moosauer <RMoosauer@steinecker.com>.

2000-04-10  Jes Sorensen  <Jes.Sorensen@cern.ch>

	* elf/dl-fini.c: Include alloca.h to get proper prototype for alloca().

2000-04-11  Ulrich Drepper  <drepper@redhat.com>

	* test-skeleton.c (main): If STDOUT_UNBUFFERED is defined, make stdout
	stream unbuffered.
	* rt/Makefile (tests): Add tst-clock.
	Add rules to build tst-clock.
	* rt/tst-clock.c: New file.
	* sysdeps/unix/i386/i586/clock_getres.c: Correct expression to decide
	about initialization of nsec.
	* sysdeps/unix/i386/i586/clock_gettime.c: Correct expression to decide
	about initialization of freq.  Set retval to zero if successful.
	* sysdeps/unix/sysv/linux/i386/get_clockfreq.c: Cache result.
2000-04-11 16:27:38 +00:00
Ulrich Drepper
094f72c6a5 Update.
* time/time.h: Define pid_t.  Add prototype for clock_getcpuclockid.
2000-04-11 07:12:59 +00:00
Ulrich Drepper
6689a1882b Update.
2000-04-10  Ulrich Drepper  <drepper@redhat.com>

	* Versions.def (librt): Add GLIBC_2.2.
	* rt/Makefile (librt-routines): Add get_clockfreq, clock_getcpuclockid,
	clock_getres, clock_gettime, clock_settime, timer_create, timer_delete,
	timer_getoverr, timer_gettime, and timer_settime.
	* rt/Versions [librt] (GLIBC_2.2): Add clock_getres, clock_gettime,
	clock_settime, timer_create, timer_delete, timer_getoverrun,
	timer_gettime, and timer_settime.
	* sysdeps/generic/clock_getcpuclockid.c: New file.
	* sysdeps/generic/get_clockfreq.c: New file.
	* sysdeps/unix/i386/clock_getcpuclockid.c: New file.
	* sysdeps/unix/sysv/linux/i386/get_clockfreq.c: New file.
	* sysdeps/mach/hurd/i386/bits/time.h: New file.
	* sysdeps/unix/i386/i586/clock_getres.c: New file.
	* sysdeps/unix/i386/i586/clock_gettime.c: New file.
	* sysdeps/unix/i386/i686/Implies: New file.
	* sysdpes/unix/sysv/linux/i386/bits/time.h: New file.
	* time/Makefile (routines): Move clock_getres, clock_gettime,
	clock_settime, timer_create, timer_delete, timer_getoverr,
	timer_gettime, and timer_settime to rt/Makefile.
	* time/Versions [libc] (GLIBC_2.2): Remove clock_getres, clock_gettime,
	clock_settime, timer_create, timer_delete, timer_getoverrun,
	timer_gettime, and timer_settime.

	* sysdeps/mach/hurd/bits/time.h: Drop K&R compatibility.  Use __const__
	and not const as attribute name.
2000-04-11 07:08:31 +00:00
Ulrich Drepper
25ee87d6f1 Update.
2000-04-10  Thorsten Kukuk  <kukuk@suse.de>

	* elf/cache.c (save_cache): Make sure /etc/ld.so.cache is mode 644.
2000-04-10 16:22:52 +00:00
Ulrich Drepper
3b6906390e Update.
2000-04-10  Andreas Schwab  <schwab@suse.de>

	* posix/globtest.sh: Skip tests that depend on unreadable
	directories if run as root.
2000-04-10 15:55:35 +00:00
Ulrich Drepper
e79af11c36 Update.
2000-04-10  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/unix/clock_settime.c (clock_settime): Test tv_nsec value
	for correct range.  From code by Kaz Kylheku <kaz@ashi.footprints.net>.
2000-04-10 15:30:06 +00:00