Compare commits

...
Author SHA1 Message Date
Ulrich Drepper 3075e0e37c Update.
1997-03-30 03:42  Ulrich Drepper  <drepper@cygnus.com>

	* math/libm-test.c: Add definition of ctanh_test, clog_test, and
	csqrt_test.
1997-03-30 01:42:56 +00:00
Ulrich Drepper 993b3242cd Update.
1997-03-29 17:39  Ulrich Drepper  <drepper@cygnus.com>

	* math/Makefile (routines): Add carg, s_ccosh and s_csinh.

	* math/complex.h: Add C++ protection.

	* math/libm-test.c (cexp_test): Correct a few bugs.
	(csinh_test): New function.
	(ccosh_test): New function.
	(cacos_test): New function.
	(cacosh_test): New function.
	(casinh_test): New function.
	(catanh_test): New function.
	(main): Add calls to csinh_test and ccosh_test.

	* misc/Makefile (tests): Add tst-tsearch.
	Add rule to link tst-tsearch against libm.
	* misc/tsearch.c: Rewritten to use Red-Black-Tree algorithm by
	Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>.
	* misc/tst-tsearch.c: New file.

	* stdio-common/bug5.c: Clear LD_LIBRARY_PATH environment variable
	before using system.
	* stdio-common/test-popen.c: Clear LD_LIBRARY_PATH environment variable
	before using popen.

	* sysdeps/libm-ieee754/s_cexp.c: Correct handling of special cases.
	* sysdeps/libm-ieee754/s_cexpf.c: Likewise.
	* sysdeps/libm-ieee754/s_cexpl.c: Likewise.

	* sysdeps/libm-i387/s_cexp.S: New file.  ix87 specific implementation
	of complex exponential function.
	* sysdeps/libm-i387/s_cexpf.S: New file.
	* sysdeps/libm-i387/s_cexpl.S: New file.

	* sysdeps/libm-ieee754/s_ccosh.c: New file.  Implementation of
	complex cosh function.
	* sysdeps/libm-ieee754/s_ccoshf.c: New file.
	* sysdeps/libm-ieee754/s_ccoshl.c: New file.
	* sysdeps/libm-ieee754/s_csinh.c: New file.  Implementation of
	complex sinh function.
	* sysdeps/libm-ieee754/s_csinhf.c: New file.
	* sysdeps/libm-ieee754/s_csinhl.c: New file.

	* math/carg.c: New file.  Generic implementatio of carg function.
	* math/cargf.c: New file.
	* math/cargl.c: New file.

1997-03-29 16:07  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/posix/system.c: Update copyright.

1997-03-29 04:18  Ulrich Drepper  <drepper@cygnus.com>

	* elf/dl-error.c (_dl_catch_error): Add another argument which is
	passed to OPERATE.
	(_dl_receive_error): Likewise.
	* elf/link.h: Change prototypes for _dl_catch_error and
	_dl_receive_error to reflect above change.
	* elf/dl-deps.c: Don't use nested function.  Call _dl_catch_error
	with additional argument with pointer to data.
	* elf/dlclose.c: Likewise.
	* elf/dlerror.c: Likewise.
	* elf/dlopen.c: Likewise.
	* elf/dlsym.c: Likewise.
	* elf/dlvsym.c: Likewise.
	* elf/rtld.c: Likewise.
	* nss/nsswitch.c: Likewise.
	Patch by Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>.

1997-03-28 21:14  Miguel de Icaza  <miguel@nuclecu.unam.mx>

	* elf/dl-error.c: Manually set up the values of "c", this avoids a
	call to memcpy and a zero 152 bytes structure.

	* sysdeps/sparc/dl-machine.h (elf_machine_rela): Test
	RTLD_BOOTSTRAP to avoid performing relative relocs on a second
	pass.

	* sysdeps/sparc/udiv_qrnnd.S: Make the code PIC aware.

	* sysdeps/unix/sysv/linux/sparc/Dist: Add kernel_stat.h and
	kernel_sigaction.h

	Add Linux/SPARC specific definitions.
	* sysdeps/unix/sysv/linux/sparc/fcntlbits.h: New file.
	* sysdeps/unix/sysv/linux/sparc/ioctls.h: New file.
	* sysdeps/unix/sysv/linux/sparc/kernel_sigaction.h: New file.
	* sysdeps/unix/sysv/linux/sparc/kernel_stat.h: New file.
	* sysdeps/unix/sysv/linux/sparc/sigaction.h: New file.
	* sysdeps/unix/sysv/linux/sparc/signum.h: New file.
	* sysdeps/unix/sysv/linux/sparc/termbits.h: New file.

1997-03-28 13:06  Philip Blundell  <pjb27@cam.ac.uk>

	* sysdeps/posix/getaddrinfo.c (gaih_inet_serv): Use
	__getservbyname_r() not getservbyname().
	(BROKEN_LIKE_POSIX): Define to 1 so we get strict POSIX behaviour.
1997-03-29 17:32:35 +00:00
Ulrich Drepper e7fd8a39ab Update.
1997-03-27 02:28  Ulrich Drepper  <drepper@cygnus.com>

	* gmon/gmon.c (monstartup): Mark all messages.
	(write_call_graph): Rewrite to use larger I/O vector for writev
	call to reduce syscall overhead.
	(write_bb_counts): Simplify writev handling.

	* inet/rexec.c: Make string parameters `const'.
	* resolv/netdb.h: Add prototypes for rcmd, rexec, ruserok, and
	rresvport.

	* math/Makefile: Don't define CFLAGS-* macros to prevent inlining
	in libm-test.
	* math/libm-test.c (this_does_nothing): Remove functions.  It's
	notuseful on any platform but ix86.
	(inverse_func_pair_test): Don't use this_does_nothing.  Use
	memory reference.
	(identities1_test): Likewise.
	(identities2_test): Likewise.
	(identities3_test): Likewise.
	(basic_test): Likewise.
	Patch by Andreas Schwab.
	(BUILD_COMPLEX): New macro.  Create complex number from real and
	imaginary parts.  This works around bugs/inefficiencies in current
	gcc.
	(cexp_test): Use BUILD_COMPLEX.  Add more tests.

	* nss/nsswitch.c: Fix typo.

	* posix/glob.h: Add declaration for glob_pattern_p.
	* posix/glob.c: Rename glob_pattern_p to __glob_pattern_p and
	make glob_pattern_p a weak alias.  This function is used in other
	packages (e.g. bash).

	* signal/Makefile (routines): Add sigisempty, sigandset, and
	sigorset.
	* signal/signal.h: Add prototypes for sigisempty, sigandset, and
	sigorset.
	* signal/sigisempty.c: New file.
	* signal/sigandset.c: New file.
	* signal/sigorset.c: New file.
	* sysdeps/generic/sigset.h: Define __sigisemptyset, __sigandset,
	and __sigorset.
	* sysdeps/unix/sysv/linux/sigset.h: Likewise.

	* stdlib/strtod.c: Handle `n-char-sequence' in NaN parsing.  It
	determines the bits in the mantissa part of the NaN.
	* stdlib/strtof.c: Define SET_MANTISSA for float type.
	* wcsmbs/wcstof.c: Define SET_MANTISSA for float type.
	* stdlib/strtold.c: Define SET_MANTISSA for long double type.
	* wcsmbs/wcstold.c: Define SET_MANTISSA for long double type.

	* sysdeps/libm-ieee754/s_cexp.c: Use explicit assignment to
	complex number components.  Some more corrects for special cases.
	* sysdeps/libm-ieee754/s_cexpf.c: Likewise.
	* sysdeps/libm-ieee754/s_cexpl.c: Likewise.

	* sysdeps/sparc/elf/start.S: Remove as per request of Miguel de Icaza.

	* sysdeps/unix/sysv/linux/netinet/icmp.h: Remove since we have
	ip_icmp.h.  Reported by HJ Lu.

1997-03-25 03:50  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/Makefile (CFLAGS-rtld.c): Add -Wno-unused.

	* sysdeps/m68k/dl-machine.h (elf_machine_rela): Rewritten as for
	i386.
	(elf_machine_lookup_noexec_p, elf_machine_lookup_noplt_p,
	ELF_MACHINE_RELOC_NOPLT): Define.

1997-03-25 03:48  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* grp/grp.h: Include <stddef.h> only once.

1997-03-25 09:38  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/termbits.h (OXTABS): Don't define.
	* sysdeps/unix/sysv/linux/alpha/termbits.h (OXTABS): Likewise.

	* termios/sys/ttydefaults.h (TTYDEF_OFLAG): Use either OXTABS or
	TAB3, if one of them is defined.

1997-03-26 04:53  Ulrich Drepper  <drepper@cygnus.com>

	* posix/glob.c (next_brace_sub): Decrement depth counter when '}'
	is found.
	Patch by Dennis Henriksen <opus@flamingo.osrl.dk>.

1997-03-25  16:25  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>

	* sunrpc/Makefile: Comment gccwarn out.
	* sunrpc/auth_none.c: Fix prototypes and parameters for compiling
	with enabled warnings.
	* sunrpc/auth_unix.c: Likewise.
	* sunrpc/authuxprot.c: Likewise.
	* sunrpc/bindrsvprt.c: Likewise.
	* sunrpc/clnt_gen.c: Likewise.
	* sunrpc/clnt_perr.c: Likewise.
	* sunrpc/clnt_raw.c: Likewise.
	* sunrpc/clnt_simp.c: Likewise.
	* sunrpc/clnt_tcp.c: Likewise.
	* sunrpc/clnt_udp.c: Likewise.
	* sunrpc/get_myaddr.c: Likewise.
	* sunrpc/getrpcport.c: Likewise.
	* sunrpc/pm_getmaps.c: Likewise.
	* sunrpc/pm_getport.c: Likewise.
	* sunrpc/pmap_clnt.c: Likewise.
	* sunrpc/pmap_prot.c: Likewise.
	* sunrpc/pmap_prot2.c: Likewise.
	* sunrpc/pmap_rmt.c: Likewise.
	* sunrpc/rpc/auth.h: Likewise.
	* sunrpc/rpc/clnt.h: Likewise.
	* sunrpc/rpc/pmap_clnt.h: Likewise.
	* sunrpc/rpc/svc.h: Likewise.
	* sunrpc/rpc/svc_auth.h: Likewise.
	* sunrpc/rpc/types.h: Likewise.
	* sunrpc/rpc/xdr.h: Likewise.
	* sunrpc/rpc_clntout.c: Likewise.
	* sunrpc/rpc_cmsg.c: Likewise.
	* sunrpc/rpc_dtable.c: Likewise.
	* sunrpc/rpc_prot.c: Likewise.
	* sunrpc/svc.c: Likewise.
	* sunrpc/svc_auth.c: Likewise.
	* sunrpc/svc_authux.c: Likewise.
	* sunrpc/svc_raw.c: Likewise.
	* sunrpc/svc_run.c: Likewise.
	* sunrpc/svc_simple.c: Likewise.
	* sunrpc/svc_tcp.c: Likewise.
	* sunrpc/svc_udp.c: Likewise.
	* sunrpc/xdr.c: Likewise.
	* sunrpc/xdr_array.c: Likewise.
	* sunrpc/xdr_mem.c: Likewise.
	* sunrpc/xdr_rec.c: Likewise.
	* sunrpc/xdr_ref.c: Likewise.
	* sunrpc/xdr_stdio.c: Likewise.

1997-03-25 13:39  Ulrich Drepper  <drepper@cygnus.com>

	* math/libm-test.c (log2_test): Compile this function and call it.
	(exp2_test): Likewise, but check whether function really exists
	before testing.

	* math/Makefile (libm-calls): Add s_log2 and s_exp2.

1997-03-25 04:50  Ulrich Drepper  <drepper@cygnus.com>

	Implement exp2 function.
	* sysdeps/libm-i387/s_exp2.S: New file.
	* sysdeps/libm-i387/s_exp2f.S: New file.
	* sysdeps/libm-i387/s_exp2l.S: New file.

	Implement log2 function.
	* sysdeps/libm-i387/s_log2.S: New file.
	* sysdeps/libm-i387/s_log2f.S: New file.
	* sysdeps/libm-i387/s_log2l.S: New file.
	* sysdeps/libm-ieee754/s_log2.c: New file.
	* sysdeps/libm-ieee754/s_log2f.c: New file.
	* sysdeps/stub/s_log2.c: New file.  Stub version.
1997-03-27 01:59:53 +00:00
Ulrich Drepper 34b402e5a9 Update.
1997-03-24 19:58  Richard Henderson  <rth@tamu.edu>

	* stdlib/tst-strtol.c (tests): Correct 64-bit entry.

	* sysdeps/alpha/bsd-_setjmp.S: Alias _setjmp to __setjmp for
	change to tst-setjmp.c.

	* sysdeps/alpha/dl-machine.h: Mirror Roland's recent changes.
	* sysdeps/i386/dl-machine.h: Correct noexec_p comment.
	* sysdeps/sparc/dl-machine.h: Likewise.

	* sysdeps/libm-ieee754/s_remquo.c: Rename {hp,lp} -> {hy,ly}.
	Add missing qs variable.
	* sysdeps/libm-ieee754/s_remquof.c: Likewise.
1997-03-25 02:25:35 +00:00
Ulrich Drepper 4e1101a7da 1997-03-22 04:53 Ulrich Drepper <drepper@cygnus.com> 1997-03-25 01:57:43 +00:00
Ulrich Drepper 3e5f555752 Update.
1997-03-25 02:15  Ulrich Drepper  <drepper@cygnus.com>

	* gmon/gmon.c: Optimize a bit by using more sets of records to
	write in a single writev call.

	* math/math.h: Add definitions of macros __MATHCALLX and __MATHDECLX.
	* math/mathcalls.h: Use __MATHCALLX for fabs, infnan, copysign,
	nan, isnan, nextafter, trunc, __fpclassify and signbit to mark as
	`const'.
	Use __MATHDECLX for isinf and finite.

	* sysdeps/generic/setenv.c [_LIBC]: Define __clearenv and make
	clearenv a weak alias.

	Implement complex exponential function.
	* sysdeps/libm-ieee754/s_cexp.c: New file.
	* sysdeps/libm-ieee754/s_cexpf.c: New file.
	* sysdeps/libm-ieee754/s_cexpl.c: New file.

	* sysdeps/libm-ieee754/s_nan.c: Define function as __nan and make
	nan a weak alias.
	* sysdeps/libm-ieee754/s_nanf.c: Likewise for nanf.
	* sysdeps/libm-ieee754/s_nanl.c: Likewise for nanl.

	* sysdeps/unix/sysv/linux/iovec.h: Don't use kernel header because
	of type clashes.  Add all definitions here.

	* sysdeps/unix/sysv/linux/shmat.c: Likewise.  Correct types according
	to XPG4.2.
	* sysdeps/unix/sysv/linux/shmdt.c: Likewise.
	* sysdeps/unix/sysv/linux/msgrcv.c: Likewise.

	* sysvipc/sys/shm.h (shmat, shmdt): Correct types.

	* sysdeps/unix/sysv/linux/sys/kd.h: Define _LINUX_TYPES_H to avoid
	use of kernel types.

1997-03-25 00:00  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/netinet/ip.h (struct ip_timestamp):
	Correct typos.  Reported by a sun <asun@zoology.washington.edu>.

1997-03-20 21:58  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/libm-ieee754/s_asinhl.c: Fix sign of result.

1997-03-20 16:20  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/libm-ieee754/e_atan2l.c: Fix typo.

1997-03-20 14:23  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/__math.h (__logb, logb): Don't define.
	* sysdeps/m68k/fpu/s_logb.c: Removed.
	* sysdeps/m68k/fpu/s_logbf.c: Removed.
	* sysdeps/m68k/fpu/s_logbl.c: Removed.

	* sysdeps/m68k/fpu/__math.h (__ieee754_atan2, __ieee754_pow):
	Don't define here.
	* sysdeps/m68k/fpu/e_atan2.c: Rewritten.
	* sysdeps/m68k/fpu/e_pow.c: Likewise.
	* sysdeps/m68k/fpu/e_atan2f.c: Based on e_atan2.c.
	* sysdeps/m68k/fpu/e_atan2l.c: Likewise.
	* sysdeps/m68k/fpu/e_powf.c: Based on e_pow.c.
	* sysdeps/m68k/fpu/e_powl.c: Likewise.

	* sysdeps/m68k/fpu/s_log2.c: New file.
	* sysdeps/m68k/fpu/s_log2f.c: New file.
	* sysdeps/m68k/fpu/s_log2l.c: New file.
	* sysdeps/m68k/fpu/s_exp2.c: New file.
	* sysdeps/m68k/fpu/s_exp2f.c: New file.
	* sysdeps/m68k/fpu/s_exp2l.c: New file.

1997-03-20 14:46  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makeconfig (all): Make sure this is always the default goal.

1997-03-20 11:09  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* math/libm-test.c: Increase epsilon in many places.  Fix many
	typos.  Allow optinal argument also for short option.

1997-03-20 11:09  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* math/Makefile ($(objpfx)$(tests)): Link against libm.

1997-03-24 23:14  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-ieee754/s_fpclassifyl.c: Correct recognition of
	denormalized numbers.

	* sysdeps/i386/huge_val.h: Remove references to byte order macros.
	Don't include <endian.h>.

1997-03-19 15:18  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
	* sysdeps/m68k/huge_val.h: Remove references to byte order macros.
	Don't include <endian.h>.

1997-03-24 23:09  Ulrich Drepper  <drepper@cygnus.com>

	* inet/rcmd.c (iruserok): Use access instead of euidaccess.

1997-03-15 18:08  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* math/cmathcalls.h: Remove whitespace before function name in use
	of __MATHDECL macro, to make it compilable with a traditional
	preprocessor.

1997-03-24 15:31  Ulrich Drepper  <drepper@cygnus.com>

	* configure.in: Use AC_PROG_CC instead of AC_PROG_TOOL to find
	compiler.

1997-03-24 02:34  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-ieee754/s_finitel.c (__finitel): Shift return value
	by 31 positions to get 0/1 result.
	Patch by Joe Keane <jgk@jgk.org>.

1997-03-23 12:15  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* posix/getopt.c (__getopt_nonoption_flags): Make it extern
	to prevent from ld linking in getopt.o even if there is another
	incompatible one.

	* posix/getopt_init.c (__getopt_nonoption_flags): Remove extern.

1997-03-23 23:30   Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>

	* nis/nis_call.c (__do_niscall): Print message if cold start file
	does not exist.
	* nis/nis_file.c: Don't print error messages.
	* nis/nis_local_name.c (nis_local_host): Fix pointer errors.
	* nis/rpcsvc/ypclnt.h: Fix copyright and prototypes.
	* nis/rpcsvc/nis.h: Likewise.
	* nis/ypclnt.c: Fix prototypes.

1997-03-24 01:36  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-i387/e_scalb.S: Pop additional result before
	returning.
	* sysdeps/libm-i387/e_scalbf.S: Likewise.
	* sysdeps/libm-i387/e_scalbl.S: Likewise.
	Reported by Andreas Jaeger <aj@arthur.pfalz.de>.

	* elf/rtld.c (dl_main): Set main_map->l_opencount to 1 also if
	dynamic linker was called implicitly by the kernel.
	Reported by Eric Youngdale <eric@andante.jic.com>.

	* math/Makefile (CFLAGS-test-float.c, CFLAGS-test-double.c,
	CFLAGS-test-longdouble.c): New variables.  Set to -fno-inline to
	prevent clever optimizations which corrupt the tests.

1997-03-23 21:33  Andreas Jaeger  <aj@arthur.pfalz.de>

	* math/libm-test.c (scalb_test): New function.
	(sqrt_test): New function.
	(scalbn_test): New function.
	(ilogb_test): New function.
	(main): Added calls for new test functions.
	(ldexp_test): Add another test for ldexp(x,0).

1997-03-23 12:35  Andreas Jaeger  <aj@arthur.pfalz.de>

	* math/libm-test.c (remquo_test): Correct messages so that they
	match the tests.
	(copysign_test): Likewise.

1997-03-23 16:28  Ulrich Drepper  <drepper@cygnus.com>

	* stdio-common/Makefile (routines): Add printf_size.

	* stdio-common/printf.h: Add declarations for printf_size and
	printf_size_info.

	* stdio-common/printf-parse.h (__printf_arginfo_table): Correct
	declaration.
	(parse_one_spec): Test whether __printf_function_table is not NULL
	before using registered handlers and don't test
	__printf_arginfo_table.  Update nargs also when handler is
	registered.

	* stdio-common/vfprintf.c (vfprintf): Count number of specifiers
	processed in fast loop.

	* stdio-common/printf_size: New file.

1997-03-22 04:53  Ulgmon_out_readrich Drepper  <drepper@cygnus.com>
1997-03-25 01:45:04 +00:00
Ulrich Drepper bc9f6000f6 Update.
1997-03-23 02:11  Ulrich Drepper  <drepper@cygnus.com>

	* time/sys/time.h: Make values ITIMER_* also available as macros.

	* elf/dl-support.c (_dl_sysdep_read_whole_file): Don't call
	__fstat but instead __fxstat directly to avoid dependency on
	libc.a when inline failed.
	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_read_whole_file): Likewise.

	* math/Makefile (libm-routines): Add s_remquo.
	* sysdeps/libm-i387/s_remquo.S: New file.
	* sysdeps/libm-i387/s_remquof.S: New file.
	* sysdeps/libm-i387/s_remquol.S: New file.
	* sysdeps/libm-ieee754/s_remquo.c: New file.
	* sysdeps/libm-ieee754/s_remquof.c: New file.
	* sysdeps/libm-ieee754/s_remquol.c: New file.

	* math/libm-test.c (remquo_test): New function.

	* sysdeps/libm-ieee754/s_rintl.c: Handle implicit leading one
	correctly.

1997-03-22 14:06  Ulrich Drepper  <drepper@cygnus.com>

	* math/Makefile (libm-calls): Add s_nan.
	* sysdeps/libm-ieee754/s_nan.c: New file.  Implement `nan' function.
	* sysdeps/libm-ieee754/s_nanf.c: New file.  Implement `nanf' function.
	* sysdeps/libm-ieee754/s_nanl.c: New file.  Implement `nanl' function.

	* math/libm-test.c (basic_tests): Add tests for `nan' function.

	* math/libm-test.c (copysign_test): New function.
	(main): Call copysign_test.

1997-03-22 06:28  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-ieee754/s_nextafter.c: Return y if x == y.
	* sysdeps/libm-ieee754/s_nextafterf.c: Likewise.
	* sysdeps/libm-ieee754/s_nextafterl.c: Likewise.
	* sysdeps/libm-i387/s_nextafterl.c: Likewise.

	* math/libm-test.c (fdim_test, fmin_test, fmax_test, nextafter_test):
	New functions.  Test these functions.
	(main): Call above new functions.

1997-03-22 04:53  Ulrich Drepper  <drepper@cygnus.com>

	* Net release 2.0.2.

1997-03-22 04:37  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/termbits.h (OXTABS): Define as alias for
	XTABS.
	* sysdeps/unix/sysv/linux/alpha/termbits.h (OXTABS): Likewise.
	* termios/sys/ttydefaults.h: Partly revert patch by Andreas Schwab
	of Sun Dec 15 16:33:44 1996.
	Proposed by Thomas Bushnell <thomas@gnu.ai.mit.edu>.

1997-03-21 13:41  Roland McGrath  <roland@baalperazim.frob.com>

	* sysdeps/sparc/dl-machine.h (elf_machine_rel): Rewritten as for i386.
	Check here for non-SHN_UNDEF STB_LOCAL symbols don't do any lookup or
	consult their values.
	(elf_machine_lookup_noexec_p, elf_machine_lookup_noplt_p,
	ELF_MACHINE_RELOC_NOPLT): New macros.

	* elf/rtld.c (dl_main): Pass ELF_MACHINE_RELOC_NOPLT to
	_dl_lookup_symbol in place of DL_LOOKUP_NOPLT.
	* sysdeps/i386/dl-machine.h (ELF_MACHINE_RELOC_NOPLT): New macro.

	* sysdeps/i386/dl-machine.h (elf_machine_rel): Rewritten to do the
	symbol lookup before checking reloc type except for R_386_RELATIVE.
	(elf_machine_lookup_noexec_p, elf_machine_lookup_noplt_p): New macros.

	* elf/dl-reloc.c (RESOLVE): Remove STB_LOCAL check; let it be
	per-machine since it supposedly can't happen on i386.

	* elf/dl-lookup.c (do_lookup): Change arg FLAGS to RELOC_TYPE.  Use
	elf_machine_lookup_{noexec,noplt}_p macros on it.  Remove gratuitous
	indirection from REF arg; change callers.
	(_dl_lookup_symbol, _dl_lookup_versioned_symbol): Change arg name.
	(_dl_lookup_symbol_skip, _dl_lookup_versioned_symbol_skip): Remove
	FLAGS arg altogether.
	* elf/dlsym.c: Remove argument of FLAGS parameter.
	* elf/dlvsym.c: Likewise.
	* elf/link.h: Update decls.

	* Makefile (distribute): Add BUGS.
1997-03-23 01:54:07 +00:00
Ulrich Drepper 5ae9d168f6 Update.
1997-03-21 20:55  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/generic/machine-gmon.h: Update copyright.

	* sysdeps/i386/Makefile [$(subdir)=gmon] (sysdep_routines): Add
	i386-mcount.
	* sysdeps/i386/dl-machine.h [PROF] (_dl_runtime_resolve): Don't
	use regparam mechanism for call of `fixup' call.
	* sysdeps/i386/Dist: New file.
	* sysdeps/i386/i386-mcount.S: New file.  `mcount' entry point.
	* sysdeps/i386/machine-gmon.h: New file.  i386 specific version
	of gmon definitions.

1997-03-20 13:39  Andreas Jaeger  <aj@arthur.pfalz.de>

	* stdlib/tst-strtol.c (main): Save the value of errno since printf
	may modify it, use the saved errno everywhere.
	* stdlib/tst-strtod.c (main): Likewise.

1997-03-21 05:54  Ulrich Drepper  <drepper@cygnus.com>

	* posix/glob.c (glob): Fix completely broken handling of
	GLOB_BRACE and partly broken handling of GLOB_TILDE.
	Reported by Dennis Henriksen <opus@flamingo.osrl.dk>.

1997-03-20 20:22  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/readv.c: Don't emulate readv with small
	UIO_FASTIOV value by multiple readv calls since we need atomicity.
	* sysdeps/unix/sysv/linux/writev.c: Likewise.
	Reported by Matthis Urlichs.

1997-03-20 04:34  Roland McGrath  <roland@baalperazim.frob.com>

	* sysdeps/unix/sysv/linux/i386/sysdep.S (CALL_MCOUNT): Clear this
	macro so ENTRY(__syscall_error) doesn't insert a call to _mcount,
	which clobbers %eax.

	* Makeconfig [$(elf)=yes] (+prector, +postctor): New variables for
	crtbegin.o/crtend.o, using gcc to find them.
	(+link): Use them.

1997-03-20 00:06  Richard Henderson  <rth@tamu.edu>

	* gmon/sys/gmon.h: Revert the bulk of the 960930 changes, as they
	affect the alignment, and therefore the end padding of the structs.
	Reported by David Mosberger <davidm@azstarnet.com>.
	* gmon.c: Declare the variables with aligned tags to compensate.
	Use __writev instead of write for the I/O.

	* misc/sys/uio.h: Declare __writev and __readv.
	* sysdeps/posix/readv.c: Rename and alias readv to __readv.
	* sysdeps/posix/writev.c: Likewise for writev.
	* sysdeps/stub/readv.c: Likewise.
	* sysdeps/stub/writev.c: Likewise.
	* sysdeps/unix/syscalls.list: Likewise.
	* sysdeps/unix/sysv/linux/readv.c: Likewise.
	* sysdeps/unix/sysv/linux/writev.c: Likewise.

	* stdlib/testdiv.c: Exit with error status when we have an error.
	* sysdeps/alpha/div.S: Initialize `quotient' and `mask'.
	* sysdeps/alpha/ldiv.S: Likewise.

	* sysdeps/unix/sysv/linux/alpha/ioperm.c: Include ctype.h for isdigit.

1997-03-20 14:51  Ulrich Drepper  <drepper@cygnus.com>

	* nis/nis_file.c: Unify error handling.

1997-03-19 18:36  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>

	* nis/nis_file.c (writeColdStartFile): Fix typo.
	* nis/nis_free.c (nis_free_endpoints): Use unsigned int.
	* nis/nis_free.c (nis_free_servers): Likewise.
	* nis/rpcsvc/nislib.h: Likewise.

	* sunrpc/rpc/netdb.h: Add setrpcent and endrpcent prototypes.
1997-03-21 20:00:48 +00:00
Ulrich Drepper f752bfe379 Update.
1997-03-20 06:07  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/powerpc/dl-machine.h: Fix typo in last change.

	* sysdeps/unix/sparc/sysdep.h: Update copyright.

1997-03-19 15:13  Miguel de Icaza  <miguel@nuclecu.unam.mx>

	* linuxthreads/sysdeps/sparc/pt-machine (RELEASE): Fix.

	* stdlib/tst-strtol.c: Save the value of errno, printf may modify
	it.

	* sysdeps/sparc/DEFS.h [HAVE_ELF]: Use type @function in the FUNC
	macro on ELF systems.

	* sysdeps/sparc/configure.in: Fix.

	* sysdeps/sparc/dl-machine.h: Fix OPCODE_CALL.
	* sysdeps/sparc/setjmp.S: Fix my bugs.

	* sysdeps/unix/sysv/linux/sparc/Dist: Add start.c, fork.S, and pipe.S.
	* sysdeps/unix/sysv/linux/sparc/Makefile: Define asm-CPPFLAGS and
	as-FLAGS-.so.
	* sysdeps/unix/sysv/linux/sparc/syscalls.list: Add fork, pipe, and
	syscall.
	* sysdeps/unix/sysv/linux/sparc/fork.S: New file.
	* sysdeps/unix/sysv/linux/sparc/pipe.S: New file.
	* sysdeps/unix/sysv/linux/sparc/socket.S: Fix.
	* sysdeps/unix/sysv/linux/sparc/sysdep.h: Fix.

	* elf/dl-lookup.c (do_lookup): Return true if we found a weak
	symbol.
	(_dl_lookup_symbol): Test against the symbol being global not
	against the symbol being not weak (fixes important problem with
	the SPARC linker)

	* sysdeps/unix/sysv/linux/sparc/brk.c: Fix.

	* sysdeps/unix/sysv/linux/sparc/start.c: Startup code for
	Linux/SPARC (while I get my asmCPPFLAGS-so variable).

1997-03-20 01:49  Ulrich Drepper  <drepper@cygnus.com>
	* sysdeps/libm-ieee754/s_tanhl.c (__tanhl): Correct handling of -inf.
	* elf/dl-reloc.c (RESOLVE): Don't try to resolve local symbols.
1997-03-20 05:17:15 +00:00
Ulrich Drepper c57abfa735 Update.
1997-03-20 01:49  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-ieee754/s_tanhl.c (__tanhl): Correct handling of
	-inf.

	* Makeconfig: (rpath-link): Add math/ directory.
	(math-objdir): New variable.
	(link-extra-lib): Define to special version when
	$(common-objpfx)!=$(objpfx) to allow libraries outside
	$(common-objpfx) be linked to the application.

	* math/Makefile: Add rules to build and run test programs.
	* math/libm-test.c (_GNU_SOURCE): Define only if still undefined.
	(check_equal): Correct check for error.
	(ceil_test): Fix typo.
	(log_test): Fix typo.
	(floor_test): Fix typo.
	(pow_test): Fix typos.
	(log10_test): Allow slight incorrectness for `log10(e)'.
	(modf_test): New functions to test `modf' et.al.
	(hypot_test): Rewrite test completely.
	Patch partly by Andreas Jaeger.
	* math/test-double.h (__NO_MATH_INLINES): Define only if not
	already defined.
	* math/test-float.h: Likewise.
	* math/test-logdouble.h: Likewise.

	* setjmp/setjmp.h: Change references of ANSI C to ISO C.
	* setjmp/tst-setjmp.c: Correct and extend test suite.
	* sysdeps/i386/__longjmp.S: Update copyright.
	* sysdeps/i386/bsd-_setjmp.S: Correct fatal bug in jump to
	`__sigsetjmp' in PIC code.
	* sysdeps/i386/bsd-setjmp.S: Likewise.

	* sysdeps/libm-i387/e_pow.S: Correct recognition of mantissa
	overflow.
	* sysdeps/libm-i387/e_powf.S: Likewise.
	* sysdeps/libm-i387/s_expm1.S: Handle x == +-0 as a special
	case since expm1(-0) == -0.
	* sysdeps/libm-i387/s_expm1f.S: Likewise.
	* sysdeps/libm-i387/s_expm1l.S: Likewise.
	* sysdeps/libm-ieee754/s_modf.c: Optimize code by avoiding unneeded
	access to FP number.
	* sysdeps/libm-ieee754/s_modff.c: Likewise.
	* sysdeps/libm-ieee754/s_modfl.c: Correct former completely bogus
	code.  It never worked correctly.
	* sysdeps/libm-ieee754/s_tanh.c: Handle x == +-0 as a special
	case since tanh(-0) == -0.
	* sysdeps/libm-ieee754/s_tanhf.c: Likewise.

1997-03-19 21:13  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/strtod.c (STRTOL): Use wchar_t as type for `decimal' and
	`thousands' to support systems with sizeof(wchar_t) !=
	sizeof(wint_t).  Blargh.

	* sysdeps/unix/sysv/linux/socketbits.h: Remove definition of
	SOL_IP, SOL_TCP, SOL_UDP, and SOL_IPX as they are defined in
	appropriate headers.

	* sysdeps/unix/sysv/linux/writev.c: Don't use MAX_IOVEC.  Test for
	UIO_FASTIOV and set to 8 if not available.
	* sysdeps/unix/sysv/linux/readv.c: Likewise.
	Patch by HJ Lu.

	* sysdeps/unix/sysv/linux/xstat.c: Include <kernel_stat.h>, not
	"kernel_stat.h".
	* sysdeps/unix/sysv/linux/lxstat.c: Likewise.
	* sysdeps/unix/sysv/linux/fxstat.c: Likewise.
	Reported by fabsoft@fabsoft2.zarm.uni-bremen.de.
1997-03-20 02:20:57 +00:00
Ulrich Drepper e61abf8398 Update.
1997-03-19 01:40  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/sco3.2.4/Dist: New file.

	* sysdeps/unix/sysv/sysv4/Dist: Add __getpgid.c and __setpgid.c.

	* sysdeps/unix/bsd/Dist: Add bsdstat.h, setrgid.c, and setruid.c.

	* sysdeps/unix/sysv/Dist: Add direct.h.

	* sysdeps/unix/sysv/linux/Dist: Add netinet/tcp.h.

	* Make-dist ($(tardir).tar): Prefer writing temporary file to
	$TMPDIR is available.  The default is /tmp.

	* sysdeps/generic/ip.h: Move to...
	* sysdeps/generic/netinet/ip.h: ...here.

	* Makefile (tests): Quote $(CC) argument to isomac program.
	Patch by H.J. Lu <hjl@gnu.ai.mit.edu>.

	* sysdeps/i386/setjmp.S (__setjmp): Fix fatal bug where 0 argument
	is placed in wrong place on the stack.
	Reported by Marc Lehmann <mlehmann@hildesheim.sgh-net.de>.
	* sysdeps/tst-setjmp.c: Add new test for above problem.

	* sysdeps/libm-i387/e_pow.S: Compute PIC addres early.
	* sysdeps/libm-i387/e_powf.S: Likewise.
	* sysdeps/libm-i387/e_powl.S: Likewise.

1997-03-18 23:18  Ulrich Drepper  <drepper@cygnus.com>

	* time/offtime.c (__offtime): Change type of `yg' to long int.
	Reported by a sun <asun@zoology.washington.edu>.

1997-03-18 23:08  a sun  <asun@zoology.washington.edu>

	* sysdeps/unix/sysv/linux/net/if_ppp.h (PPP_VERSION): Define to
	2.2.0 to prevent version mismatch.

1997-03-17 19:26  Andreas Jaeger  <aj@arthur.pfalz.de>

	* stdio-common/printf_fphex.c (MIN): Only define MIN if not
	already defined.

1997-03-14 23:34  Geoff Keating  <geoffk@ozemail.com.au>

	* sysdeps/unix/sysv/linux/powerpc/termbits.h: Leave ioctl numbers
	in ioctls.h.

	* elf/rtld.c (_dl_start): Call elf_machine_runtime_setup when the
	loader first relocates itself.
	* sysdeps/powerpc/elf/start.c (__start1): Fix bug for static objects.
	* sysdeps/powerpc/dl-machine.h (elf_machine_rela): Fix bugs in
	jump slot relocation. Prefer relative branches (some PowerPC chips
	don't predict absolute branches).
	(elf_machine_runtime_setup): Simplify and correct expressions.
	(RTLD_START): Fix bug changing _dl_starting_up.
	* sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Added. Deal with
	strange Linux/PPC padding of initial stack.

1997-03-11 04:14  Geoff Keating  <geoffk@ozemail.com.au>

	* sysdeps/unix/sysv/linux/powerpc/termbits.h: Increase NCCS to 39,
	for future expansion.
	* sysdeps/unix/sysv/linux/powerpc/sys/kernel_termios.h: Added.
	* sysdeps/powerpc/dl-machine.h (elf_machine_rela): Explain why it
	can't have a switch statement.
	* sysdeps/powerpc/elf/start.c (__start1): Explain why it can't be
	static.

	* sysdeps/powerpc/elf/start.c (_start): Use .previous to avoid
	confusing gcc's idea of the current section.
	* sysdeps/powerpc/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE,
	RTLD_START): Likewise.

1997-03-08 09:10  Geoff Keating  <geoffk@ozemail.com.au>

	* sysdeps/powerpc/dl-machine.h (elf_machine_rela,
	elf_machine_runtime_setup): Flush data & instruction caches when
	necessary, for 603/604 support. Add better support for large PLTs.
	(elf_machine_rela): Remove relocations that wouldn't work if
	anyone ever used them. Use memcpy for copy reloc, it'll be safe.
	Never target branch relocations at a PLT entry.

	* sysdeps/powerpc/bsd-setjmp.S: Make jump to PLT entry if we are
	generating PIC.
	* sysdeps/powerpc/bsd-_setjmp.S: Likewise.
	* sysdeps/powerpc/setjmp.S: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/clone.S: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/socket.S: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/syscall.S: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/sysdep.h: Likewise.

	* sysdeps/powerpc/elf/start.c: Clean up.

	* sysdeps/powerpc/__longjmp.S: Return 'value' as result from
	setjmp call.

	* sysdeps/unix/sysv/linux/powerpc/statbuf.h: New file.

1997-03-09 12:36  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* Make-dist (srcs): Add $(test-srcs).
	* MakeTAGS (all-sources): Likewise.
	* Makerules (depfiles, common-mostlyclean): Likewise.
	* Rules (tests): Likewise.

1997-03-18 05:28  Roland McGrath  <roland@frob.com>

	* elf/dl-reloc.c (RESOLVE): Don't try to resolve ocal symbols.

1997-03-17 21:39  Philip Blundell  <phil@london.uk.eu.org>

	* nis/nss_nis/nis-service.c (_nss_nis_getservbyname_r): Allow
	protocol=NULL to match any protocol rather than returning an
	error.

1997-03-17 19:00  Philip Blundell  <phil@london.uk.eu.org>

	* nss/nss_files/files-service.c (servbyname): Match any protocol
	if proto==NULL.

1997-03-18 05:17  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/alpha/fcntlbits.h: Don't define O_NORW.
	* sysdeps/unix/sysv/linux/fcntlbits.h: Likewise.
	Proposed by Thomas Bushnell, n/BSG.

1997-03-18 07:53  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* sysdeps/generic/setenv.c (setenv): Don't copy name when we reuse
	the buffer for replacement.

1997-03-16 19:30  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/syscalls.list: Add sys_fstat,
	sys_lstat and sys_stat.

1997-03-17 12:43  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>

	Add NIS+ functions
	* shlib-versions: Add libnss_nisplus.
	* nis/Makefile: Add NIS+ source files.
	* nis/nis_call.c: New file.
	* nis/nis_clone.c: New file.
	* nis/nis_error.c: New file.
	* nis/nis_file.c: New file.
	* nis/nis_free.c: New file.
	* nis/nis_intern.c: New file.
	* nis/nis_intern.h: New file.
	* nis/nis_local_names.c: New file.
	* nis/nis_names.c: New file.
	* nis/nis_print.c: New file.
	* nis/nis_server.c: New file.
	* nis/nis_subr.c: New file.
	* nis/nis_table.c: New file.
	* nis/nis_xdr.c: New file.
	* nis/nss-nisplus.h: New file.
	* nis/nss_nisplus/nisplus-alias.c: New file.
	* nis/nss_nisplus/nisplus-ethers.c: New file.
	* nis/nss_nisplus/nisplus-grp.c: New file.
	* nis/nss_nisplus/nisplus-hosts.c: New file.
	* nis/nss_nisplus/nisplus-netgrp.c: New file.
	* nis/nss_nisplus/nisplus-network.c: New file.
	* nis/nss_nisplus/nisplus-proto.c: New file.
	* nis/nss_nisplus/nisplus-publickey.c: New file.
	* nis/nss_nisplus/nisplus-pwd.c: New file.
	* nis/nss_nisplus/nisplus-rpc.c: New file.
	* nis/nss_nisplus/nisplus-service.c: New file.
	* nis/nss_nisplus/nisplus-spwd.c: New file.
	* nis/rpcsvc/nis.h: New file.
	* nis/rpcsvc/nis.x: New file.
	* nis/rpcsvc/nis_object.x: New file.
	* nis/rpcsvc/nis_tags.h: New file.
	* nis/rpcsvc/nislib.h: New file.

1997-03-17 12:52  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* mach/devstream.c (output/write_some): Don't try and write more
	than IO_INBAND_MAX in a single call to device_write_inband.

	* sysdeps/libm-ieee754/w_atan2.c: Don't ignore exception if library
	* sysdeps/libm-ieee754/w_atan2f.c: Likewise.
	* sysdeps/libm-ieee754/w_atan2l.c: Likewise.
	* sysdeps/unix/sysv/linux/sys/mman.h (msync): Add description for
	* stdlib/atoll.c: Undefine atoll, not atol.
1997-03-19 05:47:56 +00:00
Ulrich Drepper 6465cfc9cf Update
* locales/POSIX: Updated version from maintainer.
1997-03-17 03:29:13 +00:00
Ulrich Drepper 81e9dad672 Update.
1997-03-17 04:00  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libmieee754/w_atan2.c: Don't ignore exception if library
	type is SVID.
	* sysdeps/libmieee754/w_atan2f.c: Likewise.
	* sysdeps/libmieee754/w_atan2l.c: Likewise.

	* sysdeps/unix/sysv/linux/sys/mman.h (msync): Add descrption for
	FLAGS parameter.

1997-03-16 20:28  Philip Blundell  <phil@london.uk.eu.org>

	* sysdeps/unix/sysv/linux/socketbits.h: Add more SOL_ values.
	Change msg_iovlen and msg_controllen (in struct msghdr) to
	`size_t' to keep in step with kernel.

	* manual/examples/dir2.c: New example for scandir.
	* math/test/float.c: New file.  Frontend for float tests.
	* math/test/double.c: New file.  Frontend for double tests.
	* math/test/longdouble.c: New file.  Frontend for long double  tests.
	* sysdeps/ieee754/huge_val.h: Remove definition of long double
	* 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_expm1.S: Change return value for -inf
	* sysdeps/libm-i387/s_expm1f.S: Likewise.
	* sysdeps/libm-i387/s_expm1l.S: Likewise.
	* sysdeps/libm-i387/s_isinfl.c: Return -1 for -inf.
	* sysdeps/libm-i387/s_logbl.S: Correct return value.  Discard first
	* sysdeps/libm-ieee754/w_powf.c: Likewise.
	* sysdeps/libm-ieee754/w_powl.c: Likewise.
	* sysdeps/unix/sysv/linux/alpha/statbuf.h: Likewise.
	* nss/nss_files/files-hosts.c: Likewise.
	Based on a patch by H.J. Lu <hjl@gnu.ai.mit.edu>.
	* nis/ypclnt.c (__yp_bind): Fix possible buffer overflow.
	* posix/unistd.h: Add prototype for __euidaccess.
	* sysdeps/stub/euidaccess.c: Likewise.
1997-03-17 03:04:18 +00:00
Ulrich Drepper 0d8733c4fc Update.
1997-03-16 18:43  Ulrich Drepper  <drepper@cygnus.com>

	* manual/filesys.texi: Add documentation for scandir and alphasort.

	* math/math.c (fpclassify): Correct stupid typos.

	* math/libm-test.c: New file.  libm test suite by Andreas Jaeger.

	* nss/nss_files/files-hosts.c: Add gethostbyname2 imlementation.

	* posix/Makefile (routines): Add bsd-getpgrp.
	* posix/bsd-getpgrp.c: New file.
	* posix/unistd.h [__FAVOR_BSD]: Define macro getpgrp which maps
	calls to __bsd_getpgrp.

	* sysdeps/generic/getpgrp.c: De-ANSI-declfy.

	* sysdeps/i386/huge_val.h: New file.  ix87 specific infinity values.
	* sysdeps/m68k/huge_val.h: New file.  m68k specific infinity values.
	* sysdeps/generic/huge_val.h: Remove definition of long double
	definition.  Make it the same as the double definition.

	* sysdeps/libm-i387/e_acos.S: Fix bug in FPU stack handling.
	* sysdeps/libm-i387/e_acosf.S: Likewise.
	* sysdeps/libm-i387/e_acosl.S: Likewise.
	* sysdeps/libm-i387/e_asin.S: Likewise.
	* sysdeps/libm-i387/e_asinf.S: Likewise.
	* sysdeps/libm-i387/e_asinl.S: Likewise.
	* sysdeps/libm-i387/e_exp.S: Likewise.
	* sysdeps/libm-i387/e_expf.S: Likewise.
	* sysdeps/libm-i387/e_expl.S: Likewise.
	* sysdeps/libm-i387/e_scalbn.S: Likewise.
	* sysdeps/libm-i387/e_scalbnf.S: Likewise.
	* sysdeps/libm-i387/e_scalbnl.S: Likewise.

	* sysdeps/libm-i387/e_log.S: Optimize branch code.
	* sysdeps/libm-i387/e_logf.S: Likewise.
	* sysdeps/libm-i387/e_logl.S: Likewise.
	* sysdeps/libm-i387/e_log10.S: Likewise.
	* sysdeps/libm-i387/e_log10f.S: Likewise.
	* sysdeps/libm-i387/e_log10l.S: Likewise.

	* sysdeps/libm-i387/e_pow.S: Major rewrite to handle special cases.
	* sysdeps/libm-i387/e_powf.S: Likewise.
	* sysdeps/libm-i387/e_powl.S: Likewise.

	* sysdeps/libm-i387/e_expm1.S: Change return value for -inf
	argument to -1.0.
	* sysdeps/libm-i387/e_expm1f.S: Likewise.
	* sysdeps/libm-i387/e_expm1l.S: Likewise.

	* sysdeps/libm-i387/e_isinfl.c: Return -1 for -inf.

	* sysdeps/libm-i387/e_logbl.S: Correct return value.  Discard first
	stack element after fxtract.

	* sysdeps/libm-ieee754/e_atan2l.c: New file.  `long double'
	implementation for atan2 function.

	* sysdeps/libm-ieee754/k_standard.c: Return NAN for libm not in
	_SVID_ mode when acos, asin, atan2, log, log10 is called with
	argument out of range.
	Add new error case for pow(+0,neg).

	* sysdeps/libm-ieee754/s_fpclassifyf.c: Correct recognition of
	NaN and +-inf.
	* sysdeps/libm-ieee754/s_fpclassifyl.c: Mask out explicit leading
	digit in stupid 80 bit formats.

	* sysdeps/libm-ieee754/s_isinf.c: Rewrite to return -1 for -inf.
	* sysdeps/libm-ieee754/s_isinff.c: Likewise.
	* sysdeps/libm-ieee754/s_isinfl.c: Likewise.

	* sysdeps/libm-ieee754/s_scalbnl.c (huge, tiny): Adapt values for
	long double type.

	* sysdeps/libm-ieee754/w_atan2.c: Do not raise exception expect when
	in SVID mode.
	* sysdeps/libm-ieee754/w_atan2f.c: Likewise.
	* sysdeps/libm-ieee754/w_atan2l.c: Likewise.

	* sysdeps/libm-ieee754/w_pow.c: Distinguish error cases for x is +0
	or -0.

	* sysdeps/posix/isfdtype.c: Add cast to prevent warning.

	* sysdeps/stub/fcntlbits.h: Update copyright.
	* sysdeps/unix/bsd/fcntlbits.h: Likewise.
	* sysdeps/unix/bsd/bsd4.4/fcntlbits.h: Likewise.
	* sysdeps/unix/bsd/sun/sunos4/fcntlbits.h: Likewise.
	* sysdeps/unix/bsd/ultrix4/fcntlbits.h: Likewise.
	* sysdeps/unix/common/fcntlbits.h: Likewise.
	* sysdeps/unix/sysv/fcntlbits.h: Likewise.  Define O_FSYNC as alias
	of O_SYNC.  Add BSD compatibility macros FAPPEND, FFSYNC, FNONBLOCK,
	and FNDELAY.
	* sysdeps/unix/sysv/irix4/fcntlbits.h: Likewise.

	* sysdeps/unix/readdir_r.c: Don't copy whole `struct dirent' record,
	only reclen bytes.

	* sysdeps/unix/sysv/linux/fcntlbits.h [__USE_GNU]: Add O_READ, O_WRITE
	and O_NORW.
	* sysdeps/unix/sysv/linux/alpha/fcntlbits.h: Likewise.

	* sysdeps/unix/sysv/linux/init-first.h: Add copyright.

	* sysdeps/unix/sysv/linux/fxstat.c: New file.  Rewrite kernel-level
	struct stat to user-level form.
	* sysdeps/unix/sysv/linux/lxstat: New file.
	* sysdeps/unix/sysv/linux/xstat: New file.
	* sysdeps/unix/sysv/linux/kernel_stat.h: Define struct stat used in
	kernel.
	* sysdeps/unix/sysv/linux/statbuf.h (struct stat): Change definition
	to use prescribed types for elements.
	(_STAT_VER): Change to value 3.
	* sysdeps/unix/sysv/linux/alph/statbuf.h: Likewise.
	* sysdeps/unix/sysv/linux/Dist: Add kernel_stat.h.
	* sysdeps/unix/sysv/linux/alpha/Dist: Likewise.

	* time/Makefile: Correct dependencies for test-tz.

1997-03-16 14:59  Philip Blundell  <phil@london.uk.eu.org>

	* resolv/netdb.h: Add prototypes for gai_strerror and getnameinfo
	(needed for IPv6 basic sockets API).

1997-03-16 15:02  a sun  <asun@zoology.washington.edu>

	* sysdeps/unix/sysv/linux/net/if_ppp.h: Don't use incompatible
	kernel header.
	* sysdeps/unix/sysv/linux/net/ppp_defs.h: Likewise.

1997-03-14 17:15  Ulrich Drepper  <drepper@cygnus.com>

	* db/hash/hash_bigkey.c (__big_delete): Don't call __free_ovflpage
	without testing for last_bfp to be NULL.
	Reported by fabsoft@fabserver1.zarm.uni-bremen.de.

1997-03-13 11:42  Jim Meyering  <meyering@asic.sc.ti.com>

	* time/mktime.c (TIME_T_MIN): Work around a bug in Cray C 5.0.3.0.

1997-03-14 04:00  Kurt Garloff  <garloff@kg1.ping.de>

	* sysdeps/unix/sysv/linux/fcntlbits.h (O_FSYNC): Make alias for O_SYNC.
	(FASYNC): Move to __USE_BSD section.  Create new macro O_ASYNC.

1997-03-14 02:50  Ulrich Drepper  <drepper@cygnus.com>

	* nis/nss_nis/nis-hosts.c (_nss_nis_gethostbyname2_r): New
	functions.  Compare result for correct address type.
	(_nss_nis_gethostbyname_r): Use _nss_nis_gethostbyname2_r.
	Reported by Mirko Streckenbach <mirko@marian.hil.de>.

1997-02-17 01:40  Zlatko Calusic  <zcalusic@srce.hr>

	* time/strptime.c (recursive): Return rp to caller.
	(strptime_internal): First check for long names, then abbreviated
	(month & weekday).

1997-03-10 19:44  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makeconfig: Remove useless definitions of ASFLAGS-%.
	* config.make.in (ASFLAGS-.so): Remove.
	* configure.in: Don't substitute ASFLAGS_SO.
	* sysdeps/sparc/configure.in: Remove file.
	* sysdeps/sparc/Makefile (ASFLAGS-.so): Define.

1997-03-11 17:00  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* time/strptime.c (strptime_internal) [case 'Y']: Always subtract
	1900 from year, regardless of century.

1997-03-12 05:43  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/strtod.c (_tens_in_limb) [BITS_PER_MP_LIMB > 32]: Make
	all numbers unsigned to make buggy gccs happy.
	Patch by Bryan W. Headley <bheadley@interaccess.com>.

	* sysdeps/unix/sysv/linux/netinet/ip.h: Add backward-compatibility
	definitions.  Patch by a sun <asun@zoology.washington.edu>.
	Pretty print header.

	* Makerules (build-shlib): Also create symlink if library is versioned.
	based on a patch by H.J. Lu <hjl@gnu.ai.mit.edu>.
	Remove special rule to libc.so symlink.

1997-03-11 20:16  Andreas Jaeger  <aj@arthur.pfalz.de>

	* manual/math.texi (Domain and Range Errors): Change descriptions
	according to recent changes for ISO C 9X.

1997-03-11 22:39  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-ieee754/k_standard.c (__kernel_standard): Correct
	return values for acos, asin, and atan2.
	Reported by Andreas Jaeger <aj@arthur.pfalz.de>.

1997-03-10 18:16 Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>

	* ypclnt.c (__yp_bind): Fix possible buffer overflow.

1997-03-10 18:06  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* dirent/alphasort.c (alphasort): Interpret arguments as pointers
	to pointers to directory entries so that alphasort really can be
	used as argument for scandir.

1997-03-09 23:33  Andreas Jaeger  <aj@arthur.pfalz.de>

	* string/strdup.c: Declare memcpy if !(_LIBC || STDC_HEADERS)
	instead of strcpy.

1997-03-10 03:34  Ulrich Drepper  <drepper@cygnus.com>

	* catgets/catgets.c (catopen): Always add NLSPATH to search path for
	catalogs, not only if the envvar NLSPATH is not available.
	Reported by Andries.Brouwer@cwi.nl.

1997-03-10 02:46  Ulrich Drepper  <drepper@cygnus.com>

	* Makeconfig (localtime-file): Don't define using installation
	directory.
	(inst_localtime-file): New variable.
	* time/Makefile (installed-localtime-file): Use inst_localtime-file.
	Reported by Edward Seidl <seidl@janed.com>.

1997-03-10 02:31  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* time/Makefile: Add source files to dependencies for test data.

1997-03-09 22:53  Thorsten Kukuk  <kukuk@weber.uni-paderborn.de>

	* nis/nss_nis/nis-ethers.c: Don't ignore return value of yp_all.
	* nis/nss_nis/nis-proto.c: Likewise.
	* nis/nss_nis/nis-rpc.c: Likewise.
	* nis/nss_nis/nis-service.c: Likewise.

1997-03-08 14:37  Miguel de Icaza  <miguel@nuclecu.unam.mx>

	* sysdeps/sparc/dl-machine.h (elf_machine_rela): Upgrade to
	versioning;  Added missing R_SPARC_WDISP30 handling.
	(RTLD_START): Implement it.

	* sysdeps/unix/sysv/linux/sparc/brk.c: Fix.

	* sysdeps/unix/sysv/linux/sparc/start.c: Startup code for
	Linux/SPARC.

1997-03-02 18:06  Miguel de Icaza  <miguel@nuclecu.unam.mx>

	* sysdeps/sparc/dl-machine.h (RTLD_START): Make arg as expected by
	the dynamic linker instead of having a new conditional define.
	Thanks to Richard Henderson for pointing this out.
	* elf/rtld.c: Remove usage of ELF_ADJUST_ARG.

1997-03-20 20:44  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/euidaccess.c: Define as __euidaccess and make
	euidaccess weak alias.

1997-03-07 10:30  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* stdio-common/printf_fphex.c (MIN): New macro.

	* sysdeps/generic/netinet/in.h: Include <sys/types.h>.

	* sysdeps/generic/sys/mman.h (msync): Mention third arg.

	* sysdeps/generic/netinet/in.h: Add definitions for IPv6 basic
	API.  (See change by Philip Blundell on Feb 16, 1997.)

1997-03-05 10:40  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* hurd/hurd.h (vpprintf): Include <stdarg.h>.  New declaration.

	* hurd/set-host.c (_hurd_set_host_config): Cast second arg to
	__file_name_split.

	* mach/mach_error.c (mach_error_string_int): Give full prototype.
	* mach/errstring.c (mach_error_string_int): Likewise.
	* mach/error_compat.c (__mach_error_map_compat): Likewise.
	* hurd/vpprintf.c (pwrite, vpprintf): Likewise.
	* stdio/vasprintf.c (vasprintf): Likewise.

	* mach/mach/mach_traps.h: Include <mach/kern_return.h>.

	* mach/spin-solid.c: Include <mach/mach_traps.h>.
	* mach/spin-solid.c (__spin_lock_solid): Provide arg to
	swtch_pri.

	* mach/mach_init.c: Include <mach/mig_support.h>.

	* mach/mach_error.h (mach_error_string, mach_error,
	mach_error_type): Always provide prototypes.

	* mach/mach/error.h (mach_error_fn_t): Comment out declaration; it
	appears to be entirely unused dead code.

	* stdio/stdio.h (freopen): Fix spelling error.

1997-03-02 13:38  Miles Bader  <miles@gnu.ai.mit.edu>

	* string/argz.h (__need_error_t): New macro, before including <errno.h>
	[!__const] (__const): New macro.
	[!__error_t_defined] (error_t): New typedef.

	* sysdeps/generic/socketbits.h: Add PF_FILE as synonym for PF_LOCAL
	* sysdeps/unix/sysv/linux/socketbits.h: Likewise.
1997-03-16 20:28:07 +00:00
Ulrich Drepper 1ed4222e57 Update.
* sysdeps/wordsize-32/inttypes.h: New file.
	* sysdeps/wordsize-64/inttypes.h: New file.
1997-03-09 06:23:06 +00:00
Ulrich Drepper f166d86530 Update.
1997-03-09 06:59  Ulrich Drepper  <drepper@cygnus.com>

	* Makeconfig: Add ASFLAGS-% flags for SPARC assembler which need
	-fPIC.
	* Makerules (compile.S): Use ASFLAGS-%.
	(COMPILE.S): Likewise.
	* config.make.in (ASFLAGS-.so): Define from ASFLAGS_SO.
	* configure.in: Substitute ASFLAGS_SO.
	* sysdeps/sparc/configure.in: New file.

	* posix/unitstd.h: Add prototype for __euidaccess.
	* sysdeps/posix/euidaccess.c: Define as __euidaccess and make
	euidaccess weak alias.
	* sysdeps/stubs/euidaccess.c: Likewise.
	* inet/rcmd.c: Use __ protected versions of non-standard functions.

	* locale/setlocale.c (setlocale): Don't set usage_count to
	MAX_USAGE_COUNT if it already has this value.

	* locale/programs/localedef.c: Don't use LOCALE_PATH to find
	binary locale files.  Use LOCALEDIR only.
	* locale/programs/locfile.c: When named file not found and not
	absolute use path in I18NPATH.

	* stdlib/Makefile (headers): Add inttypes.h.

	* sysdpes/generic/socketbits.h: Add PF_FILE as synonym for PF_LOCAL
	and AF_FILE as synonym for AF_LOCAL.
	* sysdpes/unix/sysv/linux/socketbits.h: Likewise.

	* time/Makefile: Rewrite rules for test to handle parallel builds.

1997-03-09 05:26  Ulrich Drepper  <drepper@cygnus.com>

	* manual/startup.texi (EXIT_FAILURE): Fix typo.  Patch by
	robbe@orcus.priv.at.

1997-03-09 05:10  Edward Seidl  <seidl@janed.com>

	* sysdeps/i386/elf/start.S (nofini): *Really* align stack to
	8-byte boundary.

1997-03-09 01:48  Ulrich Drepper  <drepper@cygnus.com>

	* elf/link.h: Define __need_NULL to get definition.  Include
	<features.h>.
	Patch by Andreas Jaeger  <aj@arthur.pfalz.de>.

1997-03-08 21:48  Thorsten Kukuk  <kukuk@tk.uni-paderborn.de>

	Rewrite NIS code to allow empty keys.
	* nis/nss_nis/nis-ethers.c: Rewritten.
	* nis/nss_nis/nis-proto.c: Rewritten.
	* nis/nss_nis/nis-publickey.c: Rewritten.
	* nis/nss_nis/nis-rpc.c: Rewritten.
	* nis/nss_nis/nis-service.c: Rewritten.

1997-03-08 16:02  Andreas Jaeger  <aj@arthur.pfalz.de>

	* time/scheck.c (scheck): Add extra const to second argument.

	* time/private.h: Correct prototypes to match definition.

1997-03-08 18:55  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/alpha/__math.h: Remove cabs inline definition.
	Reported by Philip Blundell <pjb27@cam.ac.uk>.

	Reported by Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>.
	Bug report by Andreas Jaeger <jaeger@informatik.uni-kl.de>.
1997-03-09 06:16:49 +00:00
Ulrich Drepper 4cca6b868f Update.
1997-03-08 05:30  Ulrich Drepper  <drepper@cygnus.com>

	* argp/Makefile (routines): Add argp-eexst.
	* argp/argp-ba.c (argp_program_bug_address): Make `const'.
	* argp/argp-eexst.c: New file.  Define exit status variable.
	* argp/argp-help.c (__argp_state_help): Use argp_err_exit_status
	variable instead of always exiting with value 1.
	* argp/argp-pv.c (argp_program_version): Make `const'.
	* argp/argp.h: Declare argp_err_exit_status.
	Patches by Miles Bader <miles@gnu.ai.mit.edu>.

	* locale/programs/localedef.c: Use argp_err_exit_status to
	terminate with correct value.

	* inet/rcmd.c (iruserok): Use euidaccess instead of half-hearted
	switching of UID before opening .rhosts.

	* libio/vsnprintf.c: Change implementation to follow ISO C 9X
	proposal.  The return value now is always the number of characters
	which would be written if enough space is available.
	* manual/stdio.texi: Update description for new behaviour.

	* locale/locale.h (__locale_t): Don't use __locale_t for struct
	name and pointer to struct since old gccs cannot keep the namespaces
	apart.  Rename struct to __locale_struct.
	* locale/duplocale.h: Likewise.
	* locale/newlocale.h: Likewise.

	* math/Makefile (headers): Add complex.h and cmathcalls.h.
	(routines): Remove w_cabs.  Add conj, cimag, creal, and cabs.
	* math/math.h: Undefine __MATHDECL_1, __MATHDECL, and __MATHCALL
	after use.
	(signgam): Move declaration to here from mathcalls.h.
	* math/mathcalls.h (cabs, __cabs_complex, signgam): Remove definition.
	Correct comment for fmin and fmax.
	Start implementing complex math function from ISO C 9X.
	* math/complex.h: New file.
	* math/cmathcalls.h: New file.
	* math/cabs.c: New file.
	* math/cabsf.c: New file.
	* math/cabsl.c: New file.
	* math/cimag.c: New file.
	* math/cimagf.c: New file.
	* math/cimagl.c: New file.
	* math/conj.c: New file.
	* math/conjf.c: New file.
	* math/conjl.c: New file.
	* math/creal.c: New file.
	* math/crealf.c: New file.
	* math/creall.c: New file.
	* sysdeps/libm-ieee754/w_cabs.c: Removed.
	* sysdeps/libm-ieee754/w_cabsf.c: Removed.
	* sysdeps/libm-ieee754/w_cabsl.c: Removed.

	* posix/regex.c: Merge with regex sources from Arnold Robbins'
	version in GNU awk.
	* posix/regex.h: Likewise.

	Add regex test suite by Tom Lord.
	* posix/Makefile (distribute): Add TESTS, TESTS2C.sed, and testcases.h.
	(tests): Add runtests.
	(before-compile): Add testcases.h.
	(testcases.h): New rule to generate header with tests.
	* posix/TESTS: New file.
	* posix/TESTS2C.sed.: New file.
	* posix/runtests.c: New file.
	* posix/testcases.h: New file.

	* sysdeps/unix/sysv/linux/poll.c: Test whether poll syscall is
	available and use fall-back implementation if not.

	* sysdeps/unix/sysv/linux/syscalls.list: Sort entries.

	* time/ialloc.c: Update from tzcode1997c.
	* time/private.h: Likewise.
	* time/scheck.c: Likewise.
	* time/tzselect.ksh: Likewise.
	* time/zdump.c: Likewise.
	* time/zic.c: Likewise.

	* time/tzfile.c: Pretty print.

1997-03-06 07:37  Geoff Keating  <geoffk@ozemail.com.au>

	Port to powerpc-*-linux-gnu.  Slightly tested, under MkLinux,
	on a 601.

	* sysdeps/powerpc/Implies: Added.
	* sysdeps/powerpc/__longjmp.S: Added.
	* sysdeps/powerpc/__math.h: Added.
	* sysdeps/powerpc/bsd-_setjmp.S: Added.
	* sysdeps/powerpc/bsd-setjmp.S: Added.
	* sysdeps/powerpc/dl-machine.h: Added.
	* sysdeps/powerpc/ffs.c: Added.
	* sysdeps/powerpc/fpu_control.h: Added.
	* sysdeps/powerpc/jmp_buf.h: Added.
	* sysdeps/powerpc/setjmp.S: Added.
	* sysdeps/powerpc/strlen.s: Added.
	* sysdeps/powerpc/elf/start.c: Added.
	* sysdeps/powerpc/fpu_control.h: Added.
	* sysdeps/powerpc/jmp_buf.h: Added.

	* sysdeps/unix/sysv/linux/powerpc/Dist: Added.
	* sysdeps/unix/sysv/linux/powerpc/_exit.S: Added.
	* sysdeps/unix/sysv/linux/powerpc/brk.c: Added.
	* sysdeps/unix/sysv/linux/powerpc/clone.S: Added.
	* sysdeps/unix/sysv/linux/powerpc/init-first.h: Added.
	* sysdeps/unix/sysv/linux/powerpc/ioctl-types.h: Added.
	* sysdeps/unix/sysv/linux/powerpc/profil.c: Added.
	* sysdeps/unix/sysv/linux/powerpc/sigreturn.S: Added.
	* sysdeps/unix/sysv/linux/powerpc/socket.S: Added.
	* sysdeps/unix/sysv/linux/powerpc/syscall.S: Added.
	* sysdeps/unix/sysv/linux/powerpc/syscalls.list: Added.
	* sysdeps/unix/sysv/linux/powerpc/sysdep.c: Added.
	* sysdeps/unix/sysv/linux/powerpc/sysdep.h: Added.
	* sysdeps/unix/sysv/linux/powerpc/termbits.h: Added.
	* sysdeps/unix/sysv/linux/powerpc/sys/syscall.h: Added.

1997-03-05 05:24  Geoff Keating  <geoffk@ozemail.com.au>

	* elf/dl-runtime.c (fixup): Add ELF_FIXUP_RETURNS_ADDRESS switch,
	because knowing the first instruction of a PowerPC PLT trampoline
	is not very helpful.

1997-03-04 08:04  Geoff Keating  <geoffk@ozemail.com.au>

	* elf/dl-load.c (ELF_PREFERRED_ADDRESS, ELF_PREFERRED_ADDRESS_DATA,
	ELF_FIXED_ADDRESS): Added. These are for dl-machine.h to indicate
	a preference as to where executables should be loaded.

1997-02-28 08:50  Geoff Keating  <geoffk@ozemail.com.au>

	* elf/elf.h: Add in all those PowerPC reloc types.

1997-02-24 07:12  Geoff Keating  <geoffk@ozemail.com.au>

	* stdio-common/vfscanf.c: Use __va_copy if available.

1997-03-06 13:50  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* malloc/malloc.c (mprotect) [_LIBC]: Define as __mprotect to
	clean up namespace.

1997-03-07 14:27  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-ieee754/s_fpclassify.c (__fpclassify): Don't use
	non-existing GET_WORDS macro, use EXTRACT_WORDS.
	Reported by Andres Schwab <schwab@issan.informatik.uni-dortmund.de>.

1997-03-07 05:27  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/i386/sigaction.c: The user- and
	kernel-level sigaction structure is different.  handle this
	correctly.
	Bug report by Andres Jaeger <jaeger@informatik.uni-kl.de>.

1997-03-06 05:55  David Engel  <david@sw.ods.com>

	* sysdeps/generic/dl-cache.c (_dl_load_cache_lookup): Also
	recognize cache entries with flag == 3.

1997-03-06 01:05  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/generic/netinet/in.h (INADDR_NONE): Cast to unsigned int.
	(INADDR_LOOPBACK): Likewise.
	* sysdeps/unix/sysv/linux/netinet/in.h: Likewise.

	* manual/socket.texi: Correct types of INADDR_* constants from
	unsigned long to unsigned.

1997-03-05 23:14  Ulrich Drepper  <drepper@cygnus.com>

	* time/antarctica: Update from tzdata1997c.
	* time/asia: Likewise.
	* time/zone.tab: Likewise.

1997-03-05 00:43  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure.in (libc_cv_asm_symver_directive,
	libc_cv_ld_version_script_option): Remove unknown instruction from
	assembler test file.

1997-03-04 19:14  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/__math.h: Update feature tests to use
	__USE_ISOC9X.
	[__USE_ISOC9X]: Define __log2 and __exp2 inlines.
	(fabs): Remove defininition, it is a gcc builtin.
	(sqrt, __sqrt): Remove definition, they have wrappers in libm.

1997-03-04 10:11  H.J. Lu  <hjl@lucon.org>

	* sunrpc/Makefile ($(objpfx)rpc-proto.c): Create subdir before
	generating file.

1997-03-05 03:59  Ulrich Drepper  <drepper@cygnus.com>

	* inet/rcmd.c (__ivaliduser): Don't use getline, but __getline
	instead to avoid namespace problems.
	Reported by David Mosberger-Tang <davidm@AZStarNet.COM>.

1997-03-03 19:01  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* login/utmp_file.c: Fix previous change.  Make portable by
	checking the _HAVE_UT_* feature macros.

	* libio/fileops.c (_IO_file_finish): Likewise.
1997-03-08 05:28:20 +00:00
Ulrich Drepper f5f52655ce Initial revision
1997-02-15 14:32 15:10 Andreas Jaeger  <aj@arthur.pfalz.de>
	* collate-test.c (main): change prototype definition to prevent
	warning.
1997-02-15 17:46  Ulrich Drepper  <drepper@cygnus.com>
	* locales/de_DE: Include real collation data.  It's similar to the
	en_DK information but the order of small and capital characters is
	exchanged.
	* collate-test.c: New file.  Test suite for strcoll function.
	* de_DE.in: Input file for collation test.
	* da_DK.in: Likewise.
	* xfrm-test.c: New file.  Test suite for strxfrm function.
1996-12-10 02:47  Ulrich Drepper  <drepper@cygnus.com>
	* All charmaps: Fix entries for <quotation-mark>.
1996-10-17 18:57  Ulrich Drepper  <drepper@cygnus.com>

	* Makefile (charmaps): Don't try to install CVS or RCS directory.
	(locales): Likewise.
	Reported by Matthias Urlichs.
1997-03-05 00:35:19 +00:00
Ulrich Drepper 377a515b4c update from main archive 970304
1997-03-04 04:31  Ulrich Drepper  <drepper@cygnus.com>

	* Makerules: Add rules to handle versioning.
	* config.h.in (DO_VERSIONING): New macro.
	* config.make.in (versioning): New variable.
	* configure.in: Add checks for .symver directive in gas and
	--version-script option to ld.  Define DO_VERSIONING and
	versioning if appropriate.

	* math/Makefile (routines): Add s_signbit, s_fpclassify, s_fmax,
	s_fmin, and s_fdim.
	* math/math.h: Define ISO C 9X constants, macros and functions.
	* math/mathcalls.h: Likewise.
	* sysdeps/libm-ieee754/s_fdim.c: New file.
	* sysdeps/libm-ieee754/s_fdimf.c: New file.
	* sysdeps/libm-ieee754/s_fdiml.c: New file.
	* sysdeps/libm-ieee754/s_fmax.c: New file.
	* sysdeps/libm-ieee754/s_fmaxf.c: New file.
	* sysdeps/libm-ieee754/s_fmaxl.c: New file.
	* sysdeps/libm-ieee754/s_fmin.c: New file.
	* sysdeps/libm-ieee754/s_fminf.c: New file.
	* sysdeps/libm-ieee754/s_fminl.c: New file.
	* sysdeps/libm-ieee754/s_fpclassify.c: New file.
	* sysdeps/libm-ieee754/s_fpclassifyf.c: New file.
	* sysdeps/libm-ieee754/s_fpclassifyl.c: New file.
	* sysdeps/libm-ieee754/s_signbit.c: New file.
	* sysdeps/libm-ieee754/s_signbitf.c: New file.
	* sysdeps/libm-ieee754/s_signbitl.c: New file.

	* stdio-common/printf_fphex.c: Correct printing of decimal point
	character.
	Simplify conversion of mantissa to string.
	* stdio-common/vfscanf.c: Handle %A format.
	Optimize termination of floating-point scanning.
	* stdio-common/tstscanf.c (main): Add new test to scanf to test
	scanning float values with given width.
	* stdlib/strtod.c: Add handling of floating-point numbers in
	hexadecimal notation.

	* stdlib/stdlib.h: Use __USE_ISOC9X feature macro for new long long
	functions.
	Pretty print #if directives.
	* string/string.h: Pretty print #if directives.

	* sysdeps/ieee754/dbl2mpn.c: Update copyright.
	* sysdeps/ieee754/ldbl2mpn.c: Likewise.
	* sysdeps/ieee754/mpn2dbl.c: Likewise.
	* sysdeps/ieee754/mpn2flt.c: Likewise.
	* sysdeps/ieee754/mpn2ldbl.c: Likewise.

	* sysdeps/unix/sysv/linux/poll.c: Implement poll function by
	falling back to select-based implementation if syscall isn't
	available.
	* sysdeps/unix/sysv/linux/syscalls.list: Add s_poll.

	* time/leapseconds: Update from tzdata1997b.
	* time/zic.c: Update from tzcode1997b.

1997-03-01 15:08  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* time/Makefile $(tzfiles:%=$(objpfx)z.%): Remove unneeded
	depedencies between installed $(tzlinks) and $(tzbases) files.

1997-03-01 14:27  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* math/math.h: Make compatible with traditional preprocessor;
	requires carefull placement of whitespace in macro arguments.
	Use __CONCAT instead of ##.
	Declare long double functions only if __STDC__ or __GNUC__.
	* math/mathcall.h: Avoid whitespace before argument of macro call
	that is used as function name.

	* sysdeps/m68k/fpu/__math.h: Use __CONCAT instead of ##.
	(__m81_u, __m81_inline): Depend on __LIBC_M81_MATH_INLINES instead
	of __NO_M81_MATH_INLINES.
	[!__LIBC_M81_MATH_INLINES]: Don't define internal functions
	starting with __ieee754.
	[!__NO_MATH_INLINES && __OPTIMIZE__]: Define user visible
	functions as inlines.
	(__m81_defun): Put __attribute__ between return type and function
	name.
	* math/math.h: Include <__math.h> also if __LIBC_M81_MATH_INLINES
	is defined.
	* sysdeps/m68k/fpu/e_acos.c: Define __LIBC_M81_MATH_INLINES
	instead of __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. De-ANSI-declify.
	* 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_modf.c: Likewise.
	* sysdeps/m68k/fpu/s_scalbn.c: Likewise.

1997-02-27 21:51  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile (tests): Cope with $PATH not including the current
	directory.

1997-02-27 18:04  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/Makefile ($(common-objpfx)mk-local_lim): Use
	$(common-objdir-compile).
	($(common-objpfx)make-ioctls): Likewise.
	(mk-local_lim-CFLAGS): Set this instead of local_lim-CFLAGS.
	($(common-objpfx)sys/param.h): Use $(make-target-directory).
	($(addprefix $(common-objpfx),$(sys/param.h-includes))):
	Likewise.
	($(common-objpfx)sys/syscall.h): Likewise.
	($(common-objpfx)local_lim.h): Let make deal with command
	failure.
	($(common-objpfx)param.h.dep): Use temporary file and update
	target atomically.
	($(common-objpfx)errnos): Avoid the Useless Use of cat Award.
	(include $(common-objpfx)param.h.dep): Ignore error.

	* sysdeps/posix/Makefile ($(common-objpfx)mk-stdiolim): Use
	$(common-objdir-compile).
	(mk-stdiolim-CFLAGS): Renamed from cded-objdir-includes, use
	$(shell pwd) instead of $$cwd.

	* sysdeps/generic/Makefile ($(common-objpfx)det_endian): Use
	$(common-objdir-compile).
	($(objpfx)make_siglist): Use $(native-compile).
	(make_siglist-CFLAGS): New variable.

	* Makerules (ALL_BUILD_CFLAGS): Renamed from BUILD_CFLAGS, leaving
	the old name for the user to pass additional flags to the host
	compiler.  Fix reference to config header.
	(native-compile, common-objdir-compile): Rewritten to make more
	generally usable.
	* sysdeps/unix/sysv/sysv4/solaris2/Makefile: Set ALL_BUILD_CFLAGS
	instead of BUILD_CFLAGS.

	* sysvips/sys/ipc.h: Warn if needed feature select macro are not
	defined.

1997-02-27 17:11  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sunrpc/Makefile ($(objpfx)rpc-proto.d, $(objpfx)rpc-proto.c):
	New rules to generate dependencies for the RPC service objects.

1997-02-27 16:26  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* argp/argp-parse.c (parser_finalize): Always set *END_INDEX if
	supplied.

1997-02-28 03:27  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/strtod.c (STRTOF): Make sure return value is large enough
	so that clearing second word is necessary.

	* sysdeps/unix/sysv/linux/netinet/in_systm.h: Don't use kernel
	header since it is wrong for 64 bit systems.
	Patch by a sun <asun@zoology.washington.edu>.

1997-02-27 10:34:11  Richard Henderson  <rth@tamu.edu>

	* sysdeps/unix/sysv/linux/alpha/brk.S: Support both the Linux/i386
	and OSF/1 style brk syscalls.  We may want to change Linux/Alpha
	for the benefit of running foreign binaries.

1997-03-01 20:21  Miles Bader  <miles@gnu.ai.mit.edu>
1997-02-25 19:42  Miles Bader  <miles@gnu.ai.mit.edu>
1997-03-04 05:53:28 +00:00
Miles Bader d1a2b102df (__need_error_t): New macro, before including <errno.h>. [!__const] (__const): New macro. [!__error_t_defined] (error_t): New typedef. 1997-03-02 18:41:32 +00:00
Miles Bader f6b38b9a39 Sat Mar 1 20:21:31 1997 Miles Bader <miles@gnu.ai.mit.edu>
* login/utmp_file.c (pututline_file): Correctly decide whether
	LAST_ENTRY matches DATA.
	Don't depend on ut_id ever being set.
	(proc_utmp_eq): New function.
	(internal_getut_r): Renamed from internal_getutid_r.
	Use proc_utmp_eq.

	* login/logout.c (logout): Change type of entry to be DEAD_PROCESS.

Tue Feb 25 19:42:50 1997  Miles Bader  <miles@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/fcntlbits.h (O_NORW): New macro.
1997-03-02 04:18:21 +00:00
Miles Bader ced858d05f (proc_utmp_eq): New function. (pututline_file): Correctly decide whether LAST_ENTRY matches DATA. Don't depend on ut_id ever being set. (internal_getut_r): Renamed from internal_getutid_r. Use proc_utmp_eq. 1997-03-02 04:15:21 +00:00
Ulrich Drepper ceb2d9aaa8 update from main archive 970226
1997-02-27 05:12  Ulrich Drepper  <drepper@cygnus.com>

	* manual/Makefile: Add rules to run and distribute xtract-typefun.
	* manual/xtract-typefun.awk: New file.  Script to extract function,
	variable, macro anchor to put into the `dir' file.
	* manual/signal.texi: Document difference between SysV and BSD
	signal(3) function and add documentation for sysv_signal.

	* sysdeps/libm-i387/e_acoshl.c: Clear upper half of word containing
	exponent before comparing.

1997-02-27 01:13  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/generic/netinet/in.h (htonl, htons, ntohl, ntohs): Change
	prototypes to use types with explicit width.  `unsigned long' is
	different on 64 bit systems.
	* sysdeps/unix/sysv/linux/netinet/in.h: Likewise.
	* sysdeps/generic/htonl.c: Likewise.
	* sysdeps/generic/htons.c: Likewise.
	* sysdeps/generic/ntohl.c: Likewise.
	* sysdeps/generic/ntohs.c: Likewise.
	Suggested by a sun <asun@zoology.washington.edu>.

1997-02-26 08:30  Andreas Jaeger  <aj@arthur.pfalz.de>

	* math/math.h: Include <__math.h> if __NO_MATH_INLINES is not
	defined and we want optimization.

1997-02-27 01:13  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/generic/netinet/in.h (htonl, htons, ntohl, ntohs): Change
	prototypes to use types with explicit width.  `unsigned long' is
	different on 64 bit systems.
	Suggested by a sun <asun@zoology.washington.edu>.

1997-02-02 19:53  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* misc/getpass.c: Don't disable canonical input.
	Reverted patch of Mon Jan  6 01:35:29 1997.

1996-12-14 22:07  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* libio/libioP.h (_IO_finish_t): Take additional parameter, to
	match the hidden __in_chrg parameter of the destructor.
	(_IO_FINISH): Pass zero for it.
	* libio/genops.c (_IO_default_finish): Add second parameter, which
	is ignored.
	* libio/memstream.c (_IO_mem_finish): Likewise.
	* libio/fileops.c (_IO_mem_finish): Likewise.
	* libio/strops.c (_IO_str_finish): Likewise.  All callers changed.

1997-02-27 00:23  H.J. Lu  <hjl@lucon.org>

	* time/Makefile: Avoid using patterns in dependencies.

1997-02-26 00:56  Miguel de Icaza  <miguel@nuclecu.unam.mx>

	* elf/rtld.c: Make _dl_start static.  Otherwise the linker on the
	SPARC will convert the call _dl_start into a call into the PLT.

	* elf/rtld.c (_dl_start): On the SPARC we need to adjust the value
	of arg to make it point to the actual values.

	* sysdeps/sparc/elf/DEFS.h: New ELF specific version.
	* sysdeps/sparc/Dist: Mention sysdeps/sparc/elf/DEFS.h.

	* sysdeps/sparc/bsd-_setjmp.S, sysdeps/sparc/bsd-setjmp.S: Make
	them PIC aware.

	* sysdeps/sparc/dl-machine.h (elf_machine_load_address):
	Implemented.
	(elf_machine_rela): Make it compile; fix existing relocation
	types; add unhandled relocation types.
	(ELF_ADJUST_ARG): Get pointer to arguments at program startup.
	(RTLD_START): Initial implementation, not yet finished.

	* sysdeps/sparc/elf/start.S: Fix.

	* sysdeps/sparc/fpu_control.h: Remove duplicate declaration of
	__setfpucw.

	* sysdeps/sparc/divrem.m4: Make compilable under Linux.
	* sysdeps/sparc/rem.S, sysdeps/sparc/sdiv.S, sysdeps/sparc/udiv.S,
	sysdeps/sparc/urem.S : Regenerated.

	* sysdeps/sparc/setjmp.S: Make it PIC aware.

	* sysdeps/unix/sysv/linux/sparc/__sigtrampoline.S: Define
	__ASSEMBLY__ before using kernel header.

	* sysdeps/unix/sysv/linux/sparc/Makefile: Use -mv8 flag to compile
	rtld.c.

	* sysdeps/unix/sysv/linux/sparc/brk.c: Implement.
	* sysdeps/unix/sysv/linux/sparc/profil-counter.h: Remove code
	to handle old signals.
	* sysdeps/unix/sysv/linux/sparc/sigaction.c: Implements sigaction
	for all Linux/SPARC kernels.
	* sysdeps/unix/sysv/linux/sparc/syscall.S: Add code to store
	errno using __errno_location.
	* sysdeps/unix/sysv/linux/sparc/sysdep.h: Add various handler
	macros for assembler sources.
	* sysdeps/unix/sysv/linux/sparc/errno.c: Define errno.

1997-02-25 16:02  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf/rtld.c (dl_main): Remove dead code that is never executed.
	Rename local variable l to main_map where it is used to point to
	the load_map for the executable.

1997-02-25 15:03  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf/dl-version.c (_dl_check_all_versions): Ignore libraries that
	could not be found.

1997-02-24 23:18  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules: Generate implicit object suffix rules automagically.
	(o-iterator): Move before first use.

	* Makeconfig (all-object-suffixes): Add .bo suffix.

1997-02-25 15:11  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-i387/e_acoshf.S (__ieee754_acoshf): Test correct
	word on stack for overflow.

	C++.  Use __exception instead.
1997-02-27 06:01:16 +00:00
Miles Bader 867a8743a4 (O_NORW): New macro. 1997-02-26 00:43:47 +00:00
Ulrich Drepper 2f6d1f1be9 update from main archive 970225
1997-02-24 23:05  Wolfram Gloger  <wmglo@dent.med.uni-muenchen.de>

	* malloc/malloc.c (malloc_get_state): New function.
	Saves global malloc state to an opaque data structure which
	is dynamically allocated in the heap.
	* malloc/malloc.c (malloc_set_state): New function.
	Restore previously obtained state.
	* malloc/malloc.h: Add declaration of malloc_get_state()
	and malloc_set_state().

1997-02-24 23:27  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-ieee754/s_cbrtl.c: Shift B1_EXP value to right
	position.

1997-02-24 17:38  Ulrich Drepper  <drepper@cygnus.com>

	* misc/error.c: Make error and error_at_line weak aliases of
	__error and __error_at_line respectively.
	Suggested by David Mosberger-Tang <davidm@AZStarNet.COM>.

	* sysdeps/unix/sysv/linux/i386/socket.S: Update copyright.

1997-02-22 11:30  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf/ldd.bash.in: Run the program directly, not as argument
	to the dynamic linker, if it contains an interpreter segment.
	* elf/ldd.sh.in: Likewise.

	* elf/rtld.c (dl_main): In verify mode check whether the dynamic
	object contains an interpreter segment and exit with 2 if not.

1997-02-23 01:23  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile (distribute): Remove nsswitch.h, netgroup.h, mcheck.h
	and xlocale.h.  Make-dist adds them automagically.

1997-02-22 12:25  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* locale/C-time.c (_nl_C_LC_TIME): Add missing entry for
	time-era-num-entries.

1997-02-06 13:49  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* rellns-sh: No need to check for existance of first parameter.

1997-02-24 15:20  Jonathan T. Agnew  <jtagnew@amherst.edu>

	* glibcbug.in: Don't mention destination on MAIL_AGENT command line
	to avoid duplicate mail.

1997-02-24 03:51  Ulrich Drepper  <drepper@cygnus.com>

	* Makefile (distribute): Add isomac.c.
	(tests): Run isomac test.

	* features.h (__USE_ISOC9X): New macro.

	* catgets/catgets.c: Don't use global variable `optind'.  Instead
	use result computed by argp_parse.
	* db/makedb: Likewise.
	* locale/programs/locale.c: Likewise.
	* locale/programs/localedef.c: Likewise.

	* libio/stdio.h: Rewrite.  Make it more readable and add comments.

	* libio/clearerr.c: Remove clearerr_locked alias.
	* libio/feof.c: Remove feof_locked alias.
	* libio/ferror.c: Remove feof_locked alias.
	* libio/fileno.c: Remove fileno_locked alias.
	* libio/fputc.c: Remove fputc_locked alias.
	* libio/getc.c: Remove getc_locked alias.
	* libio/getchar.c: Remove getchar_locked alias.
	* libio/iofflush.c: Remove fflush_locked alias.
	* libio/putc.c: Remove putc_locked alias.
	* libio/putc.c: Remove putchar_locked alias.

	* stdio-common/printf_fp.c: When number is inifinity print INF
	or inf depending on case of specifier.  Same for NaN where NAN
	or nan is printed.  Specified in ISO C 9X.

	* misc/sys/cdefs.h (__restrict): Define to empty string for now.
	* stdio/stdio.h: Add __restrict to prototypes where necessary.
	* libio/stdio.h: Likewise.
	* stdlib/stdlib.h: Likewise.
	* string/string.h: Likewise.
	* time/time.h: Likewise.
	* wcsmbs/wchar.h: Likewise.

	* stdlib/strtod.c: Change to recognize INF, INFINITY, NAN, and
	NAN(...).

	* sysdeps/ieee754/huge_val.h: Define HUGE_VALF and HUGE_VALL instead
	of HUGE_VALf and HUGE_VALL.
	* stdlib/strtof.c (FLOAT_HUGE_VAL): Use standard name HUGE_VALF
	instead of HUGE_VALf.
	* wcsmbs/wcstof.c: Likewise.
	* stdlib/strtold.c (FLOAT_HUGE_VAL): Use standard name HUGE_VALL
	instead of HUGE_VALl.
	* wcsmbs/wcstold.c: Likewise.

	* sysdeps/posix/gai_strerror.c: Use size_t for counter variable to
	avoid warning.

	* wcsmbs/Makefile (routines): Add wcscasecmp and wcsncase.
	* wcsmbs/wchar.h: Add prototypes for wcscasecmp and wcsncase.
	* wcsmbs/wcscasecmp.c: New file.
	* wcsmbs/wcsncase.c: New file.

	* stdlib/strtol.c: Define wide character quad word functions as
	wcstoll and wcstoull and normal versions as strtoll and strtoull.
	* wcsmbs/wchar.h: Add prototypes for wcstoll and wcstoull.
	* wcsmbs/wcstoq: Renamed to wcstoll.c.
	* wcsmbs/wcstouq: Renamed to wcstoull.c.
	* wcsmbs/wcstoll.c: Renamed from wcstoq.c.  Make wcstoq a weak
	alias of wcstoll.
	* wcsmbs/wcstoull.c: Renamed from wcstouq.c.  Make wcstouq a weak
	alias of wcstoull.
	* wcsmbs/Makefile (routines): Replace wcstoq and wcstouq by
	wcstoll and wcstoull respectively.
	* stdlib/strtoq.c: Rename to strtoll.c.
	* stdlib/strtouq.c: Rename to strtoull.c.
	* stdlib/strtoll.c: Renamed from strtoq.c.  Make strtoq a weak
	alias of strtoll.
	* stdlib/strtoll.c: Renamed from strtouq.c.  Make strtouq a weak
	alias of strtoull.
	* stdlib/Makefile (routines): Replace strtoq and strtouq by
	strtoll and strtoull respectively.
	* stdio-common/vfscanf.c: Don't use __strtoq_internal and
	__strtouq_internal but instead __strtoll_internal and
	__strtoull_internal respectively.
	* stdlib/stdlib.h (strtoq): Use __internal_strtoll in inline version.
	(strtouq): Similar with __internal_strtoull.
	* wcsmbs/wchar.h (wcstoq): Use __internal_wcstoll in inline version.
	(wcstouq): Similar with __internal_wcstoull.

1997-02-23 04:38  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/strtol.c (STRTOL): It is not illegal to parse a minus
	sign in the strtouXX functions.  The results gets simply negated.
	* stdio-common/tstscanf.c: Add testcase for above case.
	* stdlib/tst-strtol.c: Correct tests.

	* manual/stdio-fp.c: New file.  Generate output for example program
	in stdio.texi.

	* stdio-common/Makefile (routines): Add printf_fphex.
	* stdio-common/vfprintf.c: Add handling of %a and %A specifier.
	* stdio-common/printf_fphex.c: New file.  Implement %a and %A
	specifier.

1997-02-22 03:01  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/timebits.h (CLK_TCK): Don't defined if
	__STRICT_ANSI__.

	* math/math.h: Prevent definition of struct exception when using
	C++.

1997-02-22 01:45  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/syscalls.list: Dup takes only one argument.
	Reported by Greg McGary.

1997-02-21 00:22  Miles Bader  <miles@gnu.ai.mit.edu>
1997-02-20 01:28  Miles Bader  <miles@gnu.ai.mit.edu>
1997-02-19 13:56  Miles Bader  <miles@gnu.ai.mit.edu>
1997-02-18 15:39  Miles Bader  <miles@gnu.ai.mit.edu>
1997-02-17 10:58  Miles Bader  <miles@gnu.ai.mit.edu>
1997-02-15 10:23  Miles Bader  <miles@gnu.ai.mit.edu>
	(mutex_lock, mutex_unlock, mutex_trylock): Defined in terms of
	__mutex_*.
	(mutex_t): Type removed & replaced by new macro.
	(tsd_key_t): Typedef to int instead of pthread_key_t.
	(tsd_key_create, tsd_setspecific, tsd_getspecific): New macros.
	(__pthread_initialize): New macro, work around assumption of pthreads.

	* sysdeps/mach/hurd/i386/init-first.c (__libc_argv, __libc_argc):
	__hurd_sigthread_stack_end, __hurd_sigthread_stack_variables,
	__hurd_threadvar_max, __hurd_threadvar_stack_offset,
	__hurd_threadvar_stack_mask): Variables removed.
1997-02-14 14:07  Miles Bader  <miles@gnu.ai.mit.edu>
	* hurd/hurd.h (_hurd_pids_changed_stamp, _hurd_pids_changed_sync):
1997-02-24 17:06  Geoffrey Keating  <geoffk@discus.anu.edu.au>

	* sysdeps/unix/sysv/linux/accept.S (NARGS): Describe number of
	arguments taken, for sysdeps/unix/sysv/linux/powerpc/socket.S.
	* sysdeps/unix/sysv/linux/bind.S: Likewise.
	* sysdeps/unix/sysv/linux/connect.S: Likewise.
	* sysdeps/unix/sysv/linux/getpeername.S: Likewise.
	* sysdeps/unix/sysv/linux/getsockname.S: Likewise.
	* sysdeps/unix/sysv/linux/getsockopt.S: Likewise.
	* sysdeps/unix/sysv/linux/listen.S: Likewise.
	* sysdeps/unix/sysv/linux/recv.S: Likewise.
	* sysdeps/unix/sysv/linux/recvfrom.S: Likewise.
	* sysdeps/unix/sysv/linux/recvmsg.S: Likewise.
	* sysdeps/unix/sysv/linux/send.S: Likewise.
	* sysdeps/unix/sysv/linux/sendmsg.S: Likewise.
	* sysdeps/unix/sysv/linux/sendto.S: Likewise.
	* sysdeps/unix/sysv/linux/setsockopt.S: Likewise.
	* sysdeps/unix/sysv/linux/shutdown.S: Likewise.
	* sysdeps/unix/sysv/linux/socketpair.S: Likewise.

1997-02-15 04:51  Ulrich Drepper  <drepper@cygnus.com>
1997-02-25 05:18:05 +00:00
Miles Bader 6bac11d993 (__libc_argv, __libc_argc): Make extern. (__hurd_threadvar_max, __hurd_threadvar_stack_offset, __hurd_threadvar_stack_mask): New variables. 1997-02-23 22:09:31 +00:00
Miles Bader 4dea6fa212 Fri Feb 21 00:22:28 1997 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/readlink.c (__readlink): Use io_read rather
	than file_get_translator.

	* sysdeps/mach/hurd/defs.c, sysdeps/stub/defs.c, sysdeps/posix/defs.c
	(_cleanup): Use __fcloseall instead of fclose with a NULL stream.

Thu Feb 20 01:28:39 1997  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/fchroot.c (fchroot): Reparent DIR to make it a real root.
	* sysdeps/mach/hurd/chroot.c (chroot): Likewise.

Wed Feb 19 13:56:04 1997  Miles Bader  <miles@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/accept.c (accept): Don't segv if ADDR_LEN == 0
	but ADDR also == 0.

	* hurd/report-wait.c (_hurd_itimer_thread): Make a weak alias for
	now instead of a weak extern, as some old programs expect it to be
	defined by ld.so.

Tue Feb 18 15:39:08 1997  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/hurdfault.c (_hurdsig_fault_preempter): New weak alias.

	* sysdeps/mach/hurd/dl-sysdep.c (__hurd_threadvar_max,
	__hurd_threadvar_stack_offset): Restore initialized versions, so
	startup works correctly.

	* malloc/thread-m.h (mutex_trylock): Invert sense of return value.

Mon Feb 17 10:58:14 1997  Miles Bader  <miles@gnu.ai.mit.edu>

	* malloc/thread-m.h (mutex_trylock): Define to be __mutex_trylock,
	not __mutex_try_lock.
	(tsd_setspecific): Cast DATA to (unsigned long) before storing.
	(tsd_getspecific): Case variable to (void *) before returning.

	* hurd/hurdinit.c (__libc_argv): Remove extern.
	(__libc_argc): New variable.

Sat Feb 15 10:23:32 1997  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/hurd/threadvar.h (enum __hurd_threadvar_index): Add
	_HURD_THREADVAR_MALLOC.
	* malloc/thread-m.h
	[_LIBC && !PTHREAD_MUTEX_INITIALIZER && MUTEX_INITIALIZER]
	(__x_mutex_lock, __x_mutex_unlock): Functions removed.
	(mutex_lock, mutex_unlock): Defined in terms of __mutex_*.
	(tsd_key_create, tsd_setspecific, tsd_setspecific): Change to
	hurd-specific definitions, using __hurd_threadvar_location.
	(tsd_keys_alloced): New static variable.
	<hurd/threadvar.h>: New include.
	
	* hurd/report-wait.c (_hurd_itimer_thread): Make a weak extern.
	(_S_msg_report_wait): Check to see if _hurd_itimer_thread is
	defined before using it.

	* sysdeps/mach/hurd/i386/init-first.c (__libc_argv, __libc_argc): 
	Make extern.
	* hurd/hurdinit.c (__libc_argv): Make extern.

	* hurd/getdport.c (_default_hurd_getdport_fn): New variable.
	(_hurd_getdport_fn): Now a weak alias to _default_hurd_getdport_fn.

	* sysdeps/mach/hurd/i386/init-first.c (__hurd_threadvar_max,
	__hurd_threadvar_stack_offset,
	__hurd_threadvar_stack_mask): New variables.
	* hurd/hurdsig.c (__hurd_sigthread_stack_base,
	__hurd_sigthread_stack_end, __hurd_sigthread_stack_variables):
	New variables (moved here from hurdstartup.c).
	* hurd/hurdstartup.c (__hurd_sigthread_stack_base,
	__hurd_sigthread_stack_end, __hurd_sigthread_stack_variables):
	Variables removed (moved to hurdsig.c).
	(__hurd_threadvar_max, __hurd_threadvar_stack_offset,
	__hurd_threadvar_stack_mask): Variables removed.
	* sysdeps/mach/hurd/dl-sysdep.c (__hurd_sigthread_stack_base,
 	__hurd_sigthread_stack_end, __hurd_sigthread_stack_variables,
 	__hurd_threadvar_max, __hurd_threadvar_stack_offset,
 	__hurd_threadvar_stack_mask): Variables removed.

Fri Feb 14 14:07:19 1997  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/hurd.h (_hurd_pids_changed_stamp, _hurd_pids_changed_sync): 
	Declare extern.

	* malloc/thread-m.h
	[_LIBC && !PTHREAD_MUTEX_INITIALIZER && MUTEX_INITIALIZER]
	(mutex_t): Type removed.
	(mutex_t): New macro.
	(mutex_trylock): New macro.
	(__x_mutex_lock, __x_mutex_unlock): New functions.
	(mutex_lock, mutex_unlock): New macros, redefining the behavior of
	the cthread definitions.
	(tsd_key_t): Typedef to cthread_key_t instead of pthread_key_t.
	(tsd_key_create, tsd_setspecific, tsd_getspecific): New macros.
	(mutex_lock, mutex_unlock, mutex_trylock, mutex_init): Macros removed.
	(__pthread_initialize): New macro, work around assumption of pthreads.

1997-02-11 05:27  Ulrich Drepper  <drepper@cygnus.com>

	* locale/weight.h (collate_rules): It's an u_int32_t array.
	(get_weight): Compute initial SLOT value correctly.
1997-02-23 22:08:32 +00:00
881 changed files with 139800 additions and 11488 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.d *.o *.so *.po *.go *.bo stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+62
View File
@@ -0,0 +1,62 @@
List of known bugs (certainly very incomplete)
----------------------------------------------
Time-stamp: <1997-03-22T04:31:41+0100 drepper>
This following list contains those bugs which I'm aware of. Please
make sure that bugs you report are not listed here. If you can fix one
of these bugs/limitations I'll certainly be glad to receive a patch.
Another source of information about bugs is the problem data base of the
GNU project. There is an easy to use WWW interface is available at
http://pogo.gnu.ai.mit.edu:8080/cgi-bin/wwwgnats.pl
I would appreciate it very much if you could verify the problem was not
reported before by looking though the database. To make the information
in this data as useful as possible please report bugs always using the
`glibcbug' shell script which gets installed with GNU libc.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Severity: [ *] to [***]
[ **] For GNU libc on Linux, there is still no solution for the UTMP
problem.
[Among others: PR libc/39]
[ **] There are problems with signal handling when using LinuxThreads.
[ **] The `cbrtl' function is inaccurate. The algorithm used for `double'
and `float' is not usable for `long double'.
[ **] Not really a bug, but it could lead to such:
The RPC code is ugly ugly ugly. It's more or less verbatim taken
from Sun's code and therefore mostly lacks complete prototypes and
(more important) the use of `const'. It *definitely* needs to be
cleaned.
[ *] The precision of the `sinhl' and/or `asinhl' function do not seem
to be the best.
[ *] The syslog function should print to the console if the LOG_CONS
flag was given.
[PR libc/72]
[ *] On Linux, the <linux/posix_types.h> is not clean enough to satisfy
the C++ namespace rules. Declaring `struct fd_set' also makes
`fd_set' available in the global namespace which conflicts with
the definition of `fd_set' in glibc.
[PR libc/79]
[ *] On Linux, there should be a way to prevent defining the symbol
NGROUPS_MAX in the <linux/limits.h> header file. In glibc it
is defined in <posix1_lim.h> which must not make the other
symbols in <linux/limits.h> available.
[PR libc/140]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ulrich Drepper
drepper@cygnus.com
+2121 -2
View File
File diff suppressed because it is too large Load Diff
+18 -5
View File
@@ -550,7 +550,8 @@ by
in the above example specs file to make it work for other systems.
Future versions of GCC will automatically provide the correct specs.
Version 2.7.2.2 does and future versions of GCC will automatically
provide the correct specs.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
@@ -597,10 +598,22 @@ invalid. I.e., an emulated FPU is for the libc as good as a real one.
[Q20] ``How can I compile gcc 2.7.2.1 from the gcc source code using
glibc 2.x?
[A20] {HJL} There is no support in gcc for glibc 2.0 before gcc 2.8. It
is very tricky to compile gcc 2.7.2.1 using glibc 2.x. You have to
build it manually or with one pass only. You also have to use the
specs file in this FAQ while compiling gcc.
[A20] {AJ} There's only support for glibc 2.0 in gcc 2.7.2.2 or later.
For 2.7.2.2 you should use the following patch and configure for
e.g. i486-linux.
-----------------------------------------------------------------------
--- configure Tue Feb 11 15:57:17 1997
+++ configure Wed Feb 12 23:09:29 1997
@@ -1021,7 +1021,7 @@
gnu_ld=yes
# GNU libc version 2 does not supply these;
# we want them from GCC.
- extra_parts="crtbegin.o crtend.o"
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
;;
i[3456]86-go32-msdos | i[3456]86-*-go32)
cpu_type=i386
-----------------------------------------------------------------------
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
+25 -5
View File
@@ -76,6 +76,23 @@ you run `configure':
static library is compiled with no optimization and full debugging
information, and installed as `-lc_g'.
`--enable-bounded'
`--disable-bounded'
Enable or disable building of the C library with support for bounded
pointers. To do this one need the enhanced version of the GNU CC
with can generate code for bounded pointers. This version of the
C library is necessary to run code which is also compiled using the
enhanced gcc for debugging purposes.
There are two more options:
`--with-gmp'
`--with-gettext'
These options are not of much use for the normal installer of the
GNU libc. Only maintainers need this to get automatic updates of
the files from these packages in the GNU C library source tree.
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.
@@ -182,6 +199,9 @@ following patterns:
iX86-ANYTHING-gnu
iX86-ANYTHING-linux
m68k-ANYTHING-linux
mips-ANYTHING-linux
sparc-ANYTHING-linux
powerpc-ANYTHING-linux
Former versions of this library used to support the following
configurations but the current status is unknown:
@@ -208,7 +228,7 @@ configurations but the current status is unknown:
sparc-sun-solaris2.N
sparc-sun-sunos4.N
Each case of `iX86' can be `i386', `i486', `i586', or `i686'.. All
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.
@@ -652,10 +672,10 @@ level of the `sysdeps' hierarchy. This directory contains
subdirectories (and subdirectory trees) for various Unix variants.
The functions which are system calls in most Unix systems are
implemented in assembly code in files in `sysdeps/unix'. These files
are named with a suffix of `.S'; for example, `__open.S'. Files ending
in `.S' are run through the C preprocessor before being fed to the
assembler.
automatically generated from the `syscalls.list' files for the appropriate
archirecture. The format of the syscalls.list files is quite easy: only
a few informations are necessary line the system call name, the number of
arguments and such. The files are run through the C preprocessor.
These files all use a set of macros that should be defined in
`sysdep.h'. The `sysdep.h' file in `sysdeps/unix' partially defines
+4 -4
View File
@@ -142,10 +142,10 @@ ifdef subdir
foo:=$(shell echo subdir foo >&2)
+tsrcs := Makefile $(+tsrcs) \
$(addsuffix .c,$(others) $(tests)) \
$(wildcard $(addsuffix .input,$(tests)) \
$(addsuffix .args,$(tests)))
+tsrcs := Makefile $(+tsrcs) \
$(addsuffix .c,$(others) $(tests) $(test-srcs)) \
$(wildcard $(addsuffix .input,$(tests) $(test-srcs)) \
$(addsuffix .args,$(tests) $(test-srcs)))
+tardeps := $(strip $(+tsrcs))
verbose = v
+2 -2
View File
@@ -87,8 +87,8 @@ sources += $(foreach lib,$(extra-libs),$($(lib)-routines:=.c))
# Files that are found in the current directory cannot occur in
# sysdep directories, so don't bother searching them.
sysdep-sources := $(filter-out $(wildcard $(sources)), $(sources))
all-sources = $(wildcard $(sort $(sources) $(sources:.c=.S) $(sources:.c=.s) \
$(others:=.c) $(tests:=.c))) \
all-sources = $(wildcard $(sort $(sources) $(sources:.c=.S) $(sources:.c=.s) \
$(others:=.c) $(tests:=.c) $(test-srcs:=.c))) \
$(foreach dir,$(all-dirs),\
$(wildcard \
$(addprefix $(dir)/,\
+17 -5
View File
@@ -23,6 +23,8 @@ ifneq (,)
This makefile requires GNU Make.
endif
all: # Make this the default goal
ifneq "$(origin +included-Makeconfig)" "file"
+included-Makeconfig := yes
@@ -239,7 +241,8 @@ endif
# other than there, so the zoneinfo directory contains only universal data,
# localizing the configuration data elsewhere.
ifndef localtime-file
localtime-file = $(inst_sysconfdir)/localtime
localtime-file = $(sysconfdir)/localtime
inst_localtime-file = $(install_root)$(localtime-file)
endif
# What to use for leap second specifications in compiling the default
@@ -319,10 +322,10 @@ endif
ifndef +link
+link = $(CC) -nostdlib -nostartfiles -o $@ \
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) \
$(addprefix $(csu-objpfx),start.o) $(+preinit) \
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+prector) \
$(filter-out $(addprefix $(csu-objpfx),start.o) $(+preinit) \
$(link-extra-libs) $(common-objpfx)libc% $(+postinit),$^) \
$(link-extra-libs) $(link-libc) $(+postinit)
$(link-extra-libs) $(link-libc) $(+postctor) $(+postinit)
endif
ifndef config-LDFLAGS
ifeq (yes,$(build-shared))
@@ -346,7 +349,8 @@ 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)
rpath-link = $(common-objdir):$(mathobjdir):$(elfobjdir):$(nssobjdir)
mathobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)math)
elfobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)elf)
nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
else
@@ -355,7 +359,13 @@ endif
endif
ifndef link-extra-libs
ifeq (yes,$(build-shared))
ifneq ($(common-objpfx),$(objpfx))
link-extra-libs = $(foreach lib,$(LDLIBS-$(@F)),\
$(wildcard $(common-objpfx)$(lib).so$($(notdir $(lib)).so-version) \
$(objpfx)$(lib).so$($(notdir $(lib)).so-version)))
else
link-extra-libs = $(foreach lib,$(LDLIBS-$(@F)),$(common-objpfx)$(lib).so$($(notdir $(lib)).so-version))
endif
else
link-extra-libs = $(foreach lib,$(LDLIBS-$(@F)),$(common-objpfx)$(lib).a)
endif
@@ -366,6 +376,8 @@ endif
ifeq ($(elf),yes)
+preinit = $(addprefix $(csu-objpfx),crti.o)
+postinit = $(addprefix $(csu-objpfx),crtn.o)
+prector = `$(CC) --print-file-name=crtbegin.o`
+postctor = `$(CC) --print-file-name=crtend.o`
endif
csu-objpfx = $(common-objpfx)csu/
elf-objpfx = $(common-objpfx)elf/
@@ -481,7 +493,7 @@ endif
# to pass different flags for each flavor.
libtypes = $(foreach o,$(object-suffixes),$(libtype$o))
object-suffixes := .o
all-object-suffixes := .o .so .po .go
all-object-suffixes := .o .so .po .go .bo
libtype.o := lib%.a
ifeq (yes,$(build-shared))
# Under --enable-shared, we will build a shared library of PIC objects.
+14 -4
View File
@@ -131,6 +131,9 @@ ifeq (yes,$(build-shared))
lib: $(common-objpfx)libc.so
endif
# We have a versioning file for libc.so.
#libc-map = libc.map
all-Subdirs-files = $(wildcard $(addsuffix /Subdirs, $(config-sysdirs)))
$(objpfx)sysd-dirs: $(+sysdir_pfx)config.make $(all-Subdirs-files)
(echo define sysdep-subdirs; \
@@ -277,19 +280,26 @@ parent_echo-distinfo:
$(addprefix +nodist+,$(generated))
# Run a test on the header files we use.
tests: $(objpfx)isomac
$(objpfx)./isomac '$(CC)' '$(+sysdep-includes)' \
>$(common-objpfx)isomac.out
$(objpfx)isomac: isomac.c
$(native-compile)
# Make the distribution tarfile.
distribute := README INSTALL FAQ NOTES NEWS PROJECTS \
distribute := README INSTALL FAQ NOTES NEWS PROJECTS BUGS \
COPYING.LIB COPYING ChangeLog ChangeLog.[0-9] \
Makefile Makeconfig Makerules Rules Make-dist MakeTAGS \
extra-lib.mk o-iterator.mk \
extra-lib.mk o-iterator.mk isomac.c \
ansidecl.h mkinstalldirs move-if-change install-sh \
configure configure.in aclocal.m4 config.sub config.guess\
config.h.in config.make.in config-name.in Makefile.in \
autolock.sh rellns-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 nsswitch.h netgroup.h \
mcheck.h glibcbug.in xlocale.h
rpm/Makefile rpm/template rpm/rpmrc glibcbug.in
distribute := $(strip $(distribute))
generated := $(generated) stubs.h version-info.h
+66 -53
View File
@@ -80,6 +80,12 @@ ar-symtab-name = __.SYMDEF
else
ar-symtab-name = # The null name is used in ELF archives.
endif
# This variable is used in ``include $(o-iterator)'' after defining
# $(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-left))
# Include any system-specific makefiles.
@@ -167,23 +173,25 @@ $(common-objpfx)dummy.d:
# generated sysdep rules in included from sysd-rules below. When
# compiling in the source tree, generated sources go into the current
# directory, and those should be chosen before any sources in sysdeps.
$(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)%.bo: %.S $(before-compile); $(compile-command.S)
define o-iterator-doit
$(objpfx)%$o: %.S $(before-compile); $$(compile-command.S)
endef
object-suffixes-left := $(object-suffixes)
include $(o-iterator)
$(objpfx)%.d: %.S $(before-compile); $(+make-deps)
$(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)%.bo: %.s $(before-compile); $(compile-command.s)
define o-iterator-doit
$(objpfx)%$o: %.s $(before-compile); $$(compile-command.s)
endef
object-suffixes-left := $(object-suffixes)
include $(o-iterator)
$(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)
$(objpfx)%.go: %.c $(before-compile); $(compile-command.c)
$(objpfx)%.bo: %.c $(before-compile); $(compile-command.c)
define o-iterator-doit
$(objpfx)%$o: %.c $(before-compile); $$(compile-command.c)
endef
object-suffixes-left := $(object-suffixes)
include $(o-iterator)
$(objpfx)%.d: %.c $(before-compile); $(+make-deps)
# Omit the objpfx rules when building in the source tree, because
@@ -191,23 +199,25 @@ $(objpfx)%.d: %.c $(before-compile); $(+make-deps)
ifdef objpfx
# Define first rules to find the source files in $(objpfx).
# Generated source files will end up there.
$(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)%.bo: $(objpfx)%.S $(before-compile); $(compile-command.S)
define o-iterator-doit
$(objpfx)%$o: $(objpfx)%.S $(before-compile); $$(compile-command.S)
endef
object-suffixes-left := $(object-suffixes)
include $(o-iterator)
$(objpfx)%.d: $(objpfx)%.S $(before-compile); $(+make-deps)
$(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)%.bo: $(objpfx)%.s $(before-compile); $(compile-command.s)
define o-iterator-doit
$(objpfx)%$o: $(objpfx)%.s $(before-compile); $$(compile-command.s)
endef
object-suffixes-left := $(object-suffixes)
include $(o-iterator)
$(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)
$(objpfx)%.go: $(objpfx)%.c $(before-compile); $(compile-command.c)
$(objpfx)%.bo: $(objpfx)%.c $(before-compile); $(compile-command.c)
define o-iterator-doit
$(objpfx)%$o: $(objpfx)%.c $(before-compile); $$(compile-command.c)
endef
object-suffixes-left := $(object-suffixes)
include $(o-iterator)
$(objpfx)%.d: $(objpfx)%.c $(before-compile); $(+make-deps)
endif
@@ -284,8 +294,10 @@ endif
# GCC can grok options after the file name, and it looks nicer that way.
compile.c = $(CC) $< -c $(CFLAGS) $(CPPFLAGS)
compile.S = $(CC) $< -c $(CPPFLAGS) -DASSEMBLER $(asm-CPPFLAGS)
COMPILE.S = $(CC) -c $(CPPFLAGS) -DASSEMBLER $(asm-CPPFLAGS)
compile.S = \
$(CC) $< -c $(CPPFLAGS) -DASSEMBLER $(asm-CPPFLAGS) $(ASFLAGS-$(suffix $@))
COMPILE.S = \
$(CC) -c $(CPPFLAGS) -DASSEMBLER $(asm-CPPFLAGS) $(ASFLAGS-$(suffix $@))
COMPILE.s = $(filter-out -pipe,$(CC)) -c $(ASFLAGS)
# We need this for the output to go in the right place. It will default to
@@ -328,6 +340,12 @@ else
no-whole-archive =
endif
ifeq ($(versioning),yes)
load-map-file = $($(@F:%.so=%)-map:%=-Wl,--version-script=%)
else
load-map-file =
endif
interp-obj = $(common-objpfx)interp.so
$(interp-obj): $(common-objpfx)%.so: $(..)%.c
$(compile-command.c)
@@ -339,12 +357,14 @@ $(patsubst %,$(objpfx)%.so,$(extra-libs)): $(interp-obj)
define build-shlib
$(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \
-B$(csu-objpfx) \
-B$(csu-objpfx) $(load-map-file) \
-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)
test -z "$($(@F)-version)" || \
(rm -f $@$($(@F)-version); $(LN_S) $(@F) $@$($(@F)-version))
endef
# Don't try to use -lc when making libc.so itself.
@@ -360,12 +380,6 @@ $(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
@@ -391,12 +405,6 @@ headers := $(headers) $(sysdep_headers)
override objects := $(addprefix $(objpfx),$(sources:.c=.o))
# This variable is used in ``include $(o-iterator)'' after defining
# $(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-left))
# The makefile may define $(extra-libs) with `libfoo libbar'
# to build libfoo.a et al from the modules listed in $(libfoo-routines).
ifdef extra-libs
@@ -805,19 +813,23 @@ install: install-no-libc.a-nosubdir
# Command to compile $< in $(objdir) using the native libraries.
define native-compile
cwd=`pwd`; cd $(@D); $(BUILD_CC) $(BUILD_CFLAGS) \
$(addprefix $$cwd/,$^) -o $(@F)
$(make-target-directory)
$(patsubst %/,cd %;,$(objpfx)) \
$(BUILD_CC) $($(basename $(<F))-CFLAGS) $(ALL_BUILD_CFLAGS) \
$(firstword $(filter /%,$< $(shell pwd)/$<)) -o $(@F)
endef
# Command to compile $< in $(common-objdir) using the native libraries.
# We must cd to $(objdir) anyway so that $(..)config.h is valid.
define common-objdir-compile
cd $(objpfx).; \
$(BUILD_CC) $(BUILD_CFLAGS) $(<:$(common-objpfx)%=$(..)%) -o $(..)$(@F)
$(patsubst %/,cd %;,$(objpfx)) \
$(BUILD_CC) $($(basename $(<F))-CFLAGS) $(ALL_BUILD_CFLAGS) \
$(firstword $(filter /%,$< $(shell pwd)/$<)) -o $(..)$(@F)
endef
# We always want to use configuration definitions.
BUILD_CFLAGS = -include $(common-objpfx)config.h
# Note that this is only used for commands running in $(objpfx).
ALL_BUILD_CFLAGS = $(BUILD_CFLAGS) -include $(..)config.h
# Support the GNU standard name for this target.
.PHONY: check
@@ -845,9 +857,10 @@ mostlyclean: common-mostlyclean
# Remove the object files.
common-mostlyclean:
-rm -f $(addprefix $(objpfx),$(tests) $(others) \
$(addsuffix .o,$(tests) $(others)) \
$(addsuffix .out,$(tests)))
-rm -f $(addprefix $(objpfx),$(tests) $(test-srcs) $(others) \
$(addsuffix .o,$(tests) $(test-srcs) \
$(others)) \
$(addsuffix .out,$(tests) $(test-srcs)))
-rm -f $(addprefix $(objpfx),$(extra-objs) $(install-lib))
-rm -f core $(common-objpfx)stub-$(subdir)
$(rmobjs)
+22 -1
View File
@@ -1,4 +1,4 @@
GNU C Library NEWS -- history of user-visible changes. 1997-02-13
GNU C Library NEWS -- history of user-visible changes. 1997-03-18
Copyright (C) 1992, 93, 94, 95, 96, 97 Free Software Foundation, Inc.
See the end for copying conditions.
@@ -17,6 +17,25 @@ Version 2.1
* Miles Bader provided the `argp' function family to support hierachical
command line argument parsing, layered on top of getopt.
* strtod accepts new hexadecimal floating-point format from ISO C 9X
* printf has two new specifiers %a and %A to print hexadecimal flaoting-point
numbers
* scanf recognizes the %A format for scanning floating point numbers
* the new header <inttypes.h> from ISO C 9X provides information and
interfaces for the available integer types
* the new header <complex.h> contains definitions of the complex math
functions from ISO C 9X
* Thorsten Kukuk provided an implementation for NIS+, securelevel 0 and 1.
The implementation for securelevel 2 will follow as soon as the Diffie-
Hellman patent expired.
* Andreas Jaeger provided a test suite for the math library
Version 2.0.2
@@ -25,6 +44,8 @@ Version 2.0.2
* add atoll function
* fix complex problems in Berkeley DB code
* fix math functions
Version 2.0.1
+60 -16
View File
@@ -1,6 +1,6 @@
Open jobs for finishing GNU libc:
---------------------------------
Status: January 1997
Status: March 1997
If you have time and talent to take over any of the jobs below please
contact <bug-glibc@prep.ai.mit.edu>
@@ -19,7 +19,16 @@ contact <bug-glibc@prep.ai.mit.edu>
standards if they do not contradict each other.
[ 3] Write translations for the GNU libc message for the so far
[ 3] The IMHO opinion most important task is to write a more complete
test suite. We cannot get too many people working on this. It is
not difficult to write a test, find a definition of the function
which I normally can provide, if necessary, and start writing tests
to test for compliance. Beside this, take a look at the sources
and write tests which in total test as many paths of execution as
possible.
[ 4] 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.
@@ -28,7 +37,7 @@ contact <bug-glibc@prep.ai.mit.edu>
for the current status (of course better use a mirror of prep).
[ 4] Write wordexp() function; this is described in POSIX.2, the
[ 5] Write wordexp() function; this is described in POSIX.2, the
header <wordexp.h> already exists.
Implementation idea: use some functions from bash.
@@ -36,7 +45,7 @@ contact <bug-glibc@prep.ai.mit.edu>
**** Somebody is working on this. Help may or may not be appreciated.
[ 5] Write `long double' versions of the math functions. This should be
[ 6] 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).
@@ -45,7 +54,42 @@ contact <bug-glibc@prep.ai.mit.edu>
the rest.
[ 6] If you enjoy assembler programming (as I do --drepper :-) you might
[ 7] Several math functions have to be written:
- exp2
- log2
each with float, double, and long double arguments. Writing these
functions should be possible when following the implementation of
the existing exp/log functions for other bases.
Beside this most of the complex math functions which are new in
ISO C 9X. gcc already has support for numbers of complex type so the
implementation should be possible today. I mention here the names
and the way to write them (argument is z = x + iy):
- cexp(z) = e^x (cos y + i sin y)
- sin(z) = 1/(2i) (e^(iz) - e^-(iz)) = sin(x) cosh(y) + i cos(x) sinh(y)
- cos(z) = 1/2 (e^(iz) + e^-(iz)) = cos(x) cosh(y) - i sin(x) sinh(y)
- tan(z) = 1/i (e^(iz) - e^-(iz))/(e^(iz) + e^-(iz))
- cot(z) = i (e^(iz) + e^-(iz))/(e^(iz) - e^-(iz))
- asin(z) = -i ln(iz + sqrt(1-z^2))
- acos(z) = -i ln(z + sqrt(z^2-1))
- atan(z) = 1/(2i) ln((1+iz)/(1-iz))
- acot(z) = -1/(2i) ln((iz+1)/(iz-1))
- sinh(z) = 1/2 (e^z - e^-z)
- cosh(z) = 1/2 (e^z + e^-z)
- tanh(z) = (e^z - e^-z)/(e^z + e^-z)
- coth(z) = (e^z + e^-z)/(e^z - e^-z)
All functions should we written with all the parallelism in mind.
And assembler versions are highly expreciated since, e.g., the ix87
FPU provides an `fsincos' instructions which is certainly useful for
the `sin' function. The implementations for the normal math functions
shows other optimization techniques.
[ 8] 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.
@@ -60,38 +104,32 @@ contact <bug-glibc@prep.ai.mit.edu>
work.
[ 7] Write nftw() function. Perhaps it might be good to reimplement the
[ 9] 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 and complete
[10] Extend regex and/or rx to work with wide characters and complete
implementation of character class and collation class handling.
It is planed to do a complete rewrite.
[10] Write access function for netmasks, bootparams, and automount
[11] Write access function for netmasks, bootparams, and automount
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.
[11] Rewrite utmp/wtmp functions to use database functions. This is much
[12] Rewrite utmp/wtmp functions to use database functions. This is much
better than the normal flat file format.
**** There are plans for a new approach to this problem. Please contact
bug-glibc@prep.ai.mit.edu before starting to work.)
[12] Several more or less small functions have to be written:
[13] Several more or less small functions have to be written:
+ tcgetid() and waitid() from XPG4.2
+ grantpt(), ptsname(), unlockpt() from XPG4.2
@@ -99,3 +137,9 @@ contact <bug-glibc@prep.ai.mit.edu>
+ fmtmsg() from SVID
More information are available on request.
[14] We need to write a library for on-the-fly transformation of streams
of text. In fact, this would be a recode-library (you know, GNU recode).
This is needed in several places in the GNU libc and I already have
rather concrete plans but so far no possibility to start this.
+4 -4
View File
@@ -83,19 +83,19 @@ common-generated := $(common-generated) dummy.o dummy.c empty.c empty.o
.PHONY: others tests
others: $(addprefix $(objpfx),$(others) $(extra-objs))
ifeq ($(cross-compiling),yes)
tests: $(addprefix $(objpfx),$(tests))
tests: $(addprefix $(objpfx),$(tests) $(test-srcs))
else
tests: $(tests:%=$(objpfx)%.out)
endif
ifneq "$(strip $(others) $(tests))" ""
$(addprefix $(objpfx),$(others) $(tests)): %: %.o \
ifneq "$(strip $(others) $(tests) $(test-srcs))" ""
$(addprefix $(objpfx),$(others) $(tests) $(test-srcs)): %: %.o \
$(sort $(filter $(common-objpfx)libc%,$(link-libc))) \
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
$(+link)
endif
ifneq "$(strip $(tests))" ""
ifneq "$(strip $(tests) $(test-srcs))" ""
# These are the implicit rules for making test outputs
# from the test programs and whatever input files are present.
$(objpfx)%.out: %.args $(objpfx)% %.input
+1 -1
View File
@@ -24,7 +24,7 @@ subdir := argp
headers = argp.h
distribute = argp-fmtstream.h argp-namefrob.h
routines = $(addprefix argp-, ba fmtstream fs-xinl help parse pv \
pvh xinl)
pvh xinl eexst)
tests = argp-test
+1 -1
View File
@@ -23,4 +23,4 @@
the ARGP_HELP_BUG_ADDR flag is set (as it is by various standard help
messages), embedded in a sentence that says something like `Report bugs to
ADDR.'. */
char *argp_program_bug_address = 0;
const char *argp_program_bug_address = 0;
+29
View File
@@ -0,0 +1,29 @@
/* Default definition for ARGP_ERR_EXIT_STATUS
Copyright (C) 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Miles Bader <miles@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. */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "argp.h"
/* The exit status that argp will use when exiting due to a parsing error.
If not defined or set by the user program, this defaults to 1. */
error_t argp_err_exit_status = 1;
+4 -4
View File
@@ -156,7 +156,7 @@ fill_in_uparams (const struct argp_state *state)
arg++;
SKIPWS (arg);
}
if (unspec)
if (var[0] == 'n' && var[1] == 'o' && var[2] == '-')
{
@@ -878,7 +878,7 @@ arg (const struct argp_option *real, const char *req_fmt, const char *opt_fmt,
/* Helper functions for hol_entry_help. */
/* State used during the execution of hol_help. */
struct hol_help_state
struct hol_help_state
{
/* PREV_ENTRY should contain the previous entry printed, or 0. */
struct hol_entry *prev_entry;
@@ -1600,7 +1600,7 @@ __argp_state_help (const struct argp_state *state, FILE *stream, unsigned flags)
if (!state || ! (state->flags & ARGP_NO_EXIT))
{
if (flags & ARGP_HELP_EXIT_ERR)
exit (1);
exit (argp_err_exit_status);
if (flags & ARGP_HELP_EXIT_OK)
exit (0);
}
@@ -1612,7 +1612,7 @@ weak_alias (__argp_state_help, argp_state_help)
/* If appropriate, print the printf string FMT and following args, preceded
by the program name and `:', to stderr, and followed by a `Try ... --help'
message, then exit (1). */
message, then exit (ARGP_ERR_EXIT_STATUS). */
void
__argp_error (const struct argp_state *state, const char *fmt, ...)
{
+4
View File
@@ -612,6 +612,10 @@ parser_finalize (struct parser *parser,
if (err == EBADKEY)
err = 0; /* Some parser didn't understand. */
/* Tell the user that all arguments are parsed. */
if (end_index)
*end_index = parser->state.next;
}
else if (end_index)
/* Return any remaining arguments to the user. */
+1 -1
View File
@@ -22,4 +22,4 @@
--version is added (unless the ARGP_NO_HELP flag is used), which will
print this this string followed by a newline and exit (unless the
ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */
char *argp_program_version = 0;
const char *argp_program_version = 0;
+6 -2
View File
@@ -240,7 +240,7 @@ struct argp
TEXT is NULL for this key. */
/* Explanatory note emitted when duplicate option arguments have been
suppressed. */
#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005
#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005
/* When an argp has a non-zero CHILDREN field, it should point to a vector of
argp_child structures, each of which describes a subsidiary argp. */
@@ -379,7 +379,7 @@ extern error_t __argp_parse __P ((__const struct argp *__argp,
option --version is added (unless the ARGP_NO_HELP flag is used), which
will print this string followed by a newline and exit (unless the
ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */
extern const char *argp_program_version;
extern __const char *argp_program_version;
/* If defined or set by the user program to a non-zero value, then a default
option --version is added (unless the ARGP_NO_HELP flag is used), which
@@ -395,6 +395,10 @@ extern void (*argp_program_version_hook) __P ((FILE *__stream,
standard help messages), embedded in a sentence that says something like
`Report bugs to ADDR.'. */
__const extern char *argp_program_bug_address;
/* The exit status that argp will use when exiting due to a parsing error.
If not defined or set by the user program, this defaults to 1. */
extern error_t argp_err_exit_status;
/* Flags for argp_help. */
#define ARGP_HELP_USAGE 0x01 /* a Usage: message. */
+11 -2
View File
@@ -84,8 +84,17 @@ catopen (const char *cat_name, int flag)
}
nlspath = __secure_getenv ("NLSPATH");
result->nlspath = __strdup (nlspath != NULL && *nlspath != '\0'
? nlspath : NLSPATH);
if (nlspath != NULL && *nlspath != '\0')
{
/* Append the system dependent directory. */
size_t len = strlen (nlspath + 1 + sizeof NLSPATH);
char *tmp = alloca (len);
__stpcpy (__stpcpy (__stpcpy (tmp, nlspath), ":"), NLSPATH);
nlspath = tmp;
}
else
result->nlspath = __strdup (NLSPATH);
if (result->nlspath == NULL)
{
+6 -5
View File
@@ -152,6 +152,7 @@ int
main (int argc, char *argv[])
{
struct catalog *result;
int remaining;
/* Set program name for messages. */
error_print_progname = error_print;
@@ -166,18 +167,18 @@ main (int argc, char *argv[])
result = NULL;
/* Parse and process arguments. */
argp_parse (&argp, argc, argv, 0, 0, NULL);
argp_parse (&argp, argc, argv, 0, &remaining, NULL);
/* Determine output file. */
if (output_name == NULL)
output_name = optind < argc ? argv[optind++] : "-";
output_name = remaining < argc ? argv[remaining++] : "-";
/* Process all input files. */
setlocale (LC_CTYPE, "C");
if (optind < argc)
if (remaining < argc)
do
result = read_input_file (result, argv[optind]);
while (++optind < argc);
result = read_input_file (result, argv[remaining]);
while (++remaining < argc);
else
result = read_input_file (NULL, "-");
+3
View File
@@ -43,6 +43,9 @@
directive. */
#undef HAVE_ASM_POPSECTION_DIRECTIVE
/* Define if versioning of the library is wanted. */
#undef DO_VERSIONING
/*
*/
+2
View File
@@ -26,6 +26,8 @@ defines = @DEFINES@
elf = @elf@
have-initfini = @libc_cv_have_initfini@
versioning = @VERSIONING@
have-no-whole-archive = @libc_cv_ld_no_whole_archive@
have-no-exceptions = @libc_cv_gcc_no_exceptions@
have-bash2 = @libc_cv_have_bash2@
Vendored
+275 -70
View File
@@ -1120,34 +1120,10 @@ done
test -n "$MSGFMT" || MSGFMT=":"
echo $ac_n "checking build system type""... $ac_c" 1>&6
echo "configure:1125: checking build system type" >&5
build_alias=$build
case "$build_alias" in
NONE)
case $nonopt in
NONE) build_alias=$host_alias ;;
*) build_alias=$nonopt ;;
esac ;;
esac
build=`$ac_config_sub $build_alias`
build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$build" 1>&6
if test $host != $build; then
ac_tool_prefix=${host_alias}-
else
ac_tool_prefix=
fi
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1151: checking for $ac_word" >&5
echo "configure:1127: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1158,12 +1134,11 @@ else
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
ac_cv_prog_CC="gcc"
break
fi
done
IFS="$ac_save_ifs"
test -z "$ac_cv_prog_CC" && ac_cv_prog_CC="gcc"
fi
fi
CC="$ac_cv_prog_CC"
@@ -1173,13 +1148,153 @@ else
echo "$ac_t""no" 1>&6
fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1156: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
ac_prog_rejected=no
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
break
fi
done
IFS="$ac_save_ifs"
if test $ac_prog_rejected = yes; then
# We found a bogon in the path, so make sure we never use it.
set dummy $ac_cv_prog_CC
shift
if test $# -gt 0; then
# We chose a different compiler from the bogus one.
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
set dummy "$ac_dir/$ac_word" "$@"
shift
ac_cv_prog_CC="$@"
fi
fi
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
echo "$ac_t""$CC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
echo "configure:1204: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext <<EOF
#line 1214 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
if { (eval echo configure:1218: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
ac_cv_prog_cc_cross=no
else
ac_cv_prog_cc_cross=yes
fi
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
ac_cv_prog_cc_works=no
fi
rm -fr conftest*
echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
echo "configure:1238: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
echo "configure:1243: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
#ifdef __GNUC__
yes;
#endif
EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1252: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
fi
fi
echo "$ac_t""$ac_cv_prog_gcc" 1>&6
if test $ac_cv_prog_gcc = yes; then
GCC=yes
ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
echo "configure:1267: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
echo 'void f(){}' > conftest.c
if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
ac_cv_prog_cc_g=yes
else
ac_cv_prog_cc_g=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
if test "$ac_test_CFLAGS" = set; then
CFLAGS="$ac_save_CFLAGS"
elif test $ac_cv_prog_cc_g = yes; then
CFLAGS="-g -O2"
else
CFLAGS="-O2"
fi
else
GCC=
test "${CFLAGS+set}" = set || CFLAGS="-g"
fi
if test $host != $build; then
# Extract the first word of "gcc cc", so it can be a program name with args.
set dummy gcc cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1183: checking for $ac_word" >&5
echo "configure:1298: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1206,7 +1321,7 @@ fi
fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
echo "configure:1210: checking how to run the C preprocessor" >&5
echo "configure:1325: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -1221,13 +1336,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
#line 1225 "configure"
#line 1340 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1231: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:1346: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
@@ -1238,13 +1353,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
#line 1242 "configure"
#line 1357 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1248: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:1363: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
@@ -1266,10 +1381,34 @@ else
fi
echo "$ac_t""$CPP" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
echo "configure:1386: checking build system type" >&5
build_alias=$build
case "$build_alias" in
NONE)
case $nonopt in
NONE) build_alias=$host_alias ;;
*) build_alias=$nonopt ;;
esac ;;
esac
build=`$ac_config_sub $build_alias`
build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$build" 1>&6
if test $host != $build; then
ac_tool_prefix=${host_alias}-
else
ac_tool_prefix=
fi
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
set dummy ${ac_tool_prefix}ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1273: checking for $ac_word" >&5
echo "configure:1412: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1300,7 +1439,7 @@ fi
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1304: checking for $ac_word" >&5
echo "configure:1443: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1331,7 +1470,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1335: checking for $ac_word" >&5
echo "configure:1474: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1366,7 +1505,7 @@ fi
# Extract the first word of "bash", so it can be a program name with args.
set dummy bash; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1370: checking for $ac_word" >&5
echo "configure:1509: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1407,7 +1546,7 @@ if test "$BASH" = no; then
# Extract the first word of "ksh", so it can be a program name with args.
set dummy ksh; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1411: checking for $ac_word" >&5
echo "configure:1550: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_KSH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1449,7 +1588,7 @@ fi
echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
echo "configure:1453: checking for signed size_t type" >&5
echo "configure:1592: checking for signed size_t type" >&5
if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1473,12 +1612,12 @@ EOF
fi
echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
echo "configure:1477: checking for libc-friendly stddef.h" >&5
echo "configure:1616: checking for libc-friendly stddef.h" >&5
if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1482 "configure"
#line 1621 "configure"
#include "confdefs.h"
#define __need_size_t
#define __need_wchar_t
@@ -1493,7 +1632,7 @@ size_t size; wchar_t wchar;
if (&size == NULL || &wchar == NULL) abort ();
; return 0; }
EOF
if { (eval echo configure:1497: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:1636: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_friendly_stddef=yes
else
@@ -1512,7 +1651,7 @@ override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
fi
echo $ac_n "checking whether we need to use -P to assemble .S files""... $ac_c" 1>&6
echo "configure:1516: checking whether we need to use -P to assemble .S files" >&5
echo "configure:1655: checking whether we need to use -P to assemble .S files" >&5
if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1535,7 +1674,7 @@ asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
fi
echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6
echo "configure:1539: checking for assembler global-symbol directive" >&5
echo "configure:1678: checking for assembler global-symbol directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1565,7 +1704,7 @@ EOF
fi
echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
echo "configure:1569: checking for .set assembler directive" >&5
echo "configure:1708: checking for .set assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1598,9 +1737,74 @@ EOF
fi
echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6
echo "configure:1742: checking for .symver assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_symver_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.s <<EOF
.text
_sym:
.symver _sym,sym@VERS
EOF
if ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.s 1>&5 2>&5; then
libc_cv_asm_symver_directive=yes
else
libc_cv_asm_symver_directive=no
fi
rm -f conftest*
fi
echo "$ac_t""$libc_cv_asm_symver_directive" 1>&6
echo $ac_n "checking for ld --version-script""... $ac_c" 1>&6
echo "configure:1761: checking for ld --version-script" >&5
if eval "test \"`echo '$''{'libc_cv_ld_version_script_option'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test $libc_cv_asm_symver_directive = yes; then
cat > conftest.s <<EOF
.text
_sym:
.symver _sym,sym@VERS
EOF
cat > conftest.map <<EOF
VERS {
global: sym;
};
EOF
if ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.s 1>&5 2>&5; then
if { ac_try='${CC-cc} $CFLAGS --shared -o conftest.so conftest.o
-Wl,--version-script,conftest.map'; { (eval echo configure:1778: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
then
libc_cv_ld_version_script_option=yes
else
libc_cv_ld_version_script_option=no
fi
else
libc_cv_ld_version_script_option=no
fi
else
libc_cv_ld_version_script_option=no
fi
rm -f conftest*
fi
echo "$ac_t""$libc_cv_ld_version_script_option" 1>&6
if test $libc_cv_asm_symver_directive = yes &&
test $libc_cv_ld_version_script_option = yes; then
VERSIONING=yes
cat >> confdefs.h <<\EOF
#define DO_VERSIONING 1
EOF
else
VERSIONING=no
fi
if test $elf = yes; then
echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6
echo "configure:1604: checking for .previous assembler directive" >&5
echo "configure:1808: checking for .previous assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1608,7 +1812,7 @@ else
.section foo_section
.previous
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1612: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1816: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_asm_previous_directive=yes
else
libc_cv_asm_previous_directive=no
@@ -1624,7 +1828,7 @@ EOF
else
echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6
echo "configure:1628: checking for .popsection assembler directive" >&5
echo "configure:1832: checking for .popsection assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1632,7 +1836,7 @@ else
.pushsection foo_section
.popsection
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1636: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_asm_popsection_directive=yes
else
libc_cv_asm_popsection_directive=no
@@ -1652,12 +1856,12 @@ fi
if test $elf != yes; then
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
echo "configure:1656: checking for .init and .fini sections" >&5
echo "configure:1860: checking for .init and .fini sections" >&5
if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1661 "configure"
#line 1865 "configure"
#include "confdefs.h"
int main() {
@@ -1666,7 +1870,7 @@ asm (".section .init");
asm (".text");
; return 0; }
EOF
if { (eval echo configure:1670: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:1874: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_have_initfini=yes
else
@@ -1691,19 +1895,19 @@ if test $elf = yes; then
libc_cv_asm_underscores=no
else
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
echo "configure:1695: checking for _ prefix on C symbol names" >&5
echo "configure:1899: checking for _ prefix on C symbol names" >&5
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1700 "configure"
#line 1904 "configure"
#include "confdefs.h"
asm ("_glibc_foobar:");
int main() {
glibc_foobar ();
; return 0; }
EOF
if { (eval echo configure:1707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
if { (eval echo configure:1911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
libc_cv_asm_underscores=yes
else
@@ -1730,7 +1934,7 @@ if test $elf = yes; then
libc_cv_asm_weakext_directive=no
else
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
echo "configure:1734: checking for assembler .weak directive" >&5
echo "configure:1938: checking for assembler .weak directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1753,7 +1957,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
if test $libc_cv_asm_weak_directive = no; then
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
echo "configure:1757: checking for assembler .weakext directive" >&5
echo "configure:1961: checking for assembler .weakext directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1790,7 +1994,7 @@ EOF
fi
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
echo "configure:1794: checking for ld --no-whole-archive" >&5
echo "configure:1998: checking for ld --no-whole-archive" >&5
if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1801,7 +2005,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -Wl,--no-whole-archive
-o conftest conftest.c'; { (eval echo configure:1805: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c'; { (eval echo configure:2009: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_ld_no_whole_archive=yes
else
libc_cv_ld_no_whole_archive=no
@@ -1812,7 +2016,7 @@ fi
echo "$ac_t""$libc_cv_ld_no_whole_archive" 1>&6
echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 1>&6
echo "configure:1816: checking for gcc -fno-exceptions" >&5
echo "configure:2020: checking for gcc -fno-exceptions" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1823,7 +2027,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -fno-exceptions
-o conftest conftest.c'; { (eval echo configure:1827: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c'; { (eval echo configure:2031: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_no_exceptions=yes
else
libc_cv_gcc_no_exceptions=no
@@ -1875,7 +2079,7 @@ if test "$uname" = generic; then
fi
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
echo "configure:1879: checking OS release for uname" >&5
echo "configure:2083: checking OS release for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1897,7 +2101,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
uname_release="$libc_cv_uname_release"
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
echo "configure:1901: checking OS version for uname" >&5
echo "configure:2105: checking OS version for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1919,7 +2123,7 @@ else
fi
echo $ac_n "checking stdio selection""... $ac_c" 1>&6
echo "configure:1923: checking stdio selection" >&5
echo "configure:2127: checking stdio selection" >&5
case $stdio in
libio) cat >> confdefs.h <<\EOF
@@ -2004,7 +2208,7 @@ EOF
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(set) 2>&1 |
case `(ac_space=' '; set | grep ac_space) 2>&1` in
case `(ac_space=' '; set) 2>&1` in
*ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote substitution
# turns \\\\ into \\, and sed turns \\ into \).
@@ -2124,20 +2328,21 @@ s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
s%@INSTALL_DATA@%$INSTALL_DATA%g
s%@LN_S@%$LN_S%g
s%@MSGFMT@%$MSGFMT%g
s%@CC@%$CC%g
s%@BUILD_CC@%$BUILD_CC%g
s%@CPP@%$CPP%g
s%@build@%$build%g
s%@build_alias@%$build_alias%g
s%@build_cpu@%$build_cpu%g
s%@build_vendor@%$build_vendor%g
s%@build_os@%$build_os%g
s%@CC@%$CC%g
s%@BUILD_CC@%$BUILD_CC%g
s%@CPP@%$CPP%g
s%@AR@%$AR%g
s%@RANLIB@%$RANLIB%g
s%@BASH@%$BASH%g
s%@libc_cv_have_bash2@%$libc_cv_have_bash2%g
s%@KSH@%$KSH%g
s%@libc_cv_have_ksh@%$libc_cv_have_ksh%g
s%@VERSIONING@%$VERSIONING%g
s%@libc_cv_have_initfini@%$libc_cv_have_initfini%g
s%@libc_cv_ld_no_whole_archive@%$libc_cv_ld_no_whole_archive%g
s%@libc_cv_gcc_no_exceptions@%$libc_cv_gcc_no_exceptions%g
+49 -1
View File
@@ -359,7 +359,7 @@ fi
AC_PROG_LN_S
AC_CHECK_PROGS(MSGFMT, msgfmt gmsgfmt, :)
AC_CHECK_TOOL(CC, gcc)
AC_PROG_CC
if test $host != $build; then
AC_CHECK_PROG(BUILD_CC, gcc cc)
fi
@@ -489,6 +489,54 @@ if test $libc_cv_asm_set_directive = yes; then
AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
fi
AC_CACHE_CHECK(for .symver assembler directive, libc_cv_asm_symver_directive,
[cat > conftest.s <<EOF
.text
_sym:
.symver _sym,sym@VERS
EOF
if ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.s 1>&AC_FD_CC 2>&AC_FD_CC; then
libc_cv_asm_symver_directive=yes
else
libc_cv_asm_symver_directive=no
fi
rm -f conftest*])
AC_CACHE_CHECK(for ld --version-script, libc_cv_ld_version_script_option, [dnl
if test $libc_cv_asm_symver_directive = yes; then
cat > conftest.s <<EOF
.text
_sym:
.symver _sym,sym@VERS
EOF
cat > conftest.map <<EOF
VERS {
global: sym;
};
EOF
if ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.s 1>&AC_FD_CC 2>&AC_FD_CC; then
if AC_TRY_COMMAND([${CC-cc} $CFLAGS --shared -o conftest.so conftest.o
-Wl,--version-script,conftest.map]);
then
libc_cv_ld_version_script_option=yes
else
libc_cv_ld_version_script_option=no
fi
else
libc_cv_ld_version_script_option=no
fi
else
libc_cv_ld_version_script_option=no
fi
rm -f conftest*])
if test $libc_cv_asm_symver_directive = yes &&
test $libc_cv_ld_version_script_option = yes; then
VERSIONING=yes
AC_DEFINE(DO_VERSIONING)
else
VERSIONING=no
fi
AC_SUBST(VERSIONING)
if test $elf = yes; then
AC_CACHE_CHECK(for .previous assembler directive,
libc_cv_asm_previous_directive, [dnl
+1
View File
@@ -4,3 +4,4 @@
TODO COPYING* AUTHORS copyr-* copying.*
glibc-*
distinfo
specs
+1 -1
View File
@@ -249,7 +249,7 @@ __big_delete(hashp, bufp)
bufp->flags |= BUF_MOD;
if (rbufp)
__free_ovflpage(hashp, rbufp);
if (last_bfp != rbufp)
if (last_bfp && last_bfp != rbufp)
__free_ovflpage(hashp, last_bfp);
hashp->NKEYS--;
+7 -6
View File
@@ -99,6 +99,7 @@ main (argc, argv)
FILE *input_file;
DB *db_file;
int status;
int remaining;
/* Set locale via LC_ALL. */
setlocale (LC_ALL, "");
@@ -110,27 +111,27 @@ main (argc, argv)
input_name = NULL;
/* Parse and process arguments. */
argp_parse (&argp, argc, argv, 0, 0, NULL);
argp_parse (&argp, argc, argv, 0, &remaining, NULL);
/* Determine file names. */
if (do_undo || output_name != NULL)
{
if (optind + 1 != argc)
if (remaining + 1 != argc)
{
wrong_arguments:
error (0, 0, gettext ("wrong number of arguments"));
argp_help (&argp, stdout, ARGP_HELP_SEE,
program_invocation_short_name);
}
input_name = argv[optind];
input_name = argv[remaining];
}
else
{
if (optind + 2 != argc)
if (remaining + 2 != argc)
goto wrong_arguments;
input_name = argv[optind++];
output_name = argv[optind];
input_name = argv[remaining++];
output_name = argv[remaining];
}
/* Special handling if we are asked to print the database. */
+2 -2
View File
@@ -22,6 +22,6 @@
int
alphasort (const void *a, const void *b)
{
return strcmp (((struct dirent *) a)->d_name,
((struct dirent *) b)->d_name);
return strcmp ((*(const struct dirent **) a)->d_name,
(*(const struct dirent **) b)->d_name);
}
+31 -14
View File
@@ -22,6 +22,29 @@
#include <dlfcn.h>
#include <stdlib.h>
struct openaux_args
{
/* The arguments to openaux. */
struct link_map *map;
int trace_mode;
const char *strtab;
ElfW(Dyn) *d;
/* The return value of openaux. */
struct link_map *aux;
};
static void
openaux (void *a)
{
struct openaux_args *args = (struct openaux_args *) a;
args->aux = _dl_map_object (args->map, args->strtab + args->d->d_un.d_val,
(args->map->l_type == lt_executable
? lt_library : args->map->l_type),
args->trace_mode);
}
void
_dl_map_object_deps (struct link_map *map,
struct link_map **preloads, unsigned int npreloads,
@@ -75,27 +98,21 @@ _dl_map_object_deps (struct link_map *map,
/* There is at least one auxiliary library specified. We try to
load it, and if we can, use its symbols in preference to our
own. But if we can't load it, we just silently ignore it. */
const char *strtab
struct openaux_args args;
args.strtab
= ((void *) map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr);
ElfW(Dyn) *d;
args.map = map;
args.trace_mode = trace_mode;
for (d = map->l_ld; d->d_tag != DT_NULL; ++d)
if (d->d_tag == DT_AUXILIARY)
for (args.d = map->l_ld; args.d->d_tag != DT_NULL; ++args.d)
if (args.d->d_tag == DT_AUXILIARY)
{
struct link_map *aux;
void openaux (void)
{
aux = _dl_map_object (map, strtab + d->d_un.d_val,
(map->l_type == lt_executable
? lt_library : map->l_type),
trace_mode);
}
char *errstring;
const char *objname;
if (! _dl_catch_error (&errstring, &objname, openaux))
if (! _dl_catch_error (&errstring, &objname, openaux, &args))
/* The auxiliary object is actually there. Use it as
the first search element, even before MAP itself. */
preload (aux);
preload (args.aux);
}
}
+12 -6
View File
@@ -85,19 +85,25 @@ _dl_signal_error (int errcode,
int
_dl_catch_error (char **errstring,
const char **objname,
void (*operate) (void))
void (*operate) (void *),
void *args)
{
int errcode;
struct catch *old, c = { errstring: NULL, objname: NULL };
/* We need not handle `receiver' since setting a `catch' is handle
struct catch *old, c;
/* We need not handle `receiver' since setting a `catch' is handled
before it. */
/* Some systems (.e.g, SPARC) handle constructors to local variables
inefficient. So we initialize `c' by hand. */
c.errstring = NULL;
c.objname = NULL;
old = catch;
errcode = setjmp (c.env);
if (errcode == 0)
{
catch = &c;
(*operate) ();
(*operate) (args);
catch = old;
*errstring = NULL;
*objname = NULL;
@@ -112,7 +118,7 @@ _dl_catch_error (char **errstring,
}
void
_dl_receive_error (receiver_fct fct, void (*operate) (void))
_dl_receive_error (receiver_fct fct, void (*operate) (void *), void *args)
{
struct catch *old_catch;
receiver_fct old_receiver;
@@ -124,7 +130,7 @@ _dl_receive_error (receiver_fct fct, void (*operate) (void))
catch = NULL;
receiver = fct;
(*operate) ();
(*operate) (args);
catch = old_catch;
receiver = old_receiver;
+27 -4
View File
@@ -67,6 +67,18 @@ int _dl_zerofd = -1;
#define ANONFD _dl_zerofd
#endif
/* Handle situations where we have a preferred location in memory for
the shared objects. */
#ifdef ELF_PREFERRED_ADDRESS_DATA
ELF_PREFERRED_ADDRESS_DATA;
#endif
#ifndef ELF_PREFERRED_ADDRESS
#define ELF_PREFERRED_ADDRESS(loader, maplength, mapstartpref) (mapstartpref)
#endif
#ifndef ELF_FIXED_ADDRESS
#define ELF_FIXED_ADDRESS(loader, mapstart) ((void) 0)
#endif
size_t _dl_pagesize;
@@ -315,11 +327,16 @@ _dl_map_object_from_fd (char *name, int fd, char *realname,
So we map the first segment without MAP_FIXED, but with its
extent increased to cover all the segments. Then we remove
access from excess portion, and there is known sufficient space
there to remap from the later segments. */
there to remap from the later segments.
As a refinement, sometimes we have an address that we would
prefer to map such objects at; but this is only a preference,
the OS can do whatever it likes. */
caddr_t mapat;
mapat = map_segment (c->mapstart,
loadcmds[nloadcmds - 1].allocend - c->mapstart,
c->prot, 0, c->mapoff);
ElfW(Addr) mappref;
size_t maplength = loadcmds[nloadcmds - 1].allocend - c->mapstart;
mappref = ELF_PREFERRED_ADDRESS (loader, maplength, c->mapstart);
mapat = map_segment (mappref, maplength, c->prot, 0, c->mapoff);
l->l_addr = (ElfW(Addr)) mapat - c->mapstart;
/* Change protection on the excess portion to disallow all access;
@@ -332,6 +349,12 @@ _dl_map_object_from_fd (char *name, int fd, char *realname,
0);
goto postmap;
}
else
{
/* Notify ELF_PREFERRED_ADDRESS that we have to load this one
fixed. */
ELF_FIXED_ADDRESS (loader, c->mapstart);
}
while (c < &loadcmds[nloadcmds])
{
+26 -28
View File
@@ -22,7 +22,8 @@
#include <assert.h>
#include <string.h>
#include <dl-hash.h>
#include "dl-hash.h"
#include <dl-machine.h>
#include "../stdio-common/_itoa.h"
#define VERSTAG(tag) (DT_NUM + DT_PROCNUM + DT_VERSIONTAGIDX (tag))
@@ -57,10 +58,10 @@ struct sym_val
something bad happened. */
static inline int
do_lookup (const char *undef_name, unsigned long int hash,
const ElfW(Sym) **ref, struct sym_val *result,
const ElfW(Sym) *ref, struct sym_val *result,
struct link_map *list[], size_t i, size_t n,
const char *reference_name, const struct r_found_version *version,
struct link_map *skip, int flags)
struct link_map *skip, int reloc_type)
{
struct link_map *map;
@@ -78,7 +79,8 @@ do_lookup (const char *undef_name, unsigned long int hash,
continue;
/* Don't search the executable when resolving a copy reloc. */
if (flags & DL_LOOKUP_NOEXEC && map->l_type == lt_executable)
if (elf_machine_lookup_noexec_p (reloc_type) &&
map->l_type == lt_executable)
continue;
symtab = ((void *) map->l_addr + map->l_info[DT_SYMTAB]->d_un.d_ptr);
@@ -98,7 +100,7 @@ do_lookup (const char *undef_name, unsigned long int hash,
const ElfW(Sym) *sym = &symtab[symidx];
if (sym->st_value == 0 || /* No value. */
((flags & DL_LOOKUP_NOPLT) != 0 /* Reject PLT entry. */
(elf_machine_lookup_noplt_p (reloc_type) /* Reject PLT entry. */
&& sym->st_shndx == SHN_UNDEF))
continue;
@@ -113,7 +115,7 @@ do_lookup (const char *undef_name, unsigned long int hash,
continue;
}
if (sym != *ref && strcmp (strtab + sym->st_name, undef_name))
if (sym != ref && strcmp (strtab + sym->st_name, undef_name))
/* Not the symbol we are looking for. */
continue;
@@ -188,16 +190,13 @@ do_lookup (const char *undef_name, unsigned long int hash,
}
/* Search loaded objects' symbol tables for a definition of the symbol
UNDEF_NAME. FLAGS is a set of flags. If DL_LOOKUP_NOEXEC is set,
then don't search the executable for a definition; this used for
copy relocs. If DL_LOOKUP_NOPLT is set, then a PLT entry cannot
satisfy the reference; some different binding must be found. */
UNDEF_NAME. */
ElfW(Addr)
_dl_lookup_symbol (const char *undef_name, const ElfW(Sym) **ref,
struct link_map *symbol_scope[],
const char *reference_name,
int flags)
int reloc_type)
{
const unsigned long int hash = _dl_elf_hash (undef_name);
struct sym_val current_value = { 0, NULL };
@@ -205,9 +204,9 @@ _dl_lookup_symbol (const char *undef_name, const ElfW(Sym) **ref,
/* Search the relevant loaded objects for a definition. */
for (scope = symbol_scope; *scope; ++scope)
if (do_lookup (undef_name, hash, ref, &current_value,
if (do_lookup (undef_name, hash, *ref, &current_value,
(*scope)->l_searchlist, 0, (*scope)->l_nsearchlist,
reference_name, NULL, NULL, flags))
reference_name, NULL, NULL, reloc_type))
break;
if (current_value.s == NULL &&
@@ -230,8 +229,7 @@ ElfW(Addr)
_dl_lookup_symbol_skip (const char *undef_name, const ElfW(Sym) **ref,
struct link_map *symbol_scope[],
const char *reference_name,
struct link_map *skip_map,
int flags)
struct link_map *skip_map)
{
const unsigned long int hash = _dl_elf_hash (undef_name);
struct sym_val current_value = { 0, NULL };
@@ -243,13 +241,13 @@ _dl_lookup_symbol_skip (const char *undef_name, const ElfW(Sym) **ref,
for (i = 0; (*scope)->l_dupsearchlist[i] != skip_map; ++i)
assert (i < (*scope)->l_ndupsearchlist);
if (! do_lookup (undef_name, hash, ref, &current_value,
if (! do_lookup (undef_name, hash, *ref, &current_value,
(*scope)->l_dupsearchlist, i, (*scope)->l_ndupsearchlist,
reference_name, NULL, skip_map, flags))
reference_name, NULL, skip_map, 0))
while (*++scope)
if (do_lookup (undef_name, hash, ref, &current_value,
if (do_lookup (undef_name, hash, *ref, &current_value,
(*scope)->l_dupsearchlist, 0, (*scope)->l_ndupsearchlist,
reference_name, NULL, skip_map, flags))
reference_name, NULL, skip_map, 0))
break;
*ref = current_value.s;
@@ -266,7 +264,8 @@ ElfW(Addr)
_dl_lookup_versioned_symbol (const char *undef_name, const ElfW(Sym) **ref,
struct link_map *symbol_scope[],
const char *reference_name,
const struct r_found_version *version, int flags)
const struct r_found_version *version,
int reloc_type)
{
const unsigned long int hash = _dl_elf_hash (undef_name);
struct sym_val current_value = { 0, NULL };
@@ -275,9 +274,9 @@ _dl_lookup_versioned_symbol (const char *undef_name, const ElfW(Sym) **ref,
/* Search the relevant loaded objects for a definition. */
for (scope = symbol_scope; *scope; ++scope)
{
int res = do_lookup (undef_name, hash, ref, &current_value,
int res = do_lookup (undef_name, hash, *ref, &current_value,
(*scope)->l_searchlist, 0, (*scope)->l_nsearchlist,
reference_name, version, NULL, flags);
reference_name, version, NULL, reloc_type);
if (res > 0)
break;
@@ -312,8 +311,7 @@ _dl_lookup_versioned_symbol_skip (const char *undef_name,
struct link_map *symbol_scope[],
const char *reference_name,
const struct r_found_version *version,
struct link_map *skip_map,
int flags)
struct link_map *skip_map)
{
const unsigned long int hash = _dl_elf_hash (undef_name);
struct sym_val current_value = { 0, NULL };
@@ -325,13 +323,13 @@ _dl_lookup_versioned_symbol_skip (const char *undef_name,
for (i = 0; (*scope)->l_dupsearchlist[i] != skip_map; ++i)
assert (i < (*scope)->l_ndupsearchlist);
if (! do_lookup (undef_name, hash, ref, &current_value,
if (! do_lookup (undef_name, hash, *ref, &current_value,
(*scope)->l_dupsearchlist, i, (*scope)->l_ndupsearchlist,
reference_name, version, skip_map, flags))
reference_name, version, skip_map, 0))
while (*++scope)
if (do_lookup (undef_name, hash, ref, &current_value,
if (do_lookup (undef_name, hash, *ref, &current_value,
(*scope)->l_dupsearchlist, 0, (*scope)->l_ndupsearchlist,
reference_name, version, skip_map, flags))
reference_name, version, skip_map, 0))
break;
*ref = current_value.s;
+4
View File
@@ -153,7 +153,11 @@ fixup (
*_dl_global_scope_end = NULL;
/* Return the address that was written by the relocation. */
#ifdef ELF_FIXUP_RETURNS_ADDRESS
return (ElfW(Addr))(l->l_addr + reloc->r_offset);
#else
return *(ElfW(Addr) *) (l->l_addr + reloc->r_offset);
#endif
}
+2 -2
View File
@@ -1,5 +1,5 @@
/* Support for dynamic linking code in static libc.
Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -62,7 +62,7 @@ _dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot)
int fd = __open (file, O_RDONLY);
if (fd < 0)
return NULL;
if (__fstat (fd, &st) < 0)
if (__fxstat (_STAT_VER, fd, &st) < 0)
result = NULL;
else
{
+1 -1
View File
@@ -334,7 +334,7 @@ _dl_check_all_versions (struct link_map *map, int verbose)
int result = 0;
for (l = map; l != NULL; l = l->l_next)
result |= _dl_check_map_versions (l, verbose);
result |= l->l_opencount != 0 && _dl_check_map_versions (l, verbose);
return result;
}
+7 -6
View File
@@ -20,13 +20,14 @@
#include <link.h>
#include <dlfcn.h>
static void
dlclose_doit (void *handle)
{
_dl_close (handle);
}
int
dlclose (void *handle)
{
void doit (void)
{
_dl_close (handle);
}
return _dlerror_run (doit) ? -1 : 0;
return _dlerror_run (dlclose_doit, handle) ? -1 : 0;
}
+2 -2
View File
@@ -64,7 +64,7 @@ dlerror (void)
}
int
_dlerror_run (void (*operate) (void))
_dlerror_run (void (*operate) (void *), void *args)
{
if (last_errstring != NULL)
/* Free the error string from the last failed command. This can
@@ -72,6 +72,6 @@ _dlerror_run (void (*operate) (void))
free (last_errstring);
last_errcode = _dl_catch_error (&last_errstring, &last_object_name,
operate);
operate, args);
return last_errstring != NULL;
}
+23 -7
View File
@@ -21,15 +21,31 @@
#include <link.h>
#include <dlfcn.h>
struct dlopen_args
{
/* The arguments for dlopen_doit. */
const char *file;
int mode;
/* The return value of dlopen_doit. */
struct link_map *new;
};
static void
dlopen_doit (void *a)
{
struct dlopen_args *args = (struct dlopen_args *) a;
args->new = _dl_open (args->file ?: "", args->mode);
}
void *
dlopen (const char *file, int mode)
{
struct link_map *new;
struct dlopen_args args;
args.file = file;
args.mode = mode;
void doit (void)
{
new = _dl_open (file ?: "", mode);
}
return _dlerror_run (doit) ? NULL : new;
return _dlerror_run (dlopen_doit, &args) ? NULL : args.new;
}
+62 -39
View File
@@ -22,48 +22,71 @@
#include <dlfcn.h>
#include <setjmp.h>
struct dlsym_args
{
/* The arguments to dlsym_doit. */
void *handle;
const char *name;
struct r_found_version version;
ElfW(Addr) caller;
/* The return values of dlsym_doit. */
ElfW(Addr) loadbase;
const ElfW(Sym) *ref;
};
static void
dlsym_doit (void *a)
{
struct dlsym_args *args = (struct dlsym_args *) a;
args->ref = NULL;
if (args->handle == NULL)
/* Search the global scope. */
args->loadbase = _dl_lookup_symbol (args->name, &args->ref,
&(_dl_global_scope
?: _dl_default_scope)[2],
NULL, 0);
else if (args->handle == RTLD_NEXT)
{
struct link_map *l, *match;
/* Find the highest-addressed object that CALLER is not below. */
match = NULL;
for (l = _dl_loaded; l; l = l->l_next)
if (args->caller >= l->l_addr && (!match || match->l_addr < l->l_addr))
match = l;
if (! match)
_dl_signal_error (0, NULL, _("\
RTLD_NEXT used in code not dynamically loaded"));
l = match;
while (l->l_loader)
l = l->l_loader;
args->loadbase = _dl_lookup_symbol_skip (args->name, &args->ref,
&_dl_loaded, NULL, l);
}
else
{
/* Search the scope of the given object. */
struct link_map *map = args->handle;
struct link_map *mapscope[2] = { map, NULL };
args->loadbase = _dl_lookup_symbol (args->name, &args->ref, mapscope,
map->l_name, 0);
}
}
void *
dlsym (void *handle, const char *name)
{
ElfW(Addr) caller = (ElfW(Addr)) __builtin_return_address (0);
ElfW(Addr) loadbase;
const ElfW(Sym) *ref = NULL;
void doit (void)
{
if (handle == NULL)
/* Search the global scope. */
loadbase = _dl_lookup_symbol
(name, &ref, &(_dl_global_scope ?: _dl_default_scope)[2], NULL, 0);
else if (handle == RTLD_NEXT)
{
struct link_map *l, *match;
struct dlsym_args args;
args.caller = (ElfW(Addr)) __builtin_return_address (0);
args.handle = handle;
args.name = name;
/* Find the highest-addressed object that CALLER is not below. */
match = NULL;
for (l = _dl_loaded; l; l = l->l_next)
if (caller >= l->l_addr && (!match || match->l_addr < l->l_addr))
match = l;
if (! match)
_dl_signal_error (0, NULL, _("\
RTLD_NEXT used in code not dynamically loaded"));
l = match;
while (l->l_loader)
l = l->l_loader;
loadbase = _dl_lookup_symbol_skip
(name, &ref, &_dl_loaded, NULL, l, 0);
}
else
{
/* Search the scope of the given object. */
struct link_map *map = handle;
struct link_map *mapscope[2] = { map, NULL };
loadbase = _dl_lookup_symbol (name, &ref, mapscope, map->l_name, 0);
}
}
return _dlerror_run (doit) ? NULL : (void *) (loadbase + ref->st_value);
return (_dlerror_run (dlsym_doit, &args)
? NULL : (void *) (args.loadbase + args.ref->st_value));
}
+69 -44
View File
@@ -24,57 +24,82 @@
#include <dl-hash.h>
struct dlvsym_args
{
/* The arguments to dlvsym_doit. */
void *handle;
const char *name;
struct r_found_version version;
ElfW(Addr) caller;
/* The return values of dlvsym_doit. */
ElfW(Addr) loadbase;
const ElfW(Sym) *ref;
};
static void
dlvsym_doit (void *a)
{
struct dlvsym_args *args = (struct dlvsym_args *)a;
args->ref = NULL;
if (args->handle == NULL)
/* Search the global scope. */
args->loadbase = _dl_lookup_versioned_symbol (args->name, &args->ref,
&(_dl_global_scope
?: _dl_default_scope)[2],
NULL, &args->version, 0);
else if (args->handle == RTLD_NEXT)
{
struct link_map *l, *match;
/* Find the highest-addressed object that CALLER is not below. */
match = NULL;
for (l = _dl_loaded; l; l = l->l_next)
if (args->caller >= l->l_addr && (!match || match->l_addr < l->l_addr))
match = l;
if (! match)
_dl_signal_error (0, NULL, _("\
RTLD_NEXT used in code not dynamically loaded"));
l = match;
while (l->l_loader)
l = l->l_loader;
args->loadbase = _dl_lookup_versioned_symbol_skip (args->name,
&args->ref,
&_dl_loaded,
NULL, &args->version,
l);
}
else
{
/* Search the scope of the given object. */
struct link_map *map = args->handle;
struct link_map *mapscope[2] = { map, NULL };
args->loadbase = _dl_lookup_versioned_symbol (args->name, &args->ref,
mapscope, map->l_name,
&args->version, 0);
}
}
void *
__dlvsym (void *handle, const char *name, const char *version_str)
{
ElfW(Addr) caller = (ElfW(Addr)) __builtin_return_address (0);
ElfW(Addr) loadbase;
struct r_found_version version;
const ElfW(Sym) *ref = NULL;
void doit (void)
{
if (handle == NULL)
/* Search the global scope. */
loadbase = _dl_lookup_versioned_symbol
(name, &ref, &(_dl_global_scope ?: _dl_default_scope)[2], NULL,
&version, 0);
else if (handle == RTLD_NEXT)
{
struct link_map *l, *match;
struct dlvsym_args args;
/* Find the highest-addressed object that CALLER is not below. */
match = NULL;
for (l = _dl_loaded; l; l = l->l_next)
if (caller >= l->l_addr && (!match || match->l_addr < l->l_addr))
match = l;
if (! match)
_dl_signal_error (0, NULL, _("\
RTLD_NEXT used in code not dynamically loaded"));
l = match;
while (l->l_loader)
l = l->l_loader;
loadbase = _dl_lookup_versioned_symbol_skip
(name, &ref, &_dl_loaded, NULL, &version, l, 0);
}
else
{
/* Search the scope of the given object. */
struct link_map *map = handle;
struct link_map *mapscope[2] = { map, NULL };
loadbase = _dl_lookup_versioned_symbol
(name, &ref, mapscope, map->l_name, &version, 0);
}
}
args.handle = handle;
args.name = name;
args.caller = (ElfW(Addr)) __builtin_return_address (0);
/* Compute hash value to the version string. */
version.name = version_str;
version.hash = _dl_elf_hash (version_str);
args.version.name = version_str;
args.version.hash = _dl_elf_hash (version_str);
/* We don't have a specific file where the symbol can be found. */
version.filename = NULL;
args.version.filename = NULL;
return _dlerror_run (doit) ? NULL : (void *) (loadbase + ref->st_value);
return (_dlerror_run (dlvsym_doit, &args)
? NULL : (void *) (args.loadbase + args.ref->st_value));
}
weak_alias (__dlvsym, dlvsym)
+65
View File
@@ -915,6 +915,71 @@ typedef Elf32_Addr Elf32_Conflict;
#define R_ALPHA_JMP_SLOT 26 /* Create PLT entry */
#define R_ALPHA_RELATIVE 27 /* Adjust by program base */
/* PowerPC specific declarations */
/* PowerPC relocations defined by the ABIs */
#define R_PPC_NONE 0
#define R_PPC_ADDR32 1
#define R_PPC_ADDR24 2
#define R_PPC_ADDR16 3
#define R_PPC_ADDR16_LO 4
#define R_PPC_ADDR16_HI 5
#define R_PPC_ADDR16_HA 6
#define R_PPC_ADDR14 7
#define R_PPC_ADDR14_BRTAKEN 8
#define R_PPC_ADDR14_BRNTAKEN 9
#define R_PPC_REL24 10
#define R_PPC_REL14 11
#define R_PPC_REL14_BRTAKEN 12
#define R_PPC_REL14_BRNTAKEN 13
#define R_PPC_GOT16 14
#define R_PPC_GOT16_LO 15
#define R_PPC_GOT16_HI 16
#define R_PPC_GOT16_HA 17
#define R_PPC_PLTREL24 18
#define R_PPC_COPY 19
#define R_PPC_GLOB_DAT 20
#define R_PPC_JMP_SLOT 21
#define R_PPC_RELATIVE 22
#define R_PPC_LOCAL24PC 23
#define R_PPC_UADDR32 24
#define R_PPC_UADDR16 25
#define R_PPC_REL32 26
#define R_PPC_PLT32 27
#define R_PPC_PLTREL32 28
#define R_PPC_PLT16_LO 29
#define R_PPC_PLT16_HI 30
#define R_PPC_PLT16_HA 31
#define R_PPC_SDAREL16 32
#define R_PPC_SECTOFF 33
#define R_PPC_SECTOFF_LO 34
#define R_PPC_SECTOFF_HI 35
#define R_PPC_SECTOFF_HA 36
/* The remaining relocs are from the Embedded ELF ABI, and are not
in the SVR4 ELF ABI. */
#define R_PPC_EMB_NADDR32 101
#define R_PPC_EMB_NADDR16 102
#define R_PPC_EMB_NADDR16_LO 103
#define R_PPC_EMB_NADDR16_HI 104
#define R_PPC_EMB_NADDR16_HA 105
#define R_PPC_EMB_SDAI16 106
#define R_PPC_EMB_SDA2I16 107
#define R_PPC_EMB_SDA2REL 108
#define R_PPC_EMB_SDA21 109
#define R_PPC_EMB_MRKREF 110
#define R_PPC_EMB_RELSEC16 111
#define R_PPC_EMB_RELST_LO 112
#define R_PPC_EMB_RELST_HI 113
#define R_PPC_EMB_RELST_HA 114
#define R_PPC_EMB_BIT_FLD 115
#define R_PPC_EMB_RELSDA 116
/* This is a phony reloc to handle any old fashioned TOC16 references
that may still be in object files. */
#define R_PPC_TOC16 255
__END_DECLS
#endif /* elf.h */
+33 -13
View File
@@ -69,6 +69,7 @@ Report bugs using the \`glibcbug' script to <bugs@gnu.ai.mit.edu>."
esac
done
add_env="LD_TRACE_LOADED_OBJECTS=1 LD_WARN=$warn LD_BIND_NOW=$bind_now"
case $# in
0)
echo >&2 $"ldd: missing file arguments"
@@ -86,20 +87,29 @@ case $# in
elif test -r "$file"; then
test -x "$file" ||
echo $"ldd: warning: you do not have execution permission for" "\`$file'"
if ${RTLD} --verify "$file"; then
LD_TRACE_LOADED_OBJECTS=1 LD_WARN=$warn LD_BIND_NOW=$bind_now \
exec ${RTLD} ${RELOCS} "$file" || exit 1
else
echo $" not a dynamic executable"
exit 1
fi
${RTLD} --verify "$file"
case $? in
0)
eval $add_env exec '"$file"' || exit 1
;;
1)
echo $" not a dynamic executable"
exit 1
;;
2)
eval $add_env exec \${RTLD} '"$file"' || exit 1
;;
*)
echo $"ldd: ${RTLD} exited with unknown exit code ($?)" >&2
exit 1
;;
esac
else
echo $"ldd: error: you do not have read permission for" "\`$file'"
exit 1
fi
exit ;;
*)
set -e # Bail out immediately if ${RTLD} loses on any argument.
result=0
for file; do
echo "${file}:"
@@ -113,13 +123,23 @@ case $# in
elif test -r "$file"; then
test -x "$file" || echo $"\
ldd: warning: you do not have execution permission for" "\`$file'"
if ${RTLD} --verify "$file"; then
LD_TRACE_LOADED_OBJECTS=1 LD_WARN=$warn LD_BIND_NOW=$bind_now \
${RTLD} ${RELOCS} "$file" || result=1
else
${RTLD} --verify "$file"
case $? in
0)
eval $add_env '"$file"' || result=1
;;
1)
echo $" not a dynamic executable"
result=1
fi
;;
2)
eval $add_env ${RTLD} '"$file"' || result=1
;;
*)
echo $"ldd: ${RTLD} exited with unknown exit code ($?)" >&2
exit 1
;;
esac
else
echo $"ldd: error: you do not have read permission for" "\`$file'"
result=1
+31 -10
View File
@@ -66,6 +66,7 @@ Try \`ldd --help' for more information."
esac
done
add_env="LD_TRACE_LOADED_OBJECTS=1 LD_WARN=$warn LD_BIND_NOW=$bind_now"
case $# in
0)
echo >&2 "\
@@ -85,13 +86,23 @@ Try \`ldd --help' for more information."
if test -r "$file"; then
test -x "$file" ||
echo "ldd: warning: you do not have execution permission for \`$file'"
if ${RTLD} --verify "$file"; then
LD_TRACE_LOADED_OBJECTS=1 LD_WARN=$warn LD_BIND_NOW=$bind_now \
exec ${RTLD} "$file" || exit 1
else
${RTLD} --verify "$file"
case $? in
0)
eval $add_env exec '"$file"' || exit 1
;;
1)
echo ' not a dynamic executable'
exit 1
fi
;;
2)
eval $add_env exec \${RTLD} '"$file"' || exit 1
;;
*)
echo "ldd: ${RTLD} exited with unknown exit code ($?)" >&2
exit 1
;;
esac
else
echo "ldd: error: you do not have read permission for \`$file'"
exit 1
@@ -114,13 +125,23 @@ Try \`ldd --help' for more information."
if test -r "$file"; then
test -x "$file" || echo "\
ldd: warning: you do not have execution permission for \`$file'"
if ${RTLD} --verify "$file"; then
LD_TRACE_LOADED_OBJECTS=1 LD_WARN=$warn LD_BIND_NOW=$bind_now \
${RTLD} "$file" || result=1
else
${RTLD} --verify "$file"
case $? in
0)
eval $add_env '"$file"' || result=1
;;
1)
echo ' not a dynamic executable'
result=1
fi
;;
2)
eval $add_env ${RTLD} '"$file"' || result=1
;;
*)
echo "ldd: ${RTLD} exited with unknown exit code ($?)" >&2
exit 1
;;
esac
else
echo "ldd: error: you do not have read permission for \`$file'"
result=1
+22 -19
View File
@@ -18,9 +18,12 @@
Boston, MA 02111-1307, USA. */
#ifndef _LINK_H
#define _LINK_H 1
#include <features.h>
#define __need_size_t
#define __need_NULL
#include <stddef.h>
#include <elf.h>
@@ -235,21 +238,26 @@ extern void _dl_signal_error (int errcode,
error, *ERRSTRING is set to null. If there is an error, *ERRSTRING and
*OBJECT are set to the strings passed to _dl_signal_error, and the error
code passed is the return value. ERRSTRING if nonzero points to a
malloc'ed string which the caller has to free after use. */
malloc'ed string which the caller has to free after use.
ARGS is passed as argument to OPERATE. */
extern int _dl_catch_error (char **errstring,
const char **object,
void (*operate) (void));
void (*operate) (void *),
void *args);
/* Call OPERATE, receiving errors from `dl_signal_error'. Unlike
`_dl_catch_error' the operation is resumed after the OPERATE
function returns. */
extern void _dl_receive_error (receiver_fct fct, void (*operate) (void));
function returns.
ARGS is passed as argument to OPERATE. */
extern void _dl_receive_error (receiver_fct fct, void (*operate) (void *),
void *args);
/* Helper function for <dlfcn.h> functions. Runs the OPERATE function via
_dl_catch_error. Returns zero for success, nonzero for failure; and
arranges for `dlerror' to return the error details. */
extern int _dlerror_run (void (*operate) (void));
arranges for `dlerror' to return the error details.
ARGS is passed as argument to OPERATE. */
extern int _dlerror_run (void (*operate) (void *), void *args);
/* Open the shared object NAME and map in its segments.
@@ -287,18 +295,15 @@ extern void _dl_close (struct link_map *map);
null-terminated list of object scopes to search; each object's
l_searchlist (i.e. the segment of the dependency tree starting at that
object) is searched in turn. REFERENCE_NAME should name the object
containing the reference; it is used in error messages. FLAGS is a
set of flags: */
#define DL_LOOKUP_NOEXEC 1 /* Don't search the executable for a
definition; this is used for copy
relocs. */
#define DL_LOOKUP_NOPLT 2 /* The reference must not be resolved
to a PLT entry. */
containing the reference; it is used in error messages.
RELOC_TYPE is a machine-dependent reloc type, which is passed to
the `elf_machine_lookup_*_p' macros in dl-machine.h to affect which
symbols can be chosen. */
extern ElfW(Addr) _dl_lookup_symbol (const char *undef,
const ElfW(Sym) **sym,
struct link_map *symbol_scope[],
const char *reference_name,
int flags);
int reloc_type);
/* Lookup versioned symbol. */
extern ElfW(Addr) _dl_lookup_versioned_symbol (const char *undef,
@@ -306,15 +311,14 @@ extern ElfW(Addr) _dl_lookup_versioned_symbol (const char *undef,
struct link_map *symbol_scope[],
const char *reference_name,
const struct r_found_version *version,
int flags);
int reloc_type);
/* For handling RTLD_NEXT we must be able to skip shared objects. */
extern ElfW(Addr) _dl_lookup_symbol_skip (const char *undef,
const ElfW(Sym) **sym,
struct link_map *symbol_scope[],
const char *reference_name,
struct link_map *skip_this,
int flags);
struct link_map *skip_this);
/* For handling RTLD_NEXT with versioned symbols we must be able to
skip shared objects. */
@@ -323,8 +327,7 @@ extern ElfW(Addr) _dl_lookup_versioned_symbol_skip (const char *undef,
struct link_map *symbol_scope[],
const char *reference_name,
const struct r_found_version *version,
struct link_map *skip_this,
int flags);
struct link_map *skip_this);
/* Look up symbol NAME in MAP's scope and return its run-time address. */
extern ElfW(Addr) _dl_symbol_value (struct link_map *map, const char *name);
+117 -77
View File
@@ -79,7 +79,7 @@ RTLD_START
#error "sysdeps/MACHINE/dl-machine.h fails to define RTLD_START"
#endif
ElfW(Addr)
static ElfW(Addr)
_dl_start (void *arg)
{
struct link_map bootstrap_map;
@@ -106,6 +106,7 @@ _dl_start (void *arg)
ELF_DYNAMIC_RELOCATE (&bootstrap_map, 0);
elf_machine_runtime_setup (&bootstrap_map, 0);
/* Now life is sane; we can call functions and access global data.
Set up to use the operating system facilities, and find out from
@@ -139,6 +140,55 @@ _dl_start (void *arg)
void _start (void);
/* Some helper functions. */
/* Arguments to relocate_doit. */
struct relocate_args
{
struct link_map *l;
int lazy;
};
struct map_args
{
/* Argument to map_doit. */
char *str;
/* Return value of map_doit. */
struct link_map *main_map;
};
/* Arguments to version_check_doit. */
struct version_check_args
{
struct link_map *main_map;
int doexit;
};
static void
relocate_doit (void *a)
{
struct relocate_args *args = (struct relocate_args *) a;
_dl_relocate_object (args->l, _dl_object_relocation_scope (args->l),
args->lazy);
}
static void
map_doit (void *a)
{
struct map_args *args = (struct map_args *)a;
args->main_map = _dl_map_object (NULL, args->str, lt_library, 0);
}
static void
version_check_doit (void *a)
{
struct version_check_args *args = (struct version_check_args *)a;
if (_dl_check_all_versions (args->main_map, 1) && args->doexit)
/* We cannot start the application. Abort now. */
_exit (1);
}
unsigned int _dl_skip_args; /* Nonzero if we were run directly. */
static void
@@ -147,7 +197,7 @@ dl_main (const ElfW(Phdr) *phdr,
ElfW(Addr) *user_entry)
{
const ElfW(Phdr) *ph;
struct link_map *l;
struct link_map *main_map;
int lazy;
enum { normal, list, verify, trace } mode;
struct link_map **preloads;
@@ -155,6 +205,7 @@ dl_main (const ElfW(Phdr) *phdr,
const char *preloadlist;
size_t file_size;
char *file;
int has_interp = 0;
mode = getenv ("LD_TRACE_LOADED_OBJECTS") != NULL ? trace : normal;
@@ -232,14 +283,13 @@ of this helper program; chances are you did not intend to run this program.\n",
if (mode == verify)
{
void doit (void)
{
l = _dl_map_object (NULL, _dl_argv[0], lt_library, 0);
}
char *err_str = NULL;
const char *obj_name __attribute__ ((unused));
struct map_args args;
(void) _dl_catch_error (&err_str, &obj_name, doit);
args.str = _dl_argv[0];
(void) _dl_catch_error (&err_str, &obj_name, map_doit, &args);
main_map = args.main_map;
if (err_str != NULL)
{
free (err_str);
@@ -247,37 +297,24 @@ of this helper program; chances are you did not intend to run this program.\n",
}
}
else
l = _dl_map_object (NULL, _dl_argv[0], lt_library, 0);
main_map = _dl_map_object (NULL, _dl_argv[0], lt_library, 0);
phdr = l->l_phdr;
phent = l->l_phnum;
l->l_name = (char *) "";
*user_entry = l->l_entry;
phdr = main_map->l_phdr;
phent = main_map->l_phnum;
main_map->l_name = (char *) "";
*user_entry = main_map->l_entry;
}
else
{
/* Create a link_map for the executable itself.
This will be what dlopen on "" returns. */
l = _dl_new_object ((char *) "", "", lt_executable);
if (l == NULL)
main_map = _dl_new_object ((char *) "", "", lt_executable);
if (main_map == NULL)
_dl_sysdep_fatal ("cannot allocate memory for link map", NULL);
l->l_phdr = phdr;
l->l_phnum = phent;
l->l_entry = *user_entry;
}
if (l != _dl_loaded)
{
/* GDB assumes that the first element on the chain is the
link_map for the executable itself, and always skips it.
Make sure the first one is indeed that one. */
l->l_prev->l_next = l->l_next;
if (l->l_next)
l->l_next->l_prev = l->l_prev;
l->l_prev = NULL;
l->l_next = _dl_loaded;
_dl_loaded->l_prev = l;
_dl_loaded = l;
main_map->l_phdr = phdr;
main_map->l_phnum = phent;
main_map->l_entry = *user_entry;
main_map->l_opencount = 1;
}
/* Scan the program header table for the dynamic section. */
@@ -287,7 +324,7 @@ of this helper program; chances are you did not intend to run this program.\n",
case PT_DYNAMIC:
/* This tells us where to find the dynamic section,
which tells us everything we need to do. */
l->l_ld = (void *) l->l_addr + ph->p_vaddr;
main_map->l_ld = (void *) main_map->l_addr + ph->p_vaddr;
break;
case PT_INTERP:
/* This "interpreter segment" was used by the program loader to
@@ -296,9 +333,10 @@ of this helper program; chances are you did not intend to run this program.\n",
dlopen call or DT_NEEDED entry, for something that wants to link
against the dynamic linker as a shared library, will know that
the shared object is already loaded. */
_dl_rtld_libname.name = (const char *) l->l_addr + ph->p_vaddr;
_dl_rtld_libname.name = (const char *) main_map->l_addr + ph->p_vaddr;
_dl_rtld_libname.next = NULL;
_dl_rtld_map.l_libname = &_dl_rtld_libname;
has_interp = 1;
break;
}
if (! _dl_rtld_map.l_libname && _dl_rtld_map.l_name)
@@ -315,25 +353,24 @@ of this helper program; chances are you did not intend to run this program.\n",
if (mode == verify)
/* We were called just to verify that this is a dynamic executable
using us as the program interpreter. */
_exit (l->l_ld == NULL ? EXIT_FAILURE : EXIT_SUCCESS);
_exit (main_map->l_ld == NULL ? 1 : has_interp ? 0 : 2);
/* Extract the contents of the dynamic section for easy access. */
elf_get_dynamic_info (l->l_ld, l->l_info);
if (l->l_info[DT_HASH])
elf_get_dynamic_info (main_map->l_ld, main_map->l_info);
if (main_map->l_info[DT_HASH])
/* Set up our cache of pointers into the hash table. */
_dl_setup_hash (l);
_dl_setup_hash (main_map);
/* Put the link_map for ourselves on the chain so it can be found by
name. */
name. Note that at this point the global chain of link maps contains
exactly one element, which is pointed to by main_map. */
if (! _dl_rtld_map.l_name)
/* If not invoked directly, the dynamic linker shared object file was
found by the PT_INTERP name. */
_dl_rtld_map.l_name = (char *) _dl_rtld_map.l_libname->name;
_dl_rtld_map.l_type = lt_library;
while (l->l_next)
l = l->l_next;
l->l_next = &_dl_rtld_map;
_dl_rtld_map.l_prev = l;
main_map->l_next = &_dl_rtld_map;
_dl_rtld_map.l_prev = main_map;
/* We have two ways to specify objects to preload: via environment
variable and via the file /etc/ld.so.preload. The later can also
@@ -443,7 +480,7 @@ of this helper program; chances are you did not intend to run this program.\n",
/* Load all the libraries specified by DT_NEEDED entries. If LD_PRELOAD
specified some libraries to load, these are inserted before the actual
dependencies in the executable's searchlist for symbol resolution. */
_dl_map_object_deps (l, preloads, npreloads, mode == trace);
_dl_map_object_deps (main_map, preloads, npreloads, mode == trace);
#ifndef MAP_ANON
/* We are done mapping things, so close the zero-fill descriptor. */
@@ -463,11 +500,11 @@ of this helper program; chances are you did not intend to run this program.\n",
chain in symbol search order because gdb uses the chain's order as
its symbol search order. */
unsigned int i = 1;
while (l->l_searchlist[i] != &_dl_rtld_map)
while (main_map->l_searchlist[i] != &_dl_rtld_map)
++i;
_dl_rtld_map.l_prev = l->l_searchlist[i - 1];
_dl_rtld_map.l_next = (i + 1 < l->l_nsearchlist ?
l->l_searchlist[i + 1] : NULL);
_dl_rtld_map.l_prev = main_map->l_searchlist[i - 1];
_dl_rtld_map.l_next = (i + 1 < main_map->l_nsearchlist ?
main_map->l_searchlist[i + 1] : NULL);
assert (_dl_rtld_map.l_prev->l_next == _dl_rtld_map.l_next);
_dl_rtld_map.l_prev->l_next = &_dl_rtld_map;
if (_dl_rtld_map.l_next)
@@ -480,14 +517,10 @@ of this helper program; chances are you did not intend to run this program.\n",
/* Now let us see whether all libraries are available in the
versions we need. */
{
void doit (void)
{
if (_dl_check_all_versions (l, 1) && mode == normal)
/* We cannot start the application. Abort now. */
_exit (1);
}
_dl_receive_error (print_missing_version, doit);
struct version_check_args args;
args.doexit = mode == normal;
args.main_map = main_map;
_dl_receive_error (print_missing_version, version_check_doit, &args);
}
if (mode != normal)
@@ -502,22 +535,26 @@ of this helper program; chances are you did not intend to run this program.\n",
if (! _dl_loaded->l_info[DT_NEEDED])
_dl_sysdep_message ("\t", "statically linked\n", NULL);
else
for (l = _dl_loaded->l_next; l; l = l->l_next)
if (l->l_opencount == 0)
/* The library was not found. */
_dl_sysdep_message ("\t", l->l_libname->name, " => not found\n",
NULL);
else
{
char buf[20], *bp;
buf[sizeof buf - 1] = '\0';
bp = _itoa (l->l_addr, &buf[sizeof buf - 1], 16, 0);
while ((size_t) (&buf[sizeof buf - 1] - bp)
< sizeof l->l_addr * 2)
*--bp = '0';
_dl_sysdep_message ("\t", l->l_libname->name, " => ", l->l_name,
" (0x", bp, ")\n", NULL);
}
{
struct link_map *l;
for (l = _dl_loaded->l_next; l; l = l->l_next)
if (l->l_opencount == 0)
/* The library was not found. */
_dl_sysdep_message ("\t", l->l_libname->name, " => not found\n",
NULL);
else
{
char buf[20], *bp;
buf[sizeof buf - 1] = '\0';
bp = _itoa (l->l_addr, &buf[sizeof buf - 1], 16, 0);
while ((size_t) (&buf[sizeof buf - 1] - bp)
< sizeof l->l_addr * 2)
*--bp = '0';
_dl_sysdep_message ("\t", l->l_libname->name, " => ",
l->l_name, " (0x", bp, ")\n", NULL);
}
}
if (mode != trace)
for (i = 1; i < _dl_argc; ++i)
@@ -526,7 +563,7 @@ of this helper program; chances are you did not intend to run this program.\n",
ElfW(Addr) loadbase = _dl_lookup_symbol (_dl_argv[i], &ref,
&_dl_default_scope[2],
"argument",
DL_LOOKUP_NOPLT);
ELF_MACHINE_RELOC_NOPLT);
char buf[20], *bp;
buf[sizeof buf - 1] = '\0';
bp = _itoa (ref->st_value, &buf[sizeof buf - 1], 16, 0);
@@ -542,10 +579,10 @@ of this helper program; chances are you did not intend to run this program.\n",
else if (lazy >= 0)
{
/* We have to do symbol dependency testing. */
void doit (void)
{
_dl_relocate_object (l, _dl_object_relocation_scope (l), lazy);
}
struct relocate_args args;
struct link_map *l;
args.lazy = lazy;
l = _dl_loaded;
while (l->l_next)
@@ -554,7 +591,8 @@ of this helper program; chances are you did not intend to run this program.\n",
{
if (l != &_dl_rtld_map && l->l_opencount > 0)
{
_dl_receive_error (print_unresolved, doit);
args.l = l;
_dl_receive_error (print_unresolved, relocate_doit, &args);
*_dl_global_scope_end = NULL;
}
l = l->l_prev;
@@ -574,6 +612,7 @@ of this helper program; chances are you did not intend to run this program.\n",
the dynamic linker out of order because it has no copy relocs (we
know that because it is self-contained). */
struct link_map *l;
l = _dl_loaded;
while (l->l_next)
l = l->l_next;
@@ -603,6 +642,7 @@ of this helper program; chances are you did not intend to run this program.\n",
{
/* Initialize _r_debug. */
struct r_debug *r = _dl_debug_initialize (_dl_rtld_map.l_addr);
struct link_map *l;
l = _dl_loaded;
+15 -4
View File
@@ -24,6 +24,7 @@
to specify the desired environment:
__STRICT_ANSI__ ISO Standard C.
_ISOC9X_SOURCE Extensions to ISO C 89 from ISO C 9x.
_POSIX_SOURCE IEEE Std 1003.1.
_POSIX_C_SOURCE If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2;
if >=199309L, add IEEE Std 1003.1b-1993
@@ -44,6 +45,7 @@
These are defined by this file and are used by the
header files to decide what to declare or define:
__USE_ISOC9X Define ISO C 9X things.
__USE_POSIX Define IEEE Std 1003.1 things.
__USE_POSIX2 Define IEEE Std 1003.2 things.
__USE_POSIX199309 Define IEEE Std 1003.1b things.
@@ -69,6 +71,7 @@
/* Undefine everything, so we get a clean slate. */
#undef __USE_ISOC9X
#undef __USE_POSIX
#undef __USE_POSIX2
#undef __USE_POSIX199309
@@ -102,6 +105,8 @@
/* If _GNU_SOURCE was defined by the user, turn on all the other features. */
#ifdef _GNU_SOURCE
#undef _ISOC9X_SOURCE
#define _ISOC9X_SOURCE 1
#undef _POSIX_SOURCE
#define _POSIX_SOURCE 1
#undef _POSIX_C_SOURCE
@@ -118,14 +123,20 @@
/* If nothing (other than _GNU_SOURCE) is defined,
define _BSD_SOURCE and _SVID_SOURCE. */
#if (!defined __STRICT_ANSI__ && !defined _POSIX_SOURCE && \
!defined _POSIX_C_SOURCE && !defined _XOPEN_SOURCE && \
!defined _XOPEN_SOURCE_EXTENDED && !defined _BSD_SOURCE && \
!defined _SVID_SOURCE)
#if (!defined __STRICT_ANSI__ && !defined _ISOC9X_SOURCE && \
!defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE && \
!defined _XOPEN_SOURCE && !defined _XOPEN_SOURCE_EXTENDED && \
!defined _BSD_SOURCE && !defined _SVID_SOURCE)
#define _BSD_SOURCE 1
#define _SVID_SOURCE 1
#endif
/* This is to enable the ISO C 9x extension. It will go away as soon
as this standard is officially released. */
#ifdef _ISOC9X_SOURCE
#define __USE_ISOC9X 1
#endif
/* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2
(and IEEE Std 1003.1b-1993 unless _XOPEN_SOURCE is defined). */
#if (!defined __STRICT_ANSI__ && !defined _POSIX_SOURCE && \
+1 -1
View File
@@ -232,7 +232,7 @@ sed -e "
/^>Fix:/,/^>[A-Za-z-]*:/s;$FIX_C;;
" $TEMP > $TEMP.x
if $MAIL_AGENT $BUGGLIBC < $TEMP.x; then
if $MAIL_AGENT < $TEMP.x; then
echo "$COMMAND: problem report sent"
xs=0; exit
else
+87 -40
View File
@@ -34,6 +34,7 @@
#include <sys/time.h>
#include <sys/gmon.h>
#include <sys/gmon_out.h>
#include <sys/uio.h>
#include <stdio.h>
#include <fcntl.h>
@@ -124,7 +125,7 @@ monstartup (lowpc, highpc)
cp = malloc (p->kcountsize + p->fromssize + p->tossize);
if (! cp)
{
ERR("monstartup: out of memory\n");
ERR(_("monstartup: out of memory\n"));
return;
}
bzero(cp, p->kcountsize + p->fromssize + p->tossize);
@@ -165,21 +166,26 @@ static void
write_hist (fd)
int fd;
{
const u_char tag = GMON_TAG_TIME_HIST;
struct gmon_hist_hdr thdr;
u_char tag = GMON_TAG_TIME_HIST;
struct gmon_hist_hdr thdr __attribute__ ((aligned (__alignof__ (char *))));
if (_gmonparam.kcountsize > 0)
{
thdr.low_pc = _gmonparam.lowpc;
thdr.high_pc = _gmonparam.highpc;
thdr.hist_size = _gmonparam.kcountsize / sizeof(HISTCOUNTER);
thdr.prof_rate = __profile_frequency();
strncpy(thdr.dimen, "seconds", sizeof(thdr.dimen));
struct iovec iov[3] =
{
{ &tag, sizeof (tag) },
{ &thdr, sizeof (struct gmon_hist_hdr) },
{ _gmonparam.kcount, _gmonparam.kcountsize }
};
*(char **) thdr.low_pc = (char *) _gmonparam.lowpc;
*(char **) thdr.high_pc = (char *) _gmonparam.highpc;
*(int *) thdr.hist_size = _gmonparam.kcountsize / sizeof (HISTCOUNTER);
*(int *) thdr.prof_rate = __profile_frequency ();
strncpy (thdr.dimen, "seconds", sizeof (thdr.dimen));
thdr.dimen_abbrev = 's';
write(fd, &tag, sizeof(tag));
write(fd, &thdr, sizeof(thdr));
write(fd, _gmonparam.kcount, _gmonparam.kcountsize);
__writev (fd, iov, 3);
}
}
@@ -188,12 +194,26 @@ static void
write_call_graph (fd)
int fd;
{
const u_char tag = GMON_TAG_CG_ARC;
struct gmon_cg_arc_record raw_arc;
#define NARCS_PER_WRITEV 32
u_char tag = GMON_TAG_CG_ARC;
struct gmon_cg_arc_record raw_arc[NARCS_PER_WRITEV]
__attribute__ ((aligned (__alignof__ (char*))));
int from_index, to_index, from_len;
u_long frompc;
struct iovec iov[2 * NARCS_PER_WRITEV];
int nfilled;
from_len = _gmonparam.fromssize / sizeof(*_gmonparam.froms);
for (nfilled = 0; nfilled < NARCS_PER_WRITEV; ++nfilled)
{
iov[2 * nfilled].iov_base = &tag;
iov[2 * nfilled].iov_len = sizeof (tag);
iov[2 * nfilled + 1].iov_base = &raw_arc[nfilled];
iov[2 * nfilled + 1].iov_len = sizeof (struct gmon_cg_arc_record);
}
nfilled = 0;
from_len = _gmonparam.fromssize / sizeof (*_gmonparam.froms);
for (from_index = 0; from_index < from_len; ++from_index)
{
if (_gmonparam.froms[from_index] == 0)
@@ -201,19 +221,25 @@ write_call_graph (fd)
frompc = _gmonparam.lowpc;
frompc += (from_index * _gmonparam.hashfraction
* sizeof(*_gmonparam.froms));
* sizeof (*_gmonparam.froms));
for (to_index = _gmonparam.froms[from_index];
to_index != 0;
to_index = _gmonparam.tos[to_index].link)
{
raw_arc.from_pc = frompc;
raw_arc.self_pc = _gmonparam.tos[to_index].selfpc;
raw_arc.count = _gmonparam.tos[to_index].count;
*(char **) raw_arc[nfilled].from_pc = (char *) frompc;
*(char **) raw_arc[nfilled].self_pc =
(char *)_gmonparam.tos[to_index].selfpc;
*(int *) raw_arc[nfilled].count = _gmonparam.tos[to_index].count;
write(fd, &tag, sizeof(tag));
write(fd, &raw_arc, sizeof(raw_arc));
if (++nfilled == NARCS_PER_WRITEV)
{
__writev (fd, iov, 2 * nfilled);
nfilled = 0;
}
}
}
if (nfilled > 0)
__writev (fd, iov, 2 * nfilled);
}
@@ -222,9 +248,23 @@ write_bb_counts (fd)
int fd;
{
struct __bb *grp;
const u_char tag = GMON_TAG_BB_COUNT;
int ncounts;
int i;
u_char tag = GMON_TAG_BB_COUNT;
size_t ncounts;
size_t i;
struct iovec bbhead[2] =
{
{ &tag, sizeof (tag) },
{ &ncounts, sizeof (ncounts) }
};
struct iovec bbbody[8];
size_t nfilled;
for (i = 0; i < (sizeof (bbbody) / sizeof (bbbody[0])); i += 2)
{
bbbody[i].iov_len = sizeof (grp->addresses[0]);
bbbody[i + 1].iov_len = sizeof (grp->counts[0]);
}
/* Write each group of basic-block info (all basic-blocks in a
compilation unit form a single group). */
@@ -232,13 +272,20 @@ write_bb_counts (fd)
for (grp = __bb_head; grp; grp = grp->next)
{
ncounts = grp->ncounts;
write(fd, &tag, sizeof(tag));
write(fd, &ncounts, sizeof(ncounts));
for (i = 0; i < ncounts; ++i)
__writev (fd, bbhead, 2);
for (nfilled = i = 0; i < ncounts; ++i)
{
write(fd, &grp->addresses[i], sizeof(grp->addresses[0]));
write(fd, &grp->counts[i], sizeof(grp->counts[0]));
if (nfilled > (sizeof (bbbody) / sizeof (bbbody[0])) - 2)
{
__writev (fd, bbbody, nfilled);
nfilled = 0;
}
bbbody[nfilled++].iov_base = (char *) &grp->addresses[i];
bbbody[nfilled++].iov_base = &grp->counts[i];
}
if (nfilled > 0)
__writev (fd, bbbody, nfilled);
}
}
@@ -246,31 +293,31 @@ write_bb_counts (fd)
void
_mcleanup ()
{
struct gmon_hdr ghdr;
struct gmon_hdr ghdr __attribute__ ((aligned (__alignof__ (int))));
int fd;
moncontrol(0);
fd = open("gmon.out", O_CREAT|O_TRUNC|O_WRONLY, 0666);
moncontrol (0);
fd = __open ("gmon.out", O_CREAT|O_TRUNC|O_WRONLY, 0666);
if (fd < 0)
{
perror("_mcleanup: gmon.out");
perror ("_mcleanup: gmon.out");
return;
}
/* write gmon.out header: */
memset(&ghdr, 0, sizeof(ghdr));
memcpy(&ghdr.cookie[0], GMON_MAGIC, sizeof(ghdr.cookie));
ghdr.version = GMON_VERSION;
write(fd, &ghdr, sizeof(ghdr));
memset (&ghdr, 0, sizeof (struct gmon_hdr));
memcpy (&ghdr.cookie[0], GMON_MAGIC, sizeof (ghdr.cookie));
*(int *) ghdr.version = GMON_VERSION;
__write (fd, &ghdr, sizeof (struct gmon_hdr));
/* write PC histogram: */
write_hist(fd);
write_hist (fd);
/* write call-graph: */
write_call_graph(fd);
write_call_graph (fd);
/* write basic-block execution counts: */
write_bb_counts(fd);
write_bb_counts (fd);
close(fd);
__close (fd);
}
+27 -21
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by David Mosberger <davidm@cs.arizona.edu>.
@@ -40,30 +40,36 @@ __BEGIN_DECLS
* always comes first in gmon.out and is then followed by a series
* records defined below.
*/
struct gmon_hdr {
char cookie[4];
int version;
int spare[3];
};
struct gmon_hdr
{
char cookie[4];
char version[4];
char spare[3 * 4];
};
/* types of records in this file: */
typedef enum {
GMON_TAG_TIME_HIST = 0, GMON_TAG_CG_ARC = 1, GMON_TAG_BB_COUNT = 2
} GMON_Record_Tag;
typedef enum
{
GMON_TAG_TIME_HIST = 0,
GMON_TAG_CG_ARC = 1,
GMON_TAG_BB_COUNT = 2
} GMON_Record_Tag;
struct gmon_hist_hdr {
unsigned long low_pc; /* base pc address of sample buffer */
unsigned long high_pc; /* max pc address of sampled buffer */
int hist_size; /* size of sample buffer */
int prof_rate; /* profiling clock rate */
char dimen[15]; /* phys. dim., usually "seconds" */
char dimen_abbrev; /* usually 's' for "seconds" */
};
struct gmon_hist_hdr
{
char low_pc[sizeof (char *)]; /* base pc address of sample buffer */
char high_pc[sizeof (char *)]; /* max pc address of sampled buffer */
char hist_size[4]; /* size of sample buffer */
char prof_rate[4]; /* profiling clock rate */
char dimen[15]; /* phys. dim., usually "seconds" */
char dimen_abbrev; /* usually 's' for "seconds" */
};
struct gmon_cg_arc_record {
unsigned long from_pc; /* address within caller's body */
unsigned long self_pc; /* address within callee's body */
int count; /* number of arc traversals */
struct gmon_cg_arc_record
{
char from_pc[sizeof (char *)]; /* address within caller's body */
char self_pc[sizeof (char *)]; /* address within callee's body */
char count[4]; /* number of arc traversals */
};
__END_DECLS
-3
View File
@@ -32,9 +32,6 @@ __BEGIN_DECLS
#define __need_size_t
#include <stddef.h>
#define __need_size_t
#include <stddef.h>
/* The group structure. */
struct group
+7 -1
View File
@@ -35,7 +35,13 @@ fchroot (int fd)
}));
if (! err)
_hurd_port_set (&_hurd_ports[INIT_PORT_CRDIR], dir);
{
file_t root;
err = __file_reparent (dir, MACH_PORT_NULL, &root);
__mach_port_deallocate (__mach_task_self (), dir);
if (! err)
_hurd_port_set (&_hurd_ports[INIT_PORT_CRDIR], root);
}
return err ? __hurd_fail (err) : 0;
}
+2 -1
View File
@@ -20,7 +20,8 @@
/* This is initialized in dtable.c when that gets linked in.
If dtable.c is not linked in, it will be zero. */
file_t (*_hurd_getdport_fn) (int fd);
static file_t (*_default_hurd_getdport_fn) (int fd) = 0;
weak_alias (_default_hurd_getdport_fn, _hurd_getdport_fn)
file_t
__getdport (int fd)
+9 -3
View File
@@ -109,11 +109,10 @@ extern pid_t _hurd_pid, _hurd_ppid, _hurd_pgrp;
extern int _hurd_orphaned;
/* This variable is incremented every time the process IDs change. */
unsigned int _hurd_pids_changed_stamp;
extern unsigned int _hurd_pids_changed_stamp;
/* This condition is broadcast every time the process IDs change. */
struct condition _hurd_pids_changed_sync;
extern struct condition _hurd_pids_changed_sync;
/* Unix `data break', for brk and sbrk.
If brk and sbrk are not used, this info will not be initialized or used. */
@@ -304,4 +303,11 @@ extern int hurd_check_cancel (void);
extern io_t __getdport (int fd), getdport (int fd);
#include <stdarg.h>
/* Write formatted output to PORT, a Mach port supporting the i/o protocol,
according to the format string FORMAT, using the argument list in ARG. */
int vpprintf (io_t port, const char *format, va_list arg);
#endif /* hurd.h */
+1
View File
@@ -60,6 +60,7 @@ enum __hurd_threadvar_index
_HURD_THREADVAR_ERRNO, /* `errno' value for this thread. */
_HURD_THREADVAR_SIGSTATE, /* This thread's `struct hurd_sigstate'. */
_HURD_THREADVAR_DYNAMIC_USER, /* Dynamically-assigned user variables. */
_HURD_THREADVAR_MALLOC, /* For use of malloc. */
_HURD_THREADVAR_MAX /* Default value for __hurd_threadvar_max. */
};
+2 -2
View File
@@ -40,7 +40,7 @@ _S_msg_add_auth (mach_port_t me,
if (err = __USEPORT (AUTH,
__auth_makeauth (port,
&addauth, 1, MACH_MSG_TYPE_MOVE_SEND,
&addauth, MACH_MSG_TYPE_MOVE_SEND, 1,
NULL, 0,
NULL, 0,
NULL, 0,
@@ -108,7 +108,7 @@ _S_msg_del_auth (mach_port_t me,
err = __USEPORT (AUTH, __auth_makeauth
(port,
NULL, 0, MACH_MSG_TYPE_COPY_SEND,
NULL, MACH_MSG_TYPE_COPY_SEND, 0,
newu, nu,
_hurd_id.aux.uids, _hurd_id.aux.nuids,
newg, ng,
+4 -1
View File
@@ -1,5 +1,5 @@
/* Handle faults in the signal thread.
Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -31,6 +31,9 @@
jmp_buf _hurdsig_fault_env;
struct hurd_signal_preemptor _hurdsig_fault_preemptor;
/* XXX temporary to deal with spelling fix */
weak_alias (_hurdsig_fault_preemptor, _hurdsig_fault_preempter)
static mach_port_t forward_sigexc;
kern_return_t
+2
View File
@@ -31,7 +31,9 @@ struct hurd_port *_hurd_ports;
unsigned int _hurd_nports;
mode_t _hurd_umask;
sigset_t _hurdsig_traced;
char **__libc_argv;
int __libc_argc;
error_t
+9 -1
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 92, 93, 94, 95, 96, 1996 Free Software Foundation, Inc.
/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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,6 +39,11 @@ thread_t _hurd_msgport_thread;
/* Thread which receives task-global signals. */
thread_t _hurd_sigthread;
/* These are set up by _hurdsig_init. */
unsigned long int __hurd_sigthread_stack_base;
unsigned long int __hurd_sigthread_stack_end;
unsigned long int *__hurd_sigthread_variables;
/* Linked-list of per-thread signal state. */
struct hurd_sigstate *_hurd_sigstates;
@@ -424,6 +429,9 @@ abort_all_rpcs (int signo, struct machine_thread_all_state *state, int live)
struct hurd_signal_preemptor *_hurdsig_preemptors;
sigset_t _hurdsig_preempted_set;
/* XXX temporary to deal with spelling fix */
weak_alias (_hurdsig_preemptors, _hurdsig_preempters)
/* Mask of stop signals. */
#define STOPSIGS (sigmask (SIGTTIN) | sigmask (SIGTTOU) | \
sigmask (SIGSTOP) | sigmask (SIGTSTP))
-9
View File
@@ -35,15 +35,6 @@
mach_port_t *_hurd_init_dtable;
mach_msg_type_number_t _hurd_init_dtablesize;
unsigned int __hurd_threadvar_max;
unsigned long int __hurd_threadvar_stack_mask;
unsigned long int __hurd_threadvar_stack_offset;
/* These are set up by _hurdsig_init. */
unsigned long int __hurd_sigthread_stack_base;
unsigned long int __hurd_sigthread_stack_end;
unsigned long int *__hurd_sigthread_variables;
extern void __mach_init (void);
/* Entry point. This is the first thing in the text segment.
+10 -3
View File
@@ -93,8 +93,15 @@ describe_port (string_t description, mach_port_t port)
}
/* Common defn so we don't link in the itimer code unnecessarily. */
thread_t _hurd_itimer_thread; /* XXX */
/* We want _HURD_ITIMER_THREAD, but don't want to link in the itimer code
unnecessarily. */
#if 0 /* libc.so.0.0 needs this defined, so make it a weak alias for now. */
extern thread_t _hurd_itimer_thread; /* XXX */
weak_extern (_hurd_itimer_thread)
#else
static thread_t default_hurd_itimer_thread;
weak_alias (default_hurd_itimer_thread, _hurd_itimer_thread)
#endif
kern_return_t
_S_msg_report_wait (mach_port_t msgport, thread_t thread,
@@ -105,7 +112,7 @@ _S_msg_report_wait (mach_port_t msgport, thread_t thread,
if (thread == _hurd_msgport_thread)
/* Cute. */
strcpy (description, "msgport");
else if (thread == _hurd_itimer_thread)
else if (&_hurd_msgport_thread && thread == _hurd_itimer_thread)
strcpy (description, "itimer");
else
{
+1 -1
View File
@@ -28,7 +28,7 @@ _hurd_set_host_config (const char *item, const char *value, size_t valuelen)
mach_msg_type_number_t nwrote;
file_t new, dir;
dir = __file_name_split (item, &item);
dir = __file_name_split (item, (char **)&item);
if (dir == MACH_PORT_NULL)
return -1;
+6 -8
View File
@@ -22,10 +22,9 @@
#include <hurd.h>
static ssize_t
pwrite (cookie, buf, n)
void *cookie;
const char *buf;
size_t n;
pwrite (void *cookie,
const char *buf,
size_t n)
{
error_t error = __io_write ((io_t) cookie, buf, n, -1,
(mach_msg_type_number_t *) &n);
@@ -38,10 +37,9 @@ pwrite (cookie, buf, n)
/* Write formatted output to PORT, a Mach port supporting the i/o protocol,
according to the format string FORMAT, using the argument list in ARG. */
int
vpprintf (port, format, arg)
io_t port;
const char *format;
va_list arg;
vpprintf (io_t port,
const char *format,
va_list arg)
{
int done;
FILE f;
+11 -7
View File
@@ -306,7 +306,6 @@ iruserok(raddr, superuser, ruser, luser)
struct stat sbuf;
struct passwd pwdbuf, *pwd;
FILE *hostf;
uid_t uid;
int first;
first = 1;
@@ -326,7 +325,7 @@ again:
char *buffer = __alloca (buflen);
first = 0;
if (getpwnam_r (luser, &pwdbuf, buffer, buflen, &pwd) < 0)
if (__getpwnam_r (luser, &pwdbuf, buffer, buflen, &pwd) < 0)
return -1;
dirlen = strlen (pwd->pw_dir);
@@ -339,10 +338,15 @@ again:
* reading an NFS mounted file system, can't read files that
* are protected read/write owner only.
*/
uid = geteuid();
(void)seteuid(pwd->pw_uid);
hostf = fopen(pbuf, "r");
(void)seteuid(uid);
if (__access (pbuf, R_OK) != 0)
hostf = NULL;
else
{
uid_t uid = geteuid ();
seteuid (pwd->pw_uid);
hostf = fopen (pbuf, "r");
seteuid (uid);
}
if (hostf == NULL)
return (-1);
@@ -390,7 +394,7 @@ __ivaliduser(hostf, raddr, luser, ruser)
size_t bufsize = 0;
ssize_t nread;
while ((nread = getline (&buf, &bufsize, hostf)) > 0) {
while ((nread = __getline (&buf, &bufsize, hostf)) > 0) {
buf[bufsize - 1] = '\0'; /* Make sure it's terminated. */
p = buf;
while (*p != '\n' && *p != ' ' && *p != '\t' && *p != '\0') {
+1 -1
View File
@@ -53,7 +53,7 @@ int
rexec(ahost, rport, name, pass, cmd, fd2p)
char **ahost;
int rport;
char *name, *pass, *cmd;
const char *name, *pass, *cmd;
int *fd2p;
{
struct sockaddr_in sin, sin2, from;
+320
View File
@@ -0,0 +1,320 @@
/* Check system header files for ISO 9899:1990 (ISO C) compliance.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jens Schweikhardt <schweikh@noc.dfn.de>, 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. */
/* This is a simple minded program that tries to find illegal macro
definitions in system header files. Illegal macro definitions are
those not from the implementation namespace (i.e. not starting with
an underscore) or not matching any identifier mandated by The
Standard. Some common macro names are considered okay, e.g. all those
beginning with E (which may be defined in <errno.h>) or ending in
_MAX. See the arrays prefix[] and suffix[] below for details.
In a compliant implementation no other macros can be defined, because
you could write strictly conforming programs that may fail to compile
due to syntax errors: suppose <stdio.h> defines PIPE_BUF, then the
conforming
#include <assert.h>
#include <stdio.h> <- or where the bogus macro is defined
#include <string.h>
#define STR(x) #x
#define XSTR(x) STR(x)
int main (void)
{
int PIPE_BUF = 0;
assert (strcmp ("PIPE_BUF", XSTR (PIPE_BUF)) == 0);
return 0;
}
is expected to compile and meet the assertion. If it does not, your
compiler compiles some other language than Standard C.
REQUIREMENTS:
This program calls gcc to get the list of defined macros. If you
don't have gcc you're probably out of luck unless your compiler or
preprocessor has something similar to gcc's -dM option. Tune
PRINT_MACROS in this case. This program assumes headers are found
under /usr/include and that there is a writable /tmp directory.
Tune SYSTEM_INCLUDE and TMPFILE if your system differs.
#define BROKEN_SYSTEM if system(NULL) bombs -- one more violation
of ISO C, by the way.
OUTPUT:
Each header file name is printed, followed by illegal macro names
and their definition. For the above example, you would see
...
/usr/include/stdio.h
#define PIPE_BUF 5120
...
If your implementation does not yet incorporate Amendment 1 you
will see messages about iso646.h, wctype.h and wchar.h not being
found. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TMPFILE "/tmp/macros"
#define HEADER_MAX 256
/* ISO C header names including Amendment 1 (without ".h" suffix). */
static char *header[] =
{
"assert", "ctype", "errno", "float", "iso646", "limits", "locale",
"math", "setjmp", "signal", "stdarg", "stddef", "stdio", "stdlib",
"string", "time", "wchar", "wctype"
};
/* Macros with these prefixes are considered okay. */
static char *prefix[] =
{
"_", "E", "is", "str", "mem", "SIG", "FLT_", "DBL_", "LDBL_",
"LC_", "wmem", "wcs"
};
/* Macros with these suffixes are considered okay. Will not work for
parametrized macros with arguments. */
static char *suffix[] =
{
"_MAX", "_MIN"
};
/* These macros are considered okay. In fact, these are just more prefixes. */
static char *macros[] =
{
"BUFSIZ", "CHAR_BIT", "CHAR_MAX", "CHAR_MIN", "CLOCKS_PER_SEC",
"DBL_DIG", "DBL_EPSILON", "DBL_MANT_DIG", "DBL_MAX",
"DBL_MAX_10_EXP", "DBL_MAX_EXP", "DBL_MIN", "DBL_MIN_10_EXP",
"DBL_MIN_EXP", "EDOM", "EILSEQ", "EOF", "ERANGE", "EXIT_FAILURE",
"EXIT_SUCCESS", "FILENAME_MAX", "FLT_DIG", "FLT_EPSILON",
"FLT_MANT_DIG", "FLT_MAX", "FLT_MAX_10_EXP", "FLT_MAX_EXP",
"FLT_MIN", "FLT_MIN_10_EXP", "FLT_MIN_EXP", "FLT_RADIX",
"FLT_ROUNDS", "FOPEN_MAX", "HUGE_VAL", "INT_MAX", "INT_MIN",
"LC_ALL", "LC_COLLATE", "LC_CTYPE", "LC_MONETARY", "LC_NUMERIC",
"LC_TIME", "LDBL_DIG", "LDBL_EPSILON", "LDBL_MANT_DIG", "LDBL_MAX",
"LDBL_MAX_10_EXP", "LDBL_MAX_EXP", "LDBL_MIN", "LDBL_MIN_10_EXP",
"LDBL_MIN_EXP", "LONG_MAX", "LONG_MIN", "L_tmpnam", "MB_CUR_MAX",
"MB_LEN_MAX", "NDEBUG", "NULL", "RAND_MAX", "SCHAR_MAX",
"SCHAR_MIN", "SEEK_CUR", "SEEK_END", "SEEK_SET", "SHRT_MAX",
"SHRT_MIN", "SIGABRT", "SIGFPE", "SIGILL", "SIGINT", "SIGSEGV",
"SIGTERM", "SIG_DFL", "SIG_ERR", "SIG_IGN", "TMP_MAX", "UCHAR_MAX",
"UINT_MAX", "ULONG_MAX", "USHRT_MAX", "WCHAR_MAX", "WCHAR_MIN",
"WEOF", "_IOFBF", "_IOLBF", "_IONBF", "abort", "abs", "acos",
"acosf", "acosl", "and", "and_eq", "asctime", "asin", "asinf",
"asinl", "assert", "atan", "atan2", "atan2f", "atan2l", "atanf",
"atanl", "atexit", "atof", "atoi", "atol", "bitand", "bitor",
"bsearch", "btowc", "calloc", "ceil", "ceilf", "ceill", "clearerr",
"clock", "clock_t", "compl", "cos", "cosf", "cosh", "coshf",
"coshl", "cosl", "ctime", "difftime", "div", "div_t", "errno",
"exit", "exp", "expf", "expl", "fabs", "fabsf", "fabsl", "fclose",
"feof", "ferror", "fflush", "fgetc", "fgetpos", "fgets", "fgetwc",
"fgetws", "floor", "floorf", "floorl", "fmod", "fmodf", "fmodl",
"fopen", "fprintf", "fputc", "fputs", "fputwc", "fputws", "fread",
"free", "freopen", "frexp", "frexpf", "frexpl", "fscanf", "fseek",
"fsetpos", "ftell", "fwide", "fwprintf", "fwrite", "fwscanf",
"getc", "getchar", "getenv", "gets", "getwc", "getwchar", "gmtime",
"isalnum", "isalpha", "iscntrl", "isdigit", "isgraph", "islower",
"isprint", "ispunct", "isspace", "isupper", "iswalnum", "iswalpha",
"iswcntrl", "iswctype", "iswdigit", "iswgraph", "iswlower",
"iswprint", "iswpunct", "iswspace", "iswupper", "iswxdigit",
"isxdigit", "labs", "ldexp", "ldexpf", "ldexpl", "ldiv", "ldiv_t",
"localeconv", "localtime", "log", "log10", "log10f", "log10l",
"logf", "logl", "longjmp", "malloc", "mblen", "mbrlen", "mbrtowc",
"mbsinit", "mbsrtowcs", "mbstate_t", "mbstowcs", "mbtowc", "memchr",
"memcmp", "memcpy", "memmove", "memset", "mktime", "modf", "modff",
"modfl", "not", "not_eq", "offsetof", "or", "or_eq", "perror",
"pow", "powf", "powl", "printf", "ptrdiff_t", "putc", "putchar",
"puts", "putwc", "putwchar", "qsort", "raise", "rand", "realloc",
"remove", "rename", "rewind", "scanf", "setbuf", "setjmp",
"setlocale", "setvbuf", "sig_atomic_t", "signal", "sin", "sinf",
"sinh", "sinhf", "sinhl", "sinl", "size_t", "sprintf", "sqrt",
"sqrtf", "sqrtl", "srand", "sscanf", "stderr", "stdin", "stdout",
"strcat", "strchr", "strcmp", "strcoll", "strcpy", "strcspn",
"strerror", "strftime", "strlen", "strncat", "strncmp", "strncpy",
"strpbrk", "strrchr", "strspn", "strstr", "strtod", "strtok",
"strtol", "strtoul", "strxfrm", "swprintf", "swscanf", "system",
"tan", "tanf", "tanh", "tanhf", "tanhl", "tanl", "time", "time_t",
"tmpfile", "tmpnam", "tolower", "toupper", "towctrans", "towlower",
"towupper", "ungetc", "ungetwc", "va_arg", "va_end", "va_start",
"vfprintf", "vfwprintf", "vprintf", "vsprintf", "vswprintf",
"vwprintf", "wchar_t", "wcrtomb", "wcscat", "wcschr", "wcscmp",
"wcscoll", "wcscpy", "wcscspn", "wcsftime", "wcslen", "wcsncat",
"wcsncmp", "wcsncpy", "wcspbrk", "wcsrchr", "wcsrtombs", "wcsspn",
"wcsstr", "wcstod", "wcstok", "wcstol", "wcstombs", "wcstoul",
"wcsxfrm", "wctob", "wctomb", "wctrans", "wctrans_t", "wctype",
"wctype_t", "wint_t", "wmemchr", "wmemcmp", "wmemcpy", "wmemmove",
"wmemset", "wprintf", "wscanf", "xor", "xor_eq"
};
#define NUMBER_OF_HEADERS (sizeof header / sizeof *header)
#define NUMBER_OF_PREFIXES (sizeof prefix / sizeof *prefix)
#define NUMBER_OF_SUFFIXES (sizeof suffix / sizeof *suffix)
#define NUMBER_OF_MACROS (sizeof macros / sizeof *macros)
/* The compiler we use (given on the command line). */
char *CC;
/* The -I parameters for CC to find all headers. */
char *INC;
static int check_header (const char *);
int
main (int argc, char *argv[])
{
int h;
int result = 0;
CC = argc > 1 ? argv[1] : "gcc";
INC = argc > 2 ? argv[2] : "";
if (system (NULL) == 0)
{
puts ("Sorry, no command processor.");
return EXIT_FAILURE;
}
for (h = 0; h < NUMBER_OF_HEADERS; ++h)
{
char file_name[HEADER_MAX];
sprintf (file_name, "%s.h", header[h]);
result |= check_header (file_name);
}
#if 0
/* The test suite should return errors but for now this is not
practical. Give a warning and ask the user to correct the bugs. */
return result;
#else
if (result)
fputs ("\
##########################################################################\n\
# The test suite found some problems with your system (see the generated #\n\
# isomac.out file). These are all violations of the ISO C rules and #\n\
# should be corrected. If the problem is in the libc, report it using #\n\
# the glibcbug script to <bugs@gnu.ai.mit.edu>. If it is a problem with #\n\
# your compiler, contact the compiler manufacturer. #\n\
##########################################################################\n",
stderr);
return 0;
#endif
}
static int
check_header (const char *file_name)
{
char line[BUFSIZ], *command;
FILE *input;
int result = 0;
static const char fmt[] = "\
echo \"#include <%s>\" |\
%s -E -dM -ansi -pedantic %s -D_LIBC -I. -I `%s --print-prog-name=include` -\
> %s";
command = malloc (sizeof fmt + strlen (file_name) + 2 * strlen (CC)
+ strlen (INC) + strlen (TMPFILE));
if (command == NULL)
{
puts ("No more memory.");
exit (1);
}
puts (file_name);
sprintf (command, fmt, file_name, CC, INC, CC, TMPFILE);
if (system (command))
{
puts ("system() returned nonzero");
result = 1;
}
free (command);
input = fopen (TMPFILE, "r");
if (input == NULL)
{
printf ("Could not read %s: ", TMPFILE);
perror (NULL);
return 1;
}
while (fgets (line, sizeof line, input) != NULL)
{
int i, okay = 0;
size_t endmac;
if (strlen (line) < 9 || line[7] != ' ')
{ /* "#define A" */
printf ("Malformed input, expected '#define MACRO'\ngot '%s'\n",
line);
result = 1;
continue;
}
for (i = 0; i < NUMBER_OF_PREFIXES; ++i)
{
if (!strncmp (line+8, prefix[i], strlen (prefix[i]))) {
++okay;
break;
}
}
if (okay)
continue;
for (i = 0; i < NUMBER_OF_MACROS; ++i)
{
if (!strncmp (line+8, macros[i], strlen (macros[i])))
{
++okay;
break;
}
}
if (okay)
continue;
/* Find next char after the macro identifier; this can be either
a space or an open parenthesis. */
endmac = strcspn (line + 8, " (");
if (line[8+endmac] == '\0')
{
printf ("malformed input, expected '#define MACRO VALUE'\n"
"got '%s'\n", line);
result = 1;
continue;
}
for (i = 0; i < NUMBER_OF_SUFFIXES; ++i)
{
size_t len = strlen (suffix[i]);
if (!strncmp (line + 8 + endmac - len, suffix[i], len))
{
++okay;
break;
}
}
if (!okay)
{
fputs (line, stdout);
result = 2;
}
}
fclose (input);
remove (TMPFILE);
return result;
}
/* EOF */
+1 -5
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -28,7 +28,3 @@ clearerr (fp)
_IO_clearerr (fp);
_IO_funlockfile (fp);
}
#ifdef _IO_MTSAFE_IO
weak_alias (clearerr, clearerr_locked)
#endif
-8
View File
@@ -36,11 +36,3 @@ _IO_feof (fp)
return result;
}
weak_alias (_IO_feof, feof)
#ifdef _IO_MTSAFE_IO
/* The feof implementation for libio does not require locking because
it only accesses once a single variable and this is already atomic
(at least at thread level). */
weak_alias (_IO_feof, feof_locked)
#endif
-5
View File
@@ -36,8 +36,3 @@ _IO_ferror (fp)
return result;
}
weak_alias (_IO_ferror, ferror)
#ifdef _IO_MTSAFE_IO
weak_alias (ferror, ferror_locked)
#endif
-1
View File
@@ -43,5 +43,4 @@ fileno (fp)
(at least at thread level). */
weak_alias (fileno, fileno_unlocked)
weak_alias (fileno, fileno_locked)
#endif
+3 -3
View File
@@ -138,8 +138,8 @@ DEFUN(_IO_file_close_it, (fp),
}
void
DEFUN(_IO_file_finish, (fp),
register _IO_FILE* fp)
DEFUN(_IO_file_finish, (fp, dummy),
register _IO_FILE* fp AND int dummy)
{
if (_IO_file_is_open(fp))
{
@@ -147,7 +147,7 @@ DEFUN(_IO_file_finish, (fp),
if (!(fp->_flags & _IO_DELETE_DONT_CLOSE))
_IO_SYSCLOSE (fp);
}
_IO_default_finish(fp);
_IO_default_finish(fp, 0);
}
_IO_FILE *
-2
View File
@@ -38,5 +38,3 @@ fputc (c, fp)
_IO_cleanup_region_end (1);
return result;
}
weak_alias (fputc, fputc_locked)
+2 -2
View File
@@ -481,8 +481,8 @@ DEFUN(_IO_default_sync, (fp),
current implementation, this function can get called twice! */
void
DEFUN(_IO_default_finish, (fp),
_IO_FILE *fp)
DEFUN(_IO_default_finish, (fp, dummy),
_IO_FILE *fp AND int dummy)
{
struct _IO_marker *mark;
if (fp->_IO_buf_base && !(fp->_flags & _IO_USER_BUF))
-6
View File
@@ -41,9 +41,3 @@ _IO_getc (fp)
}
#undef getc
weak_alias (_IO_getc, getc)
#ifdef _IO_MTSAFE_IO
# undef getc_locked
weak_alias (getc, getc_locked)
#endif
-6
View File
@@ -37,9 +37,3 @@ getchar ()
_IO_cleanup_region_end (1);
return result;
}
#ifdef _IO_MTSAFE_IO
# undef getchar_locked
weak_alias (getchar, getchar_locked)
#endif
-4
View File
@@ -44,7 +44,3 @@ _IO_fflush (fp)
}
weak_alias (_IO_fflush, fflush)
#ifdef _IO_MTSAFE_IO
weak_alias (_IO_fflush, fflush_locked)
#endif
+5 -5
View File
@@ -101,8 +101,8 @@ extern "C" {
/* The 'finish' function does any final cleaning up of an _IO_FILE object.
It does not delete (free) it, but does everything else to finalize it/
It matches the streambuf::~streambuf virtual destructor. */
typedef void (*_IO_finish_t) __P((_IO_FILE*)); /* finalize */
#define _IO_FINISH(FP) JUMP0(__finish, FP)
typedef void (*_IO_finish_t) __P((_IO_FILE*, int)); /* finalize */
#define _IO_FINISH(FP) JUMP1(__finish, FP, 0)
/* The 'overflow' hook flushes the buffer.
The second argument is a character, or EOF.
@@ -295,7 +295,7 @@ extern int _IO_seekmark __P((_IO_FILE *, struct _IO_marker *, int));
extern int _IO_default_underflow __P((_IO_FILE*));
extern int _IO_default_uflow __P((_IO_FILE*));
extern int _IO_default_doallocate __P((_IO_FILE*));
extern void _IO_default_finish __P((_IO_FILE *));
extern void _IO_default_finish __P((_IO_FILE *, int));
extern int _IO_default_pbackfail __P((_IO_FILE*, int));
extern _IO_FILE* _IO_default_setbuf __P((_IO_FILE *, char*, _IO_ssize_t));
extern _IO_size_t _IO_default_xsputn __P((_IO_FILE *, const void*, _IO_size_t));
@@ -352,7 +352,7 @@ extern _IO_ssize_t _IO_file_read __P((_IO_FILE*, void*, _IO_ssize_t));
extern int _IO_file_sync __P((_IO_FILE*));
extern int _IO_file_close_it __P((_IO_FILE*));
extern _IO_fpos_t _IO_file_seek __P((_IO_FILE *, _IO_off_t, int));
extern void _IO_file_finish __P((_IO_FILE*));
extern void _IO_file_finish __P((_IO_FILE*, int));
/* Other file functions. */
extern _IO_FILE* _IO_file_attach __P((_IO_FILE *, int));
@@ -366,7 +366,7 @@ extern int _IO_str_underflow __P((_IO_FILE*));
extern int _IO_str_overflow __P((_IO_FILE *, int));
extern int _IO_str_pbackfail __P((_IO_FILE*, int));
extern _IO_fpos_t _IO_str_seekoff __P((_IO_FILE*,_IO_off_t,int,int));
extern void _IO_str_finish __P ((_IO_FILE*));
extern void _IO_str_finish __P ((_IO_FILE*, int));
/* Other strfile functions */
extern void _IO_str_init_static __P((_IO_FILE *, char*, int, char*));
+5 -4
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -31,7 +31,7 @@ struct _IO_FILE_memstream
static int _IO_mem_sync __P ((_IO_FILE* fp));
static void _IO_mem_finish __P ((_IO_FILE* fp));
static void _IO_mem_finish __P ((_IO_FILE* fp, int));
static const struct _IO_jump_t _IO_mem_jumps =
@@ -124,8 +124,9 @@ _IO_mem_sync (fp)
static void
_IO_mem_finish (fp)
_IO_mem_finish (fp, dummy)
_IO_FILE* fp;
int dummy;
{
struct _IO_FILE_memstream *mp = (struct _IO_FILE_memstream *) fp;
@@ -139,5 +140,5 @@ _IO_mem_finish (fp)
fp->_IO_buf_base = NULL;
_IO_default_finish (fp);
_IO_default_finish (fp, 0);
}
+14 -20
View File
@@ -1,20 +1,20 @@
/* Copyright (C) 1991, 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is 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.
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. */
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 "libioP.h"
#include "stdio.h"
@@ -36,9 +36,3 @@ _IO_putc (c, fp)
}
#undef putc
weak_alias (_IO_putc, putc)
#ifdef _IO_MTSAFE_IO
# undef putc_locked
weak_alias (putc, putc_locked)
#endif
+14 -20
View File
@@ -1,20 +1,20 @@
/* Copyright (C) 1991, 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is 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.
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. */
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 "libioP.h"
#include "stdio.h"
@@ -33,9 +33,3 @@ putchar (c)
__libc_cleanup_region_end (1);
return result;
}
#ifdef _IO_MTSAFE_IO
# undef putchar_locked
weak_alias (putchar, putchar_locked)
#endif
+523 -209
View File
@@ -1,209 +1,191 @@
/* This is part of the iostream/stdio library, providing -*- C -*- I/O.
Define ANSI C stdio on top of C++ iostreams.
/* Define ISO C stdio on top of C++ iostreams.
Copyright (C) 1991, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
This 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 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.
This 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 this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
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. */
/*
* ISO C Standard: 4.9 INPUT/OUTPUT <stdio.h>
*/
#ifndef _STDIO_H
#define _STDIO_H
#if !defined __need_FILE
#define _STDIO_H 1
#include <features.h>
__BEGIN_DECLS
#define __need_size_t
#define __need_NULL
#include <stddef.h>
#include <gnu/types.h>
#endif /* Don't need FILE. */
#undef __need_FILE
#ifndef __FILE_defined
/* The opaque type of streams. */
typedef struct _IO_FILE FILE;
#define __FILE_defined 1
#endif /* FILE not defined. */
#ifdef _STDIO_H
#define _STDIO_USES_IOSTREAM
#include <libio.h>
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL (void*)0
#endif
#endif
/* The type of the second argument to `fgetpos' and `fsetpos'. */
typedef _G_fpos_t fpos_t;
#ifndef EOF
#define EOF (-1)
#endif
/* Generate a unique file name (and possibly open it with mode "w+b"). */
extern char *__stdio_gen_tempname __P ((char *__buf, size_t __bufsize,
__const char *__dir,
__const char *__pfx,
int __dir_search,
size_t *__lenptr,
FILE **__streamptr));
/* Print out MESSAGE on the error output and abort. */
extern void __libc_fatal __P ((__const char *__message))
__attribute__ ((__noreturn__));
/* The possibilities for the third argument to `setvbuf'. */
#define _IOFBF 0 /* Fully buffered. */
#define _IOLBF 1 /* Line buffered. */
#define _IONBF 2 /* No buffering. */
/* Default buffer size. */
#ifndef BUFSIZ
#define BUFSIZ _IO_BUFSIZ
#endif
#define _IOFBF 0 /* Fully buffered. */
#define _IOLBF 1 /* Line buffered. */
#define _IONBF 2 /* No buffering. */
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
/* define size_t. Crud in case <sys/types.h> has defined it. */
#if !defined(_SIZE_T) && !defined(_T_SIZE_) && !defined(_T_SIZE)
#if !defined(__SIZE_T) && !defined(_SIZE_T_) && !defined(___int_size_t_h)
#if !defined(_GCC_SIZE_T) && !defined(_SIZET_)
#define _SIZE_T
#define _T_SIZE_
#define _T_SIZE
#define __SIZE_T
#define _SIZE_T_
#define ___int_size_t_h
#define _GCC_SIZE_T
#define _SIZET_
typedef _IO_size_t size_t;
#endif
#endif
/* End of file character.
Some things throughout the library rely on this being -1. */
#ifndef EOF
#define EOF (-1)
#endif
typedef struct _IO_FILE FILE;
typedef _IO_fpos_t fpos_t;
#include <stdio_lim.h>
/* The possibilities for the third argument to `fseek'.
These values should not be changed. */
#define SEEK_SET 0 /* Seek from beginning of file. */
#define SEEK_CUR 1 /* Seek from current position. */
#define SEEK_END 2 /* Seek from end of file. */
#ifdef __USE_SVID
/* Default path prefix for `tempnam' and `tmpnam'. */
#define P_tmpdir "/tmp"
#endif
/* For use by debuggers. These are linked in if printf or fprintf are used. */
extern FILE *stdin, *stdout, *stderr; /* TODO */
/* Get the values:
L_tmpnam How long an array of chars must be to be passed to `tmpnam'.
TMP_MAX The minimum number of unique filenames generated by tmpnam
(and tempnam when it uses tmpnam's name space),
or tempnam (the two are separate).
L_ctermid How long an array to pass to `ctermid'.
L_cuserid How long an array to pass to `cuserid'.
FOPEN_MAX Minimum number of files that can be open at once.
FILENAME_MAX Maximum length of a filename. */
#include <stdio_lim.h>
/* Standard streams. */
extern FILE *stdin, *stdout, *stderr;
/* Refer to the real names by default. */
#define stdin _IO_stdin
#define stdout _IO_stdout
#define stderr _IO_stderr
#ifdef __cplusplus
extern "C" {
/* Remove file FILENAME. */
extern int remove __P ((__const char *__filename));
/* Rename file OLD to NEW. */
extern int rename __P ((__const char *__old, __const char *__new));
/* Create a temporary file and open it read/write. */
extern FILE *tmpfile __P ((void));
/* Generate a temporary filename. */
extern char *tmpnam __P ((char *__s));
#ifdef __USE_MISC
/* This is the reentrant variant of `tmpnam'. The only difference is
that it does not allow S to be NULL. */
extern char *tmpnam_r __P ((char *__s));
#endif
#ifndef __P
#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
#define __P(args) args
#else
#define __P(args) ()
#endif
#endif /*!__P*/
extern void clearerr __P ((FILE*));
extern int fclose __P ((FILE*));
extern int feof __P ((FILE*));
extern int ferror __P ((FILE*));
extern int fflush __P ((FILE*));
extern int fgetc __P ((FILE *));
extern int fgetpos __P ((FILE* fp, fpos_t *pos));
extern char* fgets __P ((char*, int, FILE*));
extern FILE* fopen __P ((__const char*, __const char*));
extern FILE* fopencookie __P ((void *cookie, __const char *mode,
_IO_cookie_io_functions_t io_functions));
extern int fprintf __P ((FILE*, __const char* format, ...));
extern int fputc __P ((int, FILE*));
extern int fputs __P ((__const char *str, FILE *fp));
extern size_t fread __P ((void*, size_t, size_t, FILE*));
extern FILE* freopen __P ((__const char*, __const char*, FILE*));
extern int fscanf __P ((FILE *fp, __const char* format, ...));
extern int fseek __P ((FILE* fp, long int offset, int whence));
extern int fsetpos __P ((FILE* fp, __const fpos_t *pos));
extern long int ftell __P ((FILE* fp));
extern size_t fwrite __P ((__const void*, size_t, size_t, FILE*));
extern int getc __P ((FILE *));
extern int getchar __P ((void));
extern char* gets __P ((char*));
extern void perror __P ((__const char *));
extern int printf __P ((__const char* format, ...));
extern int putc __P ((int, FILE *));
extern int putchar __P ((int));
extern int puts __P ((__const char *str));
extern int remove __P ((__const char*));
extern int rename __P ((__const char* _old, __const char* _new));
extern void rewind __P ((FILE*));
extern int scanf __P ((__const char* format, ...));
extern void setbuf __P ((FILE*, char*));
extern void setlinebuf __P ((FILE*));
extern void setbuffer __P ((FILE*, char*, int));
extern int setvbuf __P ((FILE*, char*, int mode, size_t size));
extern int sprintf __P ((char*, __const char* format, ...));
extern int sscanf __P ((__const char* string, __const char* format, ...));
extern FILE* tmpfile __P ((void));
extern char* tmpnam __P ((char*));
#ifdef __USE_MISC
extern char* tmpnam_r __P ((char*));
#endif
#if defined(__USE_SVID) || defined(__USE_XOPEN)
#if defined __USE_SVID || defined __USE_XOPEN
/* Generate a unique temporary filename using up to five characters of PFX
if it is not NULL. The directory to put this file in is searched for
as follows: First the environment variable "TMPDIR" is checked.
If it contains the name of a writable directory, that directory is used.
If not and if DIR is not NULL, that value is checked. If that fails,
P_tmpdir is tried and finally "/tmp". The storage for the filename
is allocated by `malloc'. */
extern char *tempnam __P ((__const char *__dir, __const char *__pfx));
#endif
extern char *__stdio_gen_tempname __P ((char *__buf, size_t bufsize,
__const char *dir, __const char *pfx,
int dir_search, size_t *lenptr,
FILE **streamptr));
extern int ungetc __P ((int c, FILE* fp));
extern int vfprintf __P ((FILE *fp, char __const *fmt0, _G_va_list));
extern int vprintf __P ((char __const *fmt, _G_va_list));
extern int vsprintf __P ((char* string, __const char* format, _G_va_list));
extern void __libc_fatal __P ((__const char *__message))
__attribute__ ((__noreturn__));
#ifndef __STRICT_ANSI__
extern int dprintf __P ((int, __const char *, ...));
extern int vdprintf __P ((int, __const char *, _G_va_list));
extern int vfscanf __P ((FILE*, __const char *, _G_va_list));
extern int __vfscanf __P ((FILE*, __const char *, _G_va_list));
extern int vscanf __P ((__const char *, _G_va_list));
extern int vsscanf __P ((__const char *, __const char *, _G_va_list));
extern int __vsscanf __P ((__const char *, __const char *, _G_va_list));
/* Close STREAM. */
extern int fclose __P ((FILE *__stream));
/* Flush STREAM, or all streams if STREAM is NULL. */
extern int fflush __P ((FILE *__stream));
#ifdef __USE_MISC
/* Faster versions when locking is not required. */
extern int fclose_unlocked __P ((FILE *__stream));
extern int fflush_unlocked __P ((FILE *__stream));
#endif
#ifdef __USE_GNU
/* Close all streams. */
extern int __fcloseall __P ((void));
extern int fcloseall __P ((void));
struct obstack;
extern int obstack_vprintf __P ((struct obstack *__obstack,
__const char *__fmt, _G_va_list));
extern int obstack_printf __P ((struct obstack *__obstack, __const char *__fmt,
...));
#endif
#if !defined(__STRICT_ANSI__) || defined(_POSIX_SOURCE)
extern FILE *fdopen __P ((int, __const char *));
extern int fileno __P ((FILE*));
extern FILE* popen __P ((__const char*, __const char*));
extern int pclose __P ((FILE*));
#define L_ctermid 9
#define L_cuserid 9
/* Open a file and create a new stream for it. */
extern FILE *fopen __P ((__const char *__filename, __const char *__modes));
/* Open a file, replacing an existing stream with it. */
extern FILE *freopen __P ((__const char *__restrict __filename,
__const char *__restrict __modes,
FILE *__restrict __stream));
/* Return the name of the controlling terminal. */
extern char *ctermid __P ((char *__buf));
/* Get character login name of the user. */
extern char *cuserid __P ((char * __buf));
#ifdef __USE_POSIX
/* Create a new stream that refers to an existing system file descriptor. */
extern FILE *fdopen __P ((int __fd, __const char *__modes));
#endif
#ifdef __USE_GNU
extern _IO_ssize_t getdelim __P ((char **, size_t *, int, FILE*));
extern _IO_ssize_t getline __P ((char **, size_t *, FILE *));
extern _IO_ssize_t __getline __P ((char **, size_t *, FILE *));
extern int snprintf __P ((char *, size_t, __const char *, ...));
extern int __snprintf __P ((char *, size_t, __const char *, ...));
extern int vsnprintf __P ((char *, size_t, __const char *, _G_va_list));
extern int __vsnprintf __P ((char *, size_t, __const char *, _G_va_list));
extern int asprintf __P ((char **, const char *, ...));
extern int vasprintf __P ((char **, const char *, _G_va_list));
#ifdef __USE_GNU
/* Create a new stream that refers to the given magic cookie,
and uses the given functions for input and output. */
extern FILE *fopencookie __P ((void *__magic_cookie, __const char *__modes,
_IO_cookie_io_functions_t __io_funcs));
/* Open a stream that writes into a malloc'd buffer that is expanded as
necessary. *BUFLOC and *SIZELOC are updated with the buffer's location
@@ -211,77 +193,409 @@ extern int vasprintf __P ((char **, const char *, _G_va_list));
extern FILE *open_memstream __P ((char **__bufloc, size_t *__sizeloc));
#endif
extern int __underflow __P ((struct _IO_FILE*));
extern int __overflow __P ((struct _IO_FILE*, int));
#ifdef __USE_BSD
extern int sys_nerr;
extern const char *const sys_errlist[];
#endif
#ifdef __USE_GNU
extern int _sys_nerr;
extern const char *const _sys_errlist[];
/* If BUF is NULL, make STREAM unbuffered.
Else make it use buffer BUF, of size BUFSIZ. */
extern void setbuf __P ((FILE *__restrict __stream, char *__restrict __buf));
/* Make STREAM use buffering mode MODE.
If BUF is not NULL, use N bytes of it for buffering;
else allocate an internal buffer N bytes long. */
extern int setvbuf __P ((FILE *__restrict __stream, char *__restrict __buf,
int __modes, size_t __n));
#ifdef __USE_BSD
/* If BUF is NULL, make STREAM unbuffered.
Else make it use SIZE bytes of BUF for buffering. */
extern void setbuffer __P ((FILE *__stream, char *__buf, size_t __size));
/* Make STREAM line-buffered. */
extern void setlinebuf __P ((FILE *__stream));
#endif
/* Handle locking of streams. */
#ifdef __USE_MISC
extern void clearerr_locked __P ((FILE *));
extern void clearerr_unlocked __P ((FILE *));
extern int feof_locked __P ((FILE *));
extern int feof_unlocked __P ((FILE *));
extern int ferror_locked __P ((FILE*));
extern int ferror_unlocked __P ((FILE*));
extern int fileno_locked __P ((FILE *));
extern int fileno_unlocked __P ((FILE *));
extern int fclose_unlocked __P ((FILE *));
extern int fflush_locked __P ((FILE *));
extern int fflush_unlocked __P ((FILE *));
extern size_t fread_unlocked __P ((void *, size_t, size_t, FILE *));
extern size_t fwrite_unlocked __P ((const void *, size_t, size_t, FILE *));
extern int fputc_locked __P ((int, FILE*));
extern int fputc_unlocked __P ((int, FILE*));
extern int getc_locked __P ((FILE *));
extern int getchar_locked __P ((void));
extern int putc_locked __P ((int, FILE *));
extern int putchar_locked __P ((int));
/* Write formatted output to STREAM. */
extern int fprintf __P ((FILE *__restrict __stream,
__const char *__restrict __format, ...));
/* Write formatted output to stdout. */
extern int printf __P ((__const char *__restrict __format, ...));
/* Write formatted output to S. */
extern int sprintf __P ((char *__restrict __s,
__const char *__restrict __format, ...));
# ifndef _LIBC
# define getc_locked(fp) _IO_getc (fp)
# define getchar_locked() _IO_getc (stdin)
# define putchar_locked(c) _IO_putc (c, stdout)
# endif
/* Write formatted output to S from argument list ARG. */
extern int vfprintf __P ((FILE *__restrict __s,
__const char *__restrict __format,
_G_va_list __arg));
/* Write formatted output to stdout from argument list ARG. */
extern int vprintf __P ((__const char *__restrict __format,
_G_va_list __arg));
/* Write formatted output to S from argument list ARG. */
extern int vsprintf __P ((char *__restrict __s,
__const char *__restrict __format,
_G_va_list __arg));
#ifdef __OPTIMIZE__
extern __inline int
vprintf (const char *__restrict __fmt, _G_va_list __arg)
{
return vfprintf (stdout, __fmt, __arg);
}
#endif /* Optimizing. */
#ifdef __USE_GNU
/* Maximum chars of output to write in MAXLEN. */
extern int __snprintf __P ((char *__s, size_t __maxlen,
__const char *__format, ...));
extern int snprintf __P ((char *__s, size_t __maxlen,
__const char *__format, ...));
extern int __vsnprintf __P ((char *__s, size_t __maxlen,
__const char *__format, _G_va_list __arg));
extern int vsnprintf __P ((char *__s, size_t __maxlen,
__const char *__format, _G_va_list __arg));
/* Write formatted output to a string dynamically allocated with `malloc'.
Store the address of the string in *PTR. */
extern int vasprintf __P ((char **__ptr, __const char *__f,
_G_va_list __arg));
extern int asprintf __P ((char **__ptr, __const char *__fmt, ...));
/* Write formatted output to a file descriptor. */
extern int vdprintf __P ((int __fd, __const char *__fmt, _G_va_list __arg));
extern int dprintf __P ((int __fd, __const char *__fmt, ...));
#endif
/* Read formatted input from STREAM. */
extern int fscanf __P ((FILE *__restrict __stream,
__const char *__restrict __format, ...));
/* Read formatted input from stdin. */
extern int scanf __P ((__const char *__restrict __format, ...));
/* Read formatted input from S. */
extern int sscanf __P ((__const char *__restrict __s,
__const char *__restrict __format, ...));
#ifdef __USE_GNU
/* Read formatted input from S into argument list ARG. */
extern int __vfscanf __P ((FILE *__s, __const char *__format,
_G_va_list __arg));
extern int vfscanf __P ((FILE *__s, __const char *__format,
_G_va_list __arg));
/* Read formatted input from stdin into argument list ARG. */
extern int __vscanf __P ((__const char *__format, _G_va_list __arg));
extern int vscanf __P ((__const char *__format, _G_va_list __arg));
/* Read formatted input from S into argument list ARG. */
extern int __vsscanf __P ((__const char *__s, __const char *__format,
_G_va_list __arg));
extern int vsscanf __P ((__const char *__s, __const char *__format,
_G_va_list __arg));
#ifdef __OPTIMIZE__
extern __inline int
vfscanf (FILE *__s, const char *__fmt, _G_va_list __arg)
{
return __vfscanf (__s, __fmt, __arg);
}
extern __inline int
vscanf (const char *__fmt, _G_va_list __arg)
{
return __vfscanf (stdin, __fmt, __arg);
}
extern __inline int
vsscanf (const char *__s, const char *__fmt, _G_va_list __arg)
{
return __vsscanf (__s, __fmt, __arg);
}
#endif /* Optimizing. */
#endif /* Use GNU. */
/* Read a character from STREAM. */
extern int fgetc __P ((FILE *__stream));
extern int getc __P ((FILE *__stream));
/* Read a character from stdin. */
extern int getchar __P ((void));
/* The C standard explicitly says this is a macro, so we always do the
optimization for it. */
#define getc(_fp) _IO_getc (_fp)
#ifdef __OPTIMIZE__
extern __inline int
getchar (void)
{
return _IO_getc (stdin);
}
#endif /* Optimizing. */
#if defined __USE_POSIX || defined __USE_MISC
/* These are defined in POSIX.1:1996. */
extern void flockfile __P ((FILE *));
extern void funlockfile __P ((FILE *));
extern int ftrylockfile __P ((FILE *));
extern int getc_unlocked __P ((FILE *));
extern int getc_unlocked __P ((FILE *__stream));
extern int getchar_unlocked __P ((void));
extern int putc_unlocked __P ((int, FILE *));
extern int putchar_unlocked __P ((int));
# ifndef _LIBC
# define getc_unlocked(fp) _IO_getc_unlocked (fp)
# define getchar_unlocked() _IO_getc_unlocked (stdin)
# define putc_unlocked(c, fp) _IO_putc_unlocked ((c), (fp))
# define putchar_unlocked(c) _IO_putc_unlocked ((c), stdout)
# endif
#endif /* POSIX || misc */
#ifdef __OPTIMIZE__
extern __inline int
getc_unlocked (FILE *__fp)
{
return _IO_getc_unlocked (__fp);
}
#define getc(_fp) _IO_getc (_fp)
extern __inline int
getchar_unlocked (void)
{
return _IO_getc_unlocked (stdin);
}
#endif /* Optimizing. */
#endif /* Use POSIX or MISC. */
/* Write a character to STREAM. */
extern int fputc __P ((int __c, FILE *__stream));
extern int putc __P ((int __c, FILE *__stream));
/* Write a character to stdout. */
extern int putchar __P ((int __c));
/* The C standard explicitly says this can be a macro,
so we always do the optimization for it. */
#define putc(_ch, _fp) _IO_putc (_ch, _fp)
#define putchar(_ch) _IO_putc (_ch, stdout)
#define getchar() _IO_getc (stdin)
#ifdef __cplusplus
#ifdef __OPTIMIZE__
extern __inline int
putchar (int __c)
{
return _IO_putc (__c, stdout);
}
#endif
#ifdef __USE_MISC
/* Faster version when locking is not necessary. */
extern int fputc_unlocked __P ((int __c, FILE *__stream));
#ifdef __OPTIMIZE__
extern __inline int
fputc_unlocked (int __c, FILE *__stream)
{
return _IO_putc_unlocked (__c, __stream);
}
#endif /* Optimizing. */
#endif /* Use MISC. */
#if defined __USE_POSIX || defined __USE_MISC
/* These are defined in POSIX.1:1996. */
extern int putc_unlocked __P ((int __c, FILE *__stream));
extern int putchar_unlocked __P ((int __c));
#ifdef __OPTIMIZE__
extern __inline int
putc_unlocked (int __c, FILE *__stream)
{
return _IO_putc_unlocked (__c, __stream);
}
extern __inline int
putchar_unlocked (int __c)
{
return _IO_putc_unlocked (__c, stdout);
}
#endif /* Optimizing. */
#endif /* Use POSIX or MISc. */
#if defined __USE_SVID || defined __USE_MISC
/* Get a word (int) from STREAM. */
extern int getw __P ((FILE *__stream));
/* Write a word (int) to STREAM. */
extern int putw __P ((int __w, FILE *__stream));
#endif
/* Get a newline-terminated string of finite length from STREAM. */
extern char *fgets __P ((char *__restrict __s, int __n,
FILE *__restrict __stream));
/* Get a newline-terminated string from stdin, removing the newline.
DO NOT USE THIS FUNCTION!! There is no limit on how much it will read. */
extern char *gets __P ((char *__s));
#ifdef __USE_GNU
/* Read up to (and including) a DELIMITER from STREAM into *LINEPTR
(and null-terminate it). *LINEPTR is a pointer returned from malloc (or
NULL), pointing to *N characters of space. It is realloc'd as
necessary. Returns the number of characters read (not including the
null terminator), or -1 on error or EOF. */
_IO_ssize_t __getdelim __P ((char **__lineptr, size_t *__n,
int __delimiter, FILE *__stream));
_IO_ssize_t getdelim __P ((char **__lineptr, size_t *__n,
int __delimiter, FILE *__stream));
/* Like `getdelim', but reads up to a newline. */
_IO_ssize_t __getline __P ((char **__lineptr, size_t *__n, FILE *__stream));
_IO_ssize_t getline __P ((char **__lineptr, size_t *__n, FILE *__stream));
#ifdef __OPTIMIZE__
extern __inline _IO_ssize_t
getline (char **__lineptr, size_t *__n, FILE *__stream)
{
return __getdelim (__lineptr, __n, '\n', __stream);
}
#endif /* Optimizing. */
#endif
/* Write a string to STREAM. */
extern int fputs __P ((__const char *__restrict __s,
FILE *__restrict __stream));
/* Write a string, followed by a newline, to stdout. */
extern int puts __P ((__const char *__s));
/* Push a character back onto the input buffer of STREAM. */
extern int ungetc __P ((int __c, FILE *__stream));
/* Read chunks of generic data from STREAM. */
extern size_t fread __P ((void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __stream));
/* Write chunks of generic data to STREAM. */
extern size_t fwrite __P ((__const void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __s));
#ifdef __USE_MISC
/* Faster versions when locking is not necessary. */
extern size_t fread_unlocked __P ((void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __stream));
extern size_t fwrite_unlocked __P ((__const void *__restrict __ptr,
size_t __size, size_t __n,
FILE *__restrict __stream));
#endif
/* Seek to a certain position on STREAM. */
extern int fseek __P ((FILE *__stream, long int __off, int __whence));
/* Return the current position of STREAM. */
extern long int ftell __P ((FILE *__stream));
/* Rewind to the beginning of STREAM. */
extern void rewind __P ((FILE *__stream));
/* Get STREAM's position. */
extern int fgetpos __P ((FILE *__restrict __stream,
fpos_t *__restrict __pos));
/* Set STREAM's position. */
extern int fsetpos __P ((FILE *__stream, __const fpos_t *__pos));
/* Clear the error and EOF indicators for STREAM. */
extern void clearerr __P ((FILE *__stream));
/* Return the EOF indicator for STREAM. */
extern int feof __P ((FILE *__stream));
/* Return the error indicator for STREAM. */
extern int ferror __P ((FILE *__stream));
#ifdef __USE_MISC
/* Faster versions when locking is not required. */
extern void clearerr_unlocked __P ((FILE *__stream));
extern int feof_unlocked __P ((FILE *__stream));
extern int ferror_unlocked __P ((FILE *__stream));
#ifdef __OPTIMIZE__
extern __inline int
feof_unlocked (FILE *__stream)
{
return _IO_feof_unlocked (__stream);
}
extern __inline int
ferror_unlocked (FILE *__stream)
{
return _IO_ferror_unlocked (__stream);
}
#endif /* Optimizing. */
#endif
/* Print a message describing the meaning of the value of errno. */
extern void perror __P ((__const char *__s));
/* These variables normally should not be used directly. The `strftime'
function provides all the needed functionality. */
#ifdef __USE_BSD
extern int sys_nerr;
extern __const char *__const sys_errlist[];
#endif
#ifdef __USE_GNU
extern int _sys_nerr;
extern __const char *__const _sys_errlist[];
#endif
#ifdef __USE_POSIX
/* Return the system file descriptor for STREAM. */
extern int fileno __P ((FILE *__stream));
#endif /* Use POSIX. */
#ifdef __USE_MISC
/* Faster version when locking is not required. */
extern int fileno_unlocked __P ((FILE *__stream));
#endif
#if (defined __USE_POSIX2 || defined __USE_SVID || defined __USE_BSD || \
defined __USE_MISC)
/* Create a new stream connected to a pipe running the given command. */
extern FILE *popen __P ((__const char *__command, __const char *__modes));
/* Close a stream opened by popen and return the status of its child. */
extern int pclose __P ((FILE *__stream));
#endif
#ifdef __USE_POSIX
/* Return the name of the controlling terminal. */
extern char *ctermid __P ((char *__s));
#endif /* Use POSIX. */
#ifdef __USE_XOPEN
/* Return the name of the current user. */
extern char *cuserid __P ((char *__s));
#endif /* Use X/Open. */
#ifdef __USE_GNU
struct obstack; /* See <obstack.h>. */
/* Write formatted output to an obstack. */
extern int obstack_printf __P ((struct obstack *__obstack,
__const char *__format, ...));
extern int obstack_vprintf __P ((struct obstack *__obstack,
__const char *__format,
_G_va_list __args));
#endif /* Use GNU. */
#if defined __USE_POSIX || defined __USE_MISC
/* These are defined in POSIX.1:1996. */
/* Acquire ownership of STREAM. */
extern void flockfile __P ((FILE *__stream));
/* Try to acquire ownership of STREAM but do not block if it is not
possible. */
extern int ftrylockfile __P ((FILE *__stream));
/* Relinquish the ownership granted for STREAM. */
extern void funlockfile __P ((FILE *__stream));
#endif /* POSIX || misc */
__END_DECLS
#endif /* <stdio.h> included. */
#endif /* !_STDIO_H */
+3 -3
View File
@@ -258,14 +258,14 @@ DEFUN(_IO_str_pbackfail, (fp, c),
}
void
DEFUN (_IO_str_finish, (fp),
register _IO_FILE* fp)
DEFUN (_IO_str_finish, (fp, dummy),
register _IO_FILE* fp AND int dummy)
{
if (fp->_IO_buf_base && !(fp->_flags & _IO_USER_BUF))
(((_IO_strfile*)fp)->_s._free_buffer)(fp->_IO_buf_base);
fp->_IO_buf_base = NULL;
_IO_default_finish(fp);
_IO_default_finish(fp, 0);
}
struct _IO_jump_t _IO_str_jumps = {
+80 -7
View File
@@ -1,5 +1,5 @@
/*
Copyright (C) 1994 Free Software Foundation
Copyright (C) 1994, 1997 Free Software Foundation, Inc.
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
@@ -25,6 +25,73 @@ the executable file might be covered by the GNU General Public License. */
#include "libioP.h"
#include "strfile.h"
typedef struct
{
_IO_strfile f;
/* This is used for the characters which do not fit in the buffer
provided by the user. */
char overflow_buf[64];
} _IO_strnfile;
static int
_IO_strn_overflow (_IO_FILE* fp, int c)
{
/* When we come to here this means the user supplied buffer is
filled. But since we must return the number of characters which
would have been written in total we must provide a buffer for
further use. We can do this by writing on and on in the overflow
buffer in the _IO_strnfile structure. */
_IO_strnfile *snf = (_IO_strnfile *) fp;
if (fp->_IO_buf_base != snf->overflow_buf)
{
/* Terminate the string. We know that there is room for at
least one more character since we initialized the stream with
a size to make this possible. */
*fp->_IO_write_ptr = '\0';
_IO_setb (fp, snf->overflow_buf,
snf->overflow_buf + sizeof (snf->overflow_buf), 0);
fp->_IO_write_base = snf->overflow_buf;
fp->_IO_read_base = snf->overflow_buf;
fp->_IO_read_ptr = snf->overflow_buf;
fp->_IO_read_end = snf->overflow_buf + sizeof (snf->overflow_buf);
}
fp->_IO_write_ptr = snf->overflow_buf;
fp->_IO_write_end = snf->overflow_buf;
/* Since we are not really interested in storing the characters
which do not fit in the buffer we simply ignore it. */
return c;
}
static struct _IO_jump_t _IO_strn_jumps = {
JUMP_INIT_DUMMY,
JUMP_INIT(finish, _IO_str_finish),
JUMP_INIT(overflow, _IO_strn_overflow),
JUMP_INIT(underflow, _IO_str_underflow),
JUMP_INIT(uflow, _IO_default_uflow),
JUMP_INIT(pbackfail, _IO_str_pbackfail),
JUMP_INIT(xsputn, _IO_default_xsputn),
JUMP_INIT(xsgetn, _IO_default_xsgetn),
JUMP_INIT(seekoff, _IO_str_seekoff),
JUMP_INIT(seekpos, _IO_default_seekpos),
JUMP_INIT(setbuf, _IO_default_setbuf),
JUMP_INIT(sync, _IO_default_sync),
JUMP_INIT(doallocate, _IO_default_doallocate),
JUMP_INIT(read, _IO_default_read),
JUMP_INIT(write, _IO_default_write),
JUMP_INIT(seek, _IO_default_seek),
JUMP_INIT(close, _IO_default_close),
JUMP_INIT(stat, _IO_default_stat)
};
int
_IO_vsnprintf (string, maxlen, format, args)
char *string;
@@ -32,22 +99,28 @@ _IO_vsnprintf (string, maxlen, format, args)
const char *format;
_IO_va_list args;
{
_IO_strfile sf;
_IO_strnfile sf;
int ret;
#ifdef _IO_MTSAFE_IO
_IO_lock_t lock;
sf._sbf._f._lock = &lock;
sf.f._sbf._f._lock = &lock;
#endif
/* We need to handle the special case where MAXLEN is 0. */
/* We need to handle the special case where MAXLEN is 0. Use the
overflow buffer right from the start. */
if (maxlen == 0)
return 0;
{
string = sf.overflow_buf;
maxlen = sizeof (sf.overflow_buf);
}
_IO_init ((_IO_FILE *) &sf, 0);
_IO_JUMPS ((_IO_FILE *) &sf) = &_IO_str_jumps;
_IO_JUMPS ((_IO_FILE *) &sf) = &_IO_strn_jumps;
_IO_str_init_static ((_IO_FILE *) &sf, string, maxlen - 1, string);
ret = _IO_vfprintf ((_IO_FILE *) &sf, format, args);
*((_IO_FILE *) &sf)->_IO_write_ptr = '\0';
if (sf.f._sbf._f._IO_buf_base != sf.overflow_buf)
*sf.f._sbf._f._IO_write_ptr = '\0';
return ret;
}
weak_alias (_IO_vsnprintf, __vsnprintf)
+2 -1
View File
@@ -27,7 +27,7 @@ const struct locale_data _nl_C_LC_TIME =
_nl_C_name,
NULL, 0, 0, /* no file mapped */
MAX_USAGE_COUNT,
53,
54,
{
{ string: "Sun" },
{ string: "Mon" },
@@ -80,6 +80,7 @@ const struct locale_data _nl_C_LC_TIME =
{ string: "" },
{ string: "" },
{ word: 0 },
{ word: 0 },
{ string: "" },
{ string: "" },
}
+1 -1
View File
@@ -38,7 +38,7 @@ __duplocale (__locale_t dataset)
__libc_lock_lock (__libc_setlocale_lock);
/* Get memory. */
result = (__locale_t) malloc (sizeof (struct __locale_t));
result = (__locale_t) malloc (sizeof (struct __locale_struct));
if (result != NULL)
{
int cnt;
+3 -3
View File
@@ -42,7 +42,7 @@ __newlocale (int category_mask, const char *locale, __locale_t base)
{
/* Intermediate memory for result. */
const char *newnames[LC_ALL];
struct __locale_t result;
struct __locale_struct result;
__locale_t result_ptr;
char *locale_path;
size_t locale_path_len;
@@ -79,7 +79,7 @@ __newlocale (int category_mask, const char *locale, __locale_t base)
dataset using the C locale data. */
if (category_mask == 0)
{
result_ptr = (__locale_t) malloc (sizeof (struct __locale_t));
result_ptr = (__locale_t) malloc (sizeof (struct __locale_struct));
*result_ptr = result;
goto update;
@@ -158,7 +158,7 @@ __newlocale (int category_mask, const char *locale, __locale_t base)
if (base == NULL)
{
/* Allocate new structure. */
result_ptr = (__locale_t) malloc (sizeof (struct __locale_t));
result_ptr = (__locale_t) malloc (sizeof (struct __locale_struct));
if (result_ptr == NULL)
return NULL;
+6 -4
View File
@@ -166,6 +166,8 @@ static void show_info (const char *name);
int
main (int argc, char *argv[])
{
int remaining;
/* Set initial values for global variables. */
show_category_name = 0;
show_keyword_name = 0;
@@ -179,7 +181,7 @@ main (int argc, char *argv[])
textdomain (PACKAGE);
/* Parse and process arguments. */
argp_parse (&argp, argc, argv, 0, 0, NULL);
argp_parse (&argp, argc, argv, 0, &remaining, NULL);
/* `-a' requests the names of all available locales. */
if (do_all != 0)
@@ -203,15 +205,15 @@ main (int argc, char *argv[])
/* If no real argument is given we have to print the contents of the
current locale definition variables. These are LANG and the LC_*. */
if (optind == argc && show_keyword_name == 0 && show_category_name == 0)
if (remaining == argc && show_keyword_name == 0 && show_category_name == 0)
{
show_locale_vars ();
exit (EXIT_SUCCESS);
}
/* Process all given names. */
while (optind < argc)
show_info (argv[optind++]);
while (remaining < argc)
show_info (argv[remaining++]);
exit (EXIT_SUCCESS);
}
+14 -16
View File
@@ -109,7 +109,7 @@ static const struct argp_option options[] =
{ "posix", OPT_POSIX, NULL, 0, N_("Be strictly POSIX conform") },
{ "quiet", OPT_QUIET, NULL, 0,
N_("Suppress warnings and information messages") },
{ "verbose", 'V', NULL, 0, N_("print more messages") },
{ "verbose", 'V', NULL, 0, N_("Print more messages") },
{ NULL, 0, NULL, 0, NULL }
};
@@ -148,6 +148,7 @@ main (int argc, char *argv[])
struct charset_t *charset;
struct localedef_t *localedef;
struct copy_def_list_t *act_add_locdef;
int remaining;
/* Set initial values for global variables. */
copy_list = NULL;
@@ -163,29 +164,24 @@ main (int argc, char *argv[])
textdomain (_libc_intl_domainname);
/* Parse and process arguments. */
argp_parse (&argp, argc, argv, 0, 0, NULL);
/* XXX POSIX is violated since for unknown option a exit value > 3
must be used. */
argp_err_exit_status = 4;
argp_parse (&argp, argc, argv, 0, &remaining, NULL);
/* POSIX.2 requires to be verbose about missing characters in the
character map. */
verbose |= posix_conformance;
if (argc - optind != 1)
if (argc - remaining != 1)
{
/* We need exactly one non-option parameter. */
argp_help (&argp, stdout, ARGP_HELP_SEE,
argp_help (&argp, stdout, ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR,
program_invocation_short_name);
/* XXX Currently POSIX is violated. We must exit with code 4
but the argp_help function currently does not allow this. */
exit (4);
}
/* The parameter describes the output path of the constructed files.
If the described files cannot be written return a NULL pointer. */
output_path = construct_output_path (argv[optind]);
output_path = construct_output_path (argv[remaining]);
cannot_write_why = errno;
/* Now that the parameters are processed we have to reset the local
@@ -244,21 +240,23 @@ main (int argc, char *argv[])
if (! avail)
{
const char *locale_names[] = { "LC_COLLATE", "LC_CTYPE",
"LC_MONETARY", "LC_NUMERIC",
"LC_TIME", "LC_MESSAGES" };
static const char *locale_names[] =
{
"LC_COLLATE", "LC_CTYPE", "LC_MONETARY",
"LC_NUMERIC", "LC_TIME", "LC_MESSAGES"
};
char *fname;
int fd;
struct stat st;
asprintf (&fname, LOCALE_PATH "/%s/%s", act_add_locdef->name,
asprintf (&fname, LOCALEDIR "/%s/%s", act_add_locdef->name,
locale_names[cat]);
fd = open (fname, O_RDONLY);
if (fd == -1)
{
free (fname);
asprintf (&fname, LOCALE_PATH "/%s/%s/SYS_%s",
asprintf (&fname, LOCALEDIR "/%s/%s/SYS_%s",
act_add_locdef->name, locale_names[cat],
locale_names[cat]);
+25 -3
View File
@@ -26,6 +26,7 @@
#include <locale.h>
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
@@ -76,10 +77,31 @@ locfile_read (const char *filename, struct charset_t *charset)
{
if (filename[0] != '/')
{
char path[strlen (filename) + 1 + sizeof (LOCSRCDIR)];
char *i18npath = __secure_getenv ("I18NPATH");
if (i18npath != NULL && *i18npath != '\0')
{
char path[strlen (filename) + 1 + strlen (i18npath) + 1];
char *next;
i18npath = strdupa (i18npath);
stpcpy (stpcpy (stpcpy (path, LOCSRCDIR), "/"), filename);
ldfile = lr_open (path, locfile_hash);
while (ldfile == NULL
&& (next = strsep (&i18npath, ":")) != NULL)
{
stpcpy (stpcpy (stpcpy (path, next), "/"), filename);
ldfile = lr_open (path, locfile_hash);
}
}
/* Test in the default directory. */
if (ldfile == NULL)
{
char path[strlen (filename) + 1 + sizeof (LOCSRCDIR)];
stpcpy (stpcpy (stpcpy (path, LOCSRCDIR), "/"), filename);
ldfile = lr_open (path, locfile_hash);
}
}
if (ldfile == NULL)
+2 -1
View File
@@ -368,7 +368,8 @@ setlocale (int category, const char *locale)
/* We must not simply free a global locale since we have no
control over the usage. So we mark it as un-deletable. */
newdata->usage_count = MAX_USAGE_COUNT;
if (newdata->usage_count != MAX_USAGE_COUNT)
newdata->usage_count = MAX_USAGE_COUNT;
}
/* Create new composite name. */
+1 -1
View File
@@ -25,7 +25,7 @@
(almost) opaque type for the user level programs. The file and
this data structure is not standardized. Don't rely on it. It can
go away without warning. */
typedef struct __locale_t
typedef struct __locale_struct
{
struct locale_data *__locales[6]; /* XXX LC_ALL should be used here */
+205
View File
@@ -0,0 +1,205 @@
970b316dd260f981b02f80c5481037db charmaps/ANSI_X3.110-1983
63ca7fd8249a3065c2cf46d3568ce205 charmaps/ANSI_X3.4-1968
e86c1b2ef30069c39ae57c74044c8f5f charmaps/ASMO_449
64cdea65126674d17e4d4de9eebe7a7d charmaps/BALTIC
44b589073659d5059ed28feae29d1bb9 charmaps/BS_4730
3014b545b72ea460c6be1c0e736fd0fe charmaps/BS_VIEWDATA
7c114537b032dcb0c33fad6447f4e390 charmaps/CP1250
dbe7661c6a5b123e8c5d369fa4dcdaf7 charmaps/CP1251
7257c9691d957e62a7e637cc0b4a3883 charmaps/CP1252
5d596c65b87acd46382b62b627419906 charmaps/CP1253
26d7fe7875157b1264a0feb2af3bd4b1 charmaps/CP1254
995beb377a9b10ceb69d2e2db9f38c0c charmaps/CP1255
8f3ab677c4c41d9a602ec5a9d2181a58 charmaps/CP1256
9ac7292aa07f1774b3fa82407f50bfe0 charmaps/CP1257
3e7ab730f995ee2aac310d086877f76c charmaps/CSA_Z243.4-1985-1
41dadf28b93935585caa80790fb9cfe1 charmaps/CSA_Z243.4-1985-2
1f2207e691c3adad58244f7561c987c8 charmaps/CSA_Z243.4-1985-GR
61c0c0ffff0c3543641c16bf9196405d charmaps/CSN_369103
cda6b11a184e5d046bd753b34b4c5c16 charmaps/CWI
8c01af7e97fa05c868747364aeee903f charmaps/DEC-MCS
6d641c1ca619a395699c9e08f38aade0 charmaps/DIN_66003
56a240f6ab1652084d70d62e71df76b9 charmaps/DS_2089
aaf3aa1f7973d24c10f0195e44d309cc charmaps/EBCDIC-AT-DE
2ac9ed4896146b681fa877218b987397 charmaps/EBCDIC-AT-DE-A
3128740dffa196fed88be336e8b3b6a4 charmaps/EBCDIC-CA-FR
c37b7c8e96d7ee23cc4a6de8fb38a144 charmaps/EBCDIC-DK-NO
91c7c4ae978f1037531a1850d796db38 charmaps/EBCDIC-DK-NO-A
b70f369a9a6665a013f4d67ddafb9117 charmaps/EBCDIC-ES
2bb6d464c083baf2e4590510356efc54 charmaps/EBCDIC-ES-A
da80b72f81b71aa750c89efe36cdebc9 charmaps/EBCDIC-ES-S
4900c129fe536d90eef1fa079021d600 charmaps/EBCDIC-FI-SE
53493344a23c5915d05cb445596e6985 charmaps/EBCDIC-FI-SE-A
16441fef214449bf01833c75119f4218 charmaps/EBCDIC-FR
47bc93bac2e9121e92ec45e6b084ac3e charmaps/EBCDIC-IS-FRISS
590d2d63cffe663a57f9594a88a5d252 charmaps/EBCDIC-IT
c51d96a6c0701ace762c1b381650c9e2 charmaps/EBCDIC-PT
37b02d6622d5bbad31dbd29e5ea85c1a charmaps/EBCDIC-UK
72fc4fb96a6b4fb18090aaf5c1ca5e04 charmaps/EBCDIC-US
a66fceae768b6c6653347c6d62a591e2 charmaps/ECMA-CYRILLIC
9f8b15ccd32dc406d449428624c7f5a9 charmaps/ES
d8827d6828355187991c0c77b1d175e0 charmaps/ES2
684e59dfaedd5be03cdb75f13bd4087b charmaps/GB_1988-80
eac9ece498b20cea3f64e08e29fcf728 charmaps/GOST_19768-74
aa2138ecb935ae395a42e2a36fae17df charmaps/GREEK7
016bf365bfbe76a2dffd3371e449bed8 charmaps/GREEK7-OLD
cd9b8358fd4ee9ca42f51dd5b9bee1d2 charmaps/GREEK-CCITT
d601c5e0564708cccc77f5a0ff21ad5a charmaps/HP-ROMAN8
ac6aefc1a0ee7a71a219aeaa45d2dd59 charmaps/IBM037
6c88d3707f227d81de6c486fa37291af charmaps/IBM038
a866b15cb70f42db3e10208dc1c6c760 charmaps/IBM1004
9cf5a37e4b3adb3cbd07dacfdfa339f3 charmaps/IBM1026
a9da79881a9ca162290d30dbc60e50ef charmaps/IBM1047
efd81c94d2eb08b06b917fab1999237e charmaps/IBM256
4cd391704e0bfa5004f51aee15d63487 charmaps/IBM273
9cd875dcc061173394ddccb59df09d5d charmaps/IBM274
85f505f2920525084080877e61c3c676 charmaps/IBM275
a3e907c09ff00ca647dd250da4d08910 charmaps/IBM277
d5228847a6c37dd5d0bfef061a87ddf5 charmaps/IBM278
961510d2dc9ac86a74c490a14fb2c5bd charmaps/IBM280
e743c1c1e6cb73c36b4afe941cf98aeb charmaps/IBM281
356b5249cf790ebba361a41c9ab0008f charmaps/IBM284
f0fb91312ba9bda57ae7d54c08fe7277 charmaps/IBM285
3721e2fe385430d0b723d3670843c5e6 charmaps/IBM290
9a2d9a73447dffdecb2ce7c1f0312073 charmaps/IBM297
bdfddcd88b3f1ca36576247b4c50282f charmaps/IBM420
4aa0aac1583eba7e8e9fa5098522eab5 charmaps/IBM423
c58e6bc022f94eef43fc7ed684c5157f charmaps/IBM424
1ec3b0acdbcd99941c889e41e997e61e charmaps/IBM437
c4472e9815e61c39586a51ae60a13e4e charmaps/IBM500
634e54bc22ec929c4a9782e0437e4ed3 charmaps/IBM850
f58eac70d307cc4a242f33a93ddbf99a charmaps/IBM851
2e65788cf6f20256b6cbd3f9f1584ab0 charmaps/IBM852
3945e5dcd7088ce2deed5399fccf8464 charmaps/IBM855
9b6d2ea97443ffd9925455efaad1dede charmaps/IBM857
e01be3d125620dc75439fa2e3b608636 charmaps/IBM860
28166b8677342cda155574d5c3f223fe charmaps/IBM861
9c0af519221ec94358866e2608fe91f8 charmaps/IBM862
98d2001523bb39c9532979b4df6ad326 charmaps/IBM863
deb6bde660b73869e87174bec7ba27dc charmaps/IBM864
f58ccd68d1019be24883064012d00b9b charmaps/IBM865
d18990891c7f4beb67520dcaaa2ab94b charmaps/IBM868
04c8bce968ed0b84a9facd22c4efde61 charmaps/IBM869
711e343635c377f70561f2b8091a3b37 charmaps/IBM870
6cb196018f85ea9ca94a59cadf5326c4 charmaps/IBM871
f344024ec2efbc52d4985f676018da7f charmaps/IBM875
02e6cae94ceaedeaf335157831251f91 charmaps/IBM880
bfd57147762dfa155c9b0cb7e3caea16 charmaps/IBM891
f46fdde76da7a47f73c79e4cfc7d6e54 charmaps/IBM903
3f0f3fead1f82ceef5c5e175305a7088 charmaps/IBM904
77af7f0a6d441433069cf1bc96babb88 charmaps/IBM905
445c6202fdbe83c728a2dfe868732f02 charmaps/IBM918
efe297def24e84feaa37856884dd829e charmaps/IEC_P27-1
4badb4c8c58e1d30b540f5742f7e69bc charmaps/INIS
9f3f79ab67a41ac29a93cfba31c5e2af charmaps/INIS-8
88f6cdba3e3d1b858bd269f62123f8c0 charmaps/INIS-CYRILLIC
44a7a7a18fe17c5eadaf24bf976da25e charmaps/INVARIANT
8131fd60be71f5474823c96f8b3e1de3 charmaps/ISO_10367-BOX
b71ed28fbb5d7d62d9f3a710a34a6df4 charmaps/ISO_10646
bb31373cb7d39a205bae221e58f1d4a1 charmaps/ISO_2033-1983
36644828d2f0db4119698984cff9fff0 charmaps/ISO_5427
09aa0a2d88e51399bd1581dc6e2394ce charmaps/ISO_5427-EXT
8afb96037ce01e4debf8df7dc4be5c57 charmaps/ISO_5428
49b4677573bd28d794b71771cba51f2c charmaps/ISO_646.BASIC
a4d959a49db1e8c9f40c406206560a46 charmaps/ISO_646.IRV
8fff113e98ee8ca7244d96236cd9a9a4 charmaps/ISO_6937
4b725c11b8acac218edb223a8fabe28c charmaps/ISO_6937-2-25
21cbdcf9e505338eeff0aaecccb01d24 charmaps/ISO_6937-2-ADD
1524185dff114b3f072cdde41b2757d9 charmaps/ISO-8859-1
27b9c1e552f5fd0b27fc536f0fa95fa4 charmaps/ISO-8859-10
37edf0c113b991fa03454c11efe7a604 charmaps/ISO-8859-2
23f592d1c931fbae7aab787764ce4e13 charmaps/ISO-8859-3
8da948413a01091eee9824a1acf8e9da charmaps/ISO-8859-4
802615fe39f14271c9f6a9c7bbb6fefe charmaps/ISO-8859-5
0ce863896fefabade74256df4d81504f charmaps/ISO-8859-6
dbfbcb0cde6aca45dccc8e1fa3dbeccc charmaps/ISO-8859-7
d202cea38f00eb9a64816e7471b4fba1 charmaps/ISO-8859-8
0f2d28310846869627d4957ff7af7672 charmaps/ISO-8859-9
0ff1cec843b556575348c403d1a44f5b charmaps/ISO_8859-SUPP
e3d2b1067decd1b5a6db1e059458a663 charmaps/ISO-IR-90
6c2093382e84d8304500816c0e6e9517 charmaps/IT
85787bcfd8a57d23e444413454471f02 charmaps/JIS_C6220-1969-JP
87c6ebd0c4aa8e298bc2b5f148e83ea1 charmaps/JIS_C6220-1969-RO
246eb24242c02164520df418f2d963b0 charmaps/JIS_C6229-1984-A
3bb35d7d629bc4f5c486051b4b2315e1 charmaps/JIS_C6229-1984-B
cfaed7e9366ac0c053d1a6841a813bc3 charmaps/JIS_C6229-1984-B-ADD
2f973a2199e6c70da93c17a55e726a70 charmaps/JIS_C6229-1984-HAND
106feb69588f588bcb69f269a904cd5c charmaps/JIS_C6229-1984-HAND-ADD
e5f0a57ea025f7a4d74e43ae5dd506b6 charmaps/JIS_C6229-1984-KANA
53fefc27f5ab707f14e97a755e36a91c charmaps/JIS_X0201
a99c92babdf549c9b8902d86ef6a99b4 charmaps/JUS_I.B1.002
1ca9cd921efb2db125b3e408daee8720 charmaps/JUS_I.B1.003-MAC
be91175d769b4817a28312d2a2162fe5 charmaps/JUS_I.B1.003-SERB
da93a4e606e0ad840f25eaad48164d7d charmaps/KOI-8
1623c0ffb000db9f365d2b1b695aac14 charmaps/KOI8-R
a3209c513563672e6da7776d30ae6f03 charmaps/KSC5636
40c613c89d8293a342dee656e155dc05 charmaps/LATIN-GREEK
7c211fac48ca088792c29bbe943b0216 charmaps/LATIN-GREEK-1
75f99e2c3282eb84c00ba39dda5495fb charmaps/MACINTOSH
15ca1d6d67e5b92f2b597a2e2ac078ea charmaps/MAC-IS
b869985c0d872c31ac1156c76c951b28 charmaps/MSZ_7795.3
08aed8b910a6d892107bb8cdd71794f5 charmaps/NATS-DANO
5abf5f2d900fcbc2ba555b1554424a98 charmaps/NATS-DANO-ADD
7d60589127a94570e8b3f1281cd0e8eb charmaps/NATS-SEFI
c32dc6d37dd5cf0a129c91f05a5b89e0 charmaps/NATS-SEFI-ADD
6c83fd70b4f2d5301cc808e426e30e4e charmaps/NEXTSTEP
441065ddef635bc15047c309b3f35951 charmaps/NF_Z_62-010
d867bfe77c36b2d1aeecaa3f57d9d4e1 charmaps/NF_Z_62-010-1973
018e57c7bd71e87a5e656abfe816a7f3 charmaps/NS_4551-1
02b6dd2e3ca9d725fa1a170719fddfde charmaps/NS_4551-2
aa63a528dd77226508543f05d083731a charmaps/PT
682f1056b6275ddd149e25a358362ea0 charmaps/PT2
9680704e24c31df79809b65a27bd071e charmaps/SAMI
0aec6669370200f2b257438a600d221c charmaps/SEN_850200_B
8d0de9fd47615c228c4464af3b02c397 charmaps/SEN_850200_C
db3c60025eb80244d70bf7889f058055 charmaps/T.101-G2
572baa84bd05d4b236b7e2fb211d0dfd charmaps/T.61-7BIT
1e39e36aa7544014059b0aa8381ab051 charmaps/T.61-8BIT
81c8e12a75dff4371ce82773d670cd6d charmaps/VIDEOTEX-SUPPL
45ade09ead9fd385d58504bfc005ecab locales/da_DK
249894e0554d46d1fbdae4a5fb8cc20e locales/de_AT
b3628f73e00bb655a5e96bcc2331893c locales/de_BE
e74bb8234af71907f2e53ef2e60d9f45 locales/de_CH
b09f9fa150fb8c13b2a5ed17a3448241 locales/de_DE
f9c522cf7d07e8020e4b723b29caf8d0 locales/de_LU
df036d626c53c86c06231c1502e96fbb locales/en_CA
84105524bf0eba76d4a32c3aac8d9a34 locales/en_CA,2.5
f55dc7b52a0eb150bab63eef74651a0d locales/en_DK
20946213e1c36e3650af5ddfc524bd35 locales/en_GB
8f9daff1bd5b2a1332c5bcd54a8aed31 locales/en_IE
566209c74fefc01c3c5752b2f5eae667 locales/en_US
847fbfac1565c5babea6d6b831bd5242 locales/es_ES
732fd15661f8c081e5b43de94832cfc4 locales/et_EE
df1e697015f3f3b572231aa9ba07633d locales/eu_ES
bda978c8b0e379d57a8599edfdb2e858 locales/fi_FI
a25300033ea6c619a4e15051f14aa65e locales/fo_FO
02ca55b19338f94530f0b60999638ed4 locales/fr_BE
655c7b8713b9aad20014df2c27928cb7 locales/fr_CA
8e60885c3fda81bc7773f139657974f3 locales/fr_CA,2.13
8a76a0e3ea2923367fdbab78a6bc67cb locales/fr_CA,2.13.orig
19403a5cd69a9ad658b173859eb022ef locales/fr_CH
48d8981b117e72c5eb2e9c181cbd7d2b locales/fr_FR
cc1b77cf4cdc4488a99637e730e0f57f locales/fr_LU
1987b72e766038b0f475165c994d1469 locales/ga_IE
be2ef06fd9a4b4def515216972fe9250 locales/gr_GR
9e2de7fe4b41f9bad952cdc5bfd77cd4 locales/hr_HR
7f35d03bbe29b53831674704f8b307af locales/hu_HU
1a8b95f6663b7a99703a32c6135d8896 locales/is_IS
47620dbc36bf3ffe04b32dd16b7aae3c locales/it_IT
f02aa03e057d170058cf0a2d606db09b locales/iw_IL
5fa2bc3b08e08cb7f4da2851a7b21f05 locales/kl_GL
d5394568c45886788becf67b54bc916e locales/lt_LT
9239bf9149845fde73e6324eced3964c locales/lv_LV
456f00456ce2e883460aba53e1093c2d locales/nl_BE
e71081f29649cfd4ac8563ae1f7932fa locales/nl_NL
3a0720088defd80baa0623990c6d196a locales/no_NO
6d1bb18d4271cd712e5dc24eec4706b9 locales/pl_PL
b07ce7e57dda4687f2a83cd5ec79a3e0 locales/POSIX
509fc74fdd394f6876358d357f955645 locales/pt_BR
7c2463bcee68bccde3145642a34a8ef1 locales/pt_PT
32c766f85eb82823856485e5802dce19 locales/ro_RO
8d407ed28a435f58c18b52dc48a3593e locales/ru_RU
56af541b88929e9660f30306bd55c4a9 locales/sl_SI
a59a08e2288391bc0882068def61d366 locales/sv_FI
cc6d1db9e6bb9165429a0be9f46a2c79 locales/sv_SE
7f6c0e878f709be0b933ad05100e168c locales/tr_TR
+33
View File
@@ -0,0 +1,33 @@
1997-03-17 03:32 Ulrich Drepper <drepper@cygnus.com>
* sort-test.sh: Call localedef with additional environment variable
I18NPATH to point to not-yet-installed locale data files.
* locales/POSIX: Updated version from maintainer.
1997-02-15 14:32 15:10 Andreas Jaeger <aj@arthur.pfalz.de>
* collate-test.c (main): Change prototype definition to prevent
warning.
1997-02-15 17:46 Ulrich Drepper <drepper@cygnus.com>
* locales/de_DE: Include real collation data. It's similar to the
en_DK information but the order of small and capital characters is
exchanged.
* collate-test.c: New file. Test suite for strcoll function.
* de_DE.in: Input file for collation test.
* da_DK.in: Likewise.
* xfrm-test.c: New file. Test suite for strxfrm function.
1996-12-10 02:47 Ulrich Drepper <drepper@cygnus.com>
* All charmaps: Fix entries for <quotation-mark>.
1996-10-17 18:57 Ulrich Drepper <drepper@cygnus.com>
* Makefile (charmaps): Don't try to install CVS or RCS directory.
(locales): Likewise.
Reported by Matthias Urlichs.
+53
View File
@@ -0,0 +1,53 @@
# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public License
# as published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
# The GNU C Library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Library General Public License for more details.
# You should have received a copy of the GNU Library General Public
# License along with the GNU C Library; see the file COPYING.LIB. If not,
# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
# Makefile for installing locale data source files.
subdir := localedata
all: # Make this the default target; it will be defined in Rules.
# List with all available character set descriptions.
charmaps := $(filter-out $(addprefix charmaps/, CVS RCS %~), \
$(wildcard charmaps/*))
# List with all available character set descriptions.
locales := $(filter-out $(addprefix locales/, CVS RCS %~), \
$(wildcard locales/*))
test-srcs := collate-test xfrm-test
test-input := de_DE.ISO-8859-1 da_DK.ISO-8859-1 fr_CA,2.13.ISO-8859-1
# Get $(inst_i18ndir) defined.
include ../Makeconfig
# Files to install.
install-others := $(addprefix $(inst_i18ndir)/, $(charmaps) $(locales))
include ../Rules
# Install the message object files as libc.po in the language directory.
$(inst_i18ndir)/charmaps/%: charmaps/%; $(do-install)
$(inst_i18ndir)/locales/%: locales/%; $(do-install)
ifeq (no,$(cross-compiling))
tests: $(objpfx)collate-test $(objpfx)xfrm-test
$(SHELL) -e sort-test.sh $(common-objpfx) $(test-input)
endif
+99
View File
@@ -0,0 +1,99 @@
POSIX locale descriptions
and
POSIX character set descriptions
Ulrich Drepper Time-stamp: <1997/02/12 22:13:01 drepper>
drepper@cygnus.com
This add-on package contains the data needed to build the locale data
files to use the internationalization features of the GNU libc.
POSIX.2 describes the `localedef' utility which is part of the GNU libc.
You need this program to "compile" the locale description in a form
suitable for fast access by the GNU libc functions. Any compilation is
based on a given character set.
To use these data files you should add the name of this add-on
(localedata) to the list of add-on you specify while compiling the GNU
libc:
configure --enable-add-ons=...,localedata ...
where ... are the options you normally choose. Once you run `make
install' for the GNU libc the data files are automatically installed in
the right place, ready for use by the `localedef' program.
To compile the locale data files you simply have to decide which locale
(based on the location and the language) and which character set you
use. E.g., French speaking Canadians would use the locale `fr_CA' and
the character set `ISO_8859-1,1987'. Calling `localedef' to get the
desired data should happen like this:
localedef -i fr_CA -f ISO-8859-1 fr_CA
This will place the 6 output files in the appropriate directory where
the GNU libc functions can find them. Please note that you need the
rights to write to this directory ($(prefix)/share/locale, where
$(prefix) is the value you specified while configuring GNU libc). If
you do not have the necessary rights, you can write the files into an
arbitrary directory by giving a path including a '/' character instead
of `fr_CA'. E.g., to put the new files in a subdirectory of the
current directory simply use
localedef -i fr_CA -f ISO-8859-1 ./fr_CA
How to use these data files is described in the GNU libc manual,
especially in the section describing the `setlocale' function.
The here contained files can originally be found at
ftp://dkuug.dk/i18n/WG15-collection
Keld Jörn Simonsen from the Danish Unix User Group maintains this
archive on behalf of the POSIX working groups. When you find some wrong
data or want to add something please contact
Keld Jörn Simonsen <keld@dkuug.dk>
and
Ulrich Drepper <drepper@cygnus.com>
Please make sure your corrections are relativ to the originally
distributed files. Consult the CHECKSUMS file which contains the MD5
sums for all data files.
One more note: the `POSIX' locale definition is not meant to be used
as an input file for `localedef'. It is rather there to show the
values with are built in the libc binaries as default values when no
legal locale is found or the "C" or "POSIX" locale is selected.
The collation test suite
########################
This package also contains a (beginning of a) test suite for the
collation functions in the GNU libc. The files are provided sorted.
The test program shuffles the lines and sort them afterwards.
Some of the files are provided in 8bit form, i.e., not only ASCII
characters. So the tools you use to process the files should be 8bit
clean.
To run the test program the appropriate locale information must be
installed. Therefore the localedef program is used to generate this
data used the locale and charmap description files contained here.
Since we cannot run the localedef program in case of cross-compilation
no tests at all are performed.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Local Variables:
mode:text
eval:(load-library "time-stamp")
eval:(make-local-variable 'write-file-hooks)
eval:(add-hook 'write-file-hooks 'time-stamp)
eval:(setq time-stamp-format '(time-stamp-yyyy/mm/dd time-stamp-hh:mm:ss user-login-name))
End:
+2
View File
@@ -0,0 +1,2 @@
The charmaps/ directory contains charmaps for coded character sets which
contains the portable POSIX character repertoire.
+509
View File
@@ -0,0 +1,509 @@
<code_set_name> ANSI_X3.110-1983
<comment_char> %
<escape_char> /
% source: ECMA registry
% alias ISO-IR-99
% alias CSA_T500-1983
% alias NAPLPS
CHARMAP
<NU> /x00 <U0000> NULL (NUL)
<SH> /x01 <U0001> START OF HEADING (SOH)
<SX> /x02 <U0002> START OF TEXT (STX)
<EX> /x03 <U0003> END OF TEXT (ETX)
<ET> /x04 <U0004> END OF TRANSMISSION (EOT)
<EQ> /x05 <U0005> ENQUIRY (ENQ)
<AK> /x06 <U0006> ACKNOWLEDGE (ACK)
<BL> /x07 <U0007> BELL (BEL)
<BS> /x08 <U0008> BACKSPACE (BS)
<HT> /x09 <U0009> CHARACTER TABULATION (HT)
<LF> /x0A <U000A> LINE FEED (LF)
<VT> /x0B <U000B> LINE TABULATION (VT)
<FF> /x0C <U000C> FORM FEED (FF)
<CR> /x0D <U000D> CARRIAGE RETURN (CR)
<SO> /x0E <U000E> SHIFT OUT (SO)
<SI> /x0F <U000F> SHIFT IN (SI)
<DL> /x10 <U0010> DATALINK ESCAPE (DLE)
<D1> /x11 <U0011> DEVICE CONTROL ONE (DC1)
<D2> /x12 <U0012> DEVICE CONTROL TWO (DC2)
<D3> /x13 <U0013> DEVICE CONTROL THREE (DC3)
<D4> /x14 <U0014> DEVICE CONTROL FOUR (DC4)
<NK> /x15 <U0015> NEGATIVE ACKNOWLEDGE (NAK)
<SY> /x16 <U0016> SYNCHRONOUS IDLE (SYN)
<EB> /x17 <U0017> END OF TRANSMISSION BLOCK (ETB)
<CN> /x18 <U0018> CANCEL (CAN)
<EM> /x19 <U0019> END OF MEDIUM (EM)
<SB> /x1A <U001A> SUBSTITUTE (SUB)
<EC> /x1B <U001B> ESCAPE (ESC)
<FS> /x1C <U001C> FILE SEPARATOR (IS4)
<GS> /x1D <U001D> GROUP SEPARATOR (IS3)
<RS> /x1E <U001E> RECORD SEPARATOR (IS2)
<US> /x1F <U001F> UNIT SEPARATOR (IS1)
<SP> /x20 <U0020> SPACE
<!> /x21 <U0021> EXCLAMATION MARK
<"> /x22 <U0022> QUOTATION MARK
<%> /x25 <U0025> PERCENT SIGN
<&> /x26 <U0026> AMPERSAND
<'> /x27 <U0027> APOSTROPHE
<(> /x28 <U0028> LEFT PARENTHESIS
<)> /x29 <U0029> RIGHT PARENTHESIS
<*> /x2A <U002A> ASTERISK
<+> /x2B <U002B> PLUS SIGN
<,> /x2C <U002C> COMMA
<-> /x2D <U002D> HYPHEN-MINUS
<.> /x2E <U002E> FULL STOP
<//> /x2F <U002F> SOLIDUS
<0> /x30 <U0030> DIGIT ZERO
<1> /x31 <U0031> DIGIT ONE
<2> /x32 <U0032> DIGIT TWO
<3> /x33 <U0033> DIGIT THREE
<4> /x34 <U0034> DIGIT FOUR
<5> /x35 <U0035> DIGIT FIVE
<6> /x36 <U0036> DIGIT SIX
<7> /x37 <U0037> DIGIT SEVEN
<8> /x38 <U0038> DIGIT EIGHT
<9> /x39 <U0039> DIGIT NINE
<:> /x3A <U003A> COLON
<;> /x3B <U003B> SEMICOLON
<<> /x3C <U003C> LESS-THAN SIGN
<=> /x3D <U003D> EQUALS SIGN
</>> /x3E <U003E> GREATER-THAN SIGN
<?> /x3F <U003F> QUESTION MARK
<At> /x40 <U0040> COMMERCIAL AT
<A> /x41 <U0041> LATIN CAPITAL LETTER A
<B> /x42 <U0042> LATIN CAPITAL LETTER B
<C> /x43 <U0043> LATIN CAPITAL LETTER C
<D> /x44 <U0044> LATIN CAPITAL LETTER D
<E> /x45 <U0045> LATIN CAPITAL LETTER E
<F> /x46 <U0046> LATIN CAPITAL LETTER F
<G> /x47 <U0047> LATIN CAPITAL LETTER G
<H> /x48 <U0048> LATIN CAPITAL LETTER H
<I> /x49 <U0049> LATIN CAPITAL LETTER I
<J> /x4A <U004A> LATIN CAPITAL LETTER J
<K> /x4B <U004B> LATIN CAPITAL LETTER K
<L> /x4C <U004C> LATIN CAPITAL LETTER L
<M> /x4D <U004D> LATIN CAPITAL LETTER M
<N> /x4E <U004E> LATIN CAPITAL LETTER N
<O> /x4F <U004F> LATIN CAPITAL LETTER O
<P> /x50 <U0050> LATIN CAPITAL LETTER P
<Q> /x51 <U0051> LATIN CAPITAL LETTER Q
<R> /x52 <U0052> LATIN CAPITAL LETTER R
<S> /x53 <U0053> LATIN CAPITAL LETTER S
<T> /x54 <U0054> LATIN CAPITAL LETTER T
<U> /x55 <U0055> LATIN CAPITAL LETTER U
<V> /x56 <U0056> LATIN CAPITAL LETTER V
<W> /x57 <U0057> LATIN CAPITAL LETTER W
<X> /x58 <U0058> LATIN CAPITAL LETTER X
<Y> /x59 <U0059> LATIN CAPITAL LETTER Y
<Z> /x5A <U005A> LATIN CAPITAL LETTER Z
<<(> /x5B <U005B> LEFT SQUARE BRACKET
<////> /x5C <U005C> REVERSE SOLIDUS
<)/>> /x5D <U005D> RIGHT SQUARE BRACKET
<'/>> /x5E <U005E> CIRCUMFLEX ACCENT
<_> /x5F <U005F> LOW LINE
<'!> /x60 <U0060> GRAVE ACCENT
<a> /x61 <U0061> LATIN SMALL LETTER A
<b> /x62 <U0062> LATIN SMALL LETTER B
<c> /x63 <U0063> LATIN SMALL LETTER C
<d> /x64 <U0064> LATIN SMALL LETTER D
<e> /x65 <U0065> LATIN SMALL LETTER E
<f> /x66 <U0066> LATIN SMALL LETTER F
<g> /x67 <U0067> LATIN SMALL LETTER G
<h> /x68 <U0068> LATIN SMALL LETTER H
<i> /x69 <U0069> LATIN SMALL LETTER I
<j> /x6A <U006A> LATIN SMALL LETTER J
<k> /x6B <U006B> LATIN SMALL LETTER K
<l> /x6C <U006C> LATIN SMALL LETTER L
<m> /x6D <U006D> LATIN SMALL LETTER M
<n> /x6E <U006E> LATIN SMALL LETTER N
<o> /x6F <U006F> LATIN SMALL LETTER O
<p> /x70 <U0070> LATIN SMALL LETTER P
<q> /x71 <U0071> LATIN SMALL LETTER Q
<r> /x72 <U0072> LATIN SMALL LETTER R
<s> /x73 <U0073> LATIN SMALL LETTER S
<t> /x74 <U0074> LATIN SMALL LETTER T
<u> /x75 <U0075> LATIN SMALL LETTER U
<v> /x76 <U0076> LATIN SMALL LETTER V
<w> /x77 <U0077> LATIN SMALL LETTER W
<x> /x78 <U0078> LATIN SMALL LETTER X
<y> /x79 <U0079> LATIN SMALL LETTER Y
<z> /x7A <U007A> LATIN SMALL LETTER Z
<(!> /x7B <U007B> LEFT CURLY BRACKET
<!!> /x7C <U007C> VERTICAL LINE
<!)> /x7D <U007D> RIGHT CURLY BRACKET
<'?> /x7E <U007E> TILDE
<DT> /x7F <U007F> DELETE (DEL)
<PA> /x80 <U0080> PADDING CHARACTER (PAD)
<HO> /x81 <U0081> HIGH OCTET PRESET (HOP)
<BH> /x82 <U0082> BREAK PERMITTED HERE (BPH)
<NH> /x83 <U0083> NO BREAK HERE (NBH)
<IN> /x84 <U0084> INDEX (IND)
<NL> /x85 <U0085> NEXT LINE (NEL)
<SA> /x86 <U0086> START OF SELECTED AREA (SSA)
<ES> /x87 <U0087> END OF SELECTED AREA (ESA)
<HS> /x88 <U0088> CHARACTER TABULATION SET (HTS)
<HJ> /x89 <U0089> CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
<VS> /x8A <U008A> LINE TABULATION SET (VTS)
<PD> /x8B <U008B> PARTIAL LINE FORWARD (PLD)
<PU> /x8C <U008C> PARTIAL LINE BACKWARD (PLU)
<RI> /x8D <U008D> REVERSE LINE FEED (RI)
<S2> /x8E <U008E> SINGLE-SHIFT TWO (SS2)
<S3> /x8F <U008F> SINGLE-SHIFT THREE (SS3)
<DC> /x90 <U0090> DEVICE CONTROL STRING (DCS)
<P1> /x91 <U0091> PRIVATE USE ONE (PU1)
<P2> /x92 <U0092> PRIVATE USE TWO (PU2)
<TS> /x93 <U0093> SET TRANSMIT STATE (STS)
<CC> /x94 <U0094> CANCEL CHARACTER (CCH)
<MW> /x95 <U0095> MESSAGE WAITING (MW)
<SG> /x96 <U0096> START OF GUARDED AREA (SPA)
<EG> /x97 <U0097> END OF GUARDED AREA (EPA)
<SS> /x98 <U0098> START OF STRING (SOS)
<GC> /x99 <U0099> SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
<SC> /x9A <U009A> SINGLE CHARACTER INTRODUCER (SCI)
<CI> /x9B <U009B> CONTROL SEQUENCE INTRODUCER (CSI)
<ST> /x9C <U009C> STRING TERMINATOR (ST)
<OC> /x9D <U009D> OPERATING SYSTEM COMMAND (OSC)
<PM> /x9E <U009E> PRIVACY MESSAGE (PM)
<AC> /x9F <U009F> APPLICATION PROGRAM COMMAND (APC)
<!I> /xA1 <U00A1> INVERTED EXCLAMATION MARK
<Ct> /xA2 <U00A2> CENT SIGN
<Pd> /xA3 <U00A3> POUND SIGN
<DO> /xA4 <U0024> DOLLAR SIGN
<Ye> /xA5 <U00A5> YEN SIGN
<Nb> /xA6 <U0023> NUMBER SIGN
<SE> /xA7 <U00A7> SECTION SIGN
<Cu> /xA8 <U00A4> CURRENCY SIGN
<'6> /xA9 <U2018> LEFT SINGLE QUOTATION MARK
<"6> /xAA <U201C> LEFT DOUBLE QUOTATION MARK
<<<> /xAB <U00AB> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
<<-> /xAC <U2190> LEFTWARDS ARROW
<-!> /xAD <U2191> UPWARDS ARROW
<-/>> /xAE <U2192> RIGHTWARDS ARROW
<-v> /xAF <U2193> DOWNWARDS ARROW
<DG> /xB0 <U00B0> DEGREE SIGN
<+-> /xB1 <U00B1> PLUS-MINUS SIGN
<2S> /xB2 <U00B2> SUPERSCRIPT TWO
<3S> /xB3 <U00B3> SUPERSCRIPT THREE
<*X> /xB4 <U00D7> MULTIPLICATION SIGN
<My> /xB5 <U00B5> MICRO SIGN
<PI> /xB6 <U00B6> PILCROW SIGN
<.M> /xB7 <U00B7> MIDDLE DOT
<-:> /xB8 <U00F7> DIVISION SIGN
<'9> /xB9 <U2019> RIGHT SINGLE QUOTATION MARK
<"9> /xBA <U201D> RIGHT DOUBLE QUOTATION MARK
</>/>> /xBB <U00BB> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
<14> /xBC <U00BC> VULGAR FRACTION ONE QUARTER
<12> /xBD <U00BD> VULGAR FRACTION ONE HALF
<34> /xBE <U00BE> VULGAR FRACTION THREE QUARTERS
<?I> /xBF <U00BF> INVERTED QUESTION MARK
<"!> /xC1 <UE002> NON-SPACING GRAVE ACCENT <ISO-IR-103_C1> (not a real character)
<"'> /xC2 <UE003> NON-SPACING ACUTE ACCENT <ISO-IR-103_C2> (not a real character)
<"/>> /xC3 <UE004> NON-SPACING CIRCUMFLEX ACCENT <ISO-IR-103_C3> (not a real character)
<"?> /xC4 <UE005> NON-SPACING TILDE <ISO-IR-103_C4> (not a real character)
<"-> /xC5 <UE006> NON-SPACING MACRON <ISO-IR-103_C5> (not a real character)
<"(> /xC6 <UE007> NON-SPACING BREVE <ISO-IR-103_C6> (not a real character)
<".> /xC7 <UE008> NON-SPACING DOT ABOVE <ISO-IR-103_C7> (not a real character)
<":> /xC8 <UE009> NON-SPACING DIAERESIS <ISO-IR-103_C8> (not a real character)
<"//> /xC9 <UE011> NON-SPACING LONG SOLIDUS OVERLAY <ISO-IR-128_C9> (not a real character)
<"0> /xCA <UE00A> NON-SPACING RING ABOVE <ISO-IR-103_CA> (not a real character)
<",> /xCB <UE00B> NON-SPACING CEDILLA <ISO-IR-103_CB> (not a real character)
<"_> /xCC <UE00C> NON-SPACING LOW LINE <ISO-IR-103_CC> (not a real character)
<""> /xCD <UE00D> NON-SPACING DOUBLE ACCUTE ACCENT <ISO-IR-103_CD> (not a real character)
<";> /xCE <UE00E> NON-SPACING OGONEK <ISO-IR-103_CE> (not a real character)
<"<> /xCF <UE00F> NON-SPACING CARON <ISO-IR-103_CF> (not a real character)
<-M> /xD0 <U2014> EM DASH
<1S> /xD1 <U00B9> SUPERSCRIPT ONE
<Rg> /xD2 <U00AE> REGISTERED SIGN
<Co> /xD3 <U00A9> COPYRIGHT SIGN
<TM> /xD4 <U2122> TRADE MARK SIGN
<M8> /xD5 <U266A> EIGHTH NOTE
<hh> /xD6 <U2500> BOX DRAWINGS LIGHT HORIZONTAL
<vv> /xD7 <U2502> BOX DRAWINGS LIGHT VERTICAL
<FD> /xD8 <U2571> BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
<BD> /xD9 <U2572> BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
<Fd> /xDA <U25E2> BLACK LOWER RIGHT TRIANGLE
<Bd> /xDB <U25E3> BLACK LOWER LEFT TRIANGLE
<18> /xDC <U215B> VULGAR FRACTION ONE EIGHTH
<38> /xDD <U215C> VULGAR FRACTION THREE EIGHTHS
<58> /xDE <U215D> VULGAR FRACTION FIVE EIGHTHS
<78> /xDF <U215E> VULGAR FRACTION SEVEN EIGHTHS
<Om> /xE0 <U2126> OHM SIGN
<AE> /xE1 <U00C6> LATIN CAPITAL LETTER AE
<D-> /xE2 <U00D0> LATIN CAPITAL LETTER ETH (Icelandic)
<-a> /xE3 <U00AA> FEMININE ORDINAL INDICATOR
<H//> /xE4 <U0126> LATIN CAPITAL LETTER H WITH STROKE
<vh> /xE5 <U253C> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
<IJ> /xE6 <U0132> LATIN CAPITAL LIGATURE IJ
<L.> /xE7 <U013F> LATIN CAPITAL LETTER L WITH MIDDLE DOT
<L//> /xE8 <U0141> LATIN CAPITAL LETTER L WITH STROKE
<O//> /xE9 <U00D8> LATIN CAPITAL LETTER O WITH STROKE
<OE> /xEA <U0152> LATIN CAPITAL LIGATURE OE
<-o> /xEB <U00BA> MASCULINE ORDINAL INDICATOR
<TH> /xEC <U00DE> LATIN CAPITAL LETTER THORN (Icelandic)
<T//> /xED <U0166> LATIN CAPITAL LETTER T WITH STROKE
<NG> /xEE <U014A> LATIN CAPITAL LETTER ENG (Sami)
<'n> /xEF <U0149> LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
<kk> /xF0 <U0138> LATIN SMALL LETTER KRA (Greenlandic)
<ae> /xF1 <U00E6> LATIN SMALL LETTER AE
<d//> /xF2 <U0111> LATIN SMALL LETTER D WITH STROKE
<d-> /xF3 <U00F0> LATIN SMALL LETTER ETH (Icelandic)
<h//> /xF4 <U0127> LATIN SMALL LETTER H WITH STROKE
<i.> /xF5 <U0131> LATIN SMALL LETTER DOTLESS I
<ij> /xF6 <U0133> LATIN SMALL LIGATURE IJ
<l.> /xF7 <U0140> LATIN SMALL LETTER L WITH MIDDLE DOT
<l//> /xF8 <U0142> LATIN SMALL LETTER L WITH STROKE
<o//> /xF9 <U00F8> LATIN SMALL LETTER O WITH STROKE
<oe> /xFA <U0153> LATIN SMALL LIGATURE OE
<ss> /xFB <U00DF> LATIN SMALL LETTER SHARP S (German)
<th> /xFC <U00FE> LATIN SMALL LETTER THORN (Icelandic)
<t//> /xFD <U0167> LATIN SMALL LETTER T WITH STROKE
<ng> /xFE <U014B> LATIN SMALL LETTER ENG (Sami)
<''> /xC2/x20 <U00B4> ACUTE ACCENT
<a'> /xC2/x61 <U00E1> LATIN SMALL LETTER A WITH ACUTE
<A'> /xC2/x41 <U00C1> LATIN CAPITAL LETTER A WITH ACUTE
<e'> /xC2/x65 <U00E9> LATIN SMALL LETTER E WITH ACUTE
<E'> /xC2/x45 <U00C9> LATIN CAPITAL LETTER E WITH ACUTE
<i'> /xC2/x69 <U00ED> LATIN SMALL LETTER I WITH ACUTE
<I'> /xC2/x49 <U00CD> LATIN CAPITAL LETTER I WITH ACUTE
<o'> /xC2/x6F <U00F3> LATIN SMALL LETTER O WITH ACUTE
<O'> /xC2/x4F <U00D3> LATIN CAPITAL LETTER O WITH ACUTE
<u'> /xC2/x75 <U00FA> LATIN SMALL LETTER U WITH ACUTE
<U'> /xC2/x55 <U00DA> LATIN CAPITAL LETTER U WITH ACUTE
<y'> /xC2/x79 <U00FD> LATIN SMALL LETTER Y WITH ACUTE
<Y'> /xC2/x59 <U00DD> LATIN CAPITAL LETTER Y WITH ACUTE
<c'> /xC2/x63 <U0107> LATIN SMALL LETTER C WITH ACUTE
<C'> /xC2/x43 <U0106> LATIN CAPITAL LETTER C WITH ACUTE
<l'> /xC2/x6C <U013A> LATIN SMALL LETTER L WITH ACUTE
<L'> /xC2/x4C <U0139> LATIN CAPITAL LETTER L WITH ACUTE
<n'> /xC2/x6E <U0144> LATIN SMALL LETTER N WITH ACUTE
<N'> /xC2/x4E <U0143> LATIN CAPITAL LETTER N WITH ACUTE
<r'> /xC2/x72 <U0155> LATIN SMALL LETTER R WITH ACUTE
<R'> /xC2/x52 <U0154> LATIN CAPITAL LETTER R WITH ACUTE
<s'> /xC2/x73 <U015B> LATIN SMALL LETTER S WITH ACUTE
<S'> /xC2/x53 <U015A> LATIN CAPITAL LETTER S WITH ACUTE
<z'> /xC2/x7A <U017A> LATIN SMALL LETTER Z WITH ACUTE
<Z'> /xC2/x5A <U0179> LATIN CAPITAL LETTER Z WITH ACUTE
<'(> /xC6/x20 <U02D8> BREVE
<a(> /xC6/x61 <U0103> LATIN SMALL LETTER A WITH BREVE
<A(> /xC6/x41 <U0102> LATIN CAPITAL LETTER A WITH BREVE
<g(> /xC6/x67 <U011F> LATIN SMALL LETTER G WITH BREVE
<G(> /xC6/x47 <U011E> LATIN CAPITAL LETTER G WITH BREVE
<u(> /xC6/x75 <U016D> LATIN SMALL LETTER U WITH BREVE
<U(> /xC6/x55 <U016C> LATIN CAPITAL LETTER U WITH BREVE
<'<> /xCF/x20 <U02C7> CARON (Mandarin Chinese third tone)
<c<> /xCF/x63 <U010D> LATIN SMALL LETTER C WITH CARON
<C<> /xCF/x43 <U010C> LATIN CAPITAL LETTER C WITH CARON
<d<> /xCF/x64 <U010F> LATIN SMALL LETTER D WITH CARON
<D<> /xCF/x44 <U010E> LATIN CAPITAL LETTER D WITH CARON
<e<> /xCF/x65 <U011B> LATIN SMALL LETTER E WITH CARON
<E<> /xCF/x45 <U011A> LATIN CAPITAL LETTER E WITH CARON
<l<> /xCF/x6C <U013E> LATIN SMALL LETTER L WITH CARON
<L<> /xCF/x4C <U013D> LATIN CAPITAL LETTER L WITH CARON
<n<> /xCF/x6E <U0148> LATIN SMALL LETTER N WITH CARON
<N<> /xCF/x4E <U0147> LATIN CAPITAL LETTER N WITH CARON
<r<> /xCF/x72 <U0159> LATIN SMALL LETTER R WITH CARON
<R<> /xCF/x52 <U0158> LATIN CAPITAL LETTER R WITH CARON
<s<> /xCF/x73 <U0161> LATIN SMALL LETTER S WITH CARON
<S<> /xCF/x53 <U0160> LATIN CAPITAL LETTER S WITH CARON
<t<> /xCF/x74 <U0165> LATIN SMALL LETTER T WITH CARON
<T<> /xCF/x54 <U0164> LATIN CAPITAL LETTER T WITH CARON
<z<> /xCF/x7A <U017E> LATIN SMALL LETTER Z WITH CARON
<Z<> /xCF/x5A <U017D> LATIN CAPITAL LETTER Z WITH CARON
<',> /xCB/x20 <U00B8> CEDILLA
<c,> /xCB/x63 <U00E7> LATIN SMALL LETTER C WITH CEDILLA
<C,> /xCB/x43 <U00C7> LATIN CAPITAL LETTER C WITH CEDILLA
<g,> /xCB/x67 <U0123> LATIN SMALL LETTER G WITH CEDILLA
<G,> /xCB/x47 <U0122> LATIN CAPITAL LETTER G WITH CEDILLA
<k,> /xCB/x6B <U0137> LATIN SMALL LETTER K WITH CEDILLA
<K,> /xCB/x4B <U0136> LATIN CAPITAL LETTER K WITH CEDILLA
<l,> /xCB/x6C <U013C> LATIN SMALL LETTER L WITH CEDILLA
<L,> /xCB/x4C <U013B> LATIN CAPITAL LETTER L WITH CEDILLA
<n,> /xCB/x6E <U0146> LATIN SMALL LETTER N WITH CEDILLA
<N,> /xCB/x4E <U0145> LATIN CAPITAL LETTER N WITH CEDILLA
<r,> /xCB/x72 <U0157> LATIN SMALL LETTER R WITH CEDILLA
<R,> /xCB/x52 <U0156> LATIN CAPITAL LETTER R WITH CEDILLA
<s,> /xCB/x73 <U015F> LATIN SMALL LETTER S WITH CEDILLA
<S,> /xCB/x53 <U015E> LATIN CAPITAL LETTER S WITH CEDILLA
<t,> /xCB/x74 <U0163> LATIN SMALL LETTER T WITH CEDILLA
<T,> /xCB/x54 <U0162> LATIN CAPITAL LETTER T WITH CEDILLA
<a/>> /xC3/x61 <U00E2> LATIN SMALL LETTER A WITH CIRCUMFLEX
<A/>> /xC3/x41 <U00C2> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
<e/>> /xC3/x65 <U00EA> LATIN SMALL LETTER E WITH CIRCUMFLEX
<E/>> /xC3/x45 <U00CA> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
<i/>> /xC3/x69 <U00EE> LATIN SMALL LETTER I WITH CIRCUMFLEX
<I/>> /xC3/x49 <U00CE> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
<o/>> /xC3/x6F <U00F4> LATIN SMALL LETTER O WITH CIRCUMFLEX
<O/>> /xC3/x4F <U00D4> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
<u/>> /xC3/x75 <U00FB> LATIN SMALL LETTER U WITH CIRCUMFLEX
<U/>> /xC3/x55 <U00DB> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
<y/>> /xC3/x79 <U0177> LATIN SMALL LETTER Y WITH CIRCUMFLEX
<Y/>> /xC3/x59 <U0176> LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
<c/>> /xC3/x63 <U0109> LATIN SMALL LETTER C WITH CIRCUMFLEX
<C/>> /xC3/x43 <U0108> LATIN CAPITAL LETTER C WITH CIRCUMFLEX
<g/>> /xC3/x67 <U011D> LATIN SMALL LETTER G WITH CIRCUMFLEX
<G/>> /xC3/x47 <U011C> LATIN CAPITAL LETTER G WITH CIRCUMFLEX
<h/>> /xC3/x68 <U0125> LATIN SMALL LETTER H WITH CIRCUMFLEX
<H/>> /xC3/x48 <U0124> LATIN CAPITAL LETTER H WITH CIRCUMFLEX
<j/>> /xC3/x6A <U0135> LATIN SMALL LETTER J WITH CIRCUMFLEX
<J/>> /xC3/x4A <U0134> LATIN CAPITAL LETTER J WITH CIRCUMFLEX
<s/>> /xC3/x73 <U015D> LATIN SMALL LETTER S WITH CIRCUMFLEX
<S/>> /xC3/x53 <U015C> LATIN CAPITAL LETTER S WITH CIRCUMFLEX
<w/>> /xC3/x77 <U0175> LATIN SMALL LETTER W WITH CIRCUMFLEX
<W/>> /xC3/x57 <U0174> LATIN CAPITAL LETTER W WITH CIRCUMFLEX
<':> /xC8/x20 <U00A8> DIAERESIS
<a:> /xC8/x61 <U00E4> LATIN SMALL LETTER A WITH DIAERESIS
<A:> /xC8/x41 <U00C4> LATIN CAPITAL LETTER A WITH DIAERESIS
<e:> /xC8/x65 <U00EB> LATIN SMALL LETTER E WITH DIAERESIS
<E:> /xC8/x45 <U00CB> LATIN CAPITAL LETTER E WITH DIAERESIS
<i:> /xC8/x69 <U00EF> LATIN SMALL LETTER I WITH DIAERESIS
<I:> /xC8/x49 <U00CF> LATIN CAPITAL LETTER I WITH DIAERESIS
<o:> /xC8/x6F <U00F6> LATIN SMALL LETTER O WITH DIAERESIS
<O:> /xC8/x4F <U00D6> LATIN CAPITAL LETTER O WITH DIAERESIS
<u:> /xC8/x75 <U00FC> LATIN SMALL LETTER U WITH DIAERESIS
<U:> /xC8/x55 <U00DC> LATIN CAPITAL LETTER U WITH DIAERESIS
<y:> /xC8/x79 <U00FF> LATIN SMALL LETTER Y WITH DIAERESIS
<Y:> /xC8/x59 <U0178> LATIN CAPITAL LETTER Y WITH DIAERESIS
<'.> /xC7/x20 <U02D9> DOT ABOVE (Mandarin Chinese light tone)
<c.> /xC7/x63 <U010B> LATIN SMALL LETTER C WITH DOT ABOVE
<C.> /xC7/x43 <U010A> LATIN CAPITAL LETTER C WITH DOT ABOVE
<e.> /xC7/x65 <U0117> LATIN SMALL LETTER E WITH DOT ABOVE
<E.> /xC7/x45 <U0116> LATIN CAPITAL LETTER E WITH DOT ABOVE
<g.> /xC7/x67 <U0121> LATIN SMALL LETTER G WITH DOT ABOVE
<G.> /xC7/x47 <U0120> LATIN CAPITAL LETTER G WITH DOT ABOVE
<I.> /xC7/x49 <U0130> LATIN CAPITAL LETTER I WITH DOT ABOVE
<z.> /xC7/x7A <U017C> LATIN SMALL LETTER Z WITH DOT ABOVE
<Z.> /xC7/x5A <U017B> LATIN CAPITAL LETTER Z WITH DOT ABOVE
<'"> /xCD/x20 <U02DD> DOUBLE ACUTE ACCENT
<o"> /xCD/x6F <U0151> LATIN SMALL LETTER O WITH DOUBLE ACUTE
<O"> /xCD/x4F <U0150> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
<u"> /xCD/x75 <U0171> LATIN SMALL LETTER U WITH DOUBLE ACUTE
<U"> /xCD/x55 <U0170> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
<a!> /xC1/x61 <U00E0> LATIN SMALL LETTER A WITH GRAVE
<A!> /xC1/x41 <U00C0> LATIN CAPITAL LETTER A WITH GRAVE
<e!> /xC1/x65 <U00E8> LATIN SMALL LETTER E WITH GRAVE
<E!> /xC1/x45 <U00C8> LATIN CAPITAL LETTER E WITH GRAVE
<i!> /xC1/x69 <U00EC> LATIN SMALL LETTER I WITH GRAVE
<I!> /xC1/x49 <U00CC> LATIN CAPITAL LETTER I WITH GRAVE
<o!> /xC1/x6F <U00F2> LATIN SMALL LETTER O WITH GRAVE
<O!> /xC1/x4F <U00D2> LATIN CAPITAL LETTER O WITH GRAVE
<u!> /xC1/x75 <U00F9> LATIN SMALL LETTER U WITH GRAVE
<U!> /xC1/x55 <U00D9> LATIN CAPITAL LETTER U WITH GRAVE
<'m> /xC5/x20 <U00AF> MACRON
<a-> /xC5/x61 <U0101> LATIN SMALL LETTER A WITH MACRON
<A-> /xC5/x41 <U0100> LATIN CAPITAL LETTER A WITH MACRON
<e-> /xC5/x65 <U0113> LATIN SMALL LETTER E WITH MACRON
<E-> /xC5/x45 <U0112> LATIN CAPITAL LETTER E WITH MACRON
<i-> /xC5/x69 <U012B> LATIN SMALL LETTER I WITH MACRON
<I-> /xC5/x49 <U012A> LATIN CAPITAL LETTER I WITH MACRON
<o-> /xC5/x6F <U014D> LATIN SMALL LETTER O WITH MACRON
<O-> /xC5/x4F <U014C> LATIN CAPITAL LETTER O WITH MACRON
<u-> /xC5/x75 <U016B> LATIN SMALL LETTER U WITH MACRON
<U-> /xC5/x55 <U016A> LATIN CAPITAL LETTER U WITH MACRON
<';> /xCE/x20 <U02DB> OGONEK
<a;> /xCE/x61 <U0105> LATIN SMALL LETTER A WITH OGONEK
<A;> /xCE/x41 <U0104> LATIN CAPITAL LETTER A WITH OGONEK
<e;> /xCE/x65 <U0119> LATIN SMALL LETTER E WITH OGONEK
<E;> /xCE/x45 <U0118> LATIN CAPITAL LETTER E WITH OGONEK
<i;> /xCE/x69 <U012F> LATIN SMALL LETTER I WITH OGONEK
<I;> /xCE/x49 <U012E> LATIN CAPITAL LETTER I WITH OGONEK
<u;> /xCE/x75 <U0173> LATIN SMALL LETTER U WITH OGONEK
<U;> /xCE/x55 <U0172> LATIN CAPITAL LETTER U WITH OGONEK
<'0> /xCA/x20 <U02DA> RING ABOVE
<aa> /xCA/x61 <U00E5> LATIN SMALL LETTER A WITH RING ABOVE
<AA> /xCA/x41 <U00C5> LATIN CAPITAL LETTER A WITH RING ABOVE
<u0> /xCA/x75 <U016F> LATIN SMALL LETTER U WITH RING ABOVE
<U0> /xCA/x55 <U016E> LATIN CAPITAL LETTER U WITH RING ABOVE
<a?> /xC4/x61 <U00E3> LATIN SMALL LETTER A WITH TILDE
<A?> /xC4/x41 <U00C3> LATIN CAPITAL LETTER A WITH TILDE
<n?> /xC4/x6E <U00F1> LATIN SMALL LETTER N WITH TILDE
<N?> /xC4/x4E <U00D1> LATIN CAPITAL LETTER N WITH TILDE
<i?> /xC4/x69 <U0129> LATIN SMALL LETTER I WITH TILDE
<I?> /xC4/x49 <U0128> LATIN CAPITAL LETTER I WITH TILDE
<o?> /xC4/x6F <U00F5> LATIN SMALL LETTER O WITH TILDE
<O?> /xC4/x4F <U00D5> LATIN CAPITAL LETTER O WITH TILDE
<u?> /xC4/x75 <U0169> LATIN SMALL LETTER U WITH TILDE
<U?> /xC4/x55 <U0168> LATIN CAPITAL LETTER U WITH TILDE
<NUL> /x00 <U0000> NUL
<SOH> /x01 <U0001> START OF HEADING (SOH)
<STX> /x02 <U0002> START OF TEXT (STX)
<ETX> /x03 <U0003> END OF TEXT (ETX)
<EOT> /x04 <U0004> END OF TRANSMISSION (EOT)
<ENQ> /x05 <U0005> ENQUIRY (ENQ)
<ACK> /x06 <U0006> ACKNOWLEDGE (ACK)
<alert> /x07 <U0007> BELL (BEL)
<BEL> /x07 <U0007> BELL (BEL)
<backspace> /x08 <U0008> BACKSPACE (BS)
<tab> /x09 <U0009> CHARACTER TABULATION (HT)
<newline> /x0A <U000A> LINE FEED (LF)
<vertical-tab> /x0B <U000B> LINE TABULATION (VT)
<form-feed> /x0C <U000C> FORM FEED (FF)
<carriage-return> /x0D <U000D> CARRIAGE RETURN (CR)
<DLE> /x10 <U0010> DATALINK ESCAPE (DLE)
<DC1> /x11 <U0011> DEVICE CONTROL ONE (DC1)
<DC2> /x12 <U0012> DEVICE CONTROL TWO (DC2)
<DC3> /x13 <U0013> DEVICE CONTROL THREE (DC3)
<DC4> /x14 <U0014> DEVICE CONTROL FOUR (DC4)
<NAK> /x15 <U0015> NEGATIVE ACKNOWLEDGE (NAK)
<SYN> /x16 <U0016> SYNCHRONOUS IDLE (SYN)
<ETB> /x17 <U0017> END OF TRANSMISSION BLOCK (ETB)
<CAN> /x18 <U0018> CANCEL (CAN)
<SUB> /x1A <U001A> SUBSTITUTE (SUB)
<ESC> /x1B <U001B> ESCAPE (ESC)
<IS4> /x1C <U001C> FILE SEPARATOR (IS4)
<IS3> /x1D <U001D> GROUP SEPARATOR (IS3)
<intro> /x1D <U001D> GROUP SEPARATOR (IS3)
<IS2> /x1E <U001E> RECORD SEPARATOR (IS2)
<IS1> /x1F <U001F> UNIT SEPARATOR (IS1)
<DEL> /x7F <U007F> DELETE (DEL)
<space> /x20 <U0020> SPACE
<exclamation-mark> /x21 <U0021> EXCLAMATION MARK
<quotation-mark> /x22 <U0022> QUOTATION MARK
<number-sign> /xA6 <U0023> NUMBER SIGN
<dollar-sign> /xA4 <U0024> DOLLAR SIGN
<percent-sign> /x25 <U0025> PERCENT SIGN
<ampersand> /x26 <U0026> AMPERSAND
<apostrophe> /x27 <U0027> APOSTROPHE
<left-parenthesis> /x28 <U0028> LEFT PARENTHESIS
<right-parenthesis> /x29 <U0029> RIGHT PARENTHESIS
<asterisk> /x2A <U002A> ASTERISK
<plus-sign> /x2B <U002B> PLUS SIGN
<comma> /x2C <U002C> COMMA
<hyphen> /x2D <U002D> HYPHEN-MINUS
<hyphen-minus> /x2D <U002D> HYPHEN-MINUS
<period> /x2E <U002E> FULL STOP
<full-stop> /x2E <U002E> FULL STOP
<slash> /x2F <U002F> SOLIDUS
<solidus> /x2F <U002F> SOLIDUS
<zero> /x30 <U0030> DIGIT ZERO
<one> /x31 <U0031> DIGIT ONE
<two> /x32 <U0032> DIGIT TWO
<three> /x33 <U0033> DIGIT THREE
<four> /x34 <U0034> DIGIT FOUR
<five> /x35 <U0035> DIGIT FIVE
<six> /x36 <U0036> DIGIT SIX
<seven> /x37 <U0037> DIGIT SEVEN
<eight> /x38 <U0038> DIGIT EIGHT
<nine> /x39 <U0039> DIGIT NINE
<colon> /x3A <U003A> COLON
<semicolon> /x3B <U003B> SEMICOLON
<less-than-sign> /x3C <U003C> LESS-THAN SIGN
<equals-sign> /x3D <U003D> EQUALS SIGN
<greater-than-sign> /x3E <U003E> GREATER-THAN SIGN
<question-mark> /x3F <U003F> QUESTION MARK
<commercial-at> /x40 <U0040> COMMERCIAL AT
<left-square-bracket> /x5B <U005B> LEFT SQUARE BRACKET
<backslash> /x5C <U005C> REVERSE SOLIDUS
<reverse-solidus> /x5C <U005C> REVERSE SOLIDUS
<right-square-bracket> /x5D <U005D> RIGHT SQUARE BRACKET
<circumflex> /x5E <U005E> CIRCUMFLEX ACCENT
<circumflex-accent> /x5E <U005E> CIRCUMFLEX ACCENT
<underscore> /x5F <U005F> LOW LINE
<low-line> /x5F <U005F> LOW LINE
<grave-accent> /x60 <U0060> GRAVE ACCENT
<left-brace> /x7B <U007B> LEFT CURLY BRACKET
<left-curly-bracket> /x7B <U007B> LEFT CURLY BRACKET
<vertical-line> /x7C <U007C> VERTICAL LINE
<right-brace> /x7D <U007D> RIGHT CURLY BRACKET
<right-curly-bracket> /x7D <U007D> RIGHT CURLY BRACKET
<tilde> /x7E <U007E> TILDE
END CHARMAP
+227
View File
@@ -0,0 +1,227 @@
<code_set_name> ANSI_X3.4-1968
<comment_char> %
<escape_char> /
% source: ECMA registry
% alias ISO-IR-6
% alias ANSI_X3.4-1986
% alias ISO_646.IRV:1991
% alias ASCII
% alias ISO646-US
% alias US-ASCII
% alias US
% alias IBM367
% alias CP367
CHARMAP
<NU> /x00 <U0000> NULL (NUL)
<SH> /x01 <U0001> START OF HEADING (SOH)
<SX> /x02 <U0002> START OF TEXT (STX)
<EX> /x03 <U0003> END OF TEXT (ETX)
<ET> /x04 <U0004> END OF TRANSMISSION (EOT)
<EQ> /x05 <U0005> ENQUIRY (ENQ)
<AK> /x06 <U0006> ACKNOWLEDGE (ACK)
<BL> /x07 <U0007> BELL (BEL)
<BS> /x08 <U0008> BACKSPACE (BS)
<HT> /x09 <U0009> CHARACTER TABULATION (HT)
<LF> /x0A <U000A> LINE FEED (LF)
<VT> /x0B <U000B> LINE TABULATION (VT)
<FF> /x0C <U000C> FORM FEED (FF)
<CR> /x0D <U000D> CARRIAGE RETURN (CR)
<SO> /x0E <U000E> SHIFT OUT (SO)
<SI> /x0F <U000F> SHIFT IN (SI)
<DL> /x10 <U0010> DATALINK ESCAPE (DLE)
<D1> /x11 <U0011> DEVICE CONTROL ONE (DC1)
<D2> /x12 <U0012> DEVICE CONTROL TWO (DC2)
<D3> /x13 <U0013> DEVICE CONTROL THREE (DC3)
<D4> /x14 <U0014> DEVICE CONTROL FOUR (DC4)
<NK> /x15 <U0015> NEGATIVE ACKNOWLEDGE (NAK)
<SY> /x16 <U0016> SYNCHRONOUS IDLE (SYN)
<EB> /x17 <U0017> END OF TRANSMISSION BLOCK (ETB)
<CN> /x18 <U0018> CANCEL (CAN)
<EM> /x19 <U0019> END OF MEDIUM (EM)
<SB> /x1A <U001A> SUBSTITUTE (SUB)
<EC> /x1B <U001B> ESCAPE (ESC)
<FS> /x1C <U001C> FILE SEPARATOR (IS4)
<GS> /x1D <U001D> GROUP SEPARATOR (IS3)
<RS> /x1E <U001E> RECORD SEPARATOR (IS2)
<US> /x1F <U001F> UNIT SEPARATOR (IS1)
<SP> /x20 <U0020> SPACE
<!> /x21 <U0021> EXCLAMATION MARK
<"> /x22 <U0022> QUOTATION MARK
<Nb> /x23 <U0023> NUMBER SIGN
<DO> /x24 <U0024> DOLLAR SIGN
<%> /x25 <U0025> PERCENT SIGN
<&> /x26 <U0026> AMPERSAND
<'> /x27 <U0027> APOSTROPHE
<(> /x28 <U0028> LEFT PARENTHESIS
<)> /x29 <U0029> RIGHT PARENTHESIS
<*> /x2A <U002A> ASTERISK
<+> /x2B <U002B> PLUS SIGN
<,> /x2C <U002C> COMMA
<-> /x2D <U002D> HYPHEN-MINUS
<.> /x2E <U002E> FULL STOP
<//> /x2F <U002F> SOLIDUS
<0> /x30 <U0030> DIGIT ZERO
<1> /x31 <U0031> DIGIT ONE
<2> /x32 <U0032> DIGIT TWO
<3> /x33 <U0033> DIGIT THREE
<4> /x34 <U0034> DIGIT FOUR
<5> /x35 <U0035> DIGIT FIVE
<6> /x36 <U0036> DIGIT SIX
<7> /x37 <U0037> DIGIT SEVEN
<8> /x38 <U0038> DIGIT EIGHT
<9> /x39 <U0039> DIGIT NINE
<:> /x3A <U003A> COLON
<;> /x3B <U003B> SEMICOLON
<<> /x3C <U003C> LESS-THAN SIGN
<=> /x3D <U003D> EQUALS SIGN
</>> /x3E <U003E> GREATER-THAN SIGN
<?> /x3F <U003F> QUESTION MARK
<At> /x40 <U0040> COMMERCIAL AT
<A> /x41 <U0041> LATIN CAPITAL LETTER A
<B> /x42 <U0042> LATIN CAPITAL LETTER B
<C> /x43 <U0043> LATIN CAPITAL LETTER C
<D> /x44 <U0044> LATIN CAPITAL LETTER D
<E> /x45 <U0045> LATIN CAPITAL LETTER E
<F> /x46 <U0046> LATIN CAPITAL LETTER F
<G> /x47 <U0047> LATIN CAPITAL LETTER G
<H> /x48 <U0048> LATIN CAPITAL LETTER H
<I> /x49 <U0049> LATIN CAPITAL LETTER I
<J> /x4A <U004A> LATIN CAPITAL LETTER J
<K> /x4B <U004B> LATIN CAPITAL LETTER K
<L> /x4C <U004C> LATIN CAPITAL LETTER L
<M> /x4D <U004D> LATIN CAPITAL LETTER M
<N> /x4E <U004E> LATIN CAPITAL LETTER N
<O> /x4F <U004F> LATIN CAPITAL LETTER O
<P> /x50 <U0050> LATIN CAPITAL LETTER P
<Q> /x51 <U0051> LATIN CAPITAL LETTER Q
<R> /x52 <U0052> LATIN CAPITAL LETTER R
<S> /x53 <U0053> LATIN CAPITAL LETTER S
<T> /x54 <U0054> LATIN CAPITAL LETTER T
<U> /x55 <U0055> LATIN CAPITAL LETTER U
<V> /x56 <U0056> LATIN CAPITAL LETTER V
<W> /x57 <U0057> LATIN CAPITAL LETTER W
<X> /x58 <U0058> LATIN CAPITAL LETTER X
<Y> /x59 <U0059> LATIN CAPITAL LETTER Y
<Z> /x5A <U005A> LATIN CAPITAL LETTER Z
<<(> /x5B <U005B> LEFT SQUARE BRACKET
<////> /x5C <U005C> REVERSE SOLIDUS
<)/>> /x5D <U005D> RIGHT SQUARE BRACKET
<'/>> /x5E <U005E> CIRCUMFLEX ACCENT
<_> /x5F <U005F> LOW LINE
<'!> /x60 <U0060> GRAVE ACCENT
<a> /x61 <U0061> LATIN SMALL LETTER A
<b> /x62 <U0062> LATIN SMALL LETTER B
<c> /x63 <U0063> LATIN SMALL LETTER C
<d> /x64 <U0064> LATIN SMALL LETTER D
<e> /x65 <U0065> LATIN SMALL LETTER E
<f> /x66 <U0066> LATIN SMALL LETTER F
<g> /x67 <U0067> LATIN SMALL LETTER G
<h> /x68 <U0068> LATIN SMALL LETTER H
<i> /x69 <U0069> LATIN SMALL LETTER I
<j> /x6A <U006A> LATIN SMALL LETTER J
<k> /x6B <U006B> LATIN SMALL LETTER K
<l> /x6C <U006C> LATIN SMALL LETTER L
<m> /x6D <U006D> LATIN SMALL LETTER M
<n> /x6E <U006E> LATIN SMALL LETTER N
<o> /x6F <U006F> LATIN SMALL LETTER O
<p> /x70 <U0070> LATIN SMALL LETTER P
<q> /x71 <U0071> LATIN SMALL LETTER Q
<r> /x72 <U0072> LATIN SMALL LETTER R
<s> /x73 <U0073> LATIN SMALL LETTER S
<t> /x74 <U0074> LATIN SMALL LETTER T
<u> /x75 <U0075> LATIN SMALL LETTER U
<v> /x76 <U0076> LATIN SMALL LETTER V
<w> /x77 <U0077> LATIN SMALL LETTER W
<x> /x78 <U0078> LATIN SMALL LETTER X
<y> /x79 <U0079> LATIN SMALL LETTER Y
<z> /x7A <U007A> LATIN SMALL LETTER Z
<(!> /x7B <U007B> LEFT CURLY BRACKET
<!!> /x7C <U007C> VERTICAL LINE
<!)> /x7D <U007D> RIGHT CURLY BRACKET
<'?> /x7E <U007E> TILDE
<DT> /x7F <U007F> DELETE (DEL)
<NUL> /x00 <U0000> NUL
<SOH> /x01 <U0001> START OF HEADING (SOH)
<STX> /x02 <U0002> START OF TEXT (STX)
<ETX> /x03 <U0003> END OF TEXT (ETX)
<EOT> /x04 <U0004> END OF TRANSMISSION (EOT)
<ENQ> /x05 <U0005> ENQUIRY (ENQ)
<ACK> /x06 <U0006> ACKNOWLEDGE (ACK)
<alert> /x07 <U0007> BELL (BEL)
<BEL> /x07 <U0007> BELL (BEL)
<backspace> /x08 <U0008> BACKSPACE (BS)
<tab> /x09 <U0009> CHARACTER TABULATION (HT)
<newline> /x0A <U000A> LINE FEED (LF)
<vertical-tab> /x0B <U000B> LINE TABULATION (VT)
<form-feed> /x0C <U000C> FORM FEED (FF)
<carriage-return> /x0D <U000D> CARRIAGE RETURN (CR)
<DLE> /x10 <U0010> DATALINK ESCAPE (DLE)
<DC1> /x11 <U0011> DEVICE CONTROL ONE (DC1)
<DC2> /x12 <U0012> DEVICE CONTROL TWO (DC2)
<DC3> /x13 <U0013> DEVICE CONTROL THREE (DC3)
<DC4> /x14 <U0014> DEVICE CONTROL FOUR (DC4)
<NAK> /x15 <U0015> NEGATIVE ACKNOWLEDGE (NAK)
<SYN> /x16 <U0016> SYNCHRONOUS IDLE (SYN)
<ETB> /x17 <U0017> END OF TRANSMISSION BLOCK (ETB)
<CAN> /x18 <U0018> CANCEL (CAN)
<SUB> /x1A <U001A> SUBSTITUTE (SUB)
<ESC> /x1B <U001B> ESCAPE (ESC)
<IS4> /x1C <U001C> FILE SEPARATOR (IS4)
<IS3> /x1D <U001D> GROUP SEPARATOR (IS3)
<intro> /x1D <U001D> GROUP SEPARATOR (IS3)
<IS2> /x1E <U001E> RECORD SEPARATOR (IS2)
<IS1> /x1F <U001F> UNIT SEPARATOR (IS1)
<DEL> /x7F <U007F> DELETE (DEL)
<space> /x20 <U0020> SPACE
<exclamation-mark> /x21 <U0021> EXCLAMATION MARK
<quotation-mark> /x22 <U0022> QUOTATION MARK
<number-sign> /x23 <U0023> NUMBER SIGN
<dollar-sign> /x24 <U0024> DOLLAR SIGN
<percent-sign> /x25 <U0025> PERCENT SIGN
<ampersand> /x26 <U0026> AMPERSAND
<apostrophe> /x27 <U0027> APOSTROPHE
<left-parenthesis> /x28 <U0028> LEFT PARENTHESIS
<right-parenthesis> /x29 <U0029> RIGHT PARENTHESIS
<asterisk> /x2A <U002A> ASTERISK
<plus-sign> /x2B <U002B> PLUS SIGN
<comma> /x2C <U002C> COMMA
<hyphen> /x2D <U002D> HYPHEN-MINUS
<hyphen-minus> /x2D <U002D> HYPHEN-MINUS
<period> /x2E <U002E> FULL STOP
<full-stop> /x2E <U002E> FULL STOP
<slash> /x2F <U002F> SOLIDUS
<solidus> /x2F <U002F> SOLIDUS
<zero> /x30 <U0030> DIGIT ZERO
<one> /x31 <U0031> DIGIT ONE
<two> /x32 <U0032> DIGIT TWO
<three> /x33 <U0033> DIGIT THREE
<four> /x34 <U0034> DIGIT FOUR
<five> /x35 <U0035> DIGIT FIVE
<six> /x36 <U0036> DIGIT SIX
<seven> /x37 <U0037> DIGIT SEVEN
<eight> /x38 <U0038> DIGIT EIGHT
<nine> /x39 <U0039> DIGIT NINE
<colon> /x3A <U003A> COLON
<semicolon> /x3B <U003B> SEMICOLON
<less-than-sign> /x3C <U003C> LESS-THAN SIGN
<equals-sign> /x3D <U003D> EQUALS SIGN
<greater-than-sign> /x3E <U003E> GREATER-THAN SIGN
<question-mark> /x3F <U003F> QUESTION MARK
<commercial-at> /x40 <U0040> COMMERCIAL AT
<left-square-bracket> /x5B <U005B> LEFT SQUARE BRACKET
<backslash> /x5C <U005C> REVERSE SOLIDUS
<reverse-solidus> /x5C <U005C> REVERSE SOLIDUS
<right-square-bracket> /x5D <U005D> RIGHT SQUARE BRACKET
<circumflex> /x5E <U005E> CIRCUMFLEX ACCENT
<circumflex-accent> /x5E <U005E> CIRCUMFLEX ACCENT
<underscore> /x5F <U005F> LOW LINE
<low-line> /x5F <U005F> LOW LINE
<grave-accent> /x60 <U0060> GRAVE ACCENT
<left-brace> /x7B <U007B> LEFT CURLY BRACKET
<left-curly-bracket> /x7B <U007B> LEFT CURLY BRACKET
<vertical-line> /x7C <U007C> VERTICAL LINE
<right-brace> /x7D <U007D> RIGHT CURLY BRACKET
<right-curly-bracket> /x7D <U007D> RIGHT CURLY BRACKET
<tilde> /x7E <U007E> TILDE
END CHARMAP
+213
View File
@@ -0,0 +1,213 @@
<code_set_name> ASMO_449
<comment_char> %
<escape_char> /
% source: ECMA registry
% alias ISO_9036
% alias ARABIC7
% alias ISO-IR-89
CHARMAP
<NU> /x00 <U0000> NULL (NUL)
<SH> /x01 <U0001> START OF HEADING (SOH)
<SX> /x02 <U0002> START OF TEXT (STX)
<EX> /x03 <U0003> END OF TEXT (ETX)
<ET> /x04 <U0004> END OF TRANSMISSION (EOT)
<EQ> /x05 <U0005> ENQUIRY (ENQ)
<AK> /x06 <U0006> ACKNOWLEDGE (ACK)
<BL> /x07 <U0007> BELL (BEL)
<BS> /x08 <U0008> BACKSPACE (BS)
<HT> /x09 <U0009> CHARACTER TABULATION (HT)
<LF> /x0A <U000A> LINE FEED (LF)
<VT> /x0B <U000B> LINE TABULATION (VT)
<FF> /x0C <U000C> FORM FEED (FF)
<CR> /x0D <U000D> CARRIAGE RETURN (CR)
<SO> /x0E <U000E> SHIFT OUT (SO)
<SI> /x0F <U000F> SHIFT IN (SI)
<DL> /x10 <U0010> DATALINK ESCAPE (DLE)
<D1> /x11 <U0011> DEVICE CONTROL ONE (DC1)
<D2> /x12 <U0012> DEVICE CONTROL TWO (DC2)
<D3> /x13 <U0013> DEVICE CONTROL THREE (DC3)
<D4> /x14 <U0014> DEVICE CONTROL FOUR (DC4)
<NK> /x15 <U0015> NEGATIVE ACKNOWLEDGE (NAK)
<SY> /x16 <U0016> SYNCHRONOUS IDLE (SYN)
<EB> /x17 <U0017> END OF TRANSMISSION BLOCK (ETB)
<CN> /x18 <U0018> CANCEL (CAN)
<EM> /x19 <U0019> END OF MEDIUM (EM)
<SB> /x1A <U001A> SUBSTITUTE (SUB)
<EC> /x1B <U001B> ESCAPE (ESC)
<FS> /x1C <U001C> FILE SEPARATOR (IS4)
<GS> /x1D <U001D> GROUP SEPARATOR (IS3)
<RS> /x1E <U001E> RECORD SEPARATOR (IS2)
<US> /x1F <U001F> UNIT SEPARATOR (IS1)
<SP> /x20 <U0020> SPACE
<!> /x21 <U0021> EXCLAMATION MARK
<"> /x22 <U0022> QUOTATION MARK
<Nb> /x23 <U0023> NUMBER SIGN
<Cu> /x24 <U00A4> CURRENCY SIGN
<%> /x25 <U0025> PERCENT SIGN
<&> /x26 <U0026> AMPERSAND
<'> /x27 <U0027> APOSTROPHE
<(> /x28 <U0028> LEFT PARENTHESIS
<)> /x29 <U0029> RIGHT PARENTHESIS
<*> /x2A <U002A> ASTERISK
<+> /x2B <U002B> PLUS SIGN
<,+> /x2C <U060C> ARABIC COMMA
<-> /x2D <U002D> HYPHEN-MINUS
<.> /x2E <U002E> FULL STOP
<//> /x2F <U002F> SOLIDUS
<0> /x30 <U0030> DIGIT ZERO
<1> /x31 <U0031> DIGIT ONE
<2> /x32 <U0032> DIGIT TWO
<3> /x33 <U0033> DIGIT THREE
<4> /x34 <U0034> DIGIT FOUR
<5> /x35 <U0035> DIGIT FIVE
<6> /x36 <U0036> DIGIT SIX
<7> /x37 <U0037> DIGIT SEVEN
<8> /x38 <U0038> DIGIT EIGHT
<9> /x39 <U0039> DIGIT NINE
<:> /x3A <U003A> COLON
<;+> /x3B <U061B> ARABIC SEMICOLON
<<> /x3C <U003C> LESS-THAN SIGN
<=> /x3D <U003D> EQUALS SIGN
</>> /x3E <U003E> GREATER-THAN SIGN
<?+> /x3F <U061F> ARABIC QUESTION MARK
<At> /x40 <U0040> COMMERCIAL AT
<H'> /x41 <U0621> ARABIC LETTER HAMZA
<aM> /x42 <U0622> ARABIC LETTER ALEF WITH MADDA ABOVE
<aH> /x43 <U0623> ARABIC LETTER ALEF WITH HAMZA ABOVE
<wH> /x44 <U0624> ARABIC LETTER WAW WITH HAMZA ABOVE
<ah> /x45 <U0625> ARABIC LETTER ALEF WITH HAMZA BELOW
<yH> /x46 <U0626> ARABIC LETTER YEH WITH HAMZA ABOVE
<a+> /x47 <U0627> ARABIC LETTER ALEF
<b+> /x48 <U0628> ARABIC LETTER BEH
<tm> /x49 <U0629> ARABIC LETTER TEH MARBUTA
<t+> /x4A <U062A> ARABIC LETTER TEH
<tk> /x4B <U062B> ARABIC LETTER THEH
<g+> /x4C <U062C> ARABIC LETTER JEEM
<hk> /x4D <U062D> ARABIC LETTER HAH
<x+> /x4E <U062E> ARABIC LETTER KHAH
<d+> /x4F <U062F> ARABIC LETTER DAL
<dk> /x50 <U0630> ARABIC LETTER THAL
<r+> /x51 <U0631> ARABIC LETTER REH
<z+> /x52 <U0632> ARABIC LETTER ZAIN
<s+> /x53 <U0633> ARABIC LETTER SEEN
<sn> /x54 <U0634> ARABIC LETTER SHEEN
<c+> /x55 <U0635> ARABIC LETTER SAD
<dd> /x56 <U0636> ARABIC LETTER DAD
<tj> /x57 <U0637> ARABIC LETTER TAH
<zH> /x58 <U0638> ARABIC LETTER ZAH
<e+> /x59 <U0639> ARABIC LETTER AIN
<i+> /x5A <U063A> ARABIC LETTER GHAIN
<<(> /x5B <U005B> LEFT SQUARE BRACKET
<////> /x5C <U005C> REVERSE SOLIDUS
<)/>> /x5D <U005D> RIGHT SQUARE BRACKET
<'/>> /x5E <U005E> CIRCUMFLEX ACCENT
<_> /x5F <U005F> LOW LINE
<++> /x60 <U0640> ARABIC TATWEEL
<f+> /x61 <U0641> ARABIC LETTER FEH
<q+> /x62 <U0642> ARABIC LETTER QAF
<k+> /x63 <U0643> ARABIC LETTER KAF
<l+> /x64 <U0644> ARABIC LETTER LAM
<m+> /x65 <U0645> ARABIC LETTER MEEM
<n+> /x66 <U0646> ARABIC LETTER NOON
<h+> /x67 <U0647> ARABIC LETTER HEH
<w+> /x68 <U0648> ARABIC LETTER WAW
<j+> /x69 <U0649> ARABIC LETTER ALEF MAKSURA
<y+> /x6A <U064A> ARABIC LETTER YEH
<:+> /x6B <U064B> ARABIC FATHATAN
<"+> /x6C <U064C> ARABIC DAMMATAN
<=+> /x6D <U064D> ARABIC KASRATAN
<//+> /x6E <U064E> ARABIC FATHA
<'+> /x6F <U064F> ARABIC DAMMA
<1+> /x70 <U0650> ARABIC KASRA
<3+> /x71 <U0651> ARABIC SHADDA
<0+> /x72 <U0652> ARABIC SUKUN
<(!> /x7B <U007B> LEFT CURLY BRACKET
<!!> /x7C <U007C> VERTICAL LINE
<!)> /x7D <U007D> RIGHT CURLY BRACKET
<'-> /x7E <U203E> OVERLINE
<DT> /x7F <U007F> DELETE (DEL)
<NUL> /x00 <U0000> NUL
<SOH> /x01 <U0001> START OF HEADING (SOH)
<STX> /x02 <U0002> START OF TEXT (STX)
<ETX> /x03 <U0003> END OF TEXT (ETX)
<EOT> /x04 <U0004> END OF TRANSMISSION (EOT)
<ENQ> /x05 <U0005> ENQUIRY (ENQ)
<ACK> /x06 <U0006> ACKNOWLEDGE (ACK)
<alert> /x07 <U0007> BELL (BEL)
<BEL> /x07 <U0007> BELL (BEL)
<backspace> /x08 <U0008> BACKSPACE (BS)
<tab> /x09 <U0009> CHARACTER TABULATION (HT)
<newline> /x0A <U000A> LINE FEED (LF)
<vertical-tab> /x0B <U000B> LINE TABULATION (VT)
<form-feed> /x0C <U000C> FORM FEED (FF)
<carriage-return> /x0D <U000D> CARRIAGE RETURN (CR)
<DLE> /x10 <U0010> DATALINK ESCAPE (DLE)
<DC1> /x11 <U0011> DEVICE CONTROL ONE (DC1)
<DC2> /x12 <U0012> DEVICE CONTROL TWO (DC2)
<DC3> /x13 <U0013> DEVICE CONTROL THREE (DC3)
<DC4> /x14 <U0014> DEVICE CONTROL FOUR (DC4)
<NAK> /x15 <U0015> NEGATIVE ACKNOWLEDGE (NAK)
<SYN> /x16 <U0016> SYNCHRONOUS IDLE (SYN)
<ETB> /x17 <U0017> END OF TRANSMISSION BLOCK (ETB)
<CAN> /x18 <U0018> CANCEL (CAN)
<SUB> /x1A <U001A> SUBSTITUTE (SUB)
<ESC> /x1B <U001B> ESCAPE (ESC)
<IS4> /x1C <U001C> FILE SEPARATOR (IS4)
<IS3> /x1D <U001D> GROUP SEPARATOR (IS3)
<intro> /x1D <U001D> GROUP SEPARATOR (IS3)
<IS2> /x1E <U001E> RECORD SEPARATOR (IS2)
<IS1> /x1F <U001F> UNIT SEPARATOR (IS1)
<DEL> /x7F <U007F> DELETE (DEL)
<space> /x20 <U0020> SPACE
<exclamation-mark> /x21 <U0021> EXCLAMATION MARK
<quotation-mark> /x22 <U0022> QUOTATION MARK
<number-sign> /x23 <U0023> NUMBER SIGN
<dollar-sign> /x00 <U0024> DOLLAR SIGN
<percent-sign> /x25 <U0025> PERCENT SIGN
<ampersand> /x26 <U0026> AMPERSAND
<apostrophe> /x27 <U0027> APOSTROPHE
<left-parenthesis> /x28 <U0028> LEFT PARENTHESIS
<right-parenthesis> /x29 <U0029> RIGHT PARENTHESIS
<asterisk> /x2A <U002A> ASTERISK
<plus-sign> /x2B <U002B> PLUS SIGN
<comma> /x00 <U002C> COMMA
<hyphen> /x2D <U002D> HYPHEN-MINUS
<hyphen-minus> /x2D <U002D> HYPHEN-MINUS
<period> /x2E <U002E> FULL STOP
<full-stop> /x2E <U002E> FULL STOP
<slash> /x2F <U002F> SOLIDUS
<solidus> /x2F <U002F> SOLIDUS
<zero> /x30 <U0030> DIGIT ZERO
<one> /x31 <U0031> DIGIT ONE
<two> /x32 <U0032> DIGIT TWO
<three> /x33 <U0033> DIGIT THREE
<four> /x34 <U0034> DIGIT FOUR
<five> /x35 <U0035> DIGIT FIVE
<six> /x36 <U0036> DIGIT SIX
<seven> /x37 <U0037> DIGIT SEVEN
<eight> /x38 <U0038> DIGIT EIGHT
<nine> /x39 <U0039> DIGIT NINE
<colon> /x3A <U003A> COLON
<semicolon> /x00 <U003B> SEMICOLON
<less-than-sign> /x3C <U003C> LESS-THAN SIGN
<equals-sign> /x3D <U003D> EQUALS SIGN
<greater-than-sign> /x3E <U003E> GREATER-THAN SIGN
<question-mark> /x00 <U003F> QUESTION MARK
<commercial-at> /x40 <U0040> COMMERCIAL AT
<left-square-bracket> /x5B <U005B> LEFT SQUARE BRACKET
<backslash> /x5C <U005C> REVERSE SOLIDUS
<reverse-solidus> /x5C <U005C> REVERSE SOLIDUS
<right-square-bracket> /x5D <U005D> RIGHT SQUARE BRACKET
<circumflex> /x5E <U005E> CIRCUMFLEX ACCENT
<circumflex-accent> /x5E <U005E> CIRCUMFLEX ACCENT
<underscore> /x5F <U005F> LOW LINE
<low-line> /x5F <U005F> LOW LINE
<grave-accent> /x00 <U0060> GRAVE ACCENT
<left-brace> /x7B <U007B> LEFT CURLY BRACKET
<left-curly-bracket> /x7B <U007B> LEFT CURLY BRACKET
<vertical-line> /x7C <U007C> VERTICAL LINE
<right-brace> /x7D <U007D> RIGHT CURLY BRACKET
<right-curly-bracket> /x7D <U007D> RIGHT CURLY BRACKET
<tilde> /x00 <U007E> TILDE
END CHARMAP

Some files were not shown because too many files have changed in this diff Show More