]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Update. cvs/libc-ud-971011
authorUlrich Drepper <drepper@redhat.com>
Sun, 12 Oct 1997 04:05:44 +0000 (04:05 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sun, 12 Oct 1997 04:05:44 +0000 (04:05 +0000)
1997-10-12 05:09  Ulrich Drepper  <drepper@cygnus.com>

* libio/Makefile (routines): Remove iofprintf.
* stdio-common/fprintf.c [USE_IN_LIBIO]: Define _IO_fprintf.
* libio/filedoalloc.c: Use _G_stat64 instead of stat.
* libio/fileops.c (_IO_file_open): Change to take extra argument
indicating whether 32 or 64 bit mode is wanted.
* libio/iofopen.c: Call _IO_file_open with extra argument set to 0.
* libio/iofopen64.c: Call _IO_file_open with extra argument set to 0.
* libio/iolibio.h (_IO_freopen, _IO_freopen64): Likewise.
* libio/iofgetpos.c: Pretty print.
* libio/iofgetpos64.c: Use _IO_fpos64_t for local variable `pos'.

* manual/conf.texi: Document all the _SC_ and _CS_ constants.
* manual/creature.texi: Document _LARGEFILE_SOURCE, _LARGEFILE64_SOURCE
and _FILE_OFFSET_BITS.
* manual/llio.texi: Document truncate and ftruncate.
* manual/stdio.texi: Document positional parameters for printf.

* math/Makefile (headers): Add tgmath.h.
(libm-support): Remove s_lrint, s_llrint, s_lround, and s_llround and
move to ...
(libm-calls): ... here.  Add scalbln, s_nextafterx and s_fma.
* math/libm-test.c (lround_test, llround_test): Test for all FP formats
by using FUNC().
* math/libm.map: Add fma, fmaf, fmal, nextafterx, nextafterxf,
nextafterxl, scalbln, scalblnf, scalblnl, lrintf, lrintl, llrintf,
llrintl, lroundf, lroundl, llroundf, and llroundl.
* math/math.h: Document new platform specific macros from mathdef.h.
Remove declaration of lrint, llrint, lround, and llround.
* math/test-double.c: Define TEST_DOUBLE.
* math/test-idouble.c: Likewise.
* math/test-float.c: Define TEST_FLOAT.
* math/test-ifloat.c: Likewise.
* math/tgmath.h: New file.
* math/bits/mathcalls.h: Add nextafterx, scalbln, fma, lrint, llrint,
lround, and llround.
Change second argument of scalbn to `int'.
* sysdeps/libm-ieee754/s_fma.S: New file.
* sysdeps/libm-ieee754/s_fmaf.S: New file.
* sysdeps/libm-ieee754/s_fmal.S: New file.
* sysdeps/libm-i387/s_fma.S: New file.
* sysdeps/libm-i387/s_fmaf.S: New file.
* sysdeps/libm-i387/s_fmal.S: New file.
* sysdeps/libm-i387/s_llrint.S: Change to take double argument.
* sysdeps/libm-i387/s_lrint.S: Likewise.
* sysdeps/libm-i387/s_llrintf.S: New file.
* sysdeps/libm-i387/s_llrintl.S: New file.
* sysdeps/libm-i387/s_lrintf.S: New file.
* sysdeps/libm-i387/s_lrintl.S: New file.
* sysdeps/libm-ieee754/s_llrint.c: Remove version which works on
80bit double.
* sysdeps/libm-ieee754/s_lrint.c: Likewise.
* sysdeps/libm-ieee754/s_llrintf.S: New file.
* sysdeps/libm-ieee754/s_llrintl.S: New file.
* sysdeps/libm-ieee754/s_lrintf.S: New file.
* sysdeps/libm-ieee754/s_lrintl.S: New file.
* sysdeps/libm-i387/s_scalbln.c: New file.  Empty file.
* sysdeps/libm-i387/s_scalblnf.c: New file.  Empty file.
* sysdeps/libm-i387/s_scalblnl.c: New file.  Empty file.
* sysdeps/libm-i387/s_scalbn.c: Add scalbln as alias.
* sysdeps/libm-i387/s_scalbnf.c: Add scalblnf as alias.
* sysdeps/libm-i387/s_scalbnl.c: Add scalblnl as alias.
* sysdeps/libm-ieee754/s_llround.c: Remove version which works on
80bit double.
* sysdeps/libm-ieee754/s_lround.c: Likewise.
* sysdeps/libm-ieee754/s_llroundf.c: Likewise.
* sysdeps/libm-ieee754/s_llroundl.c: Likewise.
* sysdeps/libm-ieee754/s_lroundf.c: Likewise.
* sysdeps/libm-ieee754/s_lroundl.c: Likewise.
* sysdeps/libm-ieee754/s_nextafterl.c: Add alias fo nextafterxl.
* sysdeps/libm-ieee754/s_nextafterx.c: New file.
* sysdeps/libm-ieee754/s_nextafterxf.c: New file.
* sysdeps/libm-ieee754/s_nextafterxl.c: New file.
* sysdeps/libm-ieee754/s_scalbln.c: New file.
* sysdeps/libm-ieee754/s_scalblnf.c: New file.
* sysdeps/libm-ieee754/s_scalblnl.c: New file.
* sysdeps/libm-ieee754/s_scalbn.c: Change to take `int' as second arg.
* sysdeps/libm-ieee754/s_scalbnf.c: Likewise.
* sysdeps/libm-ieee754/s_scalbnl.c: Likewise.

* stdlib/stdlib.h: Protect declarations of __strto*l_internal functions
by #ifdefs since they are duplicated in inttypes.h.
* sysdeps/wordsize-32/inttypes.h: Add definition of strtoimax and
strtoumax plus needed declarations.

* sysdeps/generic/confname.h (_SC_AIO_LISTIO_MAX): Fix typo.

1997-10-09  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

* locale/programs/locfile.c (locfile_read): Correct while loop.

* db2/makedb.c (main): Add missing parameter for error output.
(process_input): Likewise.

* resolv/gethnamaddr.c (getanswer): Rewrite a bit to avoid warning.

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

* libc-map: Add __bzero, __mempcpy.

1997-10-10 18:51  David S. Miller  <davem@tanya.rutgers.edu>

* sysdeps/unix/sysv/linux/sparc/bits/ioctls.h: Remove dependencies
on kernel_termios.h

1997-10-09  10:24  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>

Add the changes from the Solaris 2.6 header files, use the new public
defines/functions.
* nis/nis_addmember.c: Updated.
* nis/nis_checkpoint.c: Updated.
* nis/nis_creategroup.c: updated.
* nis/nis_destroygroup.c: Updated.
* nis/nis_getservlist.c: Updated.
* nis/nis_ismember.c: Updated.
* nis/nis_lookup.c: Updated.
* nis/nis_modify.c: Updated.
* nis/nis_ping.c: Updated.
* nis/nis_print.c: Updated.
* nis/nis_print_group_entry.c: Updated.
* nis/nis_remove.c: Updated.
* nis/nis_removemember.c: Updated.
* nis/nis_xdr.c: Updated.
* nis/nss_nisplus/nisplus-alias.c: Updated.
* nis/nss_nisplus/nisplus-ethers.c: Updated.
* nis/nss_nisplus/nisplus-hosts.c: Updated.
* nis/nss_nisplus/nisplus-network.c: Updated.
* nis/nss_nisplus/nisplus-parser.c: Updated.
* nis/nss_nisplus/nisplus-proto.c: Updated.
* nis/nss_nisplus/nisplus-rpc.c: Updated.
* nis/nss_nisplus/nisplus-service.c: Updated.
* nis/rpcsvc/nis.h: Updated.
* nis/rpcsvc/nis.x: Updated.
* nis/rpcsvc/nis_object.x: Updated.
* nis/rpcsvc/nis_tags.h: Updated.
* nis/rpcsvc/nislib.h: Updated.

* nis/lckcache.c: Removed, since Sun has dropped the directory
signatures.  The old cache version is now a security risk and not
longer supported by Sun.
* nis/nis_cache.c: Likewise.
* nis/rpcsvc/nis_cache.h: Likewise.
* nis/rpcsvc/nis_cache.x: Likewise.

* nis/nis_call.c: Remove calls to the cache functions.

* nis/libnsl.map: Remove cache and depending functions.
* nis/nis_intern.h: Likewise.

* nis/nis_add.c: Remove #include <rpcsvc/nislib.h>.
* nis/nis_domain_of.c: Likewise.
* nis/nis_domain_of_r.c: Likewise.
* nis/nis_error.c: Likewise.
* nis/nis_file.c: Likewise.
* nis/nis_local_names.c: Likewise.
* nis/nis_mkdir.c: Likewise.
* nis/nis_rmdir.c: Likewise.
* nis/nis_subr.c: Likewise.
* nis/nis_verifygroup.c: Likewise.

* nis/nis_clone.c: Removed, replaced by ...
* nis/nis_clone_dir.c: New.
* nis/nis_clone_obj.c: New.
* nis/nis_clone_res.c: New.
* nis/nis_table.c: Fixed bugs shown through the new clone functions.

* nis/nis_defaults.c: Fixed a lot of race conditions.

* nis/nis_free.c: Rewritten.

* sunrpc/auth_des.c: Fix use of free'ed pointer.

* nis/Makefile (libnsl-routines): Remove nis_clone, nis_cache and
lckcache.  Add nis_clone_dir, nis_clone_obj, and nis_clone_res.

1997-10-09  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

* wctype/test_wctype.c (TEST): Add parens to avoid ambiguity.

1997-10-08  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* include/features.h: Don't crash if _XOPEN_SOURCE is defined to
be empty.

1997-10-09 05:54  Ulrich Drepper  <drepper@cygnus.com>

* nss/digits_dots.c: Place `result' in resbuf and not in `buffer'.
* nss/getXXbyYY_r.c: Make sure digits_dots.c sees `resbuf' as
struct and not a pointer.  Little optimizations.

1997-10-09 05:00  Ulrich Drepper  <drepper@cygnus.com>

* sysdeps/stub/getenv.c: Remove unused file.
* sysdeps/stub/lxstat.c: Likewise.
* sysdeps/stub/morecore.c: Likewise.
* sysdeps/stub/putenv.c: Likewise.
* sysdeps/stub/sbrk.c: Likewise.
* sysdeps/stub/setenv.c: Likewise.
* sysdeps/stub/sysd-stdio.c: Likewise.
* sysdeps/stub/sysdep.h: Likewise.
Reported by Zack Weinberg <zack@rabi.phys.columbia.edu>.

1997-10-09 04:58  Ulrich Drepper  <drepper@cygnus.com>

* configure.in: Add __bzero definition to DWARF2 unwind test.
Reported by David S. Miller <davem@caip.rutgers.edu>.

1997-10-07  Paul Eggert  <eggert@twinsun.com>

* intl/loadmsgcat.c (_nl_load_domain):
Fix &&/|| typo when checking file size.
Check for overflow when stuffing off_t into size_t.

1997-10-07 18:11  Ulrich Drepper  <drepper@cygnus.com>

* time/africa: Update from tzdata1997i.

1997-10-07  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

* posix/globtest.sh: Add arguments for name of dynamic linker and
call dynamic linker to execute globtest.

* posix/Makefile (tests): Supply arguments to globtest.sh.

1997-10-07  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

* nis/rpcsvc/ypupd.h: Add missing __END_DECLS.

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

* libc.map: Add mempcpy, prctl.

1997-09-30  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* sysdeps/generic/memcmp.c: Avoid warnings.
* sysdeps/generic/memset.c: Likewise.
* sysdeps/generic/strchr.c: Likewise.
* sysdeps/generic/strlen.c: Likewise.

1997-09-29  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* malloc/Makefile ($(objpfx)mtrace): Fix typo.

1997-09-29  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* sysdeps/m68k/dl-machine.h (elf_machine_rela): Fix last change.
The R_68K_GLOB_DAT and R_68K_JMP_SLOT relocations really ignore
the addend, Richard.
(elf_machine_fixup_plt): Don't add the addend.
(elf_machine_plt_value): New function.

* sysdeps/alpha/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/powerpc/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/i386/dl-machine.h (elf_machine_plt_value): New
function.

* elf/dl-runtime.c (fixup, profile_fixup): Don't add in the
addend, instead let the machine dependent setup decide.

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

* sysdeps/m68k/m68020/bits/string.h: New file.

1997-10-07 04:27  Richard Henderson  <rth@cygnus.com>

* Makeconfig (+includes): Add -I$(objpfx).

* stdlib/longlong.h [__sparc__]: Prototype __udiv_qrnnd.

* sysdeps/alpha/setjmp.S: __setjmp is the same as _setjmp.  Make
the former a strong symbol and the later a weak alias.
* sysdeps/sparc/sparc32/setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S: Likewise.

1997-10-06 21:01  David S. Miller  <davem@tanya.rutgers.edu>

* sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Make ino_t
64-bits.
* sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h: Make st_ino
member 64-bits as well, to match the kernel.

1997-10-06 19:35  Ulrich Drepper  <drepper@cygnus.com>

* sysdeps/sparc/sparc64/sub_n.S: Fix typo.
Patch by Jakub Jelinek <jj@sunsite.ms.mff.cuni.cz>.

1997-10-06 01:09  Zack Weinberg  <zack@rabi.phys.columbia.edu>

* time/README: Correct list of files from tzcode package.  Add
contact information for tzcode/tzdata maintainers.  Correct
spelling of author's name.  Compact lists.

1997-10-06 01:48  Ulrich Drepper  <drepper@cygnus.com>

* malloc/malloc.h: Remove hook definition without caller argument.
* malloc/malloc.c: Likewise.

* string/tester.c: Correct strsep test.

* string/bits/string2.h: Define __string2_1bptr_p and use it.
Patch by David S. Miller <davem@tanya.rutgers.edu>.

* math/Makefile (routines): Add s_clog10.
* math/libm-test.c: Add test for clog10.
* math/libm.map: Add clog10{,f,l}.
* math/bits/cmathcalls.h [__USE_GNU]: Add clog10.
* sysdeps/libm-ieee754/s_clog10.c: New file.
* sysdeps/libm-ieee754/s_clog10f.c: New file.
* sysdeps/libm-ieee754/s_clog10l.c: New file.
* manual/math.texi: Describe clog10.

* config.h.in: Add USE_REGPARMS and define internal_function based on
this.
* configure.in: Define USE_REGPARMS for ix86 machines.
* gmon/gmon.c: Mark write_hist, write_call_graph and write_bb_counts
as internal functions.
* inet/getnameinfo.c: Likewise for  nrl_domainname.
* inet/getnetgrent_r.c: Likewise for __internal_setnetgrent_reuse.
* inet/rcmd.c: Likewise for __icheckhost.
* intl/dcgettext.c: Likewise for category_to_name and
guess_category_value.
* intl/localealias.c: Likewise for read_alias_file.
* io/fts.c: Likewise for fts_alloc, fts_build, fts_lfree,
fts_maxarglen, fts_padjust, fts_palloc, fts_sort, and fts_stat.
* libio/genops.c: Likewise for save_for_backup.
* malloc/malloc.c (chunk_free, chunk_alloc, chunk_realloc, chunk_align,
main_trim, heap_trim): Likewise.
* malloc/mtrace.c (tr_where): Likewise.
* misc/fstab.c (mnt2fs): Likewise.
* misc/getttyent.c (skip, value): Likewise.
* misc/syslog.c (openlog_internal): Likewise.
* misc/tsearch.c (trecurse, tdestroy_internal): Likewise.
* nss/nsswitch.c (nss_lookup_function, nss_parse_file, nss_getline,
nss_parse_service_list, nss_new_service): Likewise.
* posix/wordexp.c (parse_dollars, parse_backtick, eval_expr): Likewise.
* resolv/inet_ntop.c (inet_ntop4, inet_ntop6): Likewise.
* resolv/inet_pton.c (inet_pton4, inet_pton6): Likewise.
* resolv/res_init.c (res_setoptions): Likewise.
* stdio-common/printf_fp.c (group_number): Likewise.
* stdio-common/vfprintf.c (buffered_vfprintf, group_number): Likewise.
* stdlib/fmtmsg.c (internal_addseverity): Likewise.
* sunrpc/auth_des.c (synchronize): Likewise.
* sunrpc/auth_unix.c (marshal_new_auth): Likewise.
* sunrpc/clnt_perr.c (auth_errmsg): Likewise.
* sunrpc/key_call.c (key_call): Likewise.
* sunprc/pmap_rmt.c (getbroadcastnets): Likewise.
* sunrpc/svc_tcp.c (makefd_xprt): Likewise.
* sunrpc/svcauth_des.c (cache_init, cache_spot, cache_ref, invalidate):
Likewise.
* sunrpc/xdr_rec.c (fix_buf_size, skip_input_bytes, flush_out,
set_input_fragment, get_input_bytes): Likewise.
* sysdeps/unix/sysv/linux/getsysstats.c (get_proc_path,
phys_pages_info): Likewise.
* sysdeps/unix/sysv/linux/if_index.c (opensock): Likewise.
* sysdeps/unix/sysv/linux/poll.c (__emulate_poll): Likewise.
* sysdeps/unix/sysv/linux/readv.c (__atomic_readv_replacement):
Likewise.
* sysdeps/unix/sysv/linux/readv.c (__atomic_writev_replacement):
Likewise.
* time/strptime.c (strptime_internal): Likewise.
* time/tzfile.c (find_transition, compute_tzname_max): Likewise.
* time/tzset.c (compute_change, tz_compute, tzset_internal): Likewise.

* libc.map: Remove _libio_using_thunks, add _fp_hw and _dl_addr.

* ctype/ctype.h: Pretty print.
* grp/grp.h: Likewise.
* include/libc-symbols.h: Likewise.
* include/limits.h: Likewise.
* include/values.h: Likewise.
* io/fcntl.h: Likewise.
* io/sys/stat.h: Likewise.
* libio/stdio.h: Likewise.
* malloc/malloc.h: Likewise.
* misc/err.h: Likewise.
* misc/regexp.h: Likewise.
* misc/sys/cdefs.h: Likewise.
* misc/sys/file.h: Likewise.
* posix/sys/utsname.h: Likewise.
* posix/sys/wait.h: Likewise.
* pwd/pwd.h: Likewise.
* resolv/netdb.h: Likewise.
* signal/signal.h: Likewise.
* stdlib/stdlib.h: Likewise.
* string/endian.h: Likewise.
* string/memory.h: Likewise.
* sysdeps/mach/hurd/bits/fcntl.h: Likewise.
* sysdeps/mach/hurd/sys/param.h: Likewise.
* sysdeps/unix/sysv/linux/sys/param.h: Likewise.
* termios/termios.h: Likewise.
* wcsmbs/wchar.h: Likewise.
* wctype/wctype.h: Likewise.

* sysdeps/unix/bsd/bsd4.4/wait3.c: Use __WAIT_STATUS in definition.

Implement Large File Support API.
* include/features.h: Add suuport for _LARGEFILE_SOURCE,
_LARGEFILE64_SOURCE, and _FILE_OFFSET_BITS.
* libc.map: Add new functions for LFS.
* dirent/Makefile (routines): Add readdir64 and readdir64_r.
* dirent/dirent.h: Update readdir prototype for LFS and add new
prototypes for above functions.
* io/Makefile (routines): Add xstat64, fxstat64, lxstat64,
statfs64, fstatfs64, lstat64, open64, lseek64, creat64, and ftw64.
* io/creat64.c: New file.
* io/fstat64.c: New file.
* io/lstat64.c: New file.
* io/stat64.c: New file.
* io/ftw64.c: New file.
* io/ftw.c: Rewrite to allow easy definition of ftw64.
* io/ftw.h: Add LFS interface.
* io/fcntl.h: Likewise.
* io/sys/stat.h: Likewise.
* io/sys/statfs.h: Likewise.
* libio/Makefile (routines): Add iofgetpos64, iofopen64, iofsetpos64,
freopen64, fseeko64, and ftello64.
* libcio/fseeko64.c: New file.
* libio/ftello64.c: New file.
* libio/iofgetpos64.c: New file.
* libio/iofopen64.c: New file.
* libio/iofsetpos64.c: New file.
* libio/fileops.c (_IO_file_fopen): Change to use _IO_off64_t.
(_IO_file_attach): Likewise.
(_IO_do_write): Likewise.
(_IO_file_sync): Likewise.
(_IO_file_seek): Likewise.
(_IO_file_seekoff): Likewise.  Use _G_stat64.
(_IO_file_fopen64): New function.
(_IO_file_jumps): Initialize showmanyc and imbue.
* libio/genops.c (_IO_default_seekpos): Change to use _IO_fpos64_t.
(_IO_default_seekoff): Likewise.
(_IO_default_seek): Likewise.
(_IO_default_showmanyc, _IO_default_imbue): New functions.
* libio/iofopncook.c (_IO_cookie_seek): Change to use _IO_off64_t.
* libio/iolibio.h: Add prototypes for LFS functions.
* libio/ioseekoff.c: Change to use _IO_fpos64_t.
* libio/ioseekpos.c: Likewise.
* libio/libio.h: Define _IO_fpos64_t and _IO_off64_t.
(_IO_FILE): Move _offset field to end and change type to _IO_off64_t.
(_IO_seekoff, _IO_seekpos): Change prototype.
* libio/libioP.h (_IO_seekoff_t, _IO_seekpos_t, _IO_seek_t): Change
to use _IO_off64_t.
Change prototypes for function from the *ops.c files.
* libio/stdio.h: Add LFS interface definition.
* libio/strops.c (_IO_str_seekoff): Change to use _IO_fpos64_t.
* posix/Makefile (routines): Add pread64 and pwrite64.
* posix/confstr.c: Handle _CS_LFS* requests.
* posix/getconf.c: Handle LFS* requests.
* sysdeps/generic/confname.h: Add _CS_LFS* constants.
* posix/unistd.h: Document _LFS64_LARGEFILE and _LFS64_STDIO.
Define off_t and off64_t appropriately.  Change prototypes of
LFS functions.
* posix/sys/types.h: Add LFS types.
* resources/Makefile (routines): Add getrlimit64 and setlimit64.
* resource/sys/resource.h: Change prototypes of LFS functions.
* stdio-common/Makefile (routines): Add tmpfile64.
* stdio-common/tmpfile64.c: New file.
* sysdeps/generic/_G_config.h: Define _G_fpos64_t and _G_off64_t.
Define _G_OPEN64, _G_LSEEK64, _G_FSTAT64.
* sysdeps/unix/sysv/linux/_G_config.h: Likewise.
* sysdeps/generic/bits/resource.h: Add LFS definitions.
* sysdeps/unix/bsd/sun/sunos4/bits/resource.h: Likewise.
* sysdeps/unix/sysv/linux/bits/resource.h: Likewise.
* sysdeps/generic/statfs.h: Use __fsblkcnt_t for some of the fields.
* sysdeps/unix/sysv/linux/bits/statfs.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/statfs.h: Likewise.
* sysdeps/generic/types.h: Define LFS types.
* sysdeps/unix/sysv/linux/alpha/bits/types.h: Likewise.
* sysdeps/unix/sysv/linux/bits/types.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Likewise.
* sysdeps/generic/sys/mman.h: Add LFS definitions.
* sysdeps/unix/sysv/linux/sys/mman.h: Likewise.
* sysdeps/generic/mach/hurd/bits/fcntl.h: Add flock LFS extensions.
* sysdeps/unix/bsd/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise.
* sysdeps/generic/mach/hurd/bits/stat.h: Add stat LFS extensions.
* sysdeps/unix/bsd/bits/stat.h: Likewise.
* sysdeps/unix/bsd/osf/alpha/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/stat.h: Likewise.
* sysdeps/unix/sysv/sysv4/i386/bits/stat.h: Likewise.
* sysdeps/unix/sysv/sysv4/solaris2/bits/stat.h: Likewise.
* sysdeps/posix/open64.c: New file.
* sysdeps/stub/fstatfs64.c: New file.
* sysdeps/stub/fxstat64.c: New file.
* sysdeps/stub/getrlimit64.c: New file.
* sysdeps/stub/lseek64.c: New file.
* sysdeps/stub/lxstat64.c: New file.
* sysdeps/stub/open64.c: New file.
* sysdeps/stub/pread64.c: New file.
* sysdeps/stub/pwrite64.c: New file.
* sysdeps/stub/readdir64.c: New file.
* sysdeps/stub/readdir64_r.c: New file.
* sysdeps/stub/setrlimit64.c: New file.
* sysdeps/stub/statfs64.c: New file.
* sysdeps/stub/xstat64.c: New file.
* sysdeps/unix/sysv/linux/llseek.c: Define as __llseek and make
llseek and lseek64 weak aliases.
* sysdeps/unix/sysv/linux/lseek64.c: New file.  Empty.
* sysdeps/unix/sysv/linux/alpha/bits/dirent.h: New file.
* sysdeps/unix/sysv/linux/bits/dirent.h: Add LFS definitions.

* sysdeps/posix/tempname.c: Add extra argument to trigger use of
open64.
* sysdeps/stub/tempname.c: Likewise.
* stdio-common/tempnam.c: Call __stdio_gen_tempname with extra
argument.
* stdio-common/tmpfile.c: Likewise.
* stdio-common/tmpnam.c: Likewise.
* stdio-common/tmpnam_r.c: Likewise.

* libio/libioP.h: Add definition ofr showmanyc and imbue callbacks.
* libio/fileops.c (_IO_file_jumps): Initialize showmanyc and imbue.
* libio/iofopncook.c (_IO_cookie_jumps): Likewise.
* libio/iopopen.c (_IO_proc_jumps): Likewise.
* libio/memstream.c (_IO_mem_jumps): Likewise.
* libio/obprintf.c (_IO_obstack_jumps): Likewise.
* libio/vsnprintf.c (_IO_strn_jumps): Likewise.
* libio/strops.c (_IO_str_jumps): Likewise.

* manual/arith.texi: Add a few words why cabs should be used.
* manual/llio.texi: Describe sync, fsync, fdatasync.
Tell about cleanup handlers & fcntl,lseek,write,read,close,open.
* manual/process.texi: Tell about cleanup handlers & system,waitpid,
wait.
* manual/signal.texi: Likewise for pause.
* manual/terminal.texi: Likewise for tcdrain.
* manual/time.texi: Document nanosleep.

* posix/exevp.c: Don't use nested function.

* stdlib/ucontext.h: New file.
* sysdeps/i386/sys/ucontext.h: New file.  SysV/i386 API definitions.

* sunrpc/xcrypt.c (hexval): Make a macro for efficiency.

* sysdeps/i386/setjmp.h: Make `here` label local.

* sysdeps/i386/elf/start.S: Define _fp_hw "variable".

* sysdeps/stub/fstatfs.c: Correct warning.
* sysdeps/stub/fxstat.c: Likewise.
* sysdeps/stub/lxstat.c: Likewise.

* sysdeps/unix/sysv/i386/i686/time.S: New file.

1997-10-03 20:56  Jason Merrill  <jason@yorick.cygnus.com>

* malloc/obstack.h (obstack_empty_p): New macro.

1997-10-04 17:41  Philip Blundell  <Philip.Blundell@pobox.com>

* inet/getnameinfo.c (getnameinfo): Remove spurious `#if INET6'.

1997-09-30  Zack Weinberg <zack@rabi.phys.columbia.edu>

* maint.texi: Add copyright terms for libdb (Sleepycat, Harvard).
Document new --with-binutils switch; delete reference to
--with-gnu-as, --with-gnu-ld, --with-gnu-binutils.
Add to description of --without-fp: a kernel FPU emulator
is adequate (from FAQ)
* INSTALL: Regenerated.

1997-09-30 17:29  Richard Henderson  <rth@cygnus.com>

* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Move
_dl_hwcap declaration to ...
(elf_machine_fixup_plt): ... here.

341 files changed:
ChangeLog
FAQ
Makeconfig
NOTES
bits/confname.h
bits/resource.h
bits/statfs.h
bits/types.h
config.h.in
configure
configure.in
ctype/ctype.h
db2/makedb.c
dirent/Makefile
dirent/dirent.h
elf/dl-runtime.c
gmon/gmon.c
grp/grp.h
include/features.h
include/libc-symbols.h
include/limits.h
include/values.h
inet/getnameinfo.c
inet/getnetgrent_r.c
inet/rcmd.c
intl/dcgettext.c
intl/loadmsgcat.c
intl/localealias.c
io/Makefile
io/creat64.c [new file with mode: 0644]
io/fcntl.h
io/fstat64.c [new file with mode: 0644]
io/fts.c
io/ftw.c
io/ftw.h
io/ftw64.c [new file with mode: 0644]
io/lstat64.c [new file with mode: 0644]
io/stat64.c [new file with mode: 0644]
io/sys/stat.h
io/sys/statfs.h
libc.map
libio/Makefile
libio/filedoalloc.c
libio/fileops.c
libio/freopen64.c [new file with mode: 0644]
libio/fseeko64.c [new file with mode: 0644]
libio/ftello64.c [new file with mode: 0644]
libio/genops.c
libio/iofgetpos.c
libio/iofgetpos64.c [new file with mode: 0644]
libio/iofopen.c
libio/iofopen64.c [new file with mode: 0644]
libio/iofopncook.c
libio/iofsetpos64.c [new file with mode: 0644]
libio/iolibio.h
libio/iopopen.c
libio/ioseekoff.c
libio/ioseekpos.c
libio/libio.h
libio/libioP.h
libio/memstream.c
libio/obprintf.c
libio/stdio.h
libio/strops.c
libio/vsnprintf.c
locale/programs/locfile.c
malloc/Makefile
malloc/malloc.c
malloc/malloc.h
malloc/mtrace.c
malloc/obstack.h
manual/arith.texi
manual/conf.texi
manual/creature.texi
manual/llio.texi
manual/maint.texi
manual/math.texi
manual/process.texi
manual/signal.texi
manual/stdio.texi
manual/terminal.texi
manual/time.texi
math/Makefile
math/bits/cmathcalls.h
math/bits/mathcalls.h
math/libm-test.c
math/libm.map
math/math.h
math/test-double.c
math/test-float.c
math/test-idouble.c
math/test-ifloat.c
math/tgmath.h [new file with mode: 0644]
misc/err.h
misc/fstab.c
misc/getttyent.c
misc/regexp.h
misc/sys/cdefs.h
misc/sys/file.h
misc/syslog.c
misc/tsearch.c
nis/Banner
nis/Makefile
nis/TODO [deleted file]
nis/lckcache.c [deleted file]
nis/libnsl.map
nis/nis_add.c
nis/nis_addmember.c
nis/nis_cache.c [deleted file]
nis/nis_call.c
nis/nis_checkpoint.c
nis/nis_clone.c [deleted file]
nis/nis_clone_dir.c [new file with mode: 0644]
nis/nis_clone_obj.c [new file with mode: 0644]
nis/nis_clone_res.c [new file with mode: 0644]
nis/nis_creategroup.c
nis/nis_defaults.c
nis/nis_destroygroup.c
nis/nis_domain_of.c
nis/nis_domain_of_r.c
nis/nis_error.c
nis/nis_file.c
nis/nis_free.c
nis/nis_getservlist.c
nis/nis_intern.h
nis/nis_ismember.c
nis/nis_local_names.c
nis/nis_lookup.c
nis/nis_mkdir.c
nis/nis_modify.c
nis/nis_ping.c
nis/nis_print.c
nis/nis_print_group_entry.c
nis/nis_remove.c
nis/nis_removemember.c
nis/nis_rmdir.c
nis/nis_subr.c
nis/nis_table.c
nis/nis_verifygroup.c
nis/nis_xdr.c
nis/nss_nisplus/nisplus-alias.c
nis/nss_nisplus/nisplus-ethers.c
nis/nss_nisplus/nisplus-hosts.c
nis/nss_nisplus/nisplus-network.c
nis/nss_nisplus/nisplus-parser.c
nis/nss_nisplus/nisplus-proto.c
nis/nss_nisplus/nisplus-rpc.c
nis/nss_nisplus/nisplus-service.c
nis/rpcsvc/nis.h
nis/rpcsvc/nis.x
nis/rpcsvc/nis_cache.h [deleted file]
nis/rpcsvc/nis_cache.x [deleted file]
nis/rpcsvc/nis_object.x
nis/rpcsvc/nis_tags.h
nis/rpcsvc/nislib.h
nis/rpcsvc/ypupd.h
nss/digits_dots.c
nss/getXXbyYY_r.c
nss/nsswitch.c
posix/Makefile
posix/confstr.c
posix/execvp.c
posix/getconf.c
posix/globtest.sh
posix/sys/types.h
posix/sys/utsname.h
posix/sys/wait.h
posix/unistd.h
posix/wordexp.c
pwd/pwd.h
resolv/gethnamaddr.c
resolv/inet_ntop.c
resolv/inet_pton.c
resolv/netdb.h
resolv/res_init.c
resource/Makefile
resource/sys/resource.h
signal/signal.h
stdio-common/Makefile
stdio-common/fprintf.c
stdio-common/printf_fp.c
stdio-common/tempnam.c
stdio-common/tmpfile.c
stdio-common/tmpfile64.c [new file with mode: 0644]
stdio-common/tmpnam.c
stdio-common/tmpnam_r.c
stdio-common/vfprintf.c
stdlib/fmtmsg.c
stdlib/longlong.h
stdlib/stdlib.h
stdlib/ucontext.h [new file with mode: 0644]
string/bits/string2.h
string/endian.h
string/memory.h
string/tester.c
sunrpc/auth_des.c
sunrpc/auth_unix.c
sunrpc/clnt_perr.c
sunrpc/key_call.c
sunrpc/pmap_rmt.c
sunrpc/svc_tcp.c
sunrpc/svcauth_des.c
sunrpc/xcrypt.c
sunrpc/xdr_rec.c
sysdeps/alpha/dl-machine.h
sysdeps/alpha/setjmp.S
sysdeps/generic/_G_config.h
sysdeps/generic/bits/confname.h
sysdeps/generic/bits/resource.h
sysdeps/generic/bits/statfs.h
sysdeps/generic/bits/types.h
sysdeps/generic/memcmp.c
sysdeps/generic/memset.c
sysdeps/generic/strchr.c
sysdeps/generic/strlen.c
sysdeps/generic/sys/mman.h
sysdeps/i386/dl-machine.h
sysdeps/i386/elf/start.S
sysdeps/i386/setjmp.S
sysdeps/i386/sys/ucontext.h [new file with mode: 0644]
sysdeps/libm-i387/s_fma.S [new file with mode: 0644]
sysdeps/libm-i387/s_fmaf.S [new file with mode: 0644]
sysdeps/libm-i387/s_fmal.S [new file with mode: 0644]
sysdeps/libm-i387/s_llrint.S
sysdeps/libm-i387/s_llrintf.S [new file with mode: 0644]
sysdeps/libm-i387/s_llrintl.S [new file with mode: 0644]
sysdeps/libm-i387/s_lrint.S
sysdeps/libm-i387/s_lrintf.S [new file with mode: 0644]
sysdeps/libm-i387/s_lrintl.S [new file with mode: 0644]
sysdeps/libm-i387/s_scalbln.c [new file with mode: 0644]
sysdeps/libm-i387/s_scalblnf.c [new file with mode: 0644]
sysdeps/libm-i387/s_scalblnl.c [new file with mode: 0644]
sysdeps/libm-i387/s_scalbn.S
sysdeps/libm-i387/s_scalbnf.S
sysdeps/libm-i387/s_scalbnl.S
sysdeps/libm-ieee754/s_clog10.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_clog10f.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_clog10l.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_fma.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_fmaf.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_fmal.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_llrint.c
sysdeps/libm-ieee754/s_llrintf.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_llrintl.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_llround.c
sysdeps/libm-ieee754/s_llroundf.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_llroundl.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_lrint.c
sysdeps/libm-ieee754/s_lrintf.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_lrintl.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_lround.c
sysdeps/libm-ieee754/s_lroundf.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_lroundl.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_nextafterl.c
sysdeps/libm-ieee754/s_nextafterx.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_nextafterxf.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_nextafterxl.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_scalbln.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_scalblnf.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_scalblnl.c [new file with mode: 0644]
sysdeps/libm-ieee754/s_scalbn.c
sysdeps/libm-ieee754/s_scalbnf.c
sysdeps/libm-ieee754/s_scalbnl.c
sysdeps/m68k/dl-machine.h
sysdeps/m68k/m68020/bits/string.h [new file with mode: 0644]
sysdeps/mach/hurd/bits/fcntl.h
sysdeps/mach/hurd/bits/stat.h
sysdeps/mach/hurd/sys/param.h
sysdeps/posix/open64.c [new file with mode: 0644]
sysdeps/posix/tempname.c
sysdeps/powerpc/dl-machine.h
sysdeps/sparc/sparc32/dl-machine.h
sysdeps/sparc/sparc32/setjmp.S
sysdeps/sparc/sparc64/dl-machine.h
sysdeps/sparc/sparc64/sub_n.S
sysdeps/stub/fstatfs.c
sysdeps/stub/fstatfs64.c [moved from sysdeps/stub/setenv.c with 69% similarity]
sysdeps/stub/fxstat.c
sysdeps/stub/fxstat64.c [moved from sysdeps/stub/morecore.c with 65% similarity]
sysdeps/stub/getrlimit64.c [moved from sysdeps/stub/putenv.c with 79% similarity]
sysdeps/stub/lseek64.c [new file with mode: 0644]
sysdeps/stub/lxstat64.c [moved from sysdeps/stub/lxstat.c with 91% similarity]
sysdeps/stub/open64.c [new file with mode: 0644]
sysdeps/stub/pread64.c [new file with mode: 0644]
sysdeps/stub/pwrite64.c [new file with mode: 0644]
sysdeps/stub/readdir64.c [moved from sysdeps/stub/getenv.c with 80% similarity]
sysdeps/stub/readdir64_r.c [moved from sysdeps/stub/sbrk.c with 76% similarity]
sysdeps/stub/setrlimit64.c [new file with mode: 0644]
sysdeps/stub/statfs64.c [new file with mode: 0644]
sysdeps/stub/sysd-stdio.c [deleted file]
sysdeps/stub/sysdep.h [deleted file]
sysdeps/stub/tempname.c
sysdeps/stub/xstat64.c [new file with mode: 0644]
sysdeps/unix/bsd/bits/fcntl.h
sysdeps/unix/bsd/bits/stat.h
sysdeps/unix/bsd/bsd4.4/wait3.c
sysdeps/unix/bsd/osf/alpha/bits/stat.h
sysdeps/unix/bsd/sun/sunos4/bits/resource.h
sysdeps/unix/sysv/i386/i686/time.S [new file with mode: 0644]
sysdeps/unix/sysv/i386/time.S
sysdeps/unix/sysv/linux/_G_config.h
sysdeps/unix/sysv/linux/alpha/bits/dirent.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/alpha/bits/fcntl.h
sysdeps/unix/sysv/linux/alpha/bits/stat.h
sysdeps/unix/sysv/linux/alpha/bits/types.h
sysdeps/unix/sysv/linux/bits/dirent.h
sysdeps/unix/sysv/linux/bits/fcntl.h
sysdeps/unix/sysv/linux/bits/resource.h
sysdeps/unix/sysv/linux/bits/stat.h
sysdeps/unix/sysv/linux/bits/statfs.h
sysdeps/unix/sysv/linux/bits/types.h
sysdeps/unix/sysv/linux/getsysstats.c
sysdeps/unix/sysv/linux/if_index.c
sysdeps/unix/sysv/linux/llseek.c
sysdeps/unix/sysv/linux/lseek64.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/mips/bits/fcntl.h
sysdeps/unix/sysv/linux/mips/bits/stat.h
sysdeps/unix/sysv/linux/mips/bits/statfs.h
sysdeps/unix/sysv/linux/poll.c
sysdeps/unix/sysv/linux/readv.c
sysdeps/unix/sysv/linux/sparc/bits/fcntl.h
sysdeps/unix/sysv/linux/sparc/bits/ioctls.h
sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h
sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h
sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S
sysdeps/unix/sysv/linux/sys/mman.h
sysdeps/unix/sysv/linux/sys/param.h
sysdeps/unix/sysv/linux/writev.c
sysdeps/unix/sysv/sysv4/i386/bits/stat.h
sysdeps/unix/sysv/sysv4/solaris2/bits/stat.h
sysdeps/wordsize-32/inttypes.h
sysdeps/wordsize-64/inttypes.h
termios/termios.h
time/README
time/africa
time/strptime.c
time/tzfile.c
time/tzset.c
wcsmbs/wchar.h
wctype/test_wctype.c
wctype/wctype.h

index e78451a71f6b8298c3677091e7a0fb9bfdad90b7..40e559d74a597544db15bc7534478d058be9f482 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,583 @@
+1997-10-12 05:09  Ulrich Drepper  <drepper@cygnus.com>
+
+       * libio/Makefile (routines): Remove iofprintf.
+       * stdio-common/fprintf.c [USE_IN_LIBIO]: Define _IO_fprintf.
+       * libio/filedoalloc.c: Use _G_stat64 instead of stat.
+       * libio/fileops.c (_IO_file_open): Change to take extra argument
+       indicating whether 32 or 64 bit mode is wanted.
+       * libio/iofopen.c: Call _IO_file_open with extra argument set to 0.
+       * libio/iofopen64.c: Call _IO_file_open with extra argument set to 0.
+       * libio/iolibio.h (_IO_freopen, _IO_freopen64): Likewise.
+       * libio/iofgetpos.c: Pretty print.
+       * libio/iofgetpos64.c: Use _IO_fpos64_t for local variable `pos'.
+
+       * manual/conf.texi: Document all the _SC_ and _CS_ constants.
+       * manual/creature.texi: Document _LARGEFILE_SOURCE, _LARGEFILE64_SOURCE
+       and _FILE_OFFSET_BITS.
+       * manual/llio.texi: Document truncate and ftruncate.
+       * manual/stdio.texi: Document positional parameters for printf.
+
+       * math/Makefile (headers): Add tgmath.h.
+       (libm-support): Remove s_lrint, s_llrint, s_lround, and s_llround and
+       move to ...
+       (libm-calls): ... here.  Add scalbln, s_nextafterx and s_fma.
+       * math/libm-test.c (lround_test, llround_test): Test for all FP formats
+       by using FUNC().
+       * math/libm.map: Add fma, fmaf, fmal, nextafterx, nextafterxf,
+       nextafterxl, scalbln, scalblnf, scalblnl, lrintf, lrintl, llrintf,
+       llrintl, lroundf, lroundl, llroundf, and llroundl.
+       * math/math.h: Document new platform specific macros from mathdef.h.
+       Remove declaration of lrint, llrint, lround, and llround.
+       * math/test-double.c: Define TEST_DOUBLE.
+       * math/test-idouble.c: Likewise.
+       * math/test-float.c: Define TEST_FLOAT.
+       * math/test-ifloat.c: Likewise.
+       * math/tgmath.h: New file.
+       * math/bits/mathcalls.h: Add nextafterx, scalbln, fma, lrint, llrint,
+       lround, and llround.
+       Change second argument of scalbn to `int'.
+       * sysdeps/libm-ieee754/s_fma.S: New file.
+       * sysdeps/libm-ieee754/s_fmaf.S: New file.
+       * sysdeps/libm-ieee754/s_fmal.S: New file.
+       * sysdeps/libm-i387/s_fma.S: New file.
+       * sysdeps/libm-i387/s_fmaf.S: New file.
+       * sysdeps/libm-i387/s_fmal.S: New file.
+       * sysdeps/libm-i387/s_llrint.S: Change to take double argument.
+       * sysdeps/libm-i387/s_lrint.S: Likewise.
+       * sysdeps/libm-i387/s_llrintf.S: New file.
+       * sysdeps/libm-i387/s_llrintl.S: New file.
+       * sysdeps/libm-i387/s_lrintf.S: New file.
+       * sysdeps/libm-i387/s_lrintl.S: New file.
+       * sysdeps/libm-ieee754/s_llrint.c: Remove version which works on
+       80bit double.
+       * sysdeps/libm-ieee754/s_lrint.c: Likewise.
+       * sysdeps/libm-ieee754/s_llrintf.S: New file.
+       * sysdeps/libm-ieee754/s_llrintl.S: New file.
+       * sysdeps/libm-ieee754/s_lrintf.S: New file.
+       * sysdeps/libm-ieee754/s_lrintl.S: New file.
+       * sysdeps/libm-i387/s_scalbln.c: New file.  Empty file.
+       * sysdeps/libm-i387/s_scalblnf.c: New file.  Empty file.
+       * sysdeps/libm-i387/s_scalblnl.c: New file.  Empty file.
+       * sysdeps/libm-i387/s_scalbn.c: Add scalbln as alias.
+       * sysdeps/libm-i387/s_scalbnf.c: Add scalblnf as alias.
+       * sysdeps/libm-i387/s_scalbnl.c: Add scalblnl as alias.
+       * sysdeps/libm-ieee754/s_llround.c: Remove version which works on
+       80bit double.
+       * sysdeps/libm-ieee754/s_lround.c: Likewise.
+       * sysdeps/libm-ieee754/s_llroundf.c: Likewise.
+       * sysdeps/libm-ieee754/s_llroundl.c: Likewise.
+       * sysdeps/libm-ieee754/s_lroundf.c: Likewise.
+       * sysdeps/libm-ieee754/s_lroundl.c: Likewise.
+       * sysdeps/libm-ieee754/s_nextafterl.c: Add alias fo nextafterxl.
+       * sysdeps/libm-ieee754/s_nextafterx.c: New file.
+       * sysdeps/libm-ieee754/s_nextafterxf.c: New file.
+       * sysdeps/libm-ieee754/s_nextafterxl.c: New file.
+       * sysdeps/libm-ieee754/s_scalbln.c: New file.
+       * sysdeps/libm-ieee754/s_scalblnf.c: New file.
+       * sysdeps/libm-ieee754/s_scalblnl.c: New file.
+       * sysdeps/libm-ieee754/s_scalbn.c: Change to take `int' as second arg.
+       * sysdeps/libm-ieee754/s_scalbnf.c: Likewise.
+       * sysdeps/libm-ieee754/s_scalbnl.c: Likewise.
+
+       * stdlib/stdlib.h: Protect declarations of __strto*l_internal functions
+       by #ifdefs since they are duplicated in inttypes.h.
+       * sysdeps/wordsize-32/inttypes.h: Add definition of strtoimax and
+       strtoumax plus needed declarations.
+
+       * sysdeps/generic/confname.h (_SC_AIO_LISTIO_MAX): Fix typo.
+
+1997-10-09  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+       * locale/programs/locfile.c (locfile_read): Correct while loop.
+
+       * db2/makedb.c (main): Add missing parameter for error output.
+       (process_input): Likewise.
+
+       * resolv/gethnamaddr.c (getanswer): Rewrite a bit to avoid warning.
+
+1997-10-12 05:05  Ulrich Drepper  <drepper@cygnus.com>
+
+       * libc-map: Add __bzero, __mempcpy.
+
+1997-10-10 18:51  David S. Miller  <davem@tanya.rutgers.edu>
+
+       * sysdeps/unix/sysv/linux/sparc/bits/ioctls.h: Remove dependencies
+       on kernel_termios.h
+
+1997-10-09  10:24  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>
+
+       Add the changes from the Solaris 2.6 header files, use the new public
+       defines/functions.
+       * nis/nis_addmember.c: Updated.
+       * nis/nis_checkpoint.c: Updated.
+       * nis/nis_creategroup.c: updated.
+       * nis/nis_destroygroup.c: Updated.
+       * nis/nis_getservlist.c: Updated.
+       * nis/nis_ismember.c: Updated.
+       * nis/nis_lookup.c: Updated.
+       * nis/nis_modify.c: Updated.
+       * nis/nis_ping.c: Updated.
+       * nis/nis_print.c: Updated.
+       * nis/nis_print_group_entry.c: Updated.
+       * nis/nis_remove.c: Updated.
+       * nis/nis_removemember.c: Updated.
+       * nis/nis_xdr.c: Updated.
+       * nis/nss_nisplus/nisplus-alias.c: Updated.
+       * nis/nss_nisplus/nisplus-ethers.c: Updated.
+       * nis/nss_nisplus/nisplus-hosts.c: Updated.
+       * nis/nss_nisplus/nisplus-network.c: Updated.
+       * nis/nss_nisplus/nisplus-parser.c: Updated.
+       * nis/nss_nisplus/nisplus-proto.c: Updated.
+       * nis/nss_nisplus/nisplus-rpc.c: Updated.
+       * nis/nss_nisplus/nisplus-service.c: Updated.
+       * nis/rpcsvc/nis.h: Updated.
+       * nis/rpcsvc/nis.x: Updated.
+       * nis/rpcsvc/nis_object.x: Updated.
+       * nis/rpcsvc/nis_tags.h: Updated.
+       * nis/rpcsvc/nislib.h: Updated.
+
+       * nis/lckcache.c: Removed, since Sun has dropped the directory
+       signatures.  The old cache version is now a security risk and not
+       longer supported by Sun.
+       * nis/nis_cache.c: Likewise.
+       * nis/rpcsvc/nis_cache.h: Likewise.
+       * nis/rpcsvc/nis_cache.x: Likewise.
+
+       * nis/nis_call.c: Remove calls to the cache functions.
+
+       * nis/libnsl.map: Remove cache and depending functions.
+       * nis/nis_intern.h: Likewise.
+
+       * nis/nis_add.c: Remove #include <rpcsvc/nislib.h>.
+       * nis/nis_domain_of.c: Likewise.
+       * nis/nis_domain_of_r.c: Likewise.
+       * nis/nis_error.c: Likewise.
+       * nis/nis_file.c: Likewise.
+       * nis/nis_local_names.c: Likewise.
+       * nis/nis_mkdir.c: Likewise.
+       * nis/nis_rmdir.c: Likewise.
+       * nis/nis_subr.c: Likewise.
+       * nis/nis_verifygroup.c: Likewise.
+
+       * nis/nis_clone.c: Removed, replaced by ...
+       * nis/nis_clone_dir.c: New.
+       * nis/nis_clone_obj.c: New.
+       * nis/nis_clone_res.c: New.
+       * nis/nis_table.c: Fixed bugs shown through the new clone functions.
+
+       * nis/nis_defaults.c: Fixed a lot of race conditions.
+
+       * nis/nis_free.c: Rewritten.
+
+       * sunrpc/auth_des.c: Fix use of free'ed pointer.
+
+       * nis/Makefile (libnsl-routines): Remove nis_clone, nis_cache and
+       lckcache.  Add nis_clone_dir, nis_clone_obj, and nis_clone_res.
+
+1997-10-09  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+       * wctype/test_wctype.c (TEST): Add parens to avoid ambiguity.
+
+1997-10-08  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * include/features.h: Don't crash if _XOPEN_SOURCE is defined to
+       be empty.
+
+1997-10-09 05:54  Ulrich Drepper  <drepper@cygnus.com>
+
+       * nss/digits_dots.c: Place `result' in resbuf and not in `buffer'.
+       * nss/getXXbyYY_r.c: Make sure digits_dots.c sees `resbuf' as
+       struct and not a pointer.  Little optimizations.
+
+1997-10-09 05:00  Ulrich Drepper  <drepper@cygnus.com>
+
+       * sysdeps/stub/getenv.c: Remove unused file.
+       * sysdeps/stub/lxstat.c: Likewise.
+       * sysdeps/stub/morecore.c: Likewise.
+       * sysdeps/stub/putenv.c: Likewise.
+       * sysdeps/stub/sbrk.c: Likewise.
+       * sysdeps/stub/setenv.c: Likewise.
+       * sysdeps/stub/sysd-stdio.c: Likewise.
+       * sysdeps/stub/sysdep.h: Likewise.
+       Reported by Zack Weinberg <zack@rabi.phys.columbia.edu>.
+
+1997-10-09 04:58  Ulrich Drepper  <drepper@cygnus.com>
+
+       * configure.in: Add __bzero definition to DWARF2 unwind test.
+       Reported by David S. Miller <davem@caip.rutgers.edu>.
+
+1997-10-07  Paul Eggert  <eggert@twinsun.com>
+
+       * intl/loadmsgcat.c (_nl_load_domain):
+       Fix &&/|| typo when checking file size.
+       Check for overflow when stuffing off_t into size_t.
+
+1997-10-07 18:11  Ulrich Drepper  <drepper@cygnus.com>
+
+       * time/africa: Update from tzdata1997i.
+
+1997-10-07  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+       * posix/globtest.sh: Add arguments for name of dynamic linker and
+       call dynamic linker to execute globtest.
+
+       * posix/Makefile (tests): Supply arguments to globtest.sh.
+
+1997-10-07  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+       * nis/rpcsvc/ypupd.h: Add missing __END_DECLS.
+
+1997-10-03  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * libc.map: Add mempcpy, prctl.
+
+1997-09-30  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * sysdeps/generic/memcmp.c: Avoid warnings.
+       * sysdeps/generic/memset.c: Likewise.
+       * sysdeps/generic/strchr.c: Likewise.
+       * sysdeps/generic/strlen.c: Likewise.
+
+1997-09-29  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * malloc/Makefile ($(objpfx)mtrace): Fix typo.
+
+1997-09-29  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * sysdeps/m68k/dl-machine.h (elf_machine_rela): Fix last change.
+       The R_68K_GLOB_DAT and R_68K_JMP_SLOT relocations really ignore
+       the addend, Richard.
+       (elf_machine_fixup_plt): Don't add the addend.
+       (elf_machine_plt_value): New function.
+
+       * sysdeps/alpha/dl-machine.h (elf_machine_plt_value): New
+       function.
+       * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_plt_value): New
+       function.
+       * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_plt_value): New
+       function.
+       * sysdeps/powerpc/dl-machine.h (elf_machine_plt_value): New
+       function.
+       * sysdeps/i386/dl-machine.h (elf_machine_plt_value): New
+       function.
+
+       * elf/dl-runtime.c (fixup, profile_fixup): Don't add in the
+       addend, instead let the machine dependent setup decide.
+
+1997-09-20  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * sysdeps/m68k/m68020/bits/string.h: New file.
+
+1997-10-07 04:27  Richard Henderson  <rth@cygnus.com>
+
+       * Makeconfig (+includes): Add -I$(objpfx).
+
+       * stdlib/longlong.h [__sparc__]: Prototype __udiv_qrnnd.
+
+       * sysdeps/alpha/setjmp.S: __setjmp is the same as _setjmp.  Make
+       the former a strong symbol and the later a weak alias.
+       * sysdeps/sparc/sparc32/setjmp.S: Likewise.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S: Likewise.
+
+1997-10-06 21:01  David S. Miller  <davem@tanya.rutgers.edu>
+
+       * sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Make ino_t
+       64-bits.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h: Make st_ino
+       member 64-bits as well, to match the kernel.
+
+1997-10-06 19:35  Ulrich Drepper  <drepper@cygnus.com>
+
+       * sysdeps/sparc/sparc64/sub_n.S: Fix typo.
+       Patch by Jakub Jelinek <jj@sunsite.ms.mff.cuni.cz>.
+
+1997-10-06 01:09  Zack Weinberg  <zack@rabi.phys.columbia.edu>
+
+       * time/README: Correct list of files from tzcode package.  Add
+       contact information for tzcode/tzdata maintainers.  Correct
+       spelling of author's name.  Compact lists.
+
+1997-10-06 01:48  Ulrich Drepper  <drepper@cygnus.com>
+
+       * malloc/malloc.h: Remove hook definition without caller argument.
+       * malloc/malloc.c: Likewise.
+
+       * string/tester.c: Correct strsep test.
+
+       * string/bits/string2.h: Define __string2_1bptr_p and use it.
+       Patch by David S. Miller <davem@tanya.rutgers.edu>.
+
+       * math/Makefile (routines): Add s_clog10.
+       * math/libm-test.c: Add test for clog10.
+       * math/libm.map: Add clog10{,f,l}.
+       * math/bits/cmathcalls.h [__USE_GNU]: Add clog10.
+       * sysdeps/libm-ieee754/s_clog10.c: New file.
+       * sysdeps/libm-ieee754/s_clog10f.c: New file.
+       * sysdeps/libm-ieee754/s_clog10l.c: New file.
+       * manual/math.texi: Describe clog10.
+
+       * config.h.in: Add USE_REGPARMS and define internal_function based on
+       this.
+       * configure.in: Define USE_REGPARMS for ix86 machines.
+       * gmon/gmon.c: Mark write_hist, write_call_graph and write_bb_counts
+       as internal functions.
+       * inet/getnameinfo.c: Likewise for  nrl_domainname.
+       * inet/getnetgrent_r.c: Likewise for __internal_setnetgrent_reuse.
+       * inet/rcmd.c: Likewise for __icheckhost.
+       * intl/dcgettext.c: Likewise for category_to_name and
+       guess_category_value.
+       * intl/localealias.c: Likewise for read_alias_file.
+       * io/fts.c: Likewise for fts_alloc, fts_build, fts_lfree,
+       fts_maxarglen, fts_padjust, fts_palloc, fts_sort, and fts_stat.
+       * libio/genops.c: Likewise for save_for_backup.
+       * malloc/malloc.c (chunk_free, chunk_alloc, chunk_realloc, chunk_align,
+       main_trim, heap_trim): Likewise.
+       * malloc/mtrace.c (tr_where): Likewise.
+       * misc/fstab.c (mnt2fs): Likewise.
+       * misc/getttyent.c (skip, value): Likewise.
+       * misc/syslog.c (openlog_internal): Likewise.
+       * misc/tsearch.c (trecurse, tdestroy_internal): Likewise.
+       * nss/nsswitch.c (nss_lookup_function, nss_parse_file, nss_getline,
+       nss_parse_service_list, nss_new_service): Likewise.
+       * posix/wordexp.c (parse_dollars, parse_backtick, eval_expr): Likewise.
+       * resolv/inet_ntop.c (inet_ntop4, inet_ntop6): Likewise.
+       * resolv/inet_pton.c (inet_pton4, inet_pton6): Likewise.
+       * resolv/res_init.c (res_setoptions): Likewise.
+       * stdio-common/printf_fp.c (group_number): Likewise.
+       * stdio-common/vfprintf.c (buffered_vfprintf, group_number): Likewise.
+       * stdlib/fmtmsg.c (internal_addseverity): Likewise.
+       * sunrpc/auth_des.c (synchronize): Likewise.
+       * sunrpc/auth_unix.c (marshal_new_auth): Likewise.
+       * sunrpc/clnt_perr.c (auth_errmsg): Likewise.
+       * sunrpc/key_call.c (key_call): Likewise.
+       * sunprc/pmap_rmt.c (getbroadcastnets): Likewise.
+       * sunrpc/svc_tcp.c (makefd_xprt): Likewise.
+       * sunrpc/svcauth_des.c (cache_init, cache_spot, cache_ref, invalidate):
+       Likewise.
+       * sunrpc/xdr_rec.c (fix_buf_size, skip_input_bytes, flush_out,
+       set_input_fragment, get_input_bytes): Likewise.
+       * sysdeps/unix/sysv/linux/getsysstats.c (get_proc_path,
+       phys_pages_info): Likewise.
+       * sysdeps/unix/sysv/linux/if_index.c (opensock): Likewise.
+       * sysdeps/unix/sysv/linux/poll.c (__emulate_poll): Likewise.
+       * sysdeps/unix/sysv/linux/readv.c (__atomic_readv_replacement):
+       Likewise.
+       * sysdeps/unix/sysv/linux/readv.c (__atomic_writev_replacement):
+       Likewise.
+       * time/strptime.c (strptime_internal): Likewise.
+       * time/tzfile.c (find_transition, compute_tzname_max): Likewise.
+       * time/tzset.c (compute_change, tz_compute, tzset_internal): Likewise.
+
+       * libc.map: Remove _libio_using_thunks, add _fp_hw and _dl_addr.
+
+       * ctype/ctype.h: Pretty print.
+       * grp/grp.h: Likewise.
+       * include/libc-symbols.h: Likewise.
+       * include/limits.h: Likewise.
+       * include/values.h: Likewise.
+       * io/fcntl.h: Likewise.
+       * io/sys/stat.h: Likewise.
+       * libio/stdio.h: Likewise.
+       * malloc/malloc.h: Likewise.
+       * misc/err.h: Likewise.
+       * misc/regexp.h: Likewise.
+       * misc/sys/cdefs.h: Likewise.
+       * misc/sys/file.h: Likewise.
+       * posix/sys/utsname.h: Likewise.
+       * posix/sys/wait.h: Likewise.
+       * pwd/pwd.h: Likewise.
+       * resolv/netdb.h: Likewise.
+       * signal/signal.h: Likewise.
+       * stdlib/stdlib.h: Likewise.
+       * string/endian.h: Likewise.
+       * string/memory.h: Likewise.
+       * sysdeps/mach/hurd/bits/fcntl.h: Likewise.
+       * sysdeps/mach/hurd/sys/param.h: Likewise.
+       * sysdeps/unix/sysv/linux/sys/param.h: Likewise.
+       * termios/termios.h: Likewise.
+       * wcsmbs/wchar.h: Likewise.
+       * wctype/wctype.h: Likewise.
+
+       * sysdeps/unix/bsd/bsd4.4/wait3.c: Use __WAIT_STATUS in definition.
+
+       Implement Large File Support API.
+       * include/features.h: Add suuport for _LARGEFILE_SOURCE,
+       _LARGEFILE64_SOURCE, and _FILE_OFFSET_BITS.
+       * libc.map: Add new functions for LFS.
+       * dirent/Makefile (routines): Add readdir64 and readdir64_r.
+       * dirent/dirent.h: Update readdir prototype for LFS and add new
+       prototypes for above functions.
+       * io/Makefile (routines): Add xstat64, fxstat64, lxstat64,
+       statfs64, fstatfs64, lstat64, open64, lseek64, creat64, and ftw64.
+       * io/creat64.c: New file.
+       * io/fstat64.c: New file.
+       * io/lstat64.c: New file.
+       * io/stat64.c: New file.
+       * io/ftw64.c: New file.
+       * io/ftw.c: Rewrite to allow easy definition of ftw64.
+       * io/ftw.h: Add LFS interface.
+       * io/fcntl.h: Likewise.
+       * io/sys/stat.h: Likewise.
+       * io/sys/statfs.h: Likewise.
+       * libio/Makefile (routines): Add iofgetpos64, iofopen64, iofsetpos64,
+       freopen64, fseeko64, and ftello64.
+       * libcio/fseeko64.c: New file.
+       * libio/ftello64.c: New file.
+       * libio/iofgetpos64.c: New file.
+       * libio/iofopen64.c: New file.
+       * libio/iofsetpos64.c: New file.
+       * libio/fileops.c (_IO_file_fopen): Change to use _IO_off64_t.
+       (_IO_file_attach): Likewise.
+       (_IO_do_write): Likewise.
+       (_IO_file_sync): Likewise.
+       (_IO_file_seek): Likewise.
+       (_IO_file_seekoff): Likewise.  Use _G_stat64.
+       (_IO_file_fopen64): New function.
+       (_IO_file_jumps): Initialize showmanyc and imbue.
+       * libio/genops.c (_IO_default_seekpos): Change to use _IO_fpos64_t.
+       (_IO_default_seekoff): Likewise.
+       (_IO_default_seek): Likewise.
+       (_IO_default_showmanyc, _IO_default_imbue): New functions.
+       * libio/iofopncook.c (_IO_cookie_seek): Change to use _IO_off64_t.
+       * libio/iolibio.h: Add prototypes for LFS functions.
+       * libio/ioseekoff.c: Change to use _IO_fpos64_t.
+       * libio/ioseekpos.c: Likewise.
+       * libio/libio.h: Define _IO_fpos64_t and _IO_off64_t.
+       (_IO_FILE): Move _offset field to end and change type to _IO_off64_t.
+       (_IO_seekoff, _IO_seekpos): Change prototype.
+       * libio/libioP.h (_IO_seekoff_t, _IO_seekpos_t, _IO_seek_t): Change
+       to use _IO_off64_t.
+       Change prototypes for function from the *ops.c files.
+       * libio/stdio.h: Add LFS interface definition.
+       * libio/strops.c (_IO_str_seekoff): Change to use _IO_fpos64_t.
+       * posix/Makefile (routines): Add pread64 and pwrite64.
+       * posix/confstr.c: Handle _CS_LFS* requests.
+       * posix/getconf.c: Handle LFS* requests.
+       * sysdeps/generic/confname.h: Add _CS_LFS* constants.
+       * posix/unistd.h: Document _LFS64_LARGEFILE and _LFS64_STDIO.
+       Define off_t and off64_t appropriately.  Change prototypes of
+       LFS functions.
+       * posix/sys/types.h: Add LFS types.
+       * resources/Makefile (routines): Add getrlimit64 and setlimit64.
+       * resource/sys/resource.h: Change prototypes of LFS functions.
+       * stdio-common/Makefile (routines): Add tmpfile64.
+       * stdio-common/tmpfile64.c: New file.
+       * sysdeps/generic/_G_config.h: Define _G_fpos64_t and _G_off64_t.
+       Define _G_OPEN64, _G_LSEEK64, _G_FSTAT64.
+       * sysdeps/unix/sysv/linux/_G_config.h: Likewise.
+       * sysdeps/generic/bits/resource.h: Add LFS definitions.
+       * sysdeps/unix/bsd/sun/sunos4/bits/resource.h: Likewise.
+       * sysdeps/unix/sysv/linux/bits/resource.h: Likewise.
+       * sysdeps/generic/statfs.h: Use __fsblkcnt_t for some of the fields.
+       * sysdeps/unix/sysv/linux/bits/statfs.h: Likewise.
+       * sysdeps/unix/sysv/linux/mips/bits/statfs.h: Likewise.
+       * sysdeps/generic/types.h: Define LFS types.
+       * sysdeps/unix/sysv/linux/alpha/bits/types.h: Likewise.
+       * sysdeps/unix/sysv/linux/bits/types.h: Likewise.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Likewise.
+       * sysdeps/generic/sys/mman.h: Add LFS definitions.
+       * sysdeps/unix/sysv/linux/sys/mman.h: Likewise.
+       * sysdeps/generic/mach/hurd/bits/fcntl.h: Add flock LFS extensions.
+       * sysdeps/unix/bsd/bits/fcntl.h: Likewise.
+       * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise.
+       * sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise.
+       * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise.
+       * sysdeps/generic/mach/hurd/bits/stat.h: Add stat LFS extensions.
+       * sysdeps/unix/bsd/bits/stat.h: Likewise.
+       * sysdeps/unix/bsd/osf/alpha/bits/stat.h: Likewise.
+       * sysdeps/unix/sysv/linux/alpha/bits/stat.h: Likewise.
+       * sysdeps/unix/sysv/linux/bits/stat.h: Likewise.
+       * sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise.
+       * sysdeps/unix/sysv/linux/sparc/bits/stat.h: Likewise.
+       * sysdeps/unix/sysv/sysv4/i386/bits/stat.h: Likewise.
+       * sysdeps/unix/sysv/sysv4/solaris2/bits/stat.h: Likewise.
+       * sysdeps/posix/open64.c: New file.
+       * sysdeps/stub/fstatfs64.c: New file.
+       * sysdeps/stub/fxstat64.c: New file.
+       * sysdeps/stub/getrlimit64.c: New file.
+       * sysdeps/stub/lseek64.c: New file.
+       * sysdeps/stub/lxstat64.c: New file.
+       * sysdeps/stub/open64.c: New file.
+       * sysdeps/stub/pread64.c: New file.
+       * sysdeps/stub/pwrite64.c: New file.
+       * sysdeps/stub/readdir64.c: New file.
+       * sysdeps/stub/readdir64_r.c: New file.
+       * sysdeps/stub/setrlimit64.c: New file.
+       * sysdeps/stub/statfs64.c: New file.
+       * sysdeps/stub/xstat64.c: New file.
+       * sysdeps/unix/sysv/linux/llseek.c: Define as __llseek and make
+       llseek and lseek64 weak aliases.
+       * sysdeps/unix/sysv/linux/lseek64.c: New file.  Empty.
+       * sysdeps/unix/sysv/linux/alpha/bits/dirent.h: New file.
+       * sysdeps/unix/sysv/linux/bits/dirent.h: Add LFS definitions.
+
+       * sysdeps/posix/tempname.c: Add extra argument to trigger use of
+       open64.
+       * sysdeps/stub/tempname.c: Likewise.
+       * stdio-common/tempnam.c: Call __stdio_gen_tempname with extra
+       argument.
+       * stdio-common/tmpfile.c: Likewise.
+       * stdio-common/tmpnam.c: Likewise.
+       * stdio-common/tmpnam_r.c: Likewise.
+
+       * libio/libioP.h: Add definition ofr showmanyc and imbue callbacks.
+       * libio/fileops.c (_IO_file_jumps): Initialize showmanyc and imbue.
+       * libio/iofopncook.c (_IO_cookie_jumps): Likewise.
+       * libio/iopopen.c (_IO_proc_jumps): Likewise.
+       * libio/memstream.c (_IO_mem_jumps): Likewise.
+       * libio/obprintf.c (_IO_obstack_jumps): Likewise.
+       * libio/vsnprintf.c (_IO_strn_jumps): Likewise.
+       * libio/strops.c (_IO_str_jumps): Likewise.
+
+       * manual/arith.texi: Add a few words why cabs should be used.
+       * manual/llio.texi: Describe sync, fsync, fdatasync.
+       Tell about cleanup handlers & fcntl,lseek,write,read,close,open.
+       * manual/process.texi: Tell about cleanup handlers & system,waitpid,
+       wait.
+       * manual/signal.texi: Likewise for pause.
+       * manual/terminal.texi: Likewise for tcdrain.
+       * manual/time.texi: Document nanosleep.
+
+       * posix/exevp.c: Don't use nested function.
+
+       * stdlib/ucontext.h: New file.
+       * sysdeps/i386/sys/ucontext.h: New file.  SysV/i386 API definitions.
+
+       * sunrpc/xcrypt.c (hexval): Make a macro for efficiency.
+
+       * sysdeps/i386/setjmp.h: Make `here` label local.
+
+       * sysdeps/i386/elf/start.S: Define _fp_hw "variable".
+
+       * sysdeps/stub/fstatfs.c: Correct warning.
+       * sysdeps/stub/fxstat.c: Likewise.
+       * sysdeps/stub/lxstat.c: Likewise.
+
+       * sysdeps/unix/sysv/i386/i686/time.S: New file.
+
+1997-10-03 20:56  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * malloc/obstack.h (obstack_empty_p): New macro.
+
+1997-10-04 17:41  Philip Blundell  <Philip.Blundell@pobox.com>
+
+       * inet/getnameinfo.c (getnameinfo): Remove spurious `#if INET6'.
+
+1997-09-30  Zack Weinberg <zack@rabi.phys.columbia.edu>
+
+       * maint.texi: Add copyright terms for libdb (Sleepycat, Harvard).
+       Document new --with-binutils switch; delete reference to
+       --with-gnu-as, --with-gnu-ld, --with-gnu-binutils.
+       Add to description of --without-fp: a kernel FPU emulator
+       is adequate (from FAQ)
+       * INSTALL: Regenerated.
+
+1997-09-30 17:29  Richard Henderson  <rth@cygnus.com>
+
+       * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Move
+       _dl_hwcap declaration to ...
+       (elf_machine_fixup_plt): ... here.
+
 1997-09-30 18:03  Ulrich Drepper  <drepper@cygnus.com>
 
        * Makerules: Undo last change.
diff --git a/FAQ b/FAQ
index bba8bef434db98f2868d637e1f638e1dd73d7f7e..14d1886d05aefe57e9a952584104f74340170542 100644 (file)
--- a/FAQ
+++ b/FAQ
@@ -192,7 +192,8 @@ Library.
 
 * plenty of time (approx 1h for i?86-linux on i586@133 or 2.5h on
   i486@66 or 4.5h on i486@33), both for shared and static only).
-  For Hurd systems times are much higher.
+  Multiply this by 1.5 or 2.0 if you build profiling and/or the highly
+  optimized version as well.  For Hurd systems times are much higher.
 
   For Atari Falcon (Motorola 68030 @ 16 Mhz, 14 Mb memory) James Troup
   <J.J.Troup@comp.brad.ac.uk> reports for a full build (shared, static,
@@ -438,7 +439,7 @@ programs and source code.  Until this law gets abolished we cannot
 ship the cryptographic function together with the libc.
 
 But of course we provide the code and there is an very easy way to use
-this code.  First get the extra package.  People in the US way get it
+this code.  First get the extra package.  People in the US may get it
 from the same place they got the GNU libc from.  People outside the US
 should get the code from ftp://ftp.ifi.uio.no/pub/gnu, or another
 archive site outside the USA.  The README explains how to install the
index e87100e9afb5efd392f6d0dbb0584c2860dda12b..45e792fbc74d0eaa7636cd626972bed546d72659 100644 (file)
@@ -507,8 +507,9 @@ endif       # $(+cflags) == ""
 # files (including ones given in angle brackets) in the current directory,
 # in the parent library source directory and in the include directory.
 # `+sysdep-includes' will be defined by Makerules.
-+includes = -I. $(patsubst %/,-I%,$(..)) -I$(..)include $($(stdio)-include) \
-           $(includes) $(+sysdep-includes) $(last-includes)
++includes = -I. $(patsubst %/,-I%,$(objpfx)) $(patsubst %/,-I%,$(..)) \
+           -I$(..)include $($(stdio)-include) $(includes) \
+           $(+sysdep-includes) $(last-includes)
 
 # Since libio has several internal header files, we use a -I instead
 # of many little headers in the include directory.
diff --git a/NOTES b/NOTES
index 4477110d97217623dcf6f80242f4bd2deb4d8350..b5c48b861df5a52fe6cd0df86bf5c0cefa3ef941 100644 (file)
--- a/NOTES
+++ b/NOTES
@@ -5,7 +5,7 @@ Feature Test Macros
 is controlled by which "feature test macros" you define.
 
    If you compile your programs using `gcc -ansi', you get only the
-ANSI C library features, unless you explicitly request additional
+ISO C library features, unless you explicitly request additional
 features by defining one or more of the feature macros.  *Note GNU CC
 Command Options: (gcc.info)Invoking GCC, for more information about GCC
 options.
@@ -21,7 +21,7 @@ self-contained way.
  - Macro: _POSIX_SOURCE
      If you define this macro, then the functionality from the POSIX.1
      standard (IEEE Standard 1003.1) is available, as well as all of the
-     ANSI C facilities.
+     ISO C facilities.
 
  - Macro: _POSIX_C_SOURCE
      If you define this macro with a value of `1', then the
@@ -29,11 +29,11 @@ self-contained way.
      made available.  If you define this macro with a value of `2',
      then both the functionality from the POSIX.1 standard and the
      functionality from the POSIX.2 standard (IEEE Standard 1003.2) are
-     made available.  This is in addition to the ANSI C facilities.
+     made available.  This is in addition to the ISO C facilities.
 
  - Macro: _BSD_SOURCE
      If you define this macro, functionality derived from 4.3 BSD Unix
-     is included as well as the ANSI C, POSIX.1, and POSIX.2 material.
+     is included as well as the ISO C, POSIX.1, and POSIX.2 material.
 
      Some of the features derived from 4.3 BSD Unix conflict with the
      corresponding features specified by the POSIX.1 standard.  If this
@@ -53,26 +53,86 @@ self-contained way.
 
  - Macro: _SVID_SOURCE
      If you define this macro, functionality derived from SVID is
-     included as well as the ANSI C, POSIX.1, POSIX.2, and X/Open
+     included as well as the ISO C, POSIX.1, POSIX.2, and X/Open
      material.
 
  - Macro: _XOPEN_SOURCE
-     If you define these macro, functionality described in the X/Open
-     Portability Guide is included.  This is an superset of the POSIX.1
+ - Macro: _XOPEN_SOURCE_EXTENDED
+     If you define this macro, functionality described in the X/Open
+     Portability Guide is included.  This is a superset of the POSIX.1
      and POSIX.2 functionality and in fact `_POSIX_SOURCE' and
-     `_POSIX_C_SOURCE' get automatically be defined.
+     `_POSIX_C_SOURCE' are automatically defined.
 
-     But as the great unifaction of all Unices there is also
-     functionality only available in BSD and SVID is included.
+     As the unification of all Unices, functionality only available in
+     BSD and SVID is also included.
 
      If the macro `_XOPEN_SOURCE_EXTENDED' is also defined, even more
      functionality is available.  The extra functions will make all
      functions available which are necessary for the X/Open Unix brand.
 
+     If the macro `_XOPEN_SOURCE' has the value 500 this includes all
+     functionality described so far plus some new definitions from the
+     Single Unix specification, version 2.
+
+ - Macro: _LARGEFILE_SOURCE
+     If this macro is defined some extra functions are available which
+     rectify a few shortcomings in all previous standards.  More
+     concreten the functions `fseeko' and `ftello' are available.
+     Without these functions the difference between the ISO C interface
+     (`fseek', `ftell') and the low-level POSIX interface (`lseek')
+     would lead to problems.
+
+     This macro was introduced as part of the Large File Support
+     extension (LFS).
+
+ - Variable: Macro _LARGEFILE64_SOURCE
+     If you define this macro an additional set of function gets
+     available which enables to use on 32 bit systems to use files of
+     sizes beyond the usual limit of 2GB.  This interface is not
+     available if the system does not support files that large.  On
+     systems where the natural file size limit is greater than 2GB
+     (i.e., on 64 bit systems) the new functions are identical to the
+     replaced functions.
+
+     The new functionality is made available by a new set of types and
+     functions which replace existing.  The names of these new objects
+     contain `64' to indicate the intention, e.g., `off_t' vs.
+     `off64_t' and `fseeko' vs. `fseeko64'.
+
+     This macro was introduced as part of the Large File Support
+     extension (LFS).  It is a transition interface for the time 64 bit
+     offsets are not generally used (see `_FILE_OFFSET_BITS'.
+
+ - Variable: _FILE_OFFSET_BITS
+     This macro lets decide which file system interface shall be used,
+     one replacing the other.  While `_LARGEFILE64_SOURCE' makes the
+     64 bit interface available as an additional interface
+     `_FILE_OFFSET_BITS' allows to use the 64 bit interface to replace
+     the old interface.
+
+     If `_FILE_OFFSET_BITS' is undefined or if it is defined to the
+     value `32' nothing changes.  The 32 bit interface is used and
+     types like `off_t' have a size of 32 bits on 32 bit systems.
+
+     If the macro is defined to the value `64' the large file interface
+     replaces the old interface.  I.e., the functions are not made
+     available under different names as `_LARGEFILE64_SOURCE' does.
+     Instead the old function names now reference the new functions,
+     e.g., a call to `fseeko' now indeed calls `fseeko64'.
+
+     This macro should only be selected if the system provides
+     mechanisms for handling large files.  On 64 bit systems this macro
+     has no effect since the `*64' functions are identical to the
+     normal functions.
+
+     This macro was introduced as part of the Large File Support
+     extension (LFS).
+
  - Macro: _GNU_SOURCE
-     If you define this macro, everything is included: ANSI C, POSIX.1,
-     POSIX.2, BSD, SVID, X/Open, and GNU extensions.  In the cases where
-     POSIX.1 conflicts with BSD, the POSIX definitions take precedence.
+     If you define this macro, everything is included: ISO C, POSIX.1,
+     POSIX.2, BSD, SVID, X/Open, LFS, and GNU extensions.  In the cases
+     where POSIX.1 conflicts with BSD, the POSIX definitions take
+     precedence.
 
      If you want to get the full effect of `_GNU_SOURCE' but make the
      BSD definitions take precedence over the POSIX definitions, use
@@ -87,8 +147,9 @@ self-contained way.
      compiler or linker.  *Note:* If you forget to do this, you may get
      very strange errors at run time.
 
- - Macro: _REENTRANT,_THREAD_SAFE
-     If you define one this macro, reentrant versions of several
+ - Macro: _REENTRANT
+ - Macro: _THREAD_SAFE
+     If you define one of these macros, reentrant versions of several
      functions get declared.  Some of the functions are specified in
      POSIX.1c but many others are only available on a few other systems
      or are unique to GNU libc.  The problem is that the
index 5b5cf742b615aae32923141a02a72197afeb85fc..6926cad0adb4a2083108a90bed8d869cb75b2840 100644 (file)
@@ -1,5 +1,5 @@
 /* `sysconf', `pathconf', and `confstr' NAME values.  Generic version.
-   Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1993, 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
@@ -97,7 +97,7 @@ enum
     _SC_SHARED_MEMORY_OBJECTS,
 #define        _SC_SHARED_MEMORY_OBJECTS       _SC_SHARED_MEMORY_OBJECTS
     _SC_AIO_LISTIO_MAX,
-#define        _SC_AIO_LIST_MAX                _SC_AIO_LIST_MAX
+#define        _SC_AIO_LISTIO_MAX              _SC_AIO_LISTIO_MAX
     _SC_AIO_MAX,
 #define        _SC_AIO_MAX                     _SC_AIO_MAX
     _SC_AIO_PRIO_DELTA_MAX,
@@ -316,10 +316,32 @@ enum
 #define        _SC_NL_TEXTMAX                  _SC_NL_TEXTMAX
   };
 
-#ifdef __USE_POSIX2
+#if (defined __USE_POSIX2 || defined __USE_FILE_OFFSET64 \
+     || defined __USE_LARGEFILE64 || defined __USE_LARGEFILE)
 /* Values for the NAME argument to `confstr'.  */
 enum
   {
-    _CS_PATH                   /* The default search path.  */
+    _CS_PATH,                  /* The default search path.  */
+#define _CS_PATH               _CS_PATH
+
+#if (defined __USE_FILE_OFFSET64 || defined __USE_LARGEFILE64 \
+     || defined __USE_LARGEFILE)
+    _CS_LFS_CFLAGS = 1000,
+# define _CS_LFS_CFLAGS                _CS_LFS_CFLAGS
+    _CS_LFS_LDFLAGS,
+# define _CS_LFS_LDFLAGS       _CS_LFS_LDFLAGS
+    _CS_LFS_LIBS,
+# define _CS_LFS_LIBS          _CS_LFS_LIBS
+    _CS_LFS_LINTFLAGS,
+# define _CS_LFS_LINTFLAGS     _CS_LFS_LINTFLAGS
+    _CS_LFS64_CFLAGS,
+# define _CS_LFS64_CFLAGS      _CS_LFS64_CFLAGS
+    _CS_LFS64_LDFLAGS,
+# define _CS_LFS64_LDFLAGS     _CS_LFS64_LDFLAGS
+    _CS_LFS64_LIBS,
+# define _CS_LFS64_LIBS                _CS_LFS64_LIBS
+    _CS_LFS64_LINTFLAGS
+# define _CS_LFS64_LINTFLAGS   _CS_LFS64_LINTFLAGS
+#endif
   };
 #endif
index 2c35c12a47b6de608e6d0302d157cea21e8c0a0d..46cf9a7af59e6973fcf7d140cf28b3a072dd0683 100644 (file)
@@ -1,5 +1,5 @@
 /* Bit values & structures for resource limits.  4.4 BSD/generic GNU version.
-   Copyright (C) 1994, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1994, 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
@@ -65,14 +65,34 @@ enum __rlimit_resource
 #define RLIM_INFINITY RLIM_INFINITY
   };
 
+/* Type for resource quantity measurement.  */
+#ifndef __USE_FILE_OFFSET64
+typedef __rlim_t rlim_t;
+#else
+typedef __rlim64_t rlim_t;
+#endif
+#ifdef __USE_LARGEFILE64
+typedef __rlim64_t rlim64_t;
+#endif
+
 struct rlimit
   {
     /* The current (soft) limit.  */
-    int rlim_cur;
+    rlim_t rlim_cur;
     /* The hard limit.  */
-    int rlim_max;
+    rlim_t rlim_max;
   };
 
+#ifdef __USE_LARGEFILE64
+struct rlimit64
+  {
+    /* The current (soft) limit.  */
+    rlim64_t rlim_cur;
+    /* The hard limit.  */
+    rlim64_t rlim_max;
+ };
+#endif
+
 /* Whose usage statistics do you want?  */
 enum __rusage_who
 /* The macro definitions are necessary because some programs want
index 10bc0728b23f41dad37f2295f3080f29a0b0710a..9fa3388801816f8539975fce023e174ff674afb6 100644 (file)
@@ -38,11 +38,11 @@ struct statfs
   {
     unsigned int f_type;
     unsigned int f_bsize;
-    unsigned int f_blocks;
-    unsigned int f_bfree;
-    unsigned int f_bavail;
-    unsigned int f_files;
-    unsigned int f_ffree;
+    __fsblkcnt_t f_blocks;
+    __fsblkcnt_t f_bfree;
+    __fsblkcnt_t f_bavail;
+    __fsblkcnt_t f_files;
+    __fsblkcnt_t f_ffree;
     __fsid_t f_fsid;
     unsigned int f_namelen;
     unsigned int f_spare[6];
index c264adc917a6b6d5d38b12a7b1c811735cb35530..fdb36f0b546d121c1bdcbaea3b418571e17364c7 100644 (file)
@@ -65,6 +65,8 @@ typedef int __pid_t;          /* Type of process identifications.  */
 typedef int __ssize_t;         /* Type of a byte count, or error.  */
 typedef __u_quad_t __fsid_t;   /* Type of file system IDs.  */
 typedef long int __clock_t;    /* Type of CPU usage counts.  */
+typedef long int __rlim_t;     /* Type for resource measurement.  */
+typedef __quad_t __rlim64_t;   /* Type for resource measurement (LFS).  */
 
 /* Everythin' else.  */
 typedef long int __daddr_t;    /* The type of a disk address.  */
@@ -91,4 +93,19 @@ typedef struct
 
 typedef unsigned long int __fd_mask;
 
+
+/* Types from the Large File Support interface.  */
+
+/* Type to count number os disk blocks.  */
+typedef long int __blkcnt_t;
+typedef __quad_t __blkcnt64_t;
+
+/* Type to count file system blocks.  */
+typedef unsigned int __fsblkcnt_t;
+typedef __u_quad_t __fsblkcnt64_t;
+
+/* Type to count file system inodes.  */
+typedef unsigned long int __fsfilcnt_t;
+typedef __u_quad_t __fsfilcnt64_t;
+
 #endif /* bits/types.h */
index 1301d9ea6814f6ae5fc662f87ac32a912fd2b5f0..f2fa9167d377d7bbe7b742bc7679aeee0a151732 100644 (file)
 /* Define if gcc uses DWARF2 unwind information for exception support.  */
 #undef HAVE_DWARF2_UNWIND_INFO
 
+/* Define is the regparm attribute shall be used for local functions
+   (gcc on ix86 only).  */
+#undef USE_REGPARMS
+
+
+/* Defined to some form of __attribute__ ((...)) if the compiler supports
+   a different, more efficient calling convention.  */
+#ifdef USE_REGPARMS
+# define internal_function __attribute__ ((regparm (3), stdcall))
+#endif
+
 /*
 \f */
 
index 2ab552c3092681dde03be88326f8b28b04c09e9a..6081b3b064f55224c72ec00fd761e87bae34ded2 100755 (executable)
--- a/configure
+++ b/configure
@@ -863,11 +863,18 @@ sparc64 | ultrasparc)
 esac
 
 
+if test "$base_machine" = "i386"; then
+  cat >> confdefs.h <<\EOF
+#define USE_REGPARMS 1
+EOF
+
+fi
+
 # Compute the list of sysdep directories for this configuration.
 # This can take a while to compute.
 sysdep_dir=$srcdir/sysdeps
 echo $ac_n "checking sysdep dirs""... $ac_c" 1>&6
-echo "configure:871: checking sysdep dirs" >&5
+echo "configure:878: checking sysdep dirs" >&5
 # Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
 os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
 
@@ -1068,7 +1075,7 @@ echo "$ac_t""sysdeps/generic sysdeps/stub" 1>&6
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1072: checking for a BSD compatible install" >&5
+echo "configure:1079: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1122,7 +1129,7 @@ if test "$INSTALL" = "${srcdir}/install-sh -c"; then
   INSTALL='\$(..)./install-sh -c'
 fi
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1126: checking whether ln -s works" >&5
+echo "configure:1133: checking whether ln -s works" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1147,7 +1154,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1151: checking for $ac_word" >&5
+echo "configure:1158: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1180,7 +1187,7 @@ test -n "$MSGFMT" || MSGFMT=":"
 # 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:1184: checking for $ac_word" >&5
+echo "configure:1191: 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
@@ -1209,7 +1216,7 @@ 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:1213: checking for $ac_word" >&5
+echo "configure:1220: 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
@@ -1257,7 +1264,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1261: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1268: 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.
@@ -1267,11 +1274,11 @@ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS
 cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext <<EOF
-#line 1271 "configure"
+#line 1278 "configure"
 #include "confdefs.h"
 main(){return(0);}
 EOF
-if { (eval echo configure:1275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1282: \"$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
@@ -1294,13 +1301,13 @@ else
  cross_linkable=yes
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1298: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1305: 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:1304: checking whether we are using GNU C" >&5
+echo "configure:1311: 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
@@ -1309,7 +1316,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1313: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1320: \"$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
@@ -1326,7 +1333,7 @@ if test $ac_cv_prog_gcc = yes; then
   yes;
 #endif
 EOF
-  if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1330: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+  if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1337: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
     if test -z "$CFLAGS"; then
       CFLAGS="-g -O2"
     fi
@@ -1338,7 +1345,7 @@ else
 fi
 
 echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:1342: checking build system type" >&5
+echo "configure:1349: checking build system type" >&5
 
 build_alias=$build
 case "$build_alias" in
@@ -1361,7 +1368,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1365: checking for $ac_word" >&5
+echo "configure:1372: 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
@@ -1392,7 +1399,7 @@ done
 fi
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1396: checking how to run the C preprocessor" >&5
+echo "configure:1403: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -1407,13 +1414,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 1411 "configure"
+#line 1418 "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:1417: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1424: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1424,13 +1431,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 1428 "configure"
+#line 1435 "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:1434: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1441: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1463,7 +1470,7 @@ LD=`$CC -print-file-name=ld`
 
 # Determine whether we are using GNU binutils.
 echo $ac_n "checking whether $AS is GNU as""... $ac_c" 1>&6
-echo "configure:1467: checking whether $AS is GNU as" >&5
+echo "configure:1474: checking whether $AS is GNU as" >&5
 if eval "test \"`echo '$''{'libc_cv_prog_as_gnu'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1481,7 +1488,7 @@ rm -f a.out
 gnu_as=$libc_cv_prog_as_gnu
 
 echo $ac_n "checking whether $LD is GNU ld""... $ac_c" 1>&6
-echo "configure:1485: checking whether $LD is GNU ld" >&5
+echo "configure:1492: checking whether $LD is GNU ld" >&5
 if eval "test \"`echo '$''{'libc_cv_prog_ld_gnu'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1505,7 +1512,7 @@ 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:1509: checking for $ac_word" >&5
+echo "configure:1516: 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
@@ -1536,7 +1543,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:1540: checking for $ac_word" >&5
+echo "configure:1547: 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
@@ -1567,7 +1574,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:1571: checking for $ac_word" >&5
+echo "configure:1578: 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
@@ -1602,7 +1609,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:1606: checking for $ac_word" >&5
+echo "configure:1613: 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
@@ -1643,7 +1650,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:1647: checking for $ac_word" >&5
+echo "configure:1654: 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
@@ -1689,7 +1696,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1693: checking for $ac_word" >&5
+echo "configure:1700: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1724,7 +1731,7 @@ test -n "$PERL" || PERL="no"
 
 
 echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
-echo "configure:1728: checking for signed size_t type" >&5
+echo "configure:1735: 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
@@ -1748,12 +1755,12 @@ EOF
 fi
 
 echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
-echo "configure:1752: checking for libc-friendly stddef.h" >&5
+echo "configure:1759: 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 1757 "configure"
+#line 1764 "configure"
 #include "confdefs.h"
 #define __need_size_t
 #define __need_wchar_t
@@ -1768,7 +1775,7 @@ size_t size; wchar_t wchar;
 if (&size == NULL || &wchar == NULL) abort ();
 ; return 0; }
 EOF
-if { (eval echo configure:1772: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1779: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_friendly_stddef=yes
 else
@@ -1787,7 +1794,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:1791: checking whether we need to use -P to assemble .S files" >&5
+echo "configure:1798: 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
@@ -1810,7 +1817,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:1814: checking for assembler global-symbol directive" >&5
+echo "configure:1821: 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
@@ -1840,7 +1847,7 @@ EOF
 fi
 
 echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
-echo "configure:1844: checking for .set assembler directive" >&5
+echo "configure:1851: 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
@@ -1874,7 +1881,7 @@ EOF
 fi
 
 echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6
-echo "configure:1878: checking for .symver assembler directive" >&5
+echo "configure:1885: 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
@@ -1893,7 +1900,7 @@ 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:1897: checking for ld --version-script" >&5
+echo "configure:1904: 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
@@ -1912,7 +1919,7 @@ EOF
     if { ac_try='${CC-cc} $CFLAGS -shared -o conftest.so conftest.o
                                        -nostartfiles -nostdlib
                                        -Wl,--version-script,conftest.map
-                      1>&5'; { (eval echo configure:1916: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
+                      1>&5'; { (eval echo configure:1923: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
     then
       libc_cv_ld_version_script_option=yes
     else
@@ -1943,7 +1950,7 @@ fi
 
 if test $elf = yes; then
   echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6
-echo "configure:1947: checking for .previous assembler directive" >&5
+echo "configure:1954: 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
@@ -1951,7 +1958,7 @@ else
 .section foo_section
 .previous
 EOF
-  if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1955: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+  if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1962: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
     libc_cv_asm_previous_directive=yes
   else
     libc_cv_asm_previous_directive=no
@@ -1967,7 +1974,7 @@ EOF
 
   else
     echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6
-echo "configure:1971: checking for .popsection assembler directive" >&5
+echo "configure:1978: 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
@@ -1975,7 +1982,7 @@ else
 .pushsection foo_section
 .popsection
 EOF
-    if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1979: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+    if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1986: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
       libc_cv_asm_popsection_directive=yes
     else
       libc_cv_asm_popsection_directive=no
@@ -1995,12 +2002,12 @@ fi
 
 if test $elf != yes; then
   echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
-echo "configure:1999: checking for .init and .fini sections" >&5
+echo "configure:2006: 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 2004 "configure"
+#line 2011 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -2009,7 +2016,7 @@ asm (".section .init");
                                    asm (".text");
 ; return 0; }
 EOF
-if { (eval echo configure:2013: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2020: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_have_initfini=yes
 else
@@ -2037,19 +2044,19 @@ if test $elf = yes; then
 else
   if test $ac_cv_prog_cc_works = yes; then
     echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
-echo "configure:2041: checking for _ prefix on C symbol names" >&5
+echo "configure:2048: 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 2046 "configure"
+#line 2053 "configure"
 #include "confdefs.h"
 asm ("_glibc_foobar:");
 int main() {
 glibc_foobar ();
 ; return 0; }
 EOF
-if { (eval echo configure:2053: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2060: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   libc_cv_asm_underscores=yes
 else
@@ -2064,17 +2071,17 @@ fi
 echo "$ac_t""$libc_cv_asm_underscores" 1>&6
   else
     echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
-echo "configure:2068: checking for _ prefix on C symbol names" >&5
+echo "configure:2075: 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 2073 "configure"
+#line 2080 "configure"
 #include "confdefs.h"
 void underscore_test(void) {
 return; }
 EOF
-if { (eval echo configure:2078: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2085: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   if grep _underscore_test conftest* >/dev/null; then
     rm -f conftest*
     libc_cv_asm_underscores=yes
@@ -2107,7 +2114,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:2111: checking for assembler .weak directive" >&5
+echo "configure:2118: 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
@@ -2130,7 +2137,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:2134: checking for assembler .weakext directive" >&5
+echo "configure:2141: 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
@@ -2167,7 +2174,7 @@ EOF
 fi
 
 echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
-echo "configure:2171: checking for ld --no-whole-archive" >&5
+echo "configure:2178: 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
@@ -2178,7 +2185,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
                            -nostdlib -nostartfiles -Wl,--no-whole-archive
-                           -o conftest conftest.c 1>&5'; { (eval echo configure:2182: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+                           -o conftest conftest.c 1>&5'; { (eval echo configure:2189: \"$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
@@ -2189,7 +2196,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:2193: checking for gcc -fno-exceptions" >&5
+echo "configure:2200: 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
@@ -2200,7 +2207,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
                            -nostdlib -nostartfiles -fno-exceptions
-                           -o conftest conftest.c 1>&5'; { (eval echo configure:2204: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+                           -o conftest conftest.c 1>&5'; { (eval echo configure:2211: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_gcc_no_exceptions=yes
 else
   libc_cv_gcc_no_exceptions=no
@@ -2211,12 +2218,12 @@ fi
 echo "$ac_t""$libc_cv_gcc_no_exceptions" 1>&6
 
 echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6
-echo "configure:2215: checking for DWARF2 unwind info support" >&5
+echo "configure:2222: checking for DWARF2 unwind info support" >&5
 if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.c <<EOF
-#line 2220 "configure"
+#line 2227 "configure"
 static char __EH_FRAME_BEGIN__;
 _start ()
 {
@@ -2233,10 +2240,11 @@ memcpy () {}
 memset () {}
 free () {}
 abort () {}
+__bzero () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
                            -nostdlib -nostartfiles
-                           -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2240: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+                           -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2248: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_gcc_dwarf2_unwind_info=yes
 else
   libc_cv_gcc_dwarf2_unwind_info=no
@@ -2294,7 +2302,7 @@ if test "$uname" = "sysdeps/generic"; then
   fi
 
   echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
-echo "configure:2298: checking OS release for uname" >&5
+echo "configure:2306: 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
@@ -2316,7 +2324,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:2320: checking OS version for uname" >&5
+echo "configure:2328: 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
@@ -2338,7 +2346,7 @@ else
 fi
 
 echo $ac_n "checking stdio selection""... $ac_c" 1>&6
-echo "configure:2342: checking stdio selection" >&5
+echo "configure:2350: checking stdio selection" >&5
 
 case $stdio in
 libio) cat >> confdefs.h <<\EOF
@@ -2350,7 +2358,7 @@ esac
 echo "$ac_t""$stdio" 1>&6
 
 echo $ac_n "checking ldap selection""... $ac_c" 1>&6
-echo "configure:2354: checking ldap selection" >&5
+echo "configure:2362: checking ldap selection" >&5
 
 case $add_ons in
 *ldap*)
index b0bb90543a7294e8162eec52013f82db1651d1e8..992f1ee5927b973333b9cd0bbb5b51af7b4a57a1 100644 (file)
@@ -193,6 +193,10 @@ esac
 changequote([,])dnl
 AC_SUBST(base_machine)
 
+if test "$base_machine" = "i386"; then
+  AC_DEFINE(USE_REGPARMS)
+fi
+
 # Compute the list of sysdep directories for this configuration.
 # This can take a while to compute.
 sysdep_dir=$srcdir/sysdeps
@@ -779,6 +783,7 @@ memcpy () {}
 memset () {}
 free () {}
 abort () {}
+__bzero () {}
 EOF
 dnl No \ in command here because it ends up inside ''.
 if AC_TRY_COMMAND([${CC-cc} $CFLAGS
index 922f5b38c8fd39deb333c32ee593dbfa9dd747e4..37e2cbeb35a1f25afe136edf9c87f04837855931 100644 (file)
@@ -37,12 +37,12 @@ __BEGIN_DECLS
    endian).  We define the bit value interpretations here dependent on the
    machine's byte order.  */
 
-#include <endian.h>
-#if __BYTE_ORDER == __BIG_ENDIAN
-#define _ISbit(bit)    (1 << bit)
-#else /* __BYTE_ORDER == __LITTLE_ENDIAN */
-#define _ISbit(bit)    (bit < 8 ? ((1 << bit) << 8) : ((1 << bit) >> 8))
-#endif
+# include <endian.h>
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define _ISbit(bit)  (1 << bit)
+# else /* __BYTE_ORDER == __LITTLE_ENDIAN */
+#  define _ISbit(bit)  (bit < 8 ? ((1 << bit) << 8) : ((1 << bit) >> 8))
+# endif
 
 enum
 {
@@ -115,7 +115,7 @@ extern int tolower __P ((int __c));
 extern int toupper __P ((int __c));
 
 
-#if defined(__USE_SVID) || defined(__USE_MISC) || defined(__USE_XOPEN)
+#if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
 
 /* Return nonzero iff C is in the ASCII set
    (i.e., is no more than 7 bits wide).  */
@@ -127,35 +127,35 @@ extern int toascii __P ((int __c));
 
 #endif /* Use SVID or use misc.  */
 
-#if defined(__USE_SVID) || defined(__USE_MISC) || defined(__USE_XOPEN)
+#if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
 /* These are the same as `toupper' and `tolower'.  */
 __exctype (_toupper);
 __exctype (_tolower);
 #endif
 
 #ifndef        __NO_CTYPE
-#define        isalnum(c)      __isctype((c), _ISalnum)
-#define        isalpha(c)      __isctype((c), _ISalpha)
-#define        iscntrl(c)      __isctype((c), _IScntrl)
-#define        isdigit(c)      __isctype((c), _ISdigit)
-#define        islower(c)      __isctype((c), _ISlower)
-#define        isgraph(c)      __isctype((c), _ISgraph)
-#define        isprint(c)      __isctype((c), _ISprint)
-#define        ispunct(c)      __isctype((c), _ISpunct)
-#define        isspace(c)      __isctype((c), _ISspace)
-#define        isupper(c)      __isctype((c), _ISupper)
-#define        isxdigit(c)     __isctype((c), _ISxdigit)
+# define isalnum(c)    __isctype((c), _ISalnum)
+# define isalpha(c)    __isctype((c), _ISalpha)
+# define iscntrl(c)    __isctype((c), _IScntrl)
+# define isdigit(c)    __isctype((c), _ISdigit)
+# define islower(c)    __isctype((c), _ISlower)
+# define isgraph(c)    __isctype((c), _ISgraph)
+# define isprint(c)    __isctype((c), _ISprint)
+# define ispunct(c)    __isctype((c), _ISpunct)
+# define isspace(c)    __isctype((c), _ISspace)
+# define isupper(c)    __isctype((c), _ISupper)
+# define isxdigit(c)   __isctype((c), _ISxdigit)
 
 #ifdef __USE_GNU
-#define        isblank(c)      __isctype((c), _ISblank)
+# define isblank(c)    __isctype((c), _ISblank)
 #endif
 
 #define        tolower(c)      __tolower(c)
 #define        toupper(c)      __toupper(c)
 
-#if defined(__USE_SVID) || defined(__USE_MISC) || defined(__USE_XOPEN)
-#define        isascii(c)      __isascii(c)
-#define        toascii(c)      __toascii(c)
+#if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
+# define isascii(c)    __isascii(c)
+# define toascii(c)    __toascii(c)
 #endif
 
 #endif /* Not __NO_CTYPE.  */
@@ -179,13 +179,13 @@ __exctype (_tolower);
 
 /* These definitions are similar to the ones above but all functions
    take as an argument a handle for the locale which shall be used.  */
-#define        __isctype_l(c, type, locale) \
+# define __isctype_l(c, type, locale) \
   ((locale)->__ctype_b[(int) (c)] & (unsigned short int) type)
 
-#define        __tolower_l(c, locale)  ((int) (locale)->__ctype_tolower[(int) (c)])
-#define        __toupper_l(c, locale)  ((int) (locale)->__ctype_toupper[(int) (c)])
+# define __tolower_l(c, locale)        ((int) (locale)->__ctype_tolower[(int) (c)])
+# define __toupper_l(c, locale)        ((int) (locale)->__ctype_toupper[(int) (c)])
 
-#define        __exctype_l(name)       extern int name __P ((int, __locale_t))
+# define __exctype_l(name)     extern int name __P ((int, __locale_t))
 
 /* The following names are all functions:
      int isCHARACTERISTIC(int c, locale_t *locale);
@@ -213,27 +213,27 @@ extern int __tolower_l __P ((int __c, __locale_t __l));
 extern int __toupper_l __P ((int __c, __locale_t __l));
 
 
-#ifndef        __NO_CTYPE
-#define        __isalnum_l(c,l)        __isctype_l((c), _ISalnum, (l))
-#define        __isalpha_l(c,l)        __isctype_l((c), _ISalpha, (l))
-#define        __iscntrl_l(c,l)        __isctype_l((c), _IScntrl, (l))
-#define        __isdigit_l(c,l)        __isctype_l((c), _ISdigit, (l))
-#define        __islower_l(c,l)        __isctype_l((c), _ISlower, (l))
-#define        __isgraph_l(c,l)        __isctype_l((c), _ISgraph, (l))
-#define        __isprint_l(c,l)        __isctype_l((c), _ISprint, (l))
-#define        __ispunct_l(c,l)        __isctype_l((c), _ISpunct, (l))
-#define        __isspace_l(c,l)        __isctype_l((c), _ISspace, (l))
-#define        __isupper_l(c,l)        __isctype_l((c), _ISupper, (l))
-#define        __isxdigit_l(c,l)       __isctype_l((c), _ISxdigit, (l))
-
-#define        __isblank_l(c,l)        __isctype_l((c), _ISblank, (l))
-
-#if defined(__USE_SVID) || defined(__USE_MISC) || defined(__USE_XOPEN)
-#define        __isascii_l(c,l)        __isascii(c)
-#define        __toascii_l(c,l)        __toascii(c)
-#endif
+# ifndef __NO_CTYPE
+#  define __isalnum_l(c,l)     __isctype_l((c), _ISalnum, (l))
+#  define __isalpha_l(c,l)     __isctype_l((c), _ISalpha, (l))
+#  define __iscntrl_l(c,l)     __isctype_l((c), _IScntrl, (l))
+#  define __isdigit_l(c,l)     __isctype_l((c), _ISdigit, (l))
+#  define __islower_l(c,l)     __isctype_l((c), _ISlower, (l))
+#  define __isgraph_l(c,l)     __isctype_l((c), _ISgraph, (l))
+#  define __isprint_l(c,l)     __isctype_l((c), _ISprint, (l))
+#  define __ispunct_l(c,l)     __isctype_l((c), _ISpunct, (l))
+#  define __isspace_l(c,l)     __isctype_l((c), _ISspace, (l))
+#  define __isupper_l(c,l)     __isctype_l((c), _ISupper, (l))
+#  define __isxdigit_l(c,l)    __isctype_l((c), _ISxdigit, (l))
 
-#endif /* Not __NO_CTYPE.  */
+#  define __isblank_l(c,l)     __isctype_l((c), _ISblank, (l))
+
+#  if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
+#   define __isascii_l(c,l)    __isascii(c)
+#   define __toascii_l(c,l)    __toascii(c)
+#  endif
+
+# endif /* Not __NO_CTYPE.  */
 
 #endif /* Use GNU.  */
 
index 68c9514882f17a7a9089373ab4b7eb75d0bb6cfb..69a4029066352920dc42e00830d1e85c2fb13efd 100644 (file)
@@ -168,7 +168,8 @@ main (argc, argv)
   db_file = dbopen (output_name, O_CREAT | O_RDWR | O_TRUNC, 0666,
                    DB_BTREE, NULL);
   if (db_file == NULL)
-    error (EXIT_FAILURE, errno, gettext ("cannot open output file `%s'"));
+    error (EXIT_FAILURE, errno, gettext ("cannot open output file `%s'"),
+          output_name);
 
   /* Start the real work.  */
   status = process_input (input_file, input_name, db_file, to_lowercase,
@@ -328,7 +329,7 @@ process_input (input, inname, output, to_lowercase, be_quiet)
 
   if (ferror (input))
     {
-      error (0, 0, gettext ("problems while reading `%s'"));
+      error (0, 0, gettext ("problems while reading `%s'"), inname);
       status = EXIT_FAILURE;
     }
 
index a7f3553df00bcd44b84ded1c7c576a1ff09138ef..7c36510ca13d9ed44de40d5902bfdba2c307a832 100644 (file)
@@ -24,7 +24,7 @@ subdir                := dirent
 headers                := dirent.h bits/dirent.h
 routines       := opendir closedir readdir readdir_r rewinddir \
                   seekdir telldir scandir alphasort versionsort \
-                  getdents dirfd
+                  getdents dirfd readdir64 readdir64_r
 distribute := dirstream.h
 
 tests     := list tst-seekdir
index a9b7a7474d1a8dae3aa759576224d64a2e84135d..e2fab0ab0343304cbb95f83c17535692edbb3c44 100644 (file)
@@ -112,20 +112,42 @@ extern DIR *opendir __P ((__const char *__name));
 extern int __closedir __P ((DIR *__dirp));
 extern int closedir __P ((DIR *__dirp));
 
-/* Read a directory entry from DIRP.
-   Return a pointer to a `struct dirent' describing the entry,
-   or NULL for EOF or error.  The storage returned may be overwritten
-   by a later readdir call on the same DIR stream.  */
+/* Read a directory entry from DIRP.  Return a pointer to a `struct
+   dirent' describing the entry, or NULL for EOF or error.  The
+   storage returned may be overwritten by a later readdir call on the
+   same DIR stream.
+
+   If the Large File Support API is selected we have to use the
+   appropriate interface.  */
 extern struct dirent *__readdir __P ((DIR *__dirp));
+#ifndef __USE_FILE_OFFSET64
 extern struct dirent *readdir __P ((DIR *__dirp));
+#else
+extern struct dirent64 *readdir __P ((DIR *__dirp)) __asm__ ("readdir64");
+#endif
+
+#ifdef __USE_LARGEFILE64
+extern struct dirent64 *readdir64 __P ((DIR *__dirp));
+#endif
 
 #if defined __USE_POSIX || defined __USE_MISC
 /* Reentrant version of `readdir'.  Return in RESULT a pointer to the
    next entry.  */
 extern int __readdir_r __P ((DIR *__dirp, struct dirent *__entry,
                             struct dirent **__result));
+# ifndef __USE_FILE_OFFSET64
 extern int readdir_r __P ((DIR *__dirp, struct dirent *__entry,
                           struct dirent **__result));
+# else
+extern int readdir_r __P ((DIR *__dirp, struct dirent64 *__entry,
+                          struct dirent64 **__result))
+     __asm__ ("readdir64_r");
+# endif
+
+# ifdef __USE_LARGEFILE64
+extern int readdir64_r __P ((DIR *__dirp, struct dirent64 *__entry,
+                            struct dirent64 **__result));
+# endif
 #endif /* POSIX or misc */
 
 /* Rewind DIRP to the beginning of the directory.  */
index 3f09d72c321dbc46e7b97ff6e00ec030754c3dc8..8087fbd3be40ccba04319f14cb8fff986c8f98e3 100644 (file)
@@ -140,13 +140,8 @@ fixup (
      that defines sym.  Now add in the symbol offset.  */
   value = (sym ? value + sym->st_value : 0);
 
-  /* And now the relocation addend.  */
-#ifndef ELF_MACHINE_NO_RELA
-  if (l->l_info[DT_PLTRELSZ]->d_un.d_val == sizeof (ElfW(Rela)))
-    value += reloc->r_addend;
-#elif ELF_MACHINE_NO_REL
-  value += reloc->r_addend;
-#endif
+  /* And now perhaps the relocation addend.  */
+  value = elf_machine_plt_value (l, reloc, value);
 
   /* Finally, fix up the plt itself.  */
   elf_machine_fixup_plt (l, reloc, rel_addr, value);
@@ -212,13 +207,8 @@ profile_fixup (
      that defines sym.  Now add in the symbol offset.  */
   value = (sym ? value + sym->st_value : 0);
 
-  /* And now the relocation addend.  */
-#ifndef ELF_MACHINE_NO_RELA
-  if (l->l_info[DT_PLTRELSZ]->d_un.d_val == sizeof (ElfW(Rela)))
-    value += reloc->r_addend;
-#elif ELF_MACHINE_NO_REL
-  value += reloc->r_addend;
-#endif
+  /* And now perhaps the relocation addend.  */
+  value = elf_machine_plt_value (l, reloc, value);
 
   *_dl_global_scope_end = NULL;
   (*mcount_fct) (retaddr, value);
index 10ae215c808e3ec81c9d1385452a4058f15643de..787da5a7e7bde9f2796c4f44952305f2dbae34b1 100644 (file)
@@ -64,9 +64,9 @@ static int    s_scale;
 
 void moncontrol __P ((int mode));
 void __moncontrol __P ((int mode));
-static void write_hist __P ((int fd));
-static void write_call_graph __P ((int fd));
-static void write_bb_counts __P ((int fd));
+static void write_hist __P ((int fd)) internal_function;
+static void write_call_graph __P ((int fd)) internal_function;
+static void write_bb_counts __P ((int fd)) internal_function;
 
 /*
  * Control profiling
@@ -169,6 +169,7 @@ weak_alias(__monstartup, monstartup)
 
 
 static void
+internal_function
 write_hist (fd)
      int fd;
 {
@@ -198,6 +199,7 @@ write_hist (fd)
 
 
 static void
+internal_function
 write_call_graph (fd)
      int fd;
 {
@@ -251,6 +253,7 @@ write_call_graph (fd)
 
 
 static void
+internal_function
 write_bb_counts (fd)
      int fd;
 {
index 72b8925a8c13afc80cf935d637fd21ad21e49cf0..f5db84f7dc10ef1a6a2b6f70a5d7f483dfb67e87 100644 (file)
--- a/grp/grp.h
+++ b/grp/grp.h
@@ -43,9 +43,9 @@ struct group
   };
 
 
-#if defined(__USE_SVID) || defined(__USE_GNU)
-#define        __need_FILE
-#include <stdio.h>
+#if defined __USE_SVID || defined __USE_GNU
+# define __need_FILE
+# include <stdio.h>
 #endif
 
 #ifdef __USE_GNU
@@ -66,7 +66,7 @@ extern struct group *__grpscan __P ((__ptr_t *__p,
 #endif
 
 
-#if defined(__USE_SVID) || defined (__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
+#if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
 /* Rewind the group-file stream.  */
 extern void setgrent __P ((void));
 
@@ -90,11 +90,11 @@ extern struct group *getgrnam __P ((__const char *__name));
 
 #if defined __USE_POSIX || defined __USE_MISC
 
-#ifdef __USE_MISC
+# ifdef __USE_MISC
 /* Reasonable value for the buffer sized used in the reentrant
    functions below.  But better use `sysconf'.  */
-#define        NSS_BUFLEN_GROUP        1024
-#endif
+#  define NSS_BUFLEN_GROUP     1024
+# endif
 
 /* Reentrant versions of some of the functions above.
 
@@ -104,12 +104,12 @@ extern struct group *getgrnam __P ((__const char *__name));
    other reentrant functions so the chances are good this is what the
    POSIX people would choose.  */
 
-#if defined(__USE_SVID) || defined (__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
+# if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
 extern int __getgrent_r __P ((struct group *__resultbuf, char *buffer,
                              size_t __buflen, struct group **__result));
 extern int getgrent_r __P ((struct group *__resultbuf, char *buffer,
                            size_t __buflen, struct group **__result));
-#endif
+# endif
 
 /* Search for an entry with a matching group ID.  */
 extern int getgrgid_r __P ((__gid_t __gid, struct group *__resultbuf,
@@ -121,7 +121,7 @@ extern int getgrnam_r __P ((__const char *__name, struct group *__resultbuf,
                            char *buffer, size_t __buflen,
                            struct group **__result));
 
-#ifdef __USE_SVID
+# ifdef        __USE_SVID
 /* Read a group entry from STREAM.  This function is not standardized
    an probably never will.  */
 extern int __fgetgrent_r __P ((FILE * __stream, struct group *__resultbuf,
@@ -130,15 +130,15 @@ extern int __fgetgrent_r __P ((FILE * __stream, struct group *__resultbuf,
 extern int fgetgrent_r __P ((FILE * __stream, struct group *__resultbuf,
                             char *buffer, size_t __buflen,
                             struct group **__result));
-#endif
+# endif
 
 #endif /* POSIX or reentrant */
 
 
 #ifdef __USE_BSD
 
-#define        __need_size_t
-#include <stddef.h>
+# define __need_size_t
+# include <stddef.h>
 
 /* Set the group set for the current user to GROUPS (N of them).  */
 extern int setgroups __P ((size_t __n, __const __gid_t *__groups));
index 52aeaabb4c75aaecc97d67d98932f7e17cf33535..e8c97f800e082ba9d76963600b2859fc47d35bab 100644 (file)
@@ -30,6 +30,9 @@
    _XOPEN_SOURCE       Includes POSIX and XPG things.  Set to 500 if
                        Single Unix conformance is wanted.
    _XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions.
+   _LARGEFILE_SOURCE   Some more functions for correct standard I/O.
+   _LARGEFILE64_SOURCE Additional functionality from LFS for large files.
+   _FILE_OFFSET_BITS=N Select default filesystem interface.
    _BSD_SOURCE         ISO C, POSIX, and 4.3BSD things.
    _SVID_SOURCE                ISO C, POSIX, and SVID things.
    _GNU_SOURCE         All of the above, plus GNU extensions.
@@ -52,6 +55,8 @@
    __USE_XOPEN         Define XPG things.
    __USE_XOPEN_EXTENDED        Define X/Open Unix things.
    __USE_UNIX98                Define Single Unix V2 things.
+   __USE_LARGEFILE64   Define LFS things with separate names.
+   __USE_FILE_OFFSET64 Define 64bit interface as default.
    __USE_BSD           Define 4.3BSD things.
    __USE_SVID          Define SVID things.
    __USE_MISC          Define things common to BSD and System V Unix.
 #undef __USE_POSIX199309
 #undef __USE_XOPEN
 #undef __USE_XOPEN_EXTENDED
+#undef __USE_UNIX98
+#undef __USE_LARGEFILE
+#undef __USE_LARGEFILE64
+#undef __USE_FILE_OFFSET64
 #undef __USE_BSD
 #undef __USE_SVID
 #undef __USE_MISC
 #if defined _BSD_SOURCE && \
     !(defined _POSIX_SOURCE || defined _POSIX_C_SOURCE || \
       defined _XOPEN_SOURCE || defined _XOPEN_SOURCE_EXTENDED || \
+      defined _LARGEFILE64_SOURCE || defined _FILE_OFFSET_BITS || \
       defined _GNU_SOURCE || defined _SVID_SOURCE)
 # define __FAVOR_BSD   1
 #endif
 # define _XOPEN_SOURCE 500
 # undef  _XOPEN_SOURCE_EXTENDED
 # define _XOPEN_SOURCE_EXTENDED        1
+# undef         _LARGEFILE64_SOURCE
+# define _LARGEFILE64_SOURCE   1
 # undef  _BSD_SOURCE
 # define _BSD_SOURCE   1
 # undef  _SVID_SOURCE
 #if (!defined __STRICT_ANSI__ && !defined _ISOC9X_SOURCE && \
      !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE && \
      !defined _XOPEN_SOURCE && !defined _XOPEN_SOURCE_EXTENDED && \
+     !defined _LARGEFILE64_SOURCE && !defined _FILE_OFFSET_BITS && \
      !defined _BSD_SOURCE && !defined _SVID_SOURCE)
 # define _BSD_SOURCE   1
 # define _SVID_SOURCE  1
 #if (!defined __STRICT_ANSI__ && !defined _POSIX_SOURCE && \
      !defined _POSIX_C_SOURCE)
 # define _POSIX_SOURCE 1
-# if defined _XOPEN_SOURCE && _XOPEN_SOURCE != 500
+# if defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) != 500
 #  define _POSIX_C_SOURCE      2
 # else
 #  define _POSIX_C_SOURCE      199309L
 
 #ifdef _XOPEN_SOURCE
 # define __USE_XOPEN   1
-# if _XOPEN_SOURCE == 500
+# if (_XOPEN_SOURCE - 0) == 500
 #  define __USE_XOPEN_EXTENDED 1
 #  define __USE_UNIX98 1
+#  undef _LARGEFILE_SOURCE
+#  define _LARGEFILE_SOURCE    1
 # else
 #  ifdef _XOPEN_SOURCE_EXTENDED
 #   define __USE_XOPEN_EXTENDED        1
 # endif
 #endif
 
+#ifdef _LARGEFILE_SOURCE
+# define __USE_LARGEFILE       1
+#endif
+
+#ifdef _LARGEFILE64_SOURCE
+# define __USE_LARGEFILE64     1
+#endif
+
+#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
+# define __USE_FILE_OFFSET64   1
+#endif
+
 #if defined _BSD_SOURCE || defined _SVID_SOURCE
 # define __USE_MISC    1
 #endif
index 07a35f1b5311e349e1a3c737e3b0d6cca377723a..66d7eed0d0976d2e4009c7da2b01826d0831b3fd 100644 (file)
 /* Define the macros `_' and `N_' for conveniently marking translatable
    strings in the libc source code.  */
 
-#define N_(msgid)      msgid
+# define N_(msgid)     msgid
 
-#include <libintl.h>
+# include <libintl.h>
 extern const char _libc_intl_domainname[];
 
-#ifdef dgettext
+# ifdef dgettext
 /* This is defined as an optimizing macro, so use it.  */
-#define        _(msgid)        dgettext (_libc_intl_domainname, (msgid))
-#else
+#  define _(msgid)     dgettext (_libc_intl_domainname, (msgid))
+# else
 /* Be sure to use only the __ name when `dgettext' is a plain function
    instead of an optimizing macro.  */
-#define        _(msgid)        __dgettext (_libc_intl_domainname, (msgid))
-#endif
+#  define _(msgid)     __dgettext (_libc_intl_domainname, (msgid))
+# endif
 
 #endif
 
@@ -83,50 +83,50 @@ extern const char _libc_intl_domainname[];
 /* The symbols in all the user (non-_) macros are C symbols.
    HAVE_GNU_LD without HAVE_ELF implies a.out.  */
 
-#if defined (HAVE_ASM_WEAK_DIRECTIVE) || defined (HAVE_ASM_WEAKEXT_DIRECTIVE)
-#define HAVE_WEAK_SYMBOLS
+#if defined HAVE_ASM_WEAK_DIRECTIVE || defined HAVE_ASM_WEAKEXT_DIRECTIVE
+# define HAVE_WEAK_SYMBOLS
 #endif
 
 #ifndef __SYMBOL_PREFIX
-#ifdef NO_UNDERSCORES
-#define __SYMBOL_PREFIX
-#else
-#define __SYMBOL_PREFIX "_"
-#endif
+# ifdef NO_UNDERSCORES
+#  define __SYMBOL_PREFIX
+# else
+#  define __SYMBOL_PREFIX "_"
+# endif
 #endif
 
 #ifndef C_SYMBOL_NAME
-#ifdef NO_UNDERSCORES
-#define C_SYMBOL_NAME(name) name
-#else
-#define C_SYMBOL_NAME(name) _##name
-#endif
+# ifdef NO_UNDERSCORES
+#  define C_SYMBOL_NAME(name) name
+# else
+#  define C_SYMBOL_NAME(name) _##name
+# endif
 #endif
 
 
 /* Define ALIAS as a strong alias for ORIGINAL.  */
 #ifdef HAVE_ASM_SET_DIRECTIVE
-#define strong_alias_asm(original, alias)      \
+# define strong_alias_asm(original, alias)     \
   ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias);  \
   .set C_SYMBOL_NAME (alias),C_SYMBOL_NAME (original)
-#ifdef ASSEMBLER
-#define strong_alias(original, alias)  strong_alias_asm (original, alias)
-#else
-#define strong_alias(original, alias)  \
+# ifdef ASSEMBLER
+#  define strong_alias(original, alias)        strong_alias_asm (original, alias)
+# else
+#  define strong_alias(original, alias)        \
   asm (__string_1 (ASM_GLOBAL_DIRECTIVE) " " __SYMBOL_PREFIX #alias "\n" \
        ".set " __SYMBOL_PREFIX #alias "," __SYMBOL_PREFIX #original);
-#endif
+# endif
 #else
-#define strong_alias_asm(original, alias)      \
+# define strong_alias_asm(original, alias)     \
   ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias);  \
   C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
-#ifdef ASSEMBLER
-#define strong_alias(original, alias)  strong_alias_asm (original, alias)
-#else
-#define strong_alias(original, alias)  \
+# ifdef ASSEMBLER
+#  define strong_alias(original, alias)        strong_alias_asm (original, alias)
+# else
+#  define strong_alias(original, alias)        \
   asm (__string_1 (ASM_GLOBAL_DIRECTIVE) " " __SYMBOL_PREFIX #alias "\n" \
        __SYMBOL_PREFIX #alias " = " __SYMBOL_PREFIX #original);
-#endif
+# endif
 #endif
 
 /* Helper macros used above.  */
@@ -136,77 +136,77 @@ extern const char _libc_intl_domainname[];
 
 #ifdef HAVE_WEAK_SYMBOLS
 
-#ifdef ASSEMBLER
+# ifdef ASSEMBLER
 
-#ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
+#  ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
 
 /* Define ALIAS as a weak alias for ORIGINAL.
    If weak aliases are not available, this defines a strong alias.  */
-#define weak_alias(original, alias)    \
+#   define weak_alias(original, alias) \
   .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original)
 
 /* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined).  */
-#define weak_extern(symbol)    \
+#   define weak_extern(symbol) \
   .weakext C_SYMBOL_NAME (symbol)
 
-#else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
+#  else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
 
 /* Define ALIAS as a weak alias for ORIGINAL.
    If weak aliases are not available, this defines a strong alias.  */
-#define weak_alias(original, alias)    \
+#   define weak_alias(original, alias) \
   .weak C_SYMBOL_NAME (alias); \
   C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
 
 
 /* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined).  */
-#define weak_extern(symbol)    \
+#   define weak_extern(symbol) \
   .weak C_SYMBOL_NAME (symbol)
 
-#endif /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
+#  endif /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
 
-#else /* ! ASSEMBLER */
+# else /* ! ASSEMBLER */
 
-#ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
-#define weak_extern_asm(symbol)        asm (".weakext " __SYMBOL_PREFIX #symbol);
-#define weak_alias_asm(original, alias) \
+#  ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
+#   define weak_extern_asm(symbol) asm (".weakext " __SYMBOL_PREFIX #symbol);
+#   define weak_alias_asm(original, alias) \
   asm (".weakext " __SYMBOL_PREFIX #alias ", " __SYMBOL_PREFIX #original);
-#else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
-#define weak_extern_asm(symbol)        asm (".weak " __SYMBOL_PREFIX #symbol);
-#define weak_alias_asm(original, alias) \
+#  else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
+#   define weak_extern_asm(symbol)     asm (".weak " __SYMBOL_PREFIX #symbol);
+#   define weak_alias_asm(original, alias) \
   asm (".weak " __SYMBOL_PREFIX #alias "\n" \
        __SYMBOL_PREFIX #alias " = " __SYMBOL_PREFIX #original);
-#endif /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
+#  endif /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
 
-#define weak_alias(o, a) weak_alias_asm (o, a)
-#define weak_extern(symbol) weak_extern_asm (symbol)
+#  define weak_alias(o, a) weak_alias_asm (o, a)
+#  define weak_extern(symbol) weak_extern_asm (symbol)
 
-#endif /* ! ASSEMBLER */
+# endif /* ! ASSEMBLER */
 #else
-#define        weak_alias(original, alias) strong_alias(original, alias)
-#define weak_extern(symbol)    /* Do nothing; the ref will be strong.  */
+# define weak_alias(original, alias) strong_alias(original, alias)
+# define weak_extern(symbol)   /* Do nothing; the ref will be strong.  */
 #endif
 
 
-#if (!defined (ASSEMBLER) && \
+#if (!defined ASSEMBLER && \
      (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)))
 /* GCC 2.7 and later has special syntax for weak symbols and aliases.
    Using that is better when possible, because the compiler and assembler
    are better clued in to what we are doing.  */
-#undef strong_alias
-#define strong_alias(name, aliasname) \
+# undef        strong_alias
+# define strong_alias(name, aliasname) \
   extern __typeof (name) aliasname __attribute__ ((alias (#name)));
 
-#ifdef HAVE_WEAK_SYMBOLS
-#undef weak_alias
-#define weak_alias(name, aliasname) \
+# ifdef HAVE_WEAK_SYMBOLS
+#  undef weak_alias
+#  define weak_alias(name, aliasname) \
   extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
 
 /* This comes between the return type and function name in
    a function definition to make that definition weak.  */
-#define weak_function __attribute__ ((weak))
-#define weak_const_function __attribute__ ((weak, __const__))
+#  define weak_function __attribute__ ((weak))
+#  define weak_const_function __attribute__ ((weak, __const__))
 
-#endif /* HAVE_WEAK_SYMBOLS.  */
+# endif        /* HAVE_WEAK_SYMBOLS.  */
 #endif /* Not ASSEMBLER, and GCC 2.7 or later.  */
 
 
@@ -215,39 +215,45 @@ extern const char _libc_intl_domainname[];
    can define functions as weak symbols.  The compiler will emit a `.globl'
    directive for the function symbol, and a `.weak' directive in addition
    will produce an error from the assembler.  */
-#define weak_function /* empty */
-#define weak_const_function /* empty */
+# define weak_function         /* empty */
+# define weak_const_function   /* empty */
 #endif
 
+/* On some platforms we can make internal function calls (i.e., calls of
+   functions not exported) a bit faster by using a different calling
+   convention.  */
+#ifndef internal_function
+# define internal_function     /* empty */
+#endif
 
 /* When a reference to SYMBOL is encountered, the linker will emit a
    warning message MSG.  */
 #ifdef HAVE_GNU_LD
-#ifdef HAVE_ELF
+# ifdef HAVE_ELF
 
 /* We want the .gnu.warning.SYMBOL section to be unallocated.  */
-#ifdef HAVE_ASM_PREVIOUS_DIRECTIVE
-#define __make_section_unallocated(section_string)     \
+#  ifdef HAVE_ASM_PREVIOUS_DIRECTIVE
+#   define __make_section_unallocated(section_string)  \
   asm(".section " section_string "; .previous");
-#elif defined (HAVE_ASM_POPSECTION_DIRECTIVE)
-#define __make_section_unallocated(section_string)     \
+#  elif defined (HAVE_ASM_POPSECTION_DIRECTIVE)
+#   define __make_section_unallocated(section_string)  \
   asm(".pushsection " section_string "; .popsection");
-#else
-#define __make_section_unallocated(section_string)
-#endif
+#  else
+#   define __make_section_unallocated(section_string)
+#  endif
 
-#define link_warning(symbol, msg)                      \
+#  define link_warning(symbol, msg)                    \
   __make_section_unallocated (".gnu.warning." #symbol) \
   static const char __evoke_link_warning_##symbol[]    \
     __attribute__ ((section (".gnu.warning." #symbol))) = msg;
-#else
-#define link_warning(symbol, msg)              \
+# else
+#  define link_warning(symbol, msg)            \
   asm(".stabs \"" msg "\",30,0,0,0\n"  \
       ".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n");
-#endif
+# endif
 #else
 /* We will never be heard; they will all die horribly.  */
-#define link_warning(symbol, msg)
+# define link_warning(symbol, msg)
 #endif
 
 /* A canned warning for sysdeps/stub functions.  */
@@ -263,60 +269,60 @@ extern const char _libc_intl_domainname[];
 
 /* Symbol set support macros.  */
 
-#ifdef HAVE_ELF
+# ifdef HAVE_ELF
 
 /* Make SYMBOL, which is in the text segment, an element of SET.  */
-#define text_set_element(set, symbol)  _elf_set_element(set, symbol)
+#  define text_set_element(set, symbol)        _elf_set_element(set, symbol)
 /* Make SYMBOL, which is in the data segment, an element of SET.  */
-#define data_set_element(set, symbol)  _elf_set_element(set, symbol)
+#  define data_set_element(set, symbol)        _elf_set_element(set, symbol)
 /* Make SYMBOL, which is in the bss segment, an element of SET.  */
-#define bss_set_element(set, symbol)   _elf_set_element(set, symbol)
+#  define bss_set_element(set, symbol) _elf_set_element(set, symbol)
 
 /* These are all done the same way in ELF.
    There is a new section created for each set.  */
-#ifdef PIC
+#  ifdef PIC
 /* When building a shared library, make the set section writable,
    because it will need to be relocated at run time anyway.  */
-#define _elf_set_element(set, symbol) \
+#   define _elf_set_element(set, symbol) \
   static const void *__elf_set_##set##_element_##symbol##__ \
     __attribute__ ((unused, section (#set))) = &(symbol)
-#else
-#define _elf_set_element(set, symbol) \
+#  else
+#   define _elf_set_element(set, symbol) \
   static const void *const __elf_set_##set##_element_##symbol##__ \
     __attribute__ ((unused, section (#set))) = &(symbol)
-#endif
+#  endif
 
 /* Define SET as a symbol set.  This may be required (it is in a.out) to
    be able to use the set's contents.  */
-#define symbol_set_define(set) symbol_set_declare(set)
+#  define symbol_set_define(set)       symbol_set_declare(set)
 
 /* Declare SET for use in this module, if defined in another module.  */
-#define symbol_set_declare(set)        \
+#  define symbol_set_declare(set) \
   extern void *const __start_##set __attribute__ ((__weak__));         \
   extern void *const __stop_##set __attribute__ ((__weak__));          \
   weak_extern (__start_##set) weak_extern (__stop_##set)
 
 /* Return a pointer (void *const *) to the first element of SET.  */
-#define symbol_set_first_element(set)  (&__start_##set)
+#  define symbol_set_first_element(set)        (&__start_##set)
 
 /* Return true iff PTR (a void *const *) has been incremented
    past the last element in SET.  */
-#define symbol_set_end_p(set, ptr)     ((ptr) >= &__stop_##set)
+#  define symbol_set_end_p(set, ptr)   ((ptr) >= &__stop_##set)
 
-#else  /* Not ELF: a.out.  */
+# else /* Not ELF: a.out.  */
 
-#define        text_set_element(set, symbol)   \
+#  define text_set_element(set, symbol)        \
   asm(".stabs \"" __SYMBOL_PREFIX #set "\",23,0,0," __SYMBOL_PREFIX #symbol)
-#define        data_set_element(set, symbol)   \
+#  define data_set_element(set, symbol)        \
   asm(".stabs \"" __SYMBOL_PREFIX #set "\",25,0,0," __SYMBOL_PREFIX #symbol)
-#define        bss_set_element(set, symbol)    ?error Must use initialized data.
-#define symbol_set_define(set)         void *const (set)[1];
-#define symbol_set_declare(set)                extern void *const (set)[1];
+#  define bss_set_element(set, symbol) ?error Must use initialized data.
+#  define symbol_set_define(set)       void *const (set)[1];
+#  define symbol_set_declare(set)      extern void *const (set)[1];
 
-#define symbol_set_first_element(set)  &(set)[1]
-#define symbol_set_end_p(set, ptr)     (*(ptr) == 0)
+#  define symbol_set_first_element(set)        &(set)[1]
+#  define symbol_set_end_p(set, ptr)   (*(ptr) == 0)
 
-#endif /* ELF.  */
+# endif        /* ELF.  */
 #endif /* Have GNU ld.  */
 
 #endif /* libc-symbols.h */
index 31d8792d9d414cda7a20fe03f13348da07afe0d7..160fc5f41cc38b38c6edb3989bb7ff542783246e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 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
 #endif
 
 
-#if    __GNUC__ >= 2
+#if __GNUC__ >= 2
 
  /* Get the compiler's limits.h, which defines all the ANSI constants.  */
- #ifndef _LIBC_LIMITS_H_
- #define _LIBC_LIMITS_H_       /* This tells it not to look for another.  */
- #endif
- #ifndef _GCC_LIMITS_H_                /* This is what GCC's file defines.  */
- #include_next <limits.h>
- #endif
+ifndef _LIBC_LIMITS_H_
+#  define _LIBC_LIMITS_H_      /* This tells it not to look for another.  */
+endif
+ifndef _GCC_LIMITS_H_                /* This is what GCC's file defines.  */
+#  include_next <limits.h>
+endif
 
 #else  /* Not GCC 2.  */
 
index 26421724c44ae491396c0f17c3e83b5f77c6692b..afbd72d86105694e5ca7c7b7e08b7fc60e206418 100644 (file)
@@ -63,7 +63,7 @@
 
 #ifdef __USE_MISC
 /* Some systems define this name instead of CHAR_BIT or CHARBITS.  */
-#define BITSPERBYTE    CHAR_BIT
+# define BITSPERBYTE   CHAR_BIT
 #endif
 
 #endif /* values.h */
index 2bba606ec75ccbd4b00dc7c4b5759c06a7686c8e..a7cdb07742b1edd61d6ec78cb1fb3329ced64543 100644 (file)
@@ -63,6 +63,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
 static char *
+internal_function
 nrl_domainname (void)
 {
   static char *domain = NULL;
@@ -258,13 +259,11 @@ getnameinfo (const struct sockaddr *sa, size_t addrlen, char *host,
        else
          {
            const char *c;
-#if INET6
            if (sa->sa_family == AF_INET6)
              c = inet_ntop (AF_INET6,
                             (void *) &(((struct sockaddr_in6 *) sa)->sin6_addr),
                             host, hostlen);
            else
-#endif /* INET6 */
              c = inet_ntop (AF_INET,
                             (void *) &(((struct sockaddr_in *) sa)->sin_addr),
                             host, hostlen);
index 5afe82561c955b3a944be3e6a44e83d761373375..a388d86ba8d92804738c655227b030bd5a5f341c 100644 (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.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -91,6 +91,7 @@ free_memory (struct __netgrent *data)
 }
 \f
 static int
+internal_function
 __internal_setnetgrent_reuse (const char *group, struct __netgrent *datap)
 {
   enum nss_status (*fct) (const char *, struct __netgrent *);
index 6a680c18b72bd239c71089a9b97876fcf74803b2..92ce09480756f41e384592fbdf569371e252ee90 100644 (file)
@@ -55,7 +55,7 @@ static char sccsid[] = "@(#)rcmd.c    8.3 (Berkeley) 3/26/94";
 
 
 int    __ivaliduser __P((FILE *, u_int32_t, const char *, const char *));
-static int __icheckhost __P((u_int32_t, char *));
+static int __icheckhost __P((u_int32_t, char *)) internal_function;
 
 int
 rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
@@ -426,6 +426,7 @@ __ivaliduser(hostf, raddr, luser, ruser)
  * Returns "true" if match, 0 if no match.
  */
 static int
+internal_function
 __icheckhost(raddr, lhost)
        u_int32_t raddr;
        register char *lhost;
index 692ce45bcf9b4296e201e60cd416ea1fe77f1470..3557202ea567abe1524ee705b16b8deb664fc833 100644 (file)
@@ -142,6 +142,10 @@ static char *stpcpy PARAMS ((char *dest, const char *src));
 # define PATH_MAX _POSIX_PATH_MAX
 #endif
 
+#ifndef internal_function
+# define internal_function
+#endif
+
 /* XPG3 defines the result of `setlocale (category, NULL)' as:
    ``Directs `setlocale()' to query `category' and return the current
      setting of `local'.''
@@ -168,10 +172,11 @@ struct binding *_nl_domain_bindings;
 
 /* Prototypes for local functions.  */
 static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file,
-                              const char *msgid));
-static const char *category_to_name PARAMS ((int category));
+                              const char *msgid)) internal_function;
+static const char *category_to_name PARAMS ((int category)) internal_function;
 static const char *guess_category_value PARAMS ((int category,
-                                                const char *categoryname));
+                                                const char *categoryname))
+     internal_function;
 
 
 /* For those loosing systems which don't have `alloca' we have to add
@@ -394,6 +399,7 @@ weak_alias (__dcgettext, dcgettext);
 
 
 static char *
+internal_function
 find_msg (domain_file, msgid)
      struct loaded_l10nfile *domain_file;
      const char *msgid;
@@ -482,6 +488,7 @@ find_msg (domain_file, msgid)
 
 /* Return string representation of locale CATEGORY.  */
 static const char *
+internal_function
 category_to_name (category)
      int category;
 {
@@ -541,6 +548,7 @@ category_to_name (category)
 
 /* Guess value of current locale from value of the environment variables.  */
 static const char *
+internal_function
 guess_category_value (category, categoryname)
      int category;
      const char *categoryname;
index 43158c4cfa73c95b1c0cf46a952db0886ec5e522..a67223ff7e0df27ef2d379431eabf89f40415a9c 100644 (file)
@@ -69,6 +69,7 @@ _nl_load_domain (domain_file)
      struct loaded_l10nfile *domain_file;
 {
   int fd;
+  size_t size;
   struct stat st;
   struct mo_file_header *data = (struct mo_file_header *) -1;
 #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
@@ -94,7 +95,8 @@ _nl_load_domain (domain_file)
 
   /* We must know about the size of the file.  */
   if (fstat (fd, &st) != 0
-      && st.st_size < (off_t) sizeof (struct mo_file_header))
+      || (size = (size_t) st.st_size) != st.st_size
+      || size < sizeof (struct mo_file_header))
     {
       /* Something went wrong.  */
       close (fd);
@@ -105,7 +107,7 @@ _nl_load_domain (domain_file)
     || defined _LIBC
   /* Now we are ready to load the file.  If mmap() is available we try
      this first.  If not available or it failed we try to load it.  */
-  data = (struct mo_file_header *) mmap (NULL, st.st_size, PROT_READ,
+  data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
                                         MAP_PRIVATE, fd, 0);
 
   if (data != (struct mo_file_header *) -1)
@@ -120,14 +122,14 @@ _nl_load_domain (domain_file)
      it manually.  */
   if (data == (struct mo_file_header *) -1)
     {
-      off_t to_read;
+      size_t to_read;
       char *read_ptr;
 
-      data = (struct mo_file_header *) malloc (st.st_size);
+      data = (struct mo_file_header *) malloc (size);
       if (data == NULL)
        return;
 
-      to_read = st.st_size;
+      to_read = size;
       read_ptr = (char *) data;
       do
        {
@@ -154,7 +156,7 @@ _nl_load_domain (domain_file)
 #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
     || defined _LIBC
       if (use_mmap)
-       munmap ((caddr_t) data, st.st_size);
+       munmap ((caddr_t) data, size);
       else
 #endif
        free (data);
@@ -169,7 +171,7 @@ _nl_load_domain (domain_file)
   domain = (struct loaded_domain *) domain_file->data;
   domain->data = (char *) data;
   domain->use_mmap = use_mmap;
-  domain->mmap_size = st.st_size;
+  domain->mmap_size = size;
   domain->must_swap = data->magic != _MAGIC;
 
   /* Fill in the information about the available tables.  */
@@ -190,7 +192,7 @@ _nl_load_domain (domain_file)
 #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
     || defined _LIBC
       if (use_mmap)
-       munmap ((caddr_t) data, st.st_size);
+       munmap ((caddr_t) data, size);
       else
 #endif
        free (data);
index 46d570f88f723c02a3f9446f9bd8bb2546d86c8a..05832f0e368b428dc0c5dbfd1531a6d05c023fce 100644 (file)
@@ -90,6 +90,9 @@ void free ();
 __libc_lock_define_initialized (static, lock);
 #endif
 
+#ifndef internal_function
+# define internal_function
+#endif
 
 /* For those loosing systems which don't have `alloca' we have to add
    some additional code emulating it.  */
@@ -143,7 +146,8 @@ static size_t maxmap = 0;
 
 
 /* Prototypes for local functions.  */
-static size_t read_alias_file PARAMS ((const char *fname, int fname_len));
+static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
+     internal_function;
 static void extend_alias_table PARAMS ((void));
 static int alias_compare PARAMS ((const struct alias_map *map1,
                                  const struct alias_map *map2));
@@ -212,6 +216,7 @@ _nl_expand_alias (name)
 
 
 static size_t
+internal_function
 read_alias_file (fname, fname_len)
      const char *fname;
      int fname_len;
index 3f37e37c8add9a7d8631783af036533c477294b4..e5c86b4cf6e5af318b9b607714555755a30546f2 100644 (file)
@@ -29,21 +29,21 @@ headers := sys/stat.h bits/stat.h sys/statfs.h bits/statfs.h sys/vfs.h \
 routines :=                                                          \
        utime                                                         \
        mkfifo                                                        \
-       stat fstat lstat mknod                                        \
-       xstat fxstat lxstat xmknod                                    \
-       statfs fstatfs                                                \
+       stat fstat lstat mknod stat64 fstat64 lstat64                 \
+       xstat fxstat lxstat xmknod xstat64 fxstat64 lxstat64          \
+       statfs fstatfs statfs64 fstatfs64                             \
        umask chmod fchmod mkdir                                      \
-       open close read write lseek access euidaccess                 \
+       open open64 close read write lseek lseek64 access euidaccess  \
        fcntl flock lockf                                             \
        dup dup2 pipe                                                 \
-       creat                                                         \
+       creat creat64                                                 \
        chdir fchdir                                                  \
        getcwd getwd getdirname                                       \
        chown fchown lchown                                           \
        ttyname ttyname_r isatty                                      \
        link symlink readlink                                         \
        unlink rmdir                                                  \
-       ftw fts poll
+       ftw ftw64 fts poll
 
 # These routines will be omitted from the libc shared object.
 # Instead the static object files will be included in a special archive
diff --git a/io/creat64.c b/io/creat64.c
new file mode 100644 (file)
index 0000000..6e51dc0
--- /dev/null
@@ -0,0 +1,31 @@
+/* Copyright (C) 1991, 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.  */
+
+#include <fcntl.h>
+#include <sys/types.h>
+
+#undef creat
+
+/* Create FILE with protections MODE.  */
+int
+creat64 (file, mode)
+     const char *file;
+     mode_t mode;
+{
+  return __open64 (file, O_WRONLY|O_CREAT|O_TRUNC, mode);
+}
index 519230019caf8eedc1e46621c60bd0a53041c4b5..d47da0a1ffb195d0c95c8412d513c065256921c3 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 92, 94, 95, 96 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 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
@@ -33,14 +33,14 @@ __BEGIN_DECLS
 #include <bits/fcntl.h>
 
 #ifdef __USE_MISC
-#ifndef        R_OK                    /* Verbatim from <unistd.h>.  Ugh.  */
+# ifndef R_OK                  /* Verbatim from <unistd.h>.  Ugh.  */
 /* Values for the second argument to access.
    These may be OR'd together.  */
-#define        R_OK    4               /* Test for read permission.  */
-#define        W_OK    2               /* Test for write permission.  */
-#define        X_OK    1               /* Test for execute permission.  */
-#define        F_OK    0               /* Test for existence.  */
-#endif
+#  define R_OK 4               /* Test for read permission.  */
+#  define W_OK 2               /* Test for write permission.  */
+#  define X_OK 1               /* Test for execute permission.  */
+#  define F_OK 0               /* Test for existence.  */
+# endif
 #endif /* Use misc.  */
 
 /* Do the file control operation described by CMD on FD.
@@ -52,14 +52,31 @@ extern int fcntl __P ((int __fd, int __cmd, ...));
    OFLAG determines the type of access used.  If O_CREAT is on OFLAG,
    the third argument is taken as a `mode_t', the mode of the created file.  */
 extern int __open __P ((__const char *__file, int __oflag, ...));
+extern int __open64 __P ((__const char *__file, int __oflag, ...));
+#ifndef __USE_FILE_OFFSET64
 extern int open __P ((__const char *__file, int __oflag, ...));
+#else
+extern int open __P ((__const char *__file, int __oflag, ...))
+     __asm__ ("open64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern int open64 __P ((__const char *__file, int __oflag, ...));
+#endif
 
 /* Create and open FILE, with mode MODE.
    This takes an `int' MODE argument because that is
    what `mode_t' will be widened to.  */
+#ifndef __USE_FILE_OFFSET64
 extern int creat __P ((__const char *__file, __mode_t __mode));
+#else
+extern int creat __P ((__const char *__file, __mode_t __mode))
+     __asm__ ("creat64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern int creat64 __P ((__const char *__file, __mode_t __mode));
+#endif
 
-#if !defined(F_LOCK) && (defined(__USE_MISC) || defined(__USE_XOPEN_EXTENDED))
+#if !defined F_LOCK && (defined __USE_MISC || defined __USE_XOPEN_EXTENDED)
 /* NOTE: These declarations also appear in <unistd.h>; be sure to keep both
    files consistent.  Some systems have them there and some here, and some
    software depends on the macros being defined without including both.  */
@@ -68,12 +85,20 @@ extern int creat __P ((__const char *__file, __mode_t __mode));
    LEN is always relative to the current file position.
    The CMD argument is one of the following.  */
 
-#define F_ULOCK 0       /* Unlock a previously locked region.  */
-#define F_LOCK  1       /* Lock a region for exclusive use.  */
-#define F_TLOCK 2       /* Test and lock a region for exclusive use.  */
-#define F_TEST  3       /* Test a region for other processes locks.  */
+# define F_ULOCK 0     /* Unlock a previously locked region.  */
+# define F_LOCK  1     /* Lock a region for exclusive use.  */
+# define F_TLOCK 2     /* Test and lock a region for exclusive use.  */
+# define F_TEST  3     /* Test a region for other processes locks.  */
 
+# ifndef __USE_FILE_OFFSET64
 extern int lockf __P ((int __fd, int __cmd, __off_t __len));
+# else
+extern int lockf __P ((int __fd, int __cmd, __off_t __len))
+     __asm__ ("lockf64");
+# endif
+# ifdef __USE_LARGEFILE64
+extern int lockf64 __P ((int __fd, int __cmd, __off64_t __len));
+# endif
 #endif
 
 __END_DECLS
diff --git a/io/fstat64.c b/io/fstat64.c
new file mode 100644 (file)
index 0000000..376a262
--- /dev/null
@@ -0,0 +1,43 @@
+/* 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.
+
+   In addition to the permissions in the GNU Library General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file with other
+   programs, and to distribute those programs without any restriction
+   coming from the use of this file.  (The Library General Public
+   License restrictions do apply in other respects; for example, they
+   cover modification of the file, and distribution when not linked
+   into another program.)
+
+   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, 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sys/stat.h>
+
+/* This definition is only used if inlining fails for this function; see
+   the last page of <sys/stat.h>.  The real work is done by the `x'
+   function which is passed a version number argument.  We arrange in the
+   makefile that when not inlined this function is always statically
+   linked; that way a dynamically-linked executable always encodes the
+   version number corresponding to the data structures it uses, so the `x'
+   functions in the shared library can adapt without needing to recompile
+   all callers.  */
+
+int
+fstat64 (int fd, struct stat64 *buf)
+{
+  return __fxstat64 (_STAT_VER, fd, buf);
+}
index f283c174507b5ba53bb75c64a764de04bfb601c0..255c53f5291128a0e4935f1ae6c343c90e5cb21b 100644 (file)
--- a/io/fts.c
+++ b/io/fts.c
@@ -57,15 +57,15 @@ static char sccsid[] = "@(#)fts.c   8.2 (Berkeley) 1/2/94";
 #endif
 
 
-static FTSENT  *fts_alloc __P((FTS *, const char *, int));
-static FTSENT  *fts_build __P((FTS *, int));
-static void     fts_lfree __P((FTSENT *));
+static FTSENT  *fts_alloc __P((FTS *, const char *, int)) internal_function;
+static FTSENT  *fts_build __P((FTS *, int)) internal_function;
+static void     fts_lfree __P((FTSENT *)) internal_function;
 static void     fts_load __P((FTS *, FTSENT *));
-static size_t   fts_maxarglen __P((char * const *));
-static void     fts_padjust __P((FTS *, void *));
-static int      fts_palloc __P((FTS *, size_t));
-static FTSENT  *fts_sort __P((FTS *, FTSENT *, int));
-static u_short  fts_stat __P((FTS *, FTSENT *, int));
+static size_t   fts_maxarglen __P((char * const *)) internal_function;
+static void     fts_padjust __P((FTS *, void *)) internal_function;
+static int      fts_palloc __P((FTS *, size_t)) internal_function;
+static FTSENT  *fts_sort __P((FTS *, FTSENT *, int)) internal_function;
+static u_short  fts_stat __P((FTS *, FTSENT *, int)) internal_function;
 
 #ifndef MAX
 #define MAX(a, b)      ({ __typeof__ (a) _a = (a); \
@@ -566,6 +566,7 @@ fts_children(sp, instr)
  * been found, cutting the stat calls by about 2/3.
  */
 static FTSENT *
+internal_function
 fts_build(sp, type)
        register FTS *sp;
        int type;
@@ -780,6 +781,7 @@ mem1:                               saved_errno = errno;
 }
 
 static u_short
+internal_function
 fts_stat(sp, p, follow)
        FTS *sp;
        register FTSENT *p;
@@ -852,6 +854,7 @@ err:                bzero(sbp, sizeof(struct stat));
 }
 
 static FTSENT *
+internal_function
 fts_sort(sp, head, nitems)
        FTS *sp;
        FTSENT *head;
@@ -884,6 +887,7 @@ fts_sort(sp, head, nitems)
 }
 
 static FTSENT *
+internal_function
 fts_alloc(sp, name, namelen)
        FTS *sp;
        const char *name;
@@ -922,6 +926,7 @@ fts_alloc(sp, name, namelen)
 }
 
 static void
+internal_function
 fts_lfree(head)
        register FTSENT *head;
 {
@@ -941,6 +946,7 @@ fts_lfree(head)
  * plus 256 bytes so don't realloc the path 2 bytes at a time.
  */
 static int
+internal_function
 fts_palloc(sp, more)
        FTS *sp;
        size_t more;
@@ -955,6 +961,7 @@ fts_palloc(sp, more)
  * already returned.
  */
 static void
+internal_function
 fts_padjust(sp, addr)
        FTS *sp;
        void *addr;
@@ -978,6 +985,7 @@ fts_padjust(sp, addr)
 }
 
 static size_t
+internal_function
 fts_maxarglen(argv)
        char * const *argv;
 {
index 8cccbacd37fcd8e77193bb1c6c19d93edd8decf8..e0835c2839c45119a1f5e7867ac9795e49769be7 100644 (file)
--- a/io/ftw.c
+++ b/io/ftw.c
 /* #define NDEBUG 1 */
 #include <assert.h>
 
+/* Support for the LFS API version.  */
+#ifndef FTW_NAME
+# define FTW_NAME ftw
+# define NFTW_NAME nftw
+# define INO_T ino_t
+# define STAT stat
+# define DIRENT dirent
+# define READDIR readdir
+# define LXSTAT __lxstat
+# define XSTAT __xstat
+# define FTW_FUNC_T __ftw_func_t
+# define NFTW_FUNC_T __nftw_func_t
+#endif
 
 struct dir_data
 {
@@ -41,7 +54,7 @@ struct dir_data
 struct known_object
 {
   dev_t dev;
-  ino_t ino;
+  INO_T ino;
 };
 
 struct ftw_data
@@ -68,7 +81,7 @@ struct ftw_data
   int *cvt_arr;
 
   /* Callback function.  We always use the `nftw' form.  */
-  __nftw_func_t func;
+  NFTW_FUNC_T func;
 
   /* Device of starting point.  Needed for FTW_MOUNT.  */
   dev_t dev;
@@ -94,7 +107,7 @@ static int ftw_arr[] =
 
 
 /* Forward declarations of local functions.  */
-static int ftw_dir (struct ftw_data *data, struct stat *st);
+static int ftw_dir (struct ftw_data *data, struct STAT *st) internal_function;
 
 
 static int
@@ -113,7 +126,7 @@ object_compare (const void *p1, const void *p2)
 
 
 static inline int
-add_object (struct ftw_data *data, struct stat *st)
+add_object (struct ftw_data *data, struct STAT *st)
 {
   struct known_object *newp = malloc (sizeof (struct known_object));
   if (newp == NULL)
@@ -125,7 +138,7 @@ add_object (struct ftw_data *data, struct stat *st)
 
 
 static inline int
-find_object (struct ftw_data *data, struct stat *st)
+find_object (struct ftw_data *data, struct STAT *st)
 {
   struct known_object obj = { dev: st->st_dev, ino: st->st_ino };
   return __tfind (&obj, &data->known_objects, object_compare) != NULL;
@@ -150,10 +163,10 @@ open_dir_stream (struct ftw_data *data, struct dir_data *dirp)
       else
        {
          DIR *st = data->dirstreams[data->actdir]->stream;
-         struct dirent *d;
+         struct DIRENT *d;
          size_t actsize = 0;
 
-         while ((d = readdir (st)) != NULL)
+         while ((d = READDIR (st)) != NULL)
            {
              size_t this_len = _D_EXACT_NAMLEN (d);
              if (actsize + this_len + 2 >= bufsize)
@@ -225,7 +238,7 @@ static inline int
 process_entry (struct ftw_data *data, struct dir_data *dir, const char *name,
               size_t namlen)
 {
-  struct stat st;
+  struct STAT st;
   int result = 0;
   int flag;
 
@@ -250,13 +263,13 @@ process_entry (struct ftw_data *data, struct dir_data *dir, const char *name,
   data->dirbuf[data->ftw.base + namlen] = '\0';
 
   if (((data->flags & FTW_PHYS)
-       ? __lxstat (_STAT_VER, data->dirbuf, &st)
-       : __xstat (_STAT_VER, data->dirbuf, &st)) < 0)
+       ? LXSTAT (_STAT_VER, data->dirbuf, &st)
+       : XSTAT (_STAT_VER, data->dirbuf, &st)) < 0)
     {
       if (errno != EACCES && errno != ENOENT)
        result = -1;
       else if (!(data->flags & FTW_PHYS)
-              && __lxstat (_STAT_VER, data->dirbuf, &st) == 0
+              && LXSTAT (_STAT_VER, data->dirbuf, &st) == 0
               && S_ISLNK (st.st_mode))
        flag = FTW_SLN;
       else
@@ -324,10 +337,11 @@ process_entry (struct ftw_data *data, struct dir_data *dir, const char *name,
 
 
 static int
-ftw_dir (struct ftw_data *data, struct stat *st)
+internal_function
+ftw_dir (struct ftw_data *data, struct STAT *st)
 {
   struct dir_data dir;
-  struct dirent *d;
+  struct DIRENT *d;
   int previous_base = data->ftw.base;
   int result;
   char *startp;
@@ -386,7 +400,7 @@ ftw_dir (struct ftw_data *data, struct stat *st)
   *startp++ = '/';
   data->ftw.base = startp - data->dirbuf;
 
-  while (dir.stream != NULL && (d = readdir (dir.stream)) != NULL)
+  while (dir.stream != NULL && (d = READDIR (dir.stream)) != NULL)
     {
       result = process_entry (data, &dir, d->d_name, _D_EXACT_NAMLEN (d));
       if (result != 0)
@@ -445,11 +459,12 @@ ftw_dir (struct ftw_data *data, struct stat *st)
 
 
 static int
+internal_function
 ftw_startup (const char *dir, int is_nftw, void *func, int descriptors,
             int flags)
 {
   struct ftw_data data;
-  struct stat st;
+  struct STAT st;
   int result = 0;
   int save_err;
   char *cwd = NULL;
@@ -497,7 +512,7 @@ ftw_startup (const char *dir, int is_nftw, void *func, int descriptors,
      every case the callback using the format of the `nftw' version
      and get the correct result since the stack layout for a function
      call in C allows this.  */
-  data.func = (__nftw_func_t) func;
+  data.func = (NFTW_FUNC_T) func;
 
   /* Since we internally use the complete set of FTW_* values we need
      to reduce the value range before calling a `ftw' callback.  */
@@ -534,14 +549,14 @@ ftw_startup (const char *dir, int is_nftw, void *func, int descriptors,
   /* Get stat info for start directory.  */
   if (result == 0)
     if (((flags & FTW_PHYS)
-        ? __lxstat (_STAT_VER, data.dirbuf, &st)
-        : __xstat (_STAT_VER, data.dirbuf, &st)) < 0)
+        ? LXSTAT (_STAT_VER, data.dirbuf, &st)
+        : XSTAT (_STAT_VER, data.dirbuf, &st)) < 0)
       {
        if (errno == EACCES)
          result = (*data.func) (data.dirbuf, &st, FTW_NS, &data.ftw);
        else if (!(flags & FTW_PHYS)
                 && errno == ENOENT
-                && __lxstat (_STAT_VER, dir, &st) == 0
+                && LXSTAT (_STAT_VER, dir, &st) == 0
                 && S_ISLNK (st.st_mode))
          result = (*data.func) (data.dirbuf, &st, data.cvt_arr[FTW_SLN],
                                 &data.ftw);
@@ -597,18 +612,18 @@ ftw_startup (const char *dir, int is_nftw, void *func, int descriptors,
 /* Entry points.  */
 
 int
-ftw (path, func, descriptors)
+FTW_NAME (path, func, descriptors)
      const char *path;
-     __ftw_func_t func;
+     FTW_FUNC_T func;
      int descriptors;
 {
   return ftw_startup (path, 0, func, descriptors, 0);
 }
 
 int
-nftw (path, func, descriptors, flags)
+NFTW_NAME (path, func, descriptors, flags)
      const char *path;
-     __nftw_func_t func;
+     NFTW_FUNC_T func;
      int descriptors;
      int flags;
 {
index d377f2c947f5d799f3fdccfc6e165c731e0c517a..ac4abeeb18ca2726b70952bed4e15c6e008f7f32 100644 (file)
--- a/io/ftw.h
+++ b/io/ftw.h
@@ -88,21 +88,45 @@ struct FTW
 /* Convenient types for callback functions.  */
 typedef int (*__ftw_func_t) __P ((__const char *__filename,
                                  __const struct stat *__status, int __flag));
+typedef int (*__ftw64_func_t) __P ((__const char *__filename,
+                                   __const struct stat64 *__status,
+                                   int __flag));
 #ifdef __USE_XOPEN_EXTENDED
 typedef int (*__nftw_func_t) __P ((__const char *__filename,
                                   __const struct stat *__status, int __flag,
                                   struct FTW *__info));
+typedef int (*__nftw64_func_t) __P ((__const char *__filename,
+                                    __const struct stat64 *__status,
+                                    int __flag, struct FTW *__info));
 #endif
 
 /* Call a function on every element in a directory tree.  */
+#ifndef __USE_FILE_OFFSET64
 extern int ftw __P ((__const char *__dir, __ftw_func_t __func,
                     int __descriptors));
+#else
+extern int ftw __P ((__const char *__dir, __ftw64_func_t __func,
+                    int __descriptors)) __asm__ ("ftw64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern int ftw64 __P ((__const char *__dir, __ftw64_func_t __func,
+                      int __descriptors));
+#endif
 
 #ifdef __USE_XOPEN_EXTENDED
 /* Call a function on every element in a directory tree.  FLAG allows
    to specify the behaviour more detailed.  */
+# ifndef __USE_FILE_OFFSET64
 extern int nftw __P ((__const char *__dir, __nftw_func_t __func,
                      int __descriptors, int __flag));
+# else
+extern int nftw __P ((__const char *__dir, __nftw64_func_t __func,
+                     int __descriptors, int __flag)) __asm__ ("nftw64");
+# endif
+# ifdef __USE_LARGEFILE64
+extern int nftw64 __P ((__const char *__dir, __nftw64_func_t __func,
+                       int __descriptors, int __flag));
+# endif
 #endif
 
 __END_DECLS
diff --git a/io/ftw64.c b/io/ftw64.c
new file mode 100644 (file)
index 0000000..6dbd03e
--- /dev/null
@@ -0,0 +1,32 @@
+/* File tree walker functions.  LFS version.
+   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#define FTW_NAME ftw64
+#define NFTW_NAME nftw64
+#define INO_T ino64_t
+#define STAT stat64
+#define DIRENT dirent64
+#define READDIR readdir64
+#define LXSTAT __lxstat64
+#define XSTAT __xstat64
+#define FTW_FUNC_T __ftw64_func_t
+#define NFTW_FUNC_T __nftw64_func_t
+
+#include "ftw.c"
diff --git a/io/lstat64.c b/io/lstat64.c
new file mode 100644 (file)
index 0000000..ef2b156
--- /dev/null
@@ -0,0 +1,43 @@
+/* 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.
+
+   In addition to the permissions in the GNU Library General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file with other
+   programs, and to distribute those programs without any restriction
+   coming from the use of this file.  (The Library General Public
+   License restrictions do apply in other respects; for example, they
+   cover modification of the file, and distribution when not linked
+   into another program.)
+
+   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, 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sys/stat.h>
+
+/* This definition is only used if inlining fails for this function; see
+   the last page of <sys/stat.h>.  The real work is done by the `x'
+   function which is passed a version number argument.  We arrange in the
+   makefile that when not inlined this function is always statically
+   linked; that way a dynamically-linked executable always encodes the
+   version number corresponding to the data structures it uses, so the `x'
+   functions in the shared library can adapt without needing to recompile
+   all callers.  */
+
+int
+lstat64 (const char *file, struct stat64 *buf)
+{
+  return __lxstat64 (_STAT_VER, file, buf);
+}
diff --git a/io/stat64.c b/io/stat64.c
new file mode 100644 (file)
index 0000000..09eb38a
--- /dev/null
@@ -0,0 +1,43 @@
+/* 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.
+
+   In addition to the permissions in the GNU Library General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file with other
+   programs, and to distribute those programs without any restriction
+   coming from the use of this file.  (The Library General Public
+   License restrictions do apply in other respects; for example, they
+   cover modification of the file, and distribution when not linked
+   into another program.)
+
+   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, 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sys/stat.h>
+
+/* This definition is only used if inlining fails for this function; see
+   the last page of <sys/stat.h>.  The real work is done by the `x'
+   function which is passed a version number argument.  We arrange in the
+   makefile that when not inlined this function is always statically
+   linked; that way a dynamically-linked executable always encodes the
+   version number corresponding to the data structures it uses, so the `x'
+   functions in the shared library can adapt without needing to recompile
+   all callers.  */
+
+int
+stat64 (const char *file, struct stat64 *buf)
+{
+  return __xstat64 (_STAT_VER, file, buf);
+}
index 5485976ca64b38b21b1eecfc3f2f9354fd53ae1c..01bc00165ee97086c7bb6f776bc294df354bf526 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1995, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 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,42 +31,42 @@ __BEGIN_DECLS
 
 #include <bits/stat.h>
 
-#if defined(__USE_BSD) || defined(__USE_MISC)
-#define        S_IFMT          __S_IFMT
-#define        S_IFDIR         __S_IFDIR
-#define        S_IFCHR         __S_IFCHR
-#define        S_IFBLK         __S_IFBLK
-#define        S_IFREG         __S_IFREG
-#ifdef __S_IFLNK
-#define        S_IFLNK         __S_IFLNK
-#endif
-#ifdef __S_IFSOCK
-#define        S_IFSOCK        __S_IFSOCK
-#endif
-#ifdef __S_IFIFO
-#define        S_IFIFO         __S_IFIFO
-#endif
+#if defined __USE_BSD || defined __USE_MISC
+# define S_IFMT                __S_IFMT
+# define S_IFDIR       __S_IFDIR
+# define S_IFCHR       __S_IFCHR
+# define S_IFBLK       __S_IFBLK
+# define S_IFREG       __S_IFREG
+# ifdef __S_IFLNK
+#  define S_IFLNK      __S_IFLNK
+# endif
+# ifdef __S_IFSOCK
+#  define S_IFSOCK     __S_IFSOCK
+# endif
+# ifdef __S_IFIFO
+#  define S_IFIFO      __S_IFIFO
+# endif
 #endif
 
 /* Test macros for file types. */
 
 #define        __S_ISTYPE(mode, mask)  (((mode) & __S_IFMT) == (mask))
 
-#define        S_ISDIR(mode)   __S_ISTYPE((mode), __S_IFDIR)
-#define        S_ISCHR(mode)   __S_ISTYPE((mode), __S_IFCHR)
-#define        S_ISBLK(mode)   __S_ISTYPE((mode), __S_IFBLK)
-#define        S_ISREG(mode)   __S_ISTYPE((mode), __S_IFREG)
+#define        S_ISDIR(mode)    __S_ISTYPE((mode), __S_IFDIR)
+#define        S_ISCHR(mode)    __S_ISTYPE((mode), __S_IFCHR)
+#define        S_ISBLK(mode)    __S_ISTYPE((mode), __S_IFBLK)
+#define        S_ISREG(mode)    __S_ISTYPE((mode), __S_IFREG)
 #ifdef __S_IFIFO
-#define        S_ISFIFO(mode)  __S_ISTYPE((mode), __S_IFIFO)
+# define S_ISFIFO(mode)         __S_ISTYPE((mode), __S_IFIFO)
 #endif
 
 #ifdef __USE_BSD
-#ifdef __S_IFLNK
-#define        S_ISLNK(mode)   __S_ISTYPE((mode), __S_IFLNK)
-#endif
-#ifdef __S_IFSOCK
-#define        S_ISSOCK(mode)  __S_ISTYPE((mode), __S_IFSOCK)
-#endif
+# ifdef __S_IFLNK
+#  define S_ISLNK(mode)         __S_ISTYPE((mode), __S_IFLNK)
+# endif
+# ifdef __S_IFSOCK
+#  define S_ISSOCK(mode) __S_ISTYPE((mode), __S_IFSOCK)
+# endif
 #endif
 
 
@@ -75,9 +75,9 @@ __BEGIN_DECLS
 #define        S_ISUID __S_ISUID       /* Set user ID on execution.  */
 #define        S_ISGID __S_ISGID       /* Set group ID on execution.  */
 
-#if defined(__USE_BSD) || defined(__USE_MISC)
+#if defined __USE_BSD || defined __USE_MISC
 /* Save swapped text after use (sticky bit).  This is pretty well obsolete.  */
-#define        S_ISVTX __S_ISVTX
+# define S_ISVTX       __S_ISVTX
 #endif
 
 #define        S_IRUSR __S_IREAD       /* Read by owner.  */
@@ -86,10 +86,10 @@ __BEGIN_DECLS
 /* Read, write, and execute by owner.  */
 #define        S_IRWXU (__S_IREAD|__S_IWRITE|__S_IEXEC)
 
-#if    defined(__USE_MISC) && defined(__USE_BSD)
-#define        S_IREAD         S_IRUSR
-#define        S_IWRITE        S_IWUSR
-#define        S_IEXEC         S_IXUSR
+#if defined __USE_MISC && defined __USE_BSD
+# define S_IREAD               S_IRUSR
+# define S_IWRITE      S_IWUSR
+# define S_IEXEC               S_IXUSR
 #endif
 
 #define        S_IRGRP (S_IRUSR >> 3)  /* Read by group.  */
@@ -107,28 +107,51 @@ __BEGIN_DECLS
 
 #ifdef __USE_BSD
 /* Macros for common mode bit masks.  */
-#define        ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
-#define        ALLPERMS (S_ISUID|S_ISGID|S_ISTXT|S_IRWXU|S_IRWXG|S_IRWXO)/* 07777 */
-#define        DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666 */
+# define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
+# define ALLPERMS (S_ISUID|S_ISGID|S_ISTXT|S_IRWXU|S_IRWXG|S_IRWXO)/* 07777 */
+# define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/
 
-#define S_BLKSIZE      512     /* Block size for `st_blocks'.  */
+# define S_BLKSIZE     512     /* Block size for `st_blocks'.  */
 #endif
 
 
 /* Get file attributes for FILE and put them in BUF.  */
 extern int __stat __P ((__const char *__file, struct stat *__buf));
+#ifndef __USE_FILE_OFFSET64
 extern int stat __P ((__const char *__file, struct stat *__buf));
+#else
+extern int stat __P ((__const char *__file, struct stat *__buf))
+     __asm__ ("stat64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern int stat64 __P ((__const char *__file, struct stat64 *__buf));
+#endif
 
 /* Get file attributes for the file, device, pipe, or socket
    that file descriptor FD is open on and put them in BUF.  */
 extern int __fstat __P ((int __fd, struct stat *__buf));
+#ifndef __USE_FILE_OFFSET64
 extern int fstat __P ((int __fd, struct stat *__buf));
+#else
+extern int fstat __P ((int __fd, struct stat *__buf)) __asm__ ("fstat64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern int fstat64 __P ((int __fd, struct stat64 *__buf));
+#endif
 
 /* Get file attributes about FILE and put them in BUF.
    If FILE is a symbolic link, do not follow it.  */
 extern int __lstat __P ((__const char *__file, struct stat *__buf));
-#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
+#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+# ifndef __USE_FILE_OFFSET64
 extern int lstat __P ((__const char *__file, struct stat *__buf));
+# else
+extern int lstat __P ((__const char *__file, struct stat *__buf))
+     __asm__ ("lstat64");
+# endif
+# ifdef __USE_LARGEFILE64
+extern int lstat64 __P ((__const char *__file, struct stat64 *__buf));
+# endif
 #endif
 
 /* Set file access permissions for FILE to MODE.
@@ -139,7 +162,7 @@ extern int chmod __P ((__const char *__file, __mode_t __mode));
 
 /* Set file access permissions of the file FD is open on to MODE.  */
 extern int __fchmod __P ((int __fd, __mode_t __mode));
-#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
+#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
 extern int fchmod __P ((int __fd, __mode_t __mode));
 #endif
 
@@ -164,7 +187,7 @@ extern int mkdir __P ((__const char *__path, __mode_t __mode));
    device numbers with the `makedev' macro above).  */
 extern int __mknod __P ((__const char *__path,
                         __mode_t __mode, __dev_t __dev));
-#if defined(__USE_MISC) || defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
+#if defined __USE_MISC || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
 extern int mknod __P ((__const char *__path,
                       __mode_t __mode, __dev_t __dev));
 #endif
@@ -189,10 +212,10 @@ extern int mkfifo __P ((__const char *__path, __mode_t __mode));
    callers.  */
 
 #ifndef _STAT_VER
-#define _STAT_VER      0
+# define _STAT_VER     0
 #endif
 #ifndef _MKNOD_VER
-#define _MKNOD_VER     0
+# define _MKNOD_VER    0
 #endif
 
 /* Wrappers for stat and mknod system calls.  */
@@ -204,35 +227,98 @@ extern int __lxstat __P ((int __ver, __const char *__filename,
                          struct stat *__stat_buf));
 extern int __xmknod __P ((int __ver, __const char *__path,
                          __mode_t __mode, __dev_t *__dev));
+#if defined __USE_LARGEFILE64 || defined __USE_FILE_OFFSET64
+extern int __fxstat64 __P ((int __ver, int __fildes,
+                           struct stat64 *__stat_buf));
+extern int __xstat64 __P ((int __ver, __const char *__filename,
+                          struct stat64 *__stat_buf));
+extern int __lxstat64 __P ((int __ver, __const char *__filename,
+                           struct stat64 *__stat_buf));
+#endif
 
-#if defined (__GNUC__) && __GNUC__ >= 2
+#if defined __GNUC__ && __GNUC__ >= 2
 /* Inlined versions of the real stat and mknod functions.  */
 
 extern __inline__ int __stat (__const char *__path, struct stat *__statbuf)
-{ return __xstat (_STAT_VER, __path, __statbuf); }
+{
+# ifndef __USE_FILE_OFFSET64
+  return __xstat (_STAT_VER, __path, __statbuf);
+# else
+  return __xstat64 (_STAT_VER, __path, __statbuf);
+# endif
+}
 extern __inline__ int stat (__const char *__path, struct stat *__statbuf)
-{ return __xstat (_STAT_VER, __path, __statbuf); }
-
-extern __inline__ int __lstat(__const char *__path, struct stat *__statbuf)
-{ return __lxstat (_STAT_VER, __path, __statbuf); }
-#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
-extern __inline__ int lstat(__const char *__path, struct stat *__statbuf)
-{ return __lxstat (_STAT_VER, __path, __statbuf); }
-#endif
+{
+# ifndef __USE_FILE_OFFSET64
+  return __xstat (_STAT_VER, __path, __statbuf);
+# else
+  return __xstat64 (_STAT_VER, __path, __statbuf);
+# endif
+}
+
+extern __inline__ int __lstat (__const char *__path, struct stat *__statbuf)
+{
+# ifndef __USE_FILE_OFFSET64
+  return __lxstat (_STAT_VER, __path, __statbuf);
+# else
+  return __lxstat64 (_STAT_VER, __path, __statbuf);
+# endif
+}
+# if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+extern __inline__ int lstat (__const char *__path, struct stat *__statbuf)
+{
+#  ifndef __USE_FILE_OFFSET64
+  return __lxstat (_STAT_VER, __path, __statbuf);
+#  else
+  return __lxstat64 (_STAT_VER, __path, __statbuf);
+#  endif
+}
+# endif
 
 extern __inline__ int __fstat (int __fd, struct stat *__statbuf)
-{ return __fxstat (_STAT_VER, __fd, __statbuf); }
+{
+# ifndef __USE_FILE_OFFSET64
+  return __fxstat (_STAT_VER, __fd, __statbuf);
+# else
+  return __fxstat64 (_STAT_VER, __fd, __statbuf);
+# endif
+}
 extern __inline__ int fstat (int __fd, struct stat *__statbuf)
-{ return __fxstat (_STAT_VER, __fd, __statbuf); }
+{
+# ifndef __USE_FILE_OFFSET64
+  return __fxstat (_STAT_VER, __fd, __statbuf);
+# else
+  return __fxstat64 (_STAT_VER, __fd, __statbuf);
+# endif
+}
 
 extern __inline__ int __mknod (__const char *__path, __mode_t __mode,
                               __dev_t __dev)
 { return __xmknod (_MKNOD_VER, __path, __mode, &__dev); }
-#if    defined(__USE_MISC) || defined(__USE_BSD)
+# if defined __USE_MISC || defined __USE_BSD
 extern __inline__ int mknod (__const char *__path, __mode_t __mode,
                             __dev_t __dev)
 { return __xmknod (_MKNOD_VER, __path, __mode, &__dev); }
-#endif
+# endif
+
+# ifdef __USE_LARGEFILE64
+extern __inline__ int stat64 (__const char *__path, struct stat64 *__statbuf)
+{
+  return __xstat64 (_STAT_VER, __path, __statbuf);
+}
+
+#  if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
+extern __inline__ int lstat64 (__const char *__path, struct stat64 *__statbuf)
+{
+  return __lxstat64 (_STAT_VER, __path, __statbuf);
+}
+#  endif
+
+extern __inline__ int fstat64 (int __fd, struct stat64 *__statbuf)
+{
+  return __fxstat64 (_STAT_VER, __fd, __statbuf);
+}
+# endif
 
 #endif
 
index 49c154d2161cab0caddb6a018ef9803b8a17e040..fbec44182b5941ea6f7337ac82f452d28bc4f57f 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for getting information about a filesystem.
-   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
@@ -29,12 +29,28 @@ __BEGIN_DECLS
 
 /* Return information about the filesystem on which FILE resides.  */
 extern int __statfs __P ((__const char *__file, struct statfs *__buf));
+#ifndef __USE_FILE_OFFSET64
 extern int statfs __P ((__const char *__file, struct statfs *__buf));
+#else
+extern int statfs __P ((__const char *__file, struct statfs *__buf))
+     __asm__ ("statfs64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern int statfs64 __P ((__const char *__file, struct statfs64 *__buf));
+#endif
 
 /* Return information about the filesystem containing the file FILDES
    refers to.  */
 extern int __fstatfs __P ((int __fildes, struct statfs *__buf));
+#ifndef __USE_FILE_OFFSET64
 extern int fstatfs __P ((int __fildes, struct statfs *__buf));
+#else
+extern int fstatfs __P ((int __fildes, struct statfs *__buf))
+     __asm__ ("fstatfs64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern int fstatfs64 __P ((int __fildes, struct statfs64 *__buf));
+#endif
 
 __END_DECLS
 
index 0abd31d5a10e0b7868df39eedc83365678577464..20469efbe97cc4d6677c65fe17e821c44bdafa51 100644 (file)
--- a/libc.map
+++ b/libc.map
@@ -11,9 +11,12 @@ GLIBC_2.0 {
     _nl_current_LC_COLLATE; __collate_element_hash;
     __collate_element_strings; __collate_symbol_classes;
     __collate_symbol_hash; __collate_symbol_strings;
-    _obstack; _libio_using_thunks;
+    _obstack;
     __progname_full; __progname;
 
+    # This is for ix86 only.
+    _fp_hw;
+
     # helper functions
     __errno_location; __libc_init_first; __h_errno_location;
 
@@ -55,19 +58,19 @@ GLIBC_2.0 {
     _obstack_free; _obstack_memory_used; _obstack_newchunk;
     __assert_fail; __assert_perror_fail;
     _IO_getc; _IO_peekc_unlocked; _IO_putc; _IO_feof; _IO_ferror;
-    __xstat; __fxstat; __lxstat; __xmknod; __dcgettext;
-    __uflow; __underflow; __overflow; __iswctype; __sigpause;
-    __ctype_get_mb_cur_max;
+    __xstat; __fxstat; __lxstat; __xstat64; __fxstat64; __lxstat64; __xmknod;
+    __dcgettext; __uflow; __underflow; __overflow; __iswctype; __sigpause;
+    __ctype_get_mb_cur_max; __bzero;
 
     # functions used in other libraries
-    __printf_fp; __stpncpy; __stpcpy; __strdup;
+    __printf_fp; __stpncpy; __stpcpy; __strdup; __mempcpy;
     _nss_files_parse_grent; _nss_files_parse_pwent; _nss_files_parse_spent;
     __nss_database_lookup; __internal_endnetgrent; __internal_getnetgrent_r;
     __internal_setnetgrent; __gmtime_r; __secure_getenv;
     __select; __sched_get_priority_max; __sched_get_priority_min;
     __sched_getparam; __sched_getscheduler; __sched_setscheduler;
     __sched_yield; __on_exit; __gettimeofday; __fork; __clone;
-    __nss_configure_lookup; _dl_open; _dl_close; _IO_file_setbuf;
+    __nss_configure_lookup; _dl_open; _dl_close; _dl_addr; _IO_file_setbuf;
     _IO_file_init; _IO_file_attach; _IO_do_write; _IO_seekoff;
     _IO_link_in; _IO_file_open; _IO_file_doallocate; _IO_file_fopen;
     _IO_file_overflow; _IO_file_underflow; _IO_file_sync; _IO_file_seekoff;
@@ -149,8 +152,8 @@ GLIBC_2.0 {
     clntraw_create; clnttcp_create; clntudp_bufcreate; clntudp_create;
 
     clock; clone; close; closedir; closelog; confstr; connect; copysign;
-    copysignf; copysignl; creat; create_module; ctermid; ctime; ctime_r;
-    cuserid;
+    copysignf; copysignl; creat; creat64; create_module; ctermid; ctime;
+    ctime_r; cuserid;
 
     # d*
     daemon; dcgettext; delete_module; des_setparity; dgettext;
@@ -173,13 +176,14 @@ GLIBC_2.0 {
     fchdir; fchflags; fchmod; fchown; fclose; fcloseall; fcntl; fcvt;
     fcvt_r; fdatasync; fdopen; feof; feof_unlocked; ferror;
     ferror_unlocked; fexecve; fflush; fflush_unlocked; ffs; fgetc;
-    fgetgrent; fgetgrent_r; fgetpos; fgetpwent; fgetpwent_r; fgets;
+    fgetgrent; fgetgrent_r; fgetpos; fgetpos64; fgetpwent; fgetpwent_r; fgets;
     fgetspent; fgetspent_r; fileno; fileno_unlocked; finite; finitef;
-    finitel; flock; flockfile; fmtmsg; fnmatch; fopen; fopencookie; fork;
-    fpathconf; fprintf; fputc; fputc_unlocked; fputs; fread; free;
-    freeaddrinfo; freopen; frexp; frexpf; frexpl; fscanf; fseek; fseeko;
-    fsetpos; fstatfs; fsync; ftell; ftello; ftime; ftok; ftruncate;
-    ftrylockfile; fts_children; fts_close; fts_open; fts_read; fts_set; ftw;
+    finitel; flock; flockfile; fmtmsg; fnmatch; fopen; fopen64; fopencookie;
+    fork; fpathconf; fprintf; fputc; fputc_unlocked; fputs; fread; free;
+    freeaddrinfo; freopen; freopen64; frexp; frexpf; frexpl; fscanf; fseek;
+    fseeko; fseeko64; fsetpos; fsetpos64; fstatfs; fstatfs64; fsync; ftell;
+    ftello; ftello64; ftime; ftok; ftruncate; ftruncate64; ftrylockfile;
+    fts_children; fts_close; fts_open; fts_read; fts_set; ftw; ftw64;
     funlockfile; fwrite;
 
     # g*
@@ -203,7 +207,7 @@ GLIBC_2.0 {
     getprotobynumber_r; getprotoent; getprotoent_r; getpublickey; getpw;
     getpwent; getpwent_r; getpwnam; getpwnam_r; getpwuid; getpwuid_r;
     getresgid; getresuid;
-    getrlimit; getrpcbyname; getrpcbyname_r; getrpcbynumber;
+    getrlimit; getrlimit64; getrpcbyname; getrpcbyname_r; getrpcbynumber;
     getrpcbynumber_r; getrpcent; getrpcent_r; getrpcport; getrusage; gets;
     getsecretkey; getservbyname; getservbyname_r; getservbyport;
     getservbyport_r; getservent; getservent_r; getsid; getsockname;
@@ -244,8 +248,8 @@ GLIBC_2.0 {
     # l*
     l64a; labs; lchown; lckpwdf; lcong48; lcong48_r; ldexp; ldexpf;
     ldexpl; ldiv; lfind; link; listen; llabs; lldiv; llseek; localeconv;
-    localtime; localtime_r; lockf; longjmp; lrand48; lrand48_r; lsearch;
-    lseek;
+    localtime; localtime_r; lockf; lockf64; longjmp; lrand48; lrand48_r;
+    lsearch; lseek; lseek64;
 
     # m*
     madvise;
@@ -257,27 +261,27 @@ GLIBC_2.0 {
     mbtowc; mcheck; mcount;
 
     memalign; memccpy; memchr; memcmp; memcpy; memfrob; memmem;
-    memmove; memset;
+    memmove; mempcpy; memset;
 
     mkdir; mkfifo; mkstemp; mktemp; mktime; mlock;
-    mlockall; mmap; modf; modff; modfl; moncontrol; monstartup; mount;
+    mlockall; mmap; mmap64; modf; modff; modfl; moncontrol; monstartup; mount;
     mprobe; mprotect; mrand48; mrand48_r; mremap; msgctl; msgget; msgrcv;
     msgsnd; msync; mtrace; munlock; munlockall; munmap; muntrace;
 
     # n*
-    nanosleep; netname2host; netname2user; nftw; nfsservctl; nice; nl_langinfo;
-    nrand48; nrand48_r; ntohl; ntohs;
+    nanosleep; netname2host; netname2user; nftw; nftw64; nfsservctl; nice;
+    nl_langinfo; nrand48; nrand48_r; ntohl; ntohs;
 
     # o*
-    obstack_free; obstack_printf; obstack_vprintf; on_exit; open;
+    obstack_free; obstack_printf; obstack_vprintf; on_exit; open; open64;
     open_memstream; opendir; openlog;
 
     # p*
     parse_printf_format; passwd2des; pathconf; pause; pciconfig_read;
     pciconfig_write; pclose; perror;
     personality; pipe; pmap_getmaps; pmap_getport; pmap_rmtcall; pmap_set;
-    pmap_unset; poll; popen; pread; printf; printf_size; printf_size_info;
-    profil; profil_counter; pwrite; pselect; psignal;
+    pmap_unset; poll; popen; prctl; pread; printf; printf_size;
+    printf_size_info; profil; profil_counter; pwrite; pselect; psignal;
 
     pthread_attr_destroy;
     pthread_attr_getdetachstate; pthread_attr_getinheritsched;
@@ -307,10 +311,10 @@ GLIBC_2.0 {
     re_comp; re_compile_fastmap; re_compile_pattern; re_exec; re_match;
     re_match_2; re_search; re_search_2; re_set_registers; re_set_syntax;
 
-    read; readdir; readdir_r; readlink; readv; realloc; realpath; reboot;
-    recv; recvfrom; recvmsg; regcomp; regerror; regexec; regfree;
-    register_printf_function; registerrpc; remove; remque; rename;
-    res_init; revoke; rewind; rewinddir; rexec; rindex; rmdir; rpmatch;
+    read; readdir; readdir_r; readdir64; readdir64_r; readlink; readv;
+    realloc; realpath; reboot; recv; recvfrom; recvmsg; regcomp; regerror;
+    regexec; regfree; register_printf_function; registerrpc; remove; remque;
+    rename; res_init; revoke; rewind; rewinddir; rexec; rindex; rmdir; rpmatch;
     rresvport; rtime; ruserok; ruserpass;
 
     # s*
@@ -328,8 +332,8 @@ GLIBC_2.0 {
     sethostid; sethostname; setitimer; setjmp; setlinebuf; setlocale;
     setlogin; setlogmask; setmntent; setnetent; setnetgrent; setpgid;
     setpgrp; setpriority; setprotoent; setpwent; setregid; setresgid;
-    setresuid; setreuid;
-    setrlimit; setrpcent; setservent; setsid; setsockopt; setspent;
+    setresuid; setreuid; setrlimit; setrlimit64; setrpcent; setservent;
+    setsid; setsockopt; setspent;
     setstate; setstate_r; settimeofday; setttyent; setuid; setusershell;
     setutent; setutxent; setvbuf; sgetspent; sgetspent_r; shmat; shmctl;
     shmdt; shmget; shutdown;
@@ -341,8 +345,8 @@ GLIBC_2.0 {
     sigwait;
 
     sleep; snprintf; socket; socketpair; sprintf; srand; srand48;
-    srand48_r; srandom; srandom_r; sscanf; ssignal; sstk; statfs; step;
-    stime; stpcpy; stpncpy; strcasecmp; strcat; strchr; strcmp; strcoll;
+    srand48_r; srandom; srandom_r; sscanf; ssignal; sstk; statfs; statfs64;
+    step; stime; stpcpy; stpncpy; strcasecmp; strcat; strchr; strcmp; strcoll;
     strcpy; strcspn; strdup; strerror; strerror_r; strfmon; strfry;
     strftime; strlen; strncasecmp; strncat; strncmp; strncpy; strndup;
     strnlen; strpbrk; strptime; strrchr; strsep; strsignal; strspn;
@@ -362,11 +366,12 @@ GLIBC_2.0 {
     # t*
     tcdrain; tcflow; tcflush; tcgetattr; tcgetpgrp; tcsendbreak;
     tcsetattr; tcsetpgrp; tdelete; tdestroy; telldir; tempnam; textdomain;
-    tfind; time; timegm; timelocal; times; tmpfile; tmpnam; tmpnam_r;
+    tfind; time; timegm; timelocal; times; tmpfile; tmpfile64; tmpnam;
+    tmpnam_r;
 
     toascii; tolower; toupper; towctrans; towlower; towupper;
-    tr_break; truncate; tsearch; ttyname; ttyname_r; ttyslot; twalk;
-    tzset;
+    tr_break; truncate; truncate64; tsearch; ttyname; ttyname_r; ttyslot;
+    twalk; tzset;
 
     # u*
     ualarm; ulckpwdf; ulimit; umask; umount; uname; ungetc; unlink;
index aea60f522604b80c40cca2b4f91826a81964f8e8..4df874d722d763d71e2a337e9375e3858bd32692 100644 (file)
@@ -25,14 +25,16 @@ headers     := stdio.h libio.h _G_config.h
 
 routines       :=                                                            \
        filedoalloc iofclose iofdopen iofflush iofgetpos iofgets iofopen      \
-       iofopncook iofprintf iofputs iofread iofsetpos ioftell                \
+       iofopncook iofputs iofread iofsetpos ioftell                          \
        iofwrite iogetdelim iogetline iogets iopadn iopopen ioputs            \
        ioseekoff ioseekpos iosetbuffer iosetvbuf iosprintf ioungetc          \
        iovsprintf iovsscanf                                                  \
+       iofgetpos64 iofopen64 iofsetpos64                                     \
                                                                              \
        clearerr feof ferror fgetc fileno fputc freopen fseek getc getchar    \
        memstream pclose putc putchar rewind setbuf setlinebuf vasprintf      \
        iovdprintf vscanf vsnprintf obprintf fcloseall fseeko ftello          \
+       freopen64 fseeko64 ftello64                                           \
                                                                              \
        libc_fatal
 
index f1b781e8a0fabfe3338ef7ba8a768d908c947eab..6abab602d167bdd1d83fa2938c45cff2128143ec 100644 (file)
@@ -73,7 +73,7 @@ _IO_file_doallocate (fp)
   _IO_size_t size;
   int couldbetty;
   char *p;
-  struct stat st;
+  struct _G_stat64 st;
 
 #ifndef _LIBC
   /* If _IO_cleanup_registration_needed is non-zero, we should call the
index 22feb74fdd8d00fb816ccb6dbc8bb6bd4c5c858d..ccfce3c77605fa41f0c73e1aac703eb89092b727 100644 (file)
@@ -161,10 +161,11 @@ _IO_file_finish (fp, dummy)
 }
 
 _IO_FILE *
-_IO_file_fopen (fp, filename, mode)
+_IO_file_fopen (fp, filename, mode, is32not64)
      _IO_FILE *fp;
      const char *filename;
      const char *mode;
+     int is32not64;
 {
   int oflags = 0, omode;
   int read_write, fdesc;
@@ -196,13 +197,19 @@ _IO_file_fopen (fp, filename, mode)
       omode = O_RDWR;
       read_write &= _IO_IS_APPENDING;
     }
+#ifdef _G_OPEN64
+  fdesc = (is32not64
+          ? open (filename, omode|oflags, oprot)
+          : _G_OPEN64 (filename, omode|oflags, oprot));
+#else
   fdesc = open (filename, omode|oflags, oprot);
+#endif
   if (fdesc < 0)
     return NULL;
   fp->_fileno = fdesc;
   _IO_mask_flags (fp, read_write,_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
   if (read_write & _IO_IS_APPENDING)
-    if (_IO_SEEKOFF (fp, (_IO_off_t)0, _IO_seek_end, _IOS_INPUT|_IOS_OUTPUT)
+    if (_IO_SEEKOFF (fp, (_IO_off64_t)0, _IO_seek_end, _IOS_INPUT|_IOS_OUTPUT)
        == _IO_pos_BAD && errno != ESPIPE)
       return NULL;
   _IO_link_in (fp);
@@ -222,7 +229,7 @@ _IO_file_attach (fp, fd)
   /* Get the current position of the file. */
   /* We have to do that since that may be junk. */
   fp->_offset = _IO_pos_BAD;
-  if (_IO_SEEKOFF (fp, (_IO_off_t)0, _IO_seek_cur, _IOS_INPUT|_IOS_OUTPUT)
+  if (_IO_SEEKOFF (fp, (_IO_off64_t)0, _IO_seek_cur, _IOS_INPUT|_IOS_OUTPUT)
       == _IO_pos_BAD && errno != ESPIPE)
     return NULL;
   return fp;
@@ -265,7 +272,7 @@ _IO_do_write (fp, data, to_do)
     fp->_offset = _IO_pos_BAD;
   else if (fp->_IO_read_end != fp->_IO_write_base)
     {
-      _IO_pos_t new_pos
+      _IO_fpos64_t new_pos
        = _IO_SYSSEEK (fp, fp->_IO_write_base - fp->_IO_read_end, 1);
       if (new_pos == _IO_pos_BAD)
        return EOF;
@@ -406,8 +413,8 @@ _IO_file_sync (fp)
       if (_IO_in_backup (fp))
        delta -= eGptr () - Gbase ();
 #endif
-      _IO_off_t new_pos = _IO_SYSSEEK (fp, delta, 1);
-      if (new_pos != (_IO_off_t) EOF)
+      _IO_off64_t new_pos = _IO_SYSSEEK (fp, delta, 1);
+      if (new_pos != (_IO_off64_t) EOF)
        fp->_IO_read_end = fp->_IO_read_ptr;
 #ifdef ESPIPE
       else if (errno == ESPIPE)
@@ -424,15 +431,15 @@ _IO_file_sync (fp)
   return retval;
 }
 
-_IO_pos_t
+_IO_fpos64_t
 _IO_file_seekoff (fp, offset, dir, mode)
      _IO_FILE *fp;
-     _IO_off_t offset;
+     _IO_off64_t offset;
      int dir;
      int mode;
 {
-  _IO_pos_t result;
-  _IO_off_t delta, new_offset;
+  _IO_fpos64_t result;
+  _IO_off64_t delta, new_offset;
   long count;
   /* POSIX.1 8.2.3.7 says that after a call the fflush() the file
      offset of the underlying file must be exact.  */
@@ -477,7 +484,7 @@ _IO_file_seekoff (fp, offset, dir, mode)
       break;
     case _IO_seek_end:
       {
-       struct stat st;
+       struct _G_stat64 st;
        if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
          {
            offset += st.st_size;
@@ -494,8 +501,8 @@ _IO_file_seekoff (fp, offset, dir, mode)
       && !_IO_in_backup (fp))
     {
       /* Offset relative to start of main get area. */
-      _IO_pos_t rel_offset = (offset - fp->_offset
-                             + (fp->_IO_read_end - fp->_IO_read_base));
+      _IO_fpos64_t rel_offset = (offset - fp->_offset
+                                + (fp->_IO_read_end - fp->_IO_read_base));
       if (rel_offset >= 0)
        {
 #if 0
@@ -592,13 +599,17 @@ _IO_file_read (fp, buf, size)
   return read (fp->_fileno, buf, size);
 }
 
-_IO_pos_t
+_IO_fpos64_t
 _IO_file_seek (fp, offset, dir)
      _IO_FILE *fp;
-     _IO_off_t offset;
+     _IO_off64_t offset;
      int dir;
 {
+#ifdef _G_LSEEK64
+  return _G_LSEEK64 (fp->_fileno, offset, dir);
+#else
   return lseek (fp->_fileno, offset, dir);
+#endif
 }
 
 int
@@ -606,7 +617,11 @@ _IO_file_stat (fp, st)
      _IO_FILE *fp;
      void *st;
 {
-  return fstat (fp->_fileno, (struct stat *) st);
+#ifdef _G_STAT64
+  return _G_FSTAT64 (fp->_fileno, (struct _G_stat64 *) st);
+#else
+  return fstat (fp->_fileno, (struct _G_stat64 *) st);
+#endif
 }
 
 int
@@ -812,5 +827,7 @@ struct _IO_jump_t _IO_file_jumps =
   JUMP_INIT(write, _IO_file_write),
   JUMP_INIT(seek, _IO_file_seek),
   JUMP_INIT(close, _IO_file_close),
-  JUMP_INIT(stat, _IO_file_stat)
+  JUMP_INIT(stat, _IO_file_stat),
+  JUMP_INIT(showmanyc, _IO_default_showmanyc),
+  JUMP_INIT(imbue, _IO_default_imbue)
 };
diff --git a/libio/freopen64.c b/libio/freopen64.c
new file mode 100644 (file)
index 0000000..78e994d
--- /dev/null
@@ -0,0 +1,49 @@
+/* Copyright (C) 1993, 1995, 1996, 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 terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   This 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
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library; see the file COPYING.  If not, write to
+   the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+   MA 02111-1307, USA.
+
+   As a special exception, if you link this library with files
+   compiled with a GNU compiler to produce an executable, this does
+   not cause the resulting executable to be covered by the GNU General
+   Public License.  This exception does not however invalidate any
+   other reasons why the executable file might be covered by the GNU
+   General Public License.  */
+
+#include "libioP.h"
+#include "stdio.h"
+
+FILE *
+freopen64 (filename, mode, fp)
+     const char* filename;
+     const char* mode;
+     FILE *fp;
+{
+#ifdef _G_OPEN64
+  FILE *result;
+  CHECK_FILE (fp, NULL);
+  if (!(fp->_flags & _IO_IS_FILEBUF))
+    return NULL;
+  _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
+  _IO_flockfile (fp);
+  result = _IO_freopen64 (filename, mode, fp);
+  _IO_cleanup_region_end (1);
+  return result;
+#else
+  __set_errno (ENOSYS);
+  return NULL;
+#endif
+}
diff --git a/libio/fseeko64.c b/libio/fseeko64.c
new file mode 100644 (file)
index 0000000..81c17b3
--- /dev/null
@@ -0,0 +1,48 @@
+/* Copyright (C) 1993, 1995, 1996, 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 terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   This 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
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library; see the file COPYING.  If not, write to
+   the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+   MA 02111-1307, USA.
+
+   As a special exception, if you link this library with files
+   compiled with a GNU compiler to produce an executable, this does
+   not cause the resulting executable to be covered by the GNU General
+   Public License.  This exception does not however invalidate any
+   other reasons why the executable file might be covered by the GNU
+   General Public License.  */
+
+#include <errno.h>
+#include "libioP.h"
+#include "stdio.h"
+
+int
+fseeko64 (fp, offset, whence)
+     _IO_FILE* fp;
+     __off64_t offset;
+     int whence;
+{
+#ifdef _G_LSEEK64
+  int result;
+  CHECK_FILE (fp, -1);
+  _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
+  _IO_flockfile (fp);
+  result = _IO_fseek (fp, offset, whence);
+  _IO_cleanup_region_end (1);
+  return result;
+#else
+  __set_errno (ENOSYS);
+  return -1;
+#endif
+}
diff --git a/libio/ftello64.c b/libio/ftello64.c
new file mode 100644 (file)
index 0000000..886591d
--- /dev/null
@@ -0,0 +1,55 @@
+/* Copyright (C) 1993, 1995, 1996, 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 terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   This 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
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library; see the file COPYING.  If not, write to
+   the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+   MA 02111-1307, USA.
+
+   As a special exception, if you link this library with files
+   compiled with a GNU compiler to produce an executable, this does
+   not cause the resulting executable to be covered by the GNU General
+   Public License.  This exception does not however invalidate any
+   other reasons why the executable file might be covered by the GNU
+   General Public License.  */
+
+#include <stdio.h>
+#include <libioP.h>
+#include <errno.h>
+
+
+off64_t
+ftello64 (fp)
+     _IO_FILE *fp;
+{
+#ifdef _G_LSEEK64
+  _IO_pos_t pos;
+  CHECK_FILE (fp, -1L);
+  _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
+  _IO_flockfile (fp);
+  pos = _IO_seekoff (fp, 0, _IO_seek_cur, 0);
+  _IO_cleanup_region_end (1);
+  if (pos == _IO_pos_BAD)
+    {
+#ifdef EIO
+      if (errno == 0)
+       __set_errno (EIO);
+#endif
+      return -1L;
+    }
+  return _IO_pos_as_off (pos);
+#else
+  __set_errno (ENOSYS);
+  return -1;
+#endif
+}
index de9c826b9fed66822a835556f261bc4378879066..71275da28c2511d3e2b04613b737418e22907354 100644 (file)
@@ -180,9 +180,16 @@ __overflow (f, ch)
   return _IO_OVERFLOW (f, ch);
 }
 
-static int save_for_backup __P ((_IO_FILE *fp));
+static int save_for_backup __P ((_IO_FILE *fp))
+#ifdef _LIBC
+     internal_function
+#endif
+     ;
 
      static int
+#ifdef _LIBC
+     internal_function
+#endif
 save_for_backup (fp)
      _IO_FILE *fp;
 {
@@ -467,10 +474,10 @@ _IO_default_setbuf (fp, p, len)
     return fp;
 }
 
-_IO_pos_t
+_IO_fpos64_t
 _IO_default_seekpos (fp, pos, mode)
      _IO_FILE *fp;
-     _IO_pos_t pos;
+     _IO_fpos64_t pos;
      int mode;
 {
   return _IO_SEEKOFF (fp, _IO_pos_as_off (pos), 0, mode);
@@ -551,10 +558,10 @@ _IO_default_finish (fp, dummy)
   _IO_un_link (fp);
 }
 
-_IO_pos_t
+_IO_fpos64_t
 _IO_default_seekoff (fp, offset, dir, mode)
      _IO_FILE *fp;
-     _IO_off_t offset;
+     _IO_off64_t offset;
      int dir;
      int mode;
 {
@@ -882,10 +889,10 @@ _IO_default_pbackfail (fp, c)
   return (unsigned char) *fp->_IO_read_ptr;
 }
 
-_IO_pos_t
+_IO_fpos64_t
 _IO_default_seek (fp, offset, dir)
      _IO_FILE *fp;
-     _IO_off_t offset;
+     _IO_off64_t offset;
      int dir;
 {
   return _IO_pos_BAD;
@@ -917,6 +924,20 @@ _IO_default_write (fp, data, n)
   return 0;
 }
 
+int
+_IO_default_showmanyc (fp)
+     _IO_FILE *fp;
+{
+  return -1;
+}
+
+void
+_IO_default_imbue (fp, locale)
+     _IO_FILE *fp;
+     void *locale;
+{
+}
+
 
 #ifdef TODO
 #if defined(linux)
index 08a3c20e8670892f9059c3ad9d00faca490c07c2..6afc32313683bc0e7dc705d70e5fdd59c49d22a3 100644 (file)
@@ -28,7 +28,7 @@
 
 int
 _IO_fgetpos (fp, posp)
-     _IO_FILEfp;
+     _IO_FILE *fp;
      _IO_fpos_t *posp;
 {
   _IO_fpos_t pos;
diff --git a/libio/iofgetpos64.c b/libio/iofgetpos64.c
new file mode 100644 (file)
index 0000000..0cb79d6
--- /dev/null
@@ -0,0 +1,61 @@
+/* Copyright (C) 1993, 1995, 1996, 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 terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   This 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
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library; see the file COPYING.  If not, write to
+   the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+   MA 02111-1307, USA.
+
+   As a special exception, if you link this library with files
+   compiled with a GNU compiler to produce an executable, this does
+   not cause the resulting executable to be covered by the GNU General
+   Public License.  This exception does not however invalidate any
+   other reasons why the executable file might be covered by the GNU
+   General Public License.  */
+
+#include "libioP.h"
+#include <errno.h>
+
+int
+_IO_fgetpos64 (fp, posp)
+     _IO_FILE *fp;
+     _IO_fpos64_t *posp;
+{
+#ifdef _G_LSEEK64
+  _IO_fpos64_t pos;
+  CHECK_FILE (fp, EOF);
+  _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
+  _IO_flockfile (fp);
+  pos = _IO_seekoff (fp, 0, _IO_seek_cur, 0);
+  _IO_cleanup_region_end (1);
+  if (pos == _IO_pos_BAD)
+    {
+      /* ANSI explicitly requires setting errno to a positive value on
+        failure.  */
+#ifdef EIO
+      if (errno == 0)
+       __set_errno (EIO);
+#endif
+      return EOF;
+    }
+  *posp = pos;
+  return 0;
+#else
+  __set_errno (ENOSYS);
+  return EOF;
+#endif
+}
+
+#ifdef weak_alias
+weak_alias (_IO_fgetpos64, fgetpos64)
+#endif
index 1dbeccb81a8fcf5c9f9c278dc691b1e7b4dac8e1..5019e9a798923e4062fc5b7388d91cb10bae5f48 100644 (file)
@@ -52,7 +52,7 @@ _IO_fopen (filename, mode)
 #if  !_IO_UNIFIED_JUMPTABLES
   new_f->fp.vtable = NULL;
 #endif
-  if (_IO_file_fopen (&new_f->fp.file, filename, mode) != NULL)
+  if (_IO_file_fopen (&new_f->fp.file, filename, mode, 0) != NULL)
         return (_IO_FILE *) &new_f->fp;
   _IO_un_link (&new_f->fp.file);
   free (new_f);
diff --git a/libio/iofopen64.c b/libio/iofopen64.c
new file mode 100644 (file)
index 0000000..cdd508d
--- /dev/null
@@ -0,0 +1,69 @@
+/* Copyright (C) 1993, 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 terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   This 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
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library; see the file COPYING.  If not, write to
+   the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+   MA 02111-1307, USA.
+
+   As a special exception, if you link this library with files
+   compiled with a GNU compiler to produce an executable, this does
+   not cause the resulting executable to be covered by the GNU General
+   Public License.  This exception does not however invalidate any
+   other reasons why the executable file might be covered by the GNU
+   General Public License.  */
+
+#include "libioP.h"
+#ifdef __STDC__
+#include <stdlib.h>
+#endif
+
+_IO_FILE *
+_IO_fopen64 (filename, mode)
+     const char *filename;
+     const char *mode;
+{
+#ifdef _G_OPEN64
+  struct locked_FILE
+  {
+    struct _IO_FILE_plus fp;
+#ifdef _IO_MTSAFE_IO
+    _IO_lock_t lock;
+#endif
+  } *new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
+
+  if (new_f == NULL)
+    return NULL;
+#ifdef _IO_MTSAFE_IO
+  new_f->fp.file._lock = &new_f->lock;
+#endif
+  _IO_init (&new_f->fp.file, 0);
+  _IO_JUMPS (&new_f->fp.file) = &_IO_file_jumps;
+  _IO_file_init (&new_f->fp.file);
+#if  !_IO_UNIFIED_JUMPTABLES
+  new_f->fp.vtable = NULL;
+#endif
+  if (_IO_file_fopen (&new_f->fp.file, filename, mode, 1) != NULL)
+        return (_IO_FILE *) &new_f->fp;
+  _IO_un_link (&new_f->fp.file);
+  free (new_f);
+  return NULL;
+#else
+  __set_errno (ENOSYS);
+  return NULL;
+#endif
+}
+
+#ifdef weak_alias
+weak_alias (_IO_fopen64, fopen64)
+#endif
index 9bf29e71aec848d67716417274ce098d9546bc47..4f28ec20a8a2f72a5b1b8204bff78b3a62ca066b 100644 (file)
@@ -33,8 +33,8 @@ static _IO_ssize_t _IO_cookie_read __P ((register _IO_FILE* fp, void* buf,
                                         _IO_ssize_t size));
 static _IO_ssize_t _IO_cookie_write __P ((register _IO_FILE* fp,
                                          const void* buf, _IO_ssize_t size));
-static _IO_fpos_t _IO_cookie_seek __P ((_IO_FILE *fp, _IO_off_t offset,
-                                       int dir));
+static _IO_fpos64_t _IO_cookie_seek __P ((_IO_FILE *fp, _IO_off64_t offset,
+                                         int dir));
 static int _IO_cookie_close __P ((_IO_FILE* fp));
 
 
@@ -66,14 +66,14 @@ _IO_cookie_write (fp, buf, size)
   return cfile->io_functions.write (cfile->cookie, buf, size);
 }
 
-static _IO_fpos_t
+static _IO_fpos64_t
 _IO_cookie_seek (fp, offset, dir)
      _IO_FILE *fp;
-     _IO_off_t offset;
+     _IO_off64_t offset;
      int dir;
 {
   struct _IO_cookie_file *cfile = (struct _IO_cookie_file *) fp;
-  _IO_fpos_t pos;
+  _IO_fpos64_t pos;
 
   if (cfile->io_functions.seek == NULL)
     return _IO_pos_BAD;
@@ -118,7 +118,9 @@ static struct _IO_jump_t _IO_cookie_jumps = {
   JUMP_INIT(write, _IO_cookie_write),
   JUMP_INIT(seek, _IO_cookie_seek),
   JUMP_INIT(close, _IO_cookie_close),
-  JUMP_INIT(stat, _IO_default_stat)
+  JUMP_INIT(stat, _IO_default_stat),
+  JUMP_INIT(showmanyc, _IO_default_showmanyc),
+  JUMP_INIT(imbue, _IO_default_imbue),
 };
 
 
diff --git a/libio/iofsetpos64.c b/libio/iofsetpos64.c
new file mode 100644 (file)
index 0000000..534e0cf
--- /dev/null
@@ -0,0 +1,61 @@
+/* Copyright (C) 1993, 1995, 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 terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   This 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
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library; see the file COPYING.  If not, write to
+   the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+   MA 02111-1307, USA.
+
+   As a special exception, if you link this library with files
+   compiled with a GNU compiler to produce an executable, this does
+   not cause the resulting executable to be covered by the GNU General
+   Public License.  This exception does not however invalidate any
+   other reasons why the executable file might be covered by the GNU
+   General Public License.  */
+
+#include <libioP.h>
+#include <errno.h>
+
+int
+_IO_fsetpos64 (fp, posp)
+     _IO_FILE *fp;
+     const _IO_fpos64_t *posp;
+{
+#ifdef _G_LSEEK64
+  int result;
+  CHECK_FILE (fp, EOF);
+  _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
+  _IO_flockfile (fp);
+  if (_IO_seekpos (fp, *posp, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD)
+    {
+      /* ANSI explicitly requires setting errno to a positive value on
+        failure.  */
+#ifdef EIO
+      if (errno == 0)
+       __set_errno (EIO);
+#endif
+      result = EOF;
+    }
+  else
+    result = 0;
+  _IO_cleanup_region_end (1);
+  return result;
+#else
+  __set_errno (ENOSYS);
+  return EOF;
+#endif
+}
+
+#ifdef weak_alias
+weak_alias (_IO_fsetpos64, fsetpos64)
+#endif
index 92df6a6fd2aad73651296ef1c7b3c0e37be53ba6..bcf8bbd775f4d0ff7e68ae6d15ee3d2c04a53dc5 100644 (file)
@@ -11,11 +11,14 @@ extern int _IO_fclose __P((_IO_FILE*));
 extern _IO_FILE *_IO_fdopen __P((int, const char*));
 extern int _IO_fflush __P((_IO_FILE*));
 extern int _IO_fgetpos __P((_IO_FILE*, _IO_fpos_t*));
+extern int _IO_fgetpos64 __P((_IO_FILE*, _IO_fpos64_t*));
 extern char* _IO_fgets __P((char*, int, _IO_FILE*));
 extern _IO_FILE *_IO_fopen __P((const char*, const char*));
+extern _IO_FILE *_IO_fopen64 __P((const char*, const char*));
 extern int _IO_fprintf __P((_IO_FILE*, const char*, ...));
 extern int _IO_fputs __P((const char*, _IO_FILE*));
 extern int _IO_fsetpos __P((_IO_FILE*, const _IO_fpos_t *));
+extern int _IO_fsetpos64 __P((_IO_FILE*, const _IO_fpos64_t *));
 extern long int _IO_ftell __P((_IO_FILE*));
 extern _IO_size_t _IO_fread __P((void*, _IO_size_t, _IO_size_t, _IO_FILE*));
 extern _IO_size_t _IO_fwrite __P((const void*,
@@ -46,7 +49,9 @@ extern int _IO_obstack_printf __P ((struct obstack *, const char *, ...));
 #define _IO_rewind(FILE) (void)_IO_seekoff(FILE, 0, 0, _IOS_INPUT|_IOS_OUTPUT)
 #define _IO_vprintf(FORMAT, ARGS) _IO_vfprintf(_IO_stdout, FORMAT, ARGS)
 #define _IO_freopen(FILENAME, MODE, FP) \
-  (_IO_file_close_it(FP), _IO_file_fopen(FP, FILENAME, MODE))
+  (_IO_file_close_it(FP), _IO_file_fopen(FP, FILENAME, MODE, 0))
+#define _IO_freopen64(FILENAME, MODE, FP) \
+  (_IO_file_close_it(FP), _IO_file_fopen(FP, FILENAME, MODE, 1))
 #define _IO_fileno(FP) ((FP)->_fileno)
 extern _IO_FILE* _IO_popen __P((const char*, const char*));
 #define _IO_pclose _IO_fclose
index 59d4fc3f0ed2f3603712cbc2c0ac7dfd44c8805f..f0589bf184a886e944b0e35e99a5d7731929f81d 100644 (file)
@@ -247,5 +247,7 @@ struct _IO_jump_t _IO_proc_jumps = {
   JUMP_INIT(write, _IO_file_write),
   JUMP_INIT(seek, _IO_file_seek),
   JUMP_INIT(close, _IO_proc_close),
-  JUMP_INIT(stat, _IO_file_stat)
+  JUMP_INIT(stat, _IO_file_stat),
+  JUMP_INIT(showmanyc, _IO_default_showmanyc),
+  JUMP_INIT(imbue, _IO_default_imbue)
 };
index b1c4729b3d1df3532f33c1617f26022a1b09b64f..13086ee9127638d8ce52c993171b5f027fadd312 100644 (file)
 
 #include <libioP.h>
 
-_IO_pos_t
+_IO_fpos64_t
 _IO_seekoff (fp, offset, dir, mode)
      _IO_FILE *fp;
-     _IO_off_t offset;
+     _IO_off64_t offset;
      int dir;
      int mode;
 {
-  _IO_pos_t retval;
+  _IO_fpos64_t retval;
 
   /* If we have a backup buffer, get rid of it, since the __seekoff
      callback may not know to do the right thing about it.
index 2ce0c2224ec77f0468892715d093f31036418e14..5b59ed7d995fdf9d580cdb1d1b4e65f785a2741f 100644 (file)
 
 #include <libioP.h>
 
-_IO_pos_t
+_IO_fpos64_t
 _IO_seekpos (fp, pos, mode)
      _IO_FILE *fp;
-     _IO_pos_t pos;
+     _IO_fpos64_t pos;
      int mode;
 {
-  _IO_pos_t retval;
+  _IO_fpos64_t retval;
 
   /* If we have a backup buffer, get rid of it, since the __seekoff
      callback may not know to do the right thing about it.
index 1dddaf27b70f02d25fc1b7a43e960e4cc79cac6f..ad5583f4865a7c858d2a9a506b9ed1c2bdff81b8 100644 (file)
 #include <_G_config.h>
 #define _IO_pos_t _G_fpos_t /* obsolete */
 #define _IO_fpos_t _G_fpos_t
+#define _IO_fpos64_t _G_fpos64_t
 #define _IO_size_t _G_size_t
 #define _IO_ssize_t _G_ssize_t
 #define _IO_off_t _G_off_t
+#define _IO_off64_t _G_off64_t
 #define _IO_pid_t _G_pid_t
 #define _IO_uid_t _G_uid_t
 #define _IO_HAVE_SYS_WAIT _G_HAVE_SYS_WAIT
@@ -205,7 +207,7 @@ struct _IO_FILE {
 
   int _fileno;
   int _blksize;
-  _IO_off_t _offset;
+  _IO_off_t _unused2;  /* This used to be _offset but it's too small.  */
 
 #define __HAVE_COLUMN /* temporary */
   /* 1+column number of pbase(); 0 is unknown. */
@@ -216,6 +218,8 @@ struct _IO_FILE {
   /*  char* _save_gptr;  char* _save_egptr; */
 
   _IO_lock_t *_lock;
+
+  _IO_off64_t _offset;
 };
 
 #ifndef __cplusplus
@@ -303,8 +307,8 @@ extern int _IO_vfprintf __P ((_IO_FILE *, const char *, _IO_va_list));
 extern _IO_ssize_t _IO_padn __P ((_IO_FILE *, int, _IO_ssize_t));
 extern _IO_size_t _IO_sgetn __P ((_IO_FILE *, void *, _IO_size_t));
 
-extern _IO_fpos_t _IO_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
-extern _IO_fpos_t _IO_seekpos __P ((_IO_FILE *, _IO_fpos_t, int));
+extern _IO_fpos64_t _IO_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
+extern _IO_fpos64_t _IO_seekpos __P ((_IO_FILE *, _IO_fpos64_t, int));
 
 extern void _IO_free_backup_area __P ((_IO_FILE *));
 
index 2337071d396ba5886e4ba2f47eb74b9fa1f3afc0..5fe9598c0d09cb2678028efeddd145e237c545d3 100644 (file)
@@ -134,16 +134,16 @@ typedef _IO_size_t (*_IO_xsgetn_t) __P ((_IO_FILE *FP, void *DATA,
    (MODE==1), or the end of the file (MODE==2).
    It matches the streambuf::seekoff virtual function.
    It is also used for the ANSI fseek function. */
-typedef _IO_fpos_t (*_IO_seekoff_t) __P ((_IO_FILE *FP, _IO_off_t OFF,
+typedef _IO_fpos64_t (*_IO_seekoff_t) __P ((_IO_FILE *FP, _IO_off64_t OFF,
                                          int DIR, int MODE));
 #define _IO_SEEKOFF(FP, OFF, DIR, MODE) JUMP3 (__seekoff, FP, OFF, DIR, MODE)
 
 /* The 'seekpos' hook also moves the stream position,
-   but to an absolute position given by a fpos_t (seekpos).
+   but to an absolute position given by a fpos64_t (seekpos).
    It matches the streambuf::seekpos virtual function.
    It is also used for the ANSI fgetpos and fsetpos functions.  */
 /* The _IO_seek_cur and _IO_seek_end options are not allowed. */
-typedef _IO_fpos_t (*_IO_seekpos_t) __P ((_IO_FILE *, _IO_fpos_t, int));
+typedef _IO_fpos64_t (*_IO_seekpos_t) __P ((_IO_FILE *, _IO_fpos64_t, int));
 #define _IO_SEEKPOS(FP, POS, FLAGS) JUMP2 (__seekpos, FP, POS, FLAGS)
 
 /* The 'setbuf' hook gives a buffer to the file.
@@ -192,7 +192,7 @@ typedef _IO_ssize_t (*_IO_write_t) __P ((_IO_FILE *,const void *,_IO_ssize_t));
    It generalizes the Unix lseek(2) function.
    It matches the streambuf::sys_seek virtual function, which is
    specific to this implementation. */
-typedef _IO_fpos_t (*_IO_seek_t) __P ((_IO_FILE *, _IO_off_t, int));
+typedef _IO_fpos64_t (*_IO_seek_t) __P ((_IO_FILE *, _IO_off64_t, int));
 #define _IO_SYSSEEK(FP, OFFSET, MODE) JUMP2 (__seek, FP, OFFSET, MODE)
 
 /* The 'sysclose' hook is used to finalize (close, finish up) an
@@ -209,6 +209,17 @@ typedef int (*_IO_close_t) __P ((_IO_FILE *)); /* finalize */
 typedef int (*_IO_stat_t) __P ((_IO_FILE *, void *));
 #define _IO_SYSSTAT(FP, BUF) JUMP1 (__stat, FP, BUF)
 
+/* The 'showmany' hook can be used to get an image how much input is
+   available.  In many cases the answer will be 0 which means unknown
+   but some cases one can provide real information.  */
+typedef int (*_IO_showmanyc_t) __P ((_IO_FILE *));
+#define _IO_SHOWMANYC(FP) JUMP0 (__showmanyc, FP)
+
+/* The 'imbue' hook is used to get information about the currently
+   installed locales.  */
+typedef void (*_IO_imbue_t) __P ((_IO_FILE *, void *));
+#define _IO_IMBUE(FP, LOCALE) JUMP1 (__imbue, FP, LOCALE)
+
 
 #define _IO_CHAR_TYPE char /* unsigned char ? */
 #define _IO_INT_TYPE int
@@ -237,6 +248,8 @@ struct _IO_jump_t
     JUMP_FIELD(_IO_seek_t, __seek);
     JUMP_FIELD(_IO_close_t, __close);
     JUMP_FIELD(_IO_stat_t, __stat);
+    JUMP_FIELD(_IO_showmanyc_t, __showmanyc);
+    JUMP_FIELD(_IO_imbue_t, __imbue);
 #if 0
     get_column;
     set_column;
@@ -256,8 +269,8 @@ struct _IO_FILE_plus
 
 /* Generic functions */
 
-extern _IO_fpos_t _IO_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
-extern _IO_fpos_t _IO_seekpos __P ((_IO_FILE *, _IO_fpos_t, int));
+extern _IO_fpos64_t _IO_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
+extern _IO_fpos64_t _IO_seekpos __P ((_IO_FILE *, _IO_fpos64_t, int));
 
 extern void _IO_switch_to_main_get_area __P ((_IO_FILE *));
 extern void _IO_switch_to_backup_area __P ((_IO_FILE *));
@@ -293,15 +306,19 @@ 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));
 extern _IO_size_t _IO_default_xsgetn __P ((_IO_FILE *, void *, _IO_size_t));
-extern _IO_fpos_t _IO_default_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
-extern _IO_fpos_t _IO_default_seekpos __P ((_IO_FILE *, _IO_fpos_t, int));
+extern _IO_fpos64_t _IO_default_seekoff __P ((_IO_FILE *,
+                                             _IO_off64_t, int, int));
+extern _IO_fpos64_t _IO_default_seekpos __P ((_IO_FILE *,
+                                             _IO_fpos64_t, int));
 extern _IO_ssize_t _IO_default_write __P ((_IO_FILE *, const void *,
                                           _IO_ssize_t));
 extern _IO_ssize_t _IO_default_read __P ((_IO_FILE *, void *, _IO_ssize_t));
 extern int _IO_default_stat __P ((_IO_FILE *, void *));
-extern _IO_fpos_t _IO_default_seek __P ((_IO_FILE *, _IO_off_t, int));
+extern _IO_fpos64_t _IO_default_seek __P ((_IO_FILE *, _IO_off64_t, int));
 extern int _IO_default_sync __P ((_IO_FILE *));
 #define _IO_default_close ((_IO_close_t) _IO_default_sync)
+extern int _IO_default_showmanyc __P ((_IO_FILE *));
+extern void _IO_default_imbue __P ((_IO_FILE *, void *));
 
 extern struct _IO_jump_t _IO_file_jumps;
 extern struct _IO_jump_t _IO_streambuf_jumps;
@@ -331,7 +348,7 @@ extern void _IO_flush_all_linebuffered __P ((void));
 
 extern int _IO_file_doallocate __P ((_IO_FILE *));
 extern _IO_FILE* _IO_file_setbuf __P ((_IO_FILE *, char *, _IO_ssize_t));
-extern _IO_fpos_t _IO_file_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
+extern _IO_fpos64_t _IO_file_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
 extern _IO_size_t _IO_file_xsputn __P ((_IO_FILE *, const void *, _IO_size_t));
 extern int _IO_file_stat __P ((_IO_FILE *, void *));
 extern int _IO_file_close __P ((_IO_FILE *));
@@ -340,13 +357,14 @@ extern int _IO_file_overflow __P ((_IO_FILE *, int));
 #define _IO_file_is_open(__fp) ((__fp)->_fileno >= 0)
 extern void _IO_file_init __P ((_IO_FILE *));
 extern _IO_FILE* _IO_file_attach __P ((_IO_FILE *, int));
-extern _IO_FILE* _IO_file_fopen __P ((_IO_FILE *, const char *, const char *));
+extern _IO_FILE* _IO_file_fopen __P ((_IO_FILE *, const char *, const char *,
+                                     int));
 extern _IO_ssize_t _IO_file_write __P ((_IO_FILE *, const void *,
                                        _IO_ssize_t));
 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 _IO_fpos64_t _IO_file_seek __P ((_IO_FILE *, _IO_off64_t, int));
 extern void _IO_file_finish __P ((_IO_FILE *, int));
 
 /* Jumptable functions for proc_files. */
@@ -357,7 +375,7 @@ extern int _IO_proc_close __P ((_IO_FILE *));
 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 _IO_fpos64_t _IO_str_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
 extern void _IO_str_finish __P ((_IO_FILE *, int));
 
 /* Other strfile functions */
@@ -424,6 +442,7 @@ extern void (*_IO_cleanup_registration_needed) __P ((void));
 /* When using this code in the GNU libc we must not pollute the name space.  */
 #  define mmap __mmap
 #  define munmap __munmap
+#  define ftruncate __ftruncate
 # endif
 
 # define ROUND_TO_PAGE(_S) \
@@ -459,31 +478,31 @@ extern void (*_IO_cleanup_registration_needed) __P ((void));
 struct stat;
 extern _IO_ssize_t _IO_read __P ((int, void *, _IO_size_t));
 extern _IO_ssize_t _IO_write __P ((int, const void *, _IO_size_t));
-extern _IO_off_t _IO_lseek __P ((int, _IO_off_t, int));
+extern _IO_off64_t _IO_lseek __P ((int, _IO_off64_t, int));
 extern int _IO_close __P ((int));
 extern int _IO_fstat __P ((int, struct stat *));
 extern int _IO_vscanf __P ((const char *, _IO_va_list));
 
-/* Operations on _IO_fpos_t.
+/* Operations on _IO_fpos64_t.
    Normally, these are trivial, but we provide hooks for configurations
-   where an _IO_fpos_t is a struct.
-   Note that _IO_off_t must be an integral type. */
+   where an _IO_fpos64_t is a struct.
+   Note that _IO_off64_t must be an integral type. */
 
-/* _IO_pos_BAD is an _IO_fpos_t value indicating error, unknown, or EOF. */
+/* _IO_pos_BAD is an _IO_fpos64_t value indicating error, unknown, or EOF. */
 #ifndef _IO_pos_BAD
-# define _IO_pos_BAD ((_IO_fpos_t) -1)
+# define _IO_pos_BAD ((_IO_fpos64_t) -1)
 #endif
-/* _IO_pos_as_off converts an _IO_fpos_t value to an _IO_off_t value. */
+/* _IO_pos_as_off converts an _IO_fpos64_t value to an _IO_off64_t value. */
 #ifndef _IO_pos_as_off
-# define _IO_pos_as_off(__pos) ((_IO_off_t) (__pos))
+# define _IO_pos_as_off(__pos) ((_IO_off64_t) (__pos))
 #endif
-/* _IO_pos_adjust adjust an _IO_fpos_t by some number of bytes. */
+/* _IO_pos_adjust adjust an _IO_fpos64_t by some number of bytes. */
 #ifndef _IO_pos_adjust
 # define _IO_pos_adjust(__pos, __delta) ((__pos) += (__delta))
 #endif
-/* _IO_pos_0 is an _IO_fpos_t value indicating beginning of file. */
+/* _IO_pos_0 is an _IO_fpos64_t value indicating beginning of file. */
 #ifndef _IO_pos_0
-# define _IO_pos_0 ((_IO_fpos_t) 0)
+# define _IO_pos_0 ((_IO_fpos64_t) 0)
 #endif
 
 #ifdef __cplusplus
index 7b9ccd3d373221a340f2cd255f0a33e2ed014f2e..71aab2f6eabd20d437e08dc9dd3934f82b3f233c 100644 (file)
@@ -53,7 +53,9 @@ static const struct _IO_jump_t _IO_mem_jumps =
   JUMP_INIT (write, _IO_default_write),
   JUMP_INIT (seek, _IO_default_seek),
   JUMP_INIT (close, _IO_default_close),
-  JUMP_INIT (stat, _IO_default_stat)
+  JUMP_INIT (stat, _IO_default_stat),
+  JUMP_INIT(showmanyc, _IO_default_showmanyc),
+  JUMP_INIT(imbue, _IO_default_imbue)
 };
 
 /* Open a stream that writes into a malloc'd buffer that is expanded as
index 6b959e455a8d89df3f71d37a64f544611081bd3c..a0c4df62934985360585c8f5e0fd3ad1c307da59 100644 (file)
@@ -109,7 +109,9 @@ static struct _IO_jump_t _IO_obstack_jumps =
   JUMP_INIT(write, NULL),
   JUMP_INIT(seek, NULL),
   JUMP_INIT(close, NULL),
-  JUMP_INIT(stat, NULL)
+  JUMP_INIT(stat, NULL),
+  JUMP_INIT(showmanyc, NULL),
+  JUMP_INIT(imbue, NULL)
 };
 
 
index bbed294056223a367c15c422bd42a5af760d2922..a835fed6cc8d94aec175e598fa14787de46792d4 100644 (file)
 #ifndef _STDIO_H
 
 #if !defined __need_FILE
-#define _STDIO_H       1
-#include <features.h>
+# define _STDIO_H      1
+# include <features.h>
 
 __BEGIN_DECLS
 
-#define __need_size_t
-#define        __need_NULL
-#include <stddef.h>
+# define __need_size_t
+# define __need_NULL
+# include <stddef.h>
 
-#include <bits/types.h>
+# include <bits/types.h>
 #endif /* Don't need FILE.  */
 #undef __need_FILE
 
@@ -42,7 +42,7 @@ __BEGIN_DECLS
 /* The opaque type of streams.  */
 typedef struct _IO_FILE FILE;
 
-#define        __FILE_defined  1
+# define __FILE_defined        1
 #endif /* FILE not defined.  */
 
 
@@ -58,8 +58,14 @@ typedef struct _IO_FILE FILE;
 #endif
 
 /* The type of the second argument to `fgetpos' and `fsetpos'.  */
+#ifndef __USE_FILE_OFFSET64
 typedef _G_fpos_t fpos_t;
-
+#else
+typedef _G_fpos64_t fpos_t;
+#endif
+#ifdef __USE_LARGEFILE64
+typedef _G_fpos64_t fpos64_t;
+#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,
@@ -67,7 +73,8 @@ extern char *__stdio_gen_tempname __P ((char *__buf, size_t __bufsize,
                                        __const char *__pfx,
                                        int __dir_search,
                                        size_t *__lenptr,
-                                       FILE **__streamptr));
+                                       FILE **__streamptr,
+                                       int __large_file));
 
 
 /* Print out MESSAGE on the error output and abort.  */
@@ -83,14 +90,14 @@ extern void __libc_fatal __P ((__const char *__message))
 
 /* Default buffer size.  */
 #ifndef BUFSIZ
-#define BUFSIZ _IO_BUFSIZ
+# define BUFSIZ _IO_BUFSIZ
 #endif
 
 
 /* End of file character.
    Some things throughout the library rely on this being -1.  */
 #ifndef EOF
-#define EOF (-1)
+# define EOF (-1)
 #endif
 
 
@@ -103,7 +110,7 @@ extern void __libc_fatal __P ((__const char *__message))
 
 #ifdef __USE_SVID
 /* Default path prefix for `tempnam' and `tmpnam'.  */
-#define P_tmpdir      "/tmp"
+# define P_tmpdir      "/tmp"
 #endif
 
 
@@ -134,7 +141,14 @@ extern int rename __P ((__const char *__old, __const char *__new));
 
 
 /* Create a temporary file and open it read/write.  */
+#ifndef __USE_FILE_OFFSET64
 extern FILE *tmpfile __P ((void));
+#else
+extern FILE *tmpfile __P ((void)) __asm__ ("tmpfile64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern FILE *tmpfile64 __P ((void));
+#endif
 /* Generate a temporary filename.  */
 extern char *tmpnam __P ((char *__s));
 
@@ -176,11 +190,30 @@ extern int fcloseall __P ((void));
 
 
 /* Open a file and create a new stream for it.  */
+#ifndef __USE_FILE_OFFSET64
 extern FILE *fopen __P ((__const char *__filename, __const char *__modes));
+#else
+extern FILE *fopen __P ((__const char *__filename, __const char *__modes))
+     __asm__ ("fopen64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern FILE *fopen64 __P ((__const char *__filename, __const char *__modes));
+#endif
 /* Open a file, replacing an existing stream with it. */
+#ifndef __USE_FILE_OFFSET64
 extern FILE *freopen __P ((__const char *__restrict __filename,
                           __const char *__restrict __modes,
                           FILE *__restrict __stream));
+#else
+extern FILE *freopen __P ((__const char *__restrict __filename,
+                          __const char *__restrict __modes,
+                          FILE *__restrict __stream)) __asm__ ("freopen64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern FILE *freopen64 __P ((__const char *__restrict __filename,
+                            __const char *__restrict __modes,
+                            FILE *__restrict __stream));
+#endif
 
 #ifdef __USE_POSIX
 /* Create a new stream that refers to an existing system file descriptor.  */
@@ -242,7 +275,7 @@ extern int vsprintf __P ((char *__restrict __s,
 
 #ifdef __OPTIMIZE__
 __STDIO_INLINE int
-vprintf (const char *__restrict __fmt, _G_va_list __arg)
+vprintf (__const char *__restrict __fmt, _G_va_list __arg)
 {
   return vfprintf (stdout, __fmt, __arg);
 }
@@ -349,7 +382,7 @@ getchar (void)
 extern int getc_unlocked __P ((FILE *__stream));
 extern int getchar_unlocked __P ((void));
 
-#ifdef __OPTIMIZE__
+# ifdef __OPTIMIZE__
 __STDIO_INLINE int
 getc_unlocked (FILE *__fp)
 {
@@ -361,7 +394,7 @@ getchar_unlocked (void)
 {
   return _IO_getc_unlocked (stdin);
 }
-#endif /* Optimizing.  */
+# endif /* Optimizing.  */
 #endif /* Use POSIX or MISC.  */
 
 
@@ -388,13 +421,13 @@ putchar (int __c)
 /* Faster version when locking is not necessary.  */
 extern int fputc_unlocked __P ((int __c, FILE *__stream));
 
-#ifdef __OPTIMIZE__
+# ifdef __OPTIMIZE__
 __STDIO_INLINE int
 fputc_unlocked (int __c, FILE *__stream)
 {
   return _IO_putc_unlocked (__c, __stream);
 }
-#endif /* Optimizing.  */
+# endif /* Optimizing.  */
 #endif /* Use MISC.  */
 
 #if defined __USE_POSIX || defined __USE_MISC
@@ -402,7 +435,7 @@ fputc_unlocked (int __c, FILE *__stream)
 extern int putc_unlocked __P ((int __c, FILE *__stream));
 extern int putchar_unlocked __P ((int __c));
 
-#ifdef __OPTIMIZE__
+# ifdef __OPTIMIZE__
 __STDIO_INLINE int
 putc_unlocked (int __c, FILE *__stream)
 {
@@ -414,7 +447,7 @@ putchar_unlocked (int __c)
 {
   return _IO_putc_unlocked (__c, stdout);
 }
-#endif /* Optimizing.  */
+# endif /* Optimizing.  */
 #endif /* Use POSIX or MISc.  */
 
 
@@ -451,13 +484,13 @@ _IO_ssize_t getdelim __P ((char **__lineptr, size_t *__n,
 _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__
+# ifdef        __OPTIMIZE__
 __STDIO_INLINE _IO_ssize_t
 getline (char **__lineptr, size_t *__n, FILE *__stream)
 {
   return __getdelim (__lineptr, __n, '\n', __stream);
 }
-#endif /* Optimizing.  */
+# endif /* Optimizing.  */
 #endif
 
 
@@ -496,22 +529,72 @@ extern long int ftell __P ((FILE *__stream));
 /* Rewind to the beginning of STREAM.  */
 extern void rewind __P ((FILE *__stream));
 
-#ifdef __USE_UNIX98
+#if (defined __USE_LARGEFILE || defined __USE_LARGEFILE64 \
+     || defined __USE_FILE_OFFSET64)
 /* The Single Unix Specification, Version 2, specifies an alternative,
    more adequate interface for the two functions above which deal with
-   file offset.  `long int' is not the right type.  */
+   file offset.  `long int' is not the right type.  These definitions
+   are originally defined in the Large File Support API.  */
+
+/* Types needed in these functions.  */
+# ifndef off_t
+#  ifndef __USE_FILE_OFFSET64
+typedef __off_t off_t;
+#  else
+typedef __off64_t off_t;
+#  endif
+#  define off_t off_t
+# endif
+
+# if defined __USE_LARGEFILE64 && !defined off64_t
+typedef __off64_t off64_t;
+#  define off64_t off64_t
+# endif
 
 /* Seek to a certain position on STREAM.  */
+# ifndef __USE_FILE_OFFSET64
 extern int fseeko __P ((FILE *__stream, __off_t __off, int __whence));
+# else
+extern int fseeko __P ((FILE *__stream, __off_t __off, int __whence))
+     __asm__ ("fseeko64");
+# endif
+# ifdef __USE_LARGEFILE64
+extern int fseeko64 __P ((FILE *__stream, __off64_t __off, int __whence));
+# endif
+
 /* Return the current position of STREAM.  */
+# ifndef __USE_FILE_OFFSET64
 extern __off_t ftello __P ((FILE *__stream));
+# else
+extern __off_t ftello __P ((FILE *__stream)) __asm__ ("ftello");
+# endif
+# ifdef __USE_LARGEFILE64
+extern __off64_t ftello64 __P ((FILE *__stream));
+# endif
 #endif
 
 /* Get STREAM's position.  */
+#ifndef __USE_FILE_OFFSET64
 extern int fgetpos __P ((FILE *__restrict __stream,
                         fpos_t *__restrict __pos));
+#else
+extern int fgetpos __P ((FILE *__restrict __stream,
+                        fpos_t *__restrict __pos)) __asm__ ("fgetpos64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern int fgetpos64 __P ((FILE *__restrict __stream,
+                          fpos64_t *__restrict __pos));
+#endif
 /* Set STREAM's position.  */
+#ifndef __USE_FILE_OFFSET64
 extern int fsetpos __P ((FILE *__stream, __const fpos_t *__pos));
+#else
+extern int fsetpos __P ((FILE *__stream, __const fpos_t *__pos))
+     __asm__ ("fsetpos64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern int fsetpos64 __P ((FILE *__stream, __const fpos64_t *__pos));
+#endif
 
 
 /* Clear the error and EOF indicators for STREAM.  */
@@ -527,7 +610,7 @@ extern void clearerr_unlocked __P ((FILE *__stream));
 extern int feof_unlocked __P ((FILE *__stream));
 extern int ferror_unlocked __P ((FILE *__stream));
 
-#ifdef __OPTIMIZE__
+# ifdef __OPTIMIZE__
 __STDIO_INLINE int
 feof_unlocked (FILE *__stream)
 {
@@ -539,7 +622,7 @@ ferror_unlocked (FILE *__stream)
 {
   return _IO_ferror_unlocked (__stream);
 }
-#endif /* Optimizing.  */
+# endif /* Optimizing.  */
 #endif
 
 
index a9f812e04511cf9d23962cea0b6b9c292afb57da..c596315b609f9fa6fc6077d8cac0711a6bb07c3c 100644 (file)
@@ -205,15 +205,15 @@ _IO_str_count (fp)
          - fp->_IO_read_base);
 }
 
-_IO_pos_t
+_IO_fpos64_t
 _IO_str_seekoff (fp, offset, dir, mode)
      _IO_FILE *fp;
-     _IO_off_t offset;
+     _IO_off64_t offset;
      int dir;
      int mode;
 {
   _IO_ssize_t cur_size = _IO_str_count (fp);
-  _IO_pos_t new_pos = EOF;
+  _IO_fpos64_t new_pos = EOF;
 
   /* Move the get pointer, if requested. */
   if (mode & _IOS_INPUT)
@@ -299,5 +299,7 @@ struct _IO_jump_t _IO_str_jumps =
   JUMP_INIT(write, _IO_default_write),
   JUMP_INIT(seek, _IO_default_seek),
   JUMP_INIT(close, _IO_default_close),
-  JUMP_INIT(stat, _IO_default_stat)
+  JUMP_INIT(stat, _IO_default_stat),
+  JUMP_INIT(showmanyc, _IO_default_showmanyc),
+  JUMP_INIT(imbue, _IO_default_imbue)
 };
index 3f35af299ab7cbd0fa94becb8195b03a32d78626..5ac2317579a17dd5fe15120ba2c9b9eb0e494683 100644 (file)
@@ -94,7 +94,9 @@ static struct _IO_jump_t _IO_strn_jumps =
   JUMP_INIT(write, _IO_default_write),
   JUMP_INIT(seek, _IO_default_seek),
   JUMP_INIT(close, _IO_default_close),
-  JUMP_INIT(stat, _IO_default_stat)
+  JUMP_INIT(stat, _IO_default_stat),
+  JUMP_INIT(showmanyc, _IO_default_showmanyc),
+  JUMP_INIT(imbue, _IO_default_imbue)
 };
 
 
index 7749f6aebc15df14b6e3bc03e19a7c8547eaff58..6385df47e838720793124af791ee476c6f4f9985 100644 (file)
@@ -612,7 +612,7 @@ from-value of `collating-element' must be a string"));
                  now = lr_token (ldfile, charset);
                }
              while (now->tok == tok_comma
-                    && (now == lr_token (ldfile, charset) != tok_none));
+                    && ((now = lr_token (ldfile, charset)) != tok_none));
 
              /* Check for consistency: forward and backwards are
                 mutually exclusive.  */
index bad756aa640e7fa94a4420b2f2cdb23363c30111..8a7fe14d9206565e74d163efa7993d9e4035291f 100644 (file)
@@ -70,7 +70,7 @@ lib: $(objpfx)libmcheck.a
 #CPPFLAGS-malloc.o += -DMALLOC_DEBUG
 
 $(objpfx)mtrace: mtrace.pl
-       rm -fr %@.new
+       rm -f $@.new
        sed -e 's|@PERL@|$(PERL)|' -e 's|@XXX@|$(address-width)|' \
            -e 's|@VERSION@|$(version)|' $^ > $@.new \
        && rm -fr $@ && mv $@.new $@ && chmod +x $@
index 17350eb4261c4928a6fed95e1b8a3466095f5566..06fbf844f4dd32e0b3b0c0b08a89cffe9f5bde56 100644 (file)
 
 #if __STD_C
 # include <stddef.h>   /* for size_t */
-# if defined(_LIBC) || defined(MALLOC_HOOKS)
+# if defined _LIBC || defined MALLOC_HOOKS
 #  include <stdlib.h>  /* for getenv(), abort() */
 # endif
 #else
@@ -1168,17 +1168,19 @@ typedef struct _heap_info {
 
 #if __STD_C
 
-static void      chunk_free(arena *ar_ptr, mchunkptr p);
-static mchunkptr chunk_alloc(arena *ar_ptr, INTERNAL_SIZE_T size);
+static void      chunk_free(arena *ar_ptr, mchunkptr p) internal_function;
+static mchunkptr chunk_alloc(arena *ar_ptr, INTERNAL_SIZE_T size)
+     internal_function;
 static mchunkptr chunk_realloc(arena *ar_ptr, mchunkptr oldp,
-                               INTERNAL_SIZE_T oldsize, INTERNAL_SIZE_T nb);
+                               INTERNAL_SIZE_T oldsize, INTERNAL_SIZE_T nb)
+     internal_function;
 static mchunkptr chunk_align(arena *ar_ptr, INTERNAL_SIZE_T nb,
-                             size_t alignment);
-static int       main_trim(size_t pad);
+                             size_t alignment) internal_function;
+static int       main_trim(size_t pad) internal_function;
 #ifndef NO_THREADS
-static int       heap_trim(heap_info *heap, size_t pad);
+static int       heap_trim(heap_info *heap, size_t pad) internal_function;
 #endif
-#ifdef _LIBC
+#if defined _LIBC || defined MALLOC_HOOKS
 static Void_t*   malloc_check(size_t sz, const Void_t *caller);
 static void      free_check(Void_t* mem, const Void_t *caller);
 static Void_t*   realloc_check(Void_t* oldmem, size_t bytes,
@@ -1189,17 +1191,6 @@ static Void_t*   malloc_starter(size_t sz, const Void_t *caller);
 static void      free_starter(Void_t* mem, const Void_t *caller);
 static Void_t*   malloc_atfork(size_t sz, const Void_t *caller);
 static void      free_atfork(Void_t* mem, const Void_t *caller);
-#else
-#ifdef MALLOC_HOOKS
-static Void_t*   malloc_check(size_t sz);
-static void      free_check(Void_t* mem);
-static Void_t*   realloc_check(Void_t* oldmem, size_t bytes);
-static Void_t*   memalign_check(size_t alignment, size_t bytes);
-static Void_t*   malloc_starter(size_t sz);
-static void      free_starter(Void_t* mem);
-static Void_t*   malloc_atfork(size_t sz);
-static void      free_atfork(Void_t* mem);
-#endif
 #endif
 
 #else
@@ -1212,7 +1203,7 @@ static int       main_trim();
 #ifndef NO_THREADS
 static int       heap_trim();
 #endif
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
 static Void_t*   malloc_check();
 static void      free_check();
 static Void_t*   realloc_check();
@@ -1225,6 +1216,13 @@ static void      free_atfork();
 
 #endif
 
+/* On some platforms we can compile internal, not exported functions better.
+   Let the environment provide a macro and define it to be empty if it
+   is not available.  */
+#ifndef internal_function
+# define internal_function
+#endif
+
 \f
 
 /* sizes, alignments */
@@ -1387,13 +1385,13 @@ static void      free_atfork();
   Indexing into bins
 */
 
-#define bin_index(sz)                                                          \
-(((((unsigned long)(sz)) >> 9) ==    0) ?       (((unsigned long)(sz)) >>  3): \
- ((((unsigned long)(sz)) >> 9) <=    4) ?  56 + (((unsigned long)(sz)) >>  6): \
- ((((unsigned long)(sz)) >> 9) <=   20) ?  91 + (((unsigned long)(sz)) >>  9): \
- ((((unsigned long)(sz)) >> 9) <=   84) ? 110 + (((unsigned long)(sz)) >> 12): \
- ((((unsigned long)(sz)) >> 9) <=  340) ? 119 + (((unsigned long)(sz)) >> 15): \
- ((((unsigned long)(sz)) >> 9) <= 1364) ? 124 + (((unsigned long)(sz)) >> 18): \
+#define bin_index(sz)                                                         \
+(((((unsigned long)(sz)) >> 9) ==    0) ?       (((unsigned long)(sz)) >>  3):\
+ ((((unsigned long)(sz)) >> 9) <=    4) ?  56 + (((unsigned long)(sz)) >>  6):\
+ ((((unsigned long)(sz)) >> 9) <=   20) ?  91 + (((unsigned long)(sz)) >>  9):\
+ ((((unsigned long)(sz)) >> 9) <=   84) ? 110 + (((unsigned long)(sz)) >> 12):\
+ ((((unsigned long)(sz)) >> 9) <=  340) ? 119 + (((unsigned long)(sz)) >> 15):\
+ ((((unsigned long)(sz)) >> 9) <= 1364) ? 124 + (((unsigned long)(sz)) >> 18):\
                                           126)
 /*
   bins for chunks < 512 are all spaced 8 bytes apart, and hold
@@ -1533,18 +1531,12 @@ int __malloc_initialized = 0;
    temporarily, because the `atfork' handler mechanism may use
    malloc/free internally (e.g. in LinuxThreads). */
 
-#ifdef _LIBC
+#if defined _LIBC || defined MALLOC_HOOKS
 static __malloc_ptr_t (*save_malloc_hook) __MALLOC_P ((size_t __size,
                                                       const __malloc_ptr_t));
 static void           (*save_free_hook) __MALLOC_P ((__malloc_ptr_t __ptr,
                                                     const __malloc_ptr_t));
 static Void_t*        save_arena;
-#else
-#ifdef MALLOC_HOOKS
-static __malloc_ptr_t (*save_malloc_hook) __MALLOC_P ((size_t __size));
-static void           (*save_free_hook) __MALLOC_P ((__malloc_ptr_t __ptr));
-static Void_t*        save_arena;
-#endif
 #endif
 
 static void
@@ -1558,7 +1550,7 @@ ptmalloc_lock_all __MALLOC_P((void))
     ar_ptr = ar_ptr->next;
     if(ar_ptr == &main_arena) break;
   }
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
   save_malloc_hook = __malloc_hook;
   save_free_hook = __free_hook;
   __malloc_hook = malloc_atfork;
@@ -1574,7 +1566,7 @@ ptmalloc_unlock_all __MALLOC_P((void))
 {
   arena *ar_ptr;
 
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
   tsd_setspecific(arena_key, save_arena);
   __malloc_hook = save_malloc_hook;
   __free_hook = save_free_hook;
@@ -1600,13 +1592,13 @@ void
 ptmalloc_init __MALLOC_P((void))
 #endif
 {
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
   const char* s;
 #endif
 
   if(__malloc_initialized) return;
   __malloc_initialized = 1;
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
   /* With some threads implementations, creating thread-specific data
      or initializing a mutex may call malloc() itself.  Provide a
      simple starter version (realloc() won't work). */
@@ -1615,7 +1607,7 @@ ptmalloc_init __MALLOC_P((void))
   __malloc_hook = malloc_starter;
   __free_hook = free_starter;
 #endif
-#if defined(_LIBC) && !defined (NO_THREADS)
+#if defined _LIBC && !defined NO_THREADS
   /* Initialize the pthreads interface. */
   if (__pthread_initialize != NULL)
     __pthread_initialize();
@@ -1627,7 +1619,7 @@ ptmalloc_init __MALLOC_P((void))
   tsd_setspecific(arena_key, (Void_t *)&main_arena);
   thread_atfork(ptmalloc_lock_all, ptmalloc_unlock_all, ptmalloc_unlock_all);
 #endif
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
   if((s = getenv("MALLOC_TRIM_THRESHOLD_")))
     mALLOPt(M_TRIM_THRESHOLD, atoi(s));
   if((s = getenv("MALLOC_TOP_PAD_")))
@@ -1654,7 +1646,7 @@ thread_atfork_static(ptmalloc_lock_all, ptmalloc_unlock_all, \
                      ptmalloc_unlock_all)
 #endif
 
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
 
 /* Hooks for debugging versions.  The initial hooks just call the
    initialization routine, then do the normal work. */
@@ -1678,14 +1670,11 @@ malloc_hook_ini(sz) size_t sz;
 }
 
 static Void_t*
-#ifdef _LIBC
-realloc_hook_ini(Void_t* ptr, size_t sz, const __malloc_ptr_t caller)
-#else
 #if __STD_C
-realloc_hook_ini(Void_t* ptr, size_t sz)
+realloc_hook_ini(Void_t* ptr, size_t sz, const __malloc_ptr_t caller)
 #else
-realloc_hook_ini(ptr, sz) Void_t* ptr; size_t sz;
-#endif
+realloc_hook_ini(ptr, sz, caller)
+     Void_t* ptr; size_t sz; const __malloc_ptr_t caller;
 #endif
 {
   __malloc_hook = NULL;
@@ -1696,14 +1685,11 @@ realloc_hook_ini(ptr, sz) Void_t* ptr; size_t sz;
 }
 
 static Void_t*
-#ifdef _LIBC
-memalign_hook_ini(size_t sz, size_t alignment, const __malloc_ptr_t caller)
-#else
 #if __STD_C
-memalign_hook_ini(size_t sz, size_t alignment)
+memalign_hook_ini(size_t sz, size_t alignment, const __malloc_ptr_t caller)
 #else
-memalign_hook_ini(sz, alignment) size_t sz; size_t alignment;
-#endif
+memalign_hook_ini(sz, alignment, caller)
+     size_t sz; size_t alignment; const __malloc_ptr_t caller;
 #endif
 {
   __malloc_hook = NULL;
@@ -1714,7 +1700,6 @@ memalign_hook_ini(sz, alignment) size_t sz; size_t alignment;
 }
 
 void weak_variable (*__malloc_initialize_hook) __MALLOC_P ((void)) = NULL;
-#ifdef _LIBC
 void weak_variable (*__free_hook) __MALLOC_P ((__malloc_ptr_t __ptr,
                                               const __malloc_ptr_t)) = NULL;
 __malloc_ptr_t weak_variable (*__malloc_hook)
@@ -1725,15 +1710,6 @@ __malloc_ptr_t weak_variable (*__realloc_hook)
 __malloc_ptr_t weak_variable (*__memalign_hook)
  __MALLOC_P ((size_t __size, size_t __alignment, const __malloc_ptr_t))
      = memalign_hook_ini;
-#else
-void weak_variable (*__free_hook) __MALLOC_P ((__malloc_ptr_t __ptr)) = NULL;
-__malloc_ptr_t weak_variable (*__malloc_hook)
- __MALLOC_P ((size_t __size)) = malloc_hook_ini;
-__malloc_ptr_t weak_variable (*__realloc_hook)
- __MALLOC_P ((__malloc_ptr_t __ptr, size_t __size)) = realloc_hook_ini;
-__malloc_ptr_t weak_variable (*__memalign_hook)
- __MALLOC_P ((size_t __size, size_t __alignment)) = memalign_hook_ini;
-#endif
 void weak_variable (*__after_morecore_hook) __MALLOC_P ((void)) = NULL;
 
 /* Activate a standard set of debugging hooks. */
@@ -1774,10 +1750,16 @@ static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */
 
 #endif
 
+static mchunkptr
+#if defined __GNUC__ && __GNUC__ >= 2
+/* This function is only called from one place, inline it.  */
+inline
+#endif
+internal_function
 #if __STD_C
-static mchunkptr mmap_chunk(size_t size)
+mmap_chunk(size_t size)
 #else
-static mchunkptr mmap_chunk(size) size_t size;
+mmap_chunk(size) size_t size;
 #endif
 {
   size_t page_mask = malloc_getpagesize - 1;
@@ -1897,6 +1879,7 @@ static mchunkptr mremap_chunk(p, new_size) mchunkptr p; size_t new_size;
    of the page size. */
 
 static heap_info *
+internal_function
 #if __STD_C
 new_heap(size_t size)
 #else
@@ -1986,6 +1969,7 @@ grow_heap(h, diff) heap_info *h; long diff;
 } while(0)
 
 static arena *
+internal_function
 #if __STD_C
 arena_get2(arena *a_tsd, size_t size)
 #else
@@ -2302,10 +2286,16 @@ arena *ar_ptr; mchunkptr p; INTERNAL_SIZE_T s;
   Main interface to sbrk (but see also malloc_trim).
 */
 
+static void
+#if defined __GNUC__ && __GNUC__ >= 2
+/* This function is called only from one place, inline it.  */
+inline
+#endif
+internal_function
 #if __STD_C
-static void malloc_extend_top(arena *ar_ptr, INTERNAL_SIZE_T nb)
+malloc_extend_top(arena *ar_ptr, INTERNAL_SIZE_T nb)
 #else
-static void malloc_extend_top(ar_ptr, nb) arena *ar_ptr; INTERNAL_SIZE_T nb;
+malloc_extend_top(ar_ptr, nb) arena *ar_ptr; INTERNAL_SIZE_T nb;
 #endif
 {
   unsigned long pagesz   = malloc_getpagesize;
@@ -2340,7 +2330,7 @@ static void malloc_extend_top(ar_ptr, nb) arena *ar_ptr; INTERNAL_SIZE_T nb;
         (brk < old_end && old_top != initial_top(&main_arena)))
       return;
 
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
     /* Call the `morecore' hook if necessary.  */
     if (__after_morecore_hook)
       (*__after_morecore_hook) ();
@@ -2374,7 +2364,7 @@ static void malloc_extend_top(ar_ptr, nb) arena *ar_ptr; INTERNAL_SIZE_T nb;
       new_brk = (char*)(MORECORE (correction));
       if (new_brk == (char*)(MORECORE_FAILURE)) return;
 
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
       /* Call the `morecore' hook if necessary.  */
       if (__after_morecore_hook)
         (*__after_morecore_hook) ();
@@ -2531,14 +2521,14 @@ Void_t* mALLOc(bytes) size_t bytes;
   INTERNAL_SIZE_T nb; /* padded request size */
   mchunkptr victim;
 
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
   if (__malloc_hook != NULL) {
     Void_t* result;
 
-#ifdef _LIBC
+#if defined __GNUC__ && __GNUC__ >= 2
     result = (*__malloc_hook)(bytes, __builtin_return_address (0));
 #else
-    result = (*__malloc_hook)(bytes);
+    result = (*__malloc_hook)(bytes, NULL);
 #endif
     return result;
   }
@@ -2563,6 +2553,7 @@ Void_t* mALLOc(bytes) size_t bytes;
 }
 
 static mchunkptr
+internal_function
 #if __STD_C
 chunk_alloc(arena *ar_ptr, INTERNAL_SIZE_T nb)
 #else
@@ -2828,12 +2819,12 @@ void fREe(mem) Void_t* mem;
   arena *ar_ptr;
   mchunkptr p;                          /* chunk corresponding to mem */
 
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
   if (__free_hook != NULL) {
-#ifdef _LIBC
+#if defined __GNUC__ && __GNUC__ >= 2
     (*__free_hook)(mem, __builtin_return_address (0));
 #else
-    (*__free_hook)(mem);
+    (*__free_hook)(mem, NULL);
 #endif
     return;
   }
@@ -2868,6 +2859,7 @@ void fREe(mem) Void_t* mem;
 }
 
 static void
+internal_function
 #if __STD_C
 chunk_free(arena *ar_ptr, mchunkptr p)
 #else
@@ -3030,14 +3022,14 @@ Void_t* rEALLOc(oldmem, bytes) Void_t* oldmem; size_t bytes;
 
   mchunkptr newp;             /* chunk to return */
 
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
   if (__realloc_hook != NULL) {
     Void_t* result;
 
-#ifdef _LIBC
+#if defined __GNUC__ && __GNUC__ >= 2
     result = (*__realloc_hook)(oldmem, bytes, __builtin_return_address (0));
 #else
-    result = (*__realloc_hook)(oldmem, bytes);
+    result = (*__realloc_hook)(oldmem, bytes, NULL);
 #endif
     return result;
   }
@@ -3099,6 +3091,7 @@ Void_t* rEALLOc(oldmem, bytes) Void_t* oldmem; size_t bytes;
 }
 
 static mchunkptr
+internal_function
 #if __STD_C
 chunk_realloc(arena* ar_ptr, mchunkptr oldp, INTERNAL_SIZE_T oldsize,
               INTERNAL_SIZE_T nb)
@@ -3296,15 +3289,15 @@ Void_t* mEMALIGn(alignment, bytes) size_t alignment; size_t bytes;
   INTERNAL_SIZE_T    nb;      /* padded  request size */
   mchunkptr p;
 
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
   if (__memalign_hook != NULL) {
     Void_t* result;
 
-#ifdef _LIBC
+#if defined __GNUC__ && __GNUC__ >= 2
     result = (*__memalign_hook)(alignment, bytes,
                                __builtin_return_address (0));
 #else
-    result = (*__memalign_hook)(alignment, bytes);
+    result = (*__memalign_hook)(alignment, bytes, NULL);
 #endif
     return result;
   }
@@ -3337,6 +3330,7 @@ Void_t* mEMALIGn(alignment, bytes) size_t alignment; size_t bytes;
 }
 
 static mchunkptr
+internal_function
 #if __STD_C
 chunk_align(arena* ar_ptr, INTERNAL_SIZE_T nb, size_t alignment)
 #else
@@ -3473,13 +3467,13 @@ Void_t* cALLOc(n, elem_size) size_t n; size_t elem_size;
   INTERNAL_SIZE_T sz, csz, oldtopsize;
   Void_t* mem;
 
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
   if (__malloc_hook != NULL) {
     sz = n * elem_size;
-#ifdef _LIBC
+#if defined __GNUC__ && __GNUC__ >= 2
     mem = (*__malloc_hook)(sz, __builtin_return_address (0));
 #else
-    mem = (*__malloc_hook)(sz);
+    mem = (*__malloc_hook)(sz, NULL);
 #endif
     if(mem == 0)
       return 0;
@@ -3597,6 +3591,7 @@ int mALLOC_TRIm(pad) size_t pad;
 /* Trim the main arena. */
 
 static int
+internal_function
 #if __STD_C
 main_trim(size_t pad)
 #else
@@ -3625,7 +3620,7 @@ main_trim(pad) size_t pad;
 
   new_brk = (char*)(MORECORE (-extra));
 
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
   /* Call the `morecore' hook if necessary.  */
   if (__after_morecore_hook)
     (*__after_morecore_hook) ();
@@ -3654,6 +3649,7 @@ main_trim(pad) size_t pad;
 #ifndef NO_THREADS
 
 static int
+internal_function
 #if __STD_C
 heap_trim(heap_info *heap, size_t pad)
 #else
@@ -4114,7 +4110,7 @@ mALLOC_SET_STATe(msptr) Void_t* msptr;
 
 \f
 
-#if defined(_LIBC) || defined(MALLOC_HOOKS)
+#if defined _LIBC || defined MALLOC_HOOKS
 
 /* A simple, standard set of debugging hooks.  Overhead is `only' one
    byte per chunk; still this will catch most cases of double frees or
@@ -4127,6 +4123,7 @@ mALLOC_SET_STATe(msptr) Void_t* msptr;
    goal here is to avoid crashes, unlike in the MALLOC_DEBUG code. */
 
 static mchunkptr
+internal_function
 #if __STD_C
 mem2chunk_check(Void_t* mem)
 #else
@@ -4173,14 +4170,10 @@ mem2chunk_check(mem) Void_t* mem;
 }
 
 static Void_t*
-#ifdef _LIBC
-malloc_check(size_t sz, const Void_t *caller)
-#else
 #if __STD_C
-malloc_check(size_t sz)
+malloc_check(size_t sz, const Void_t *caller)
 #else
-malloc_check(sz) size_t sz;
-#endif
+malloc_check(sz, caller) size_t sz; const Void_t *caller;
 #endif
 {
   mchunkptr victim;
@@ -4200,14 +4193,10 @@ malloc_check(sz) size_t sz;
 }
 
 static void
-#ifdef _LIBC
-free_check(Void_t* mem, const Void_t *caller)
-#else
 #if __STD_C
-free_check(Void_t* mem)
+free_check(Void_t* mem, const Void_t *caller)
 #else
-free_check(mem) Void_t* mem;
-#endif
+free_check(mem, caller) Void_t* mem; const Void_t *caller;
 #endif
 {
   mchunkptr p;
@@ -4241,24 +4230,17 @@ free_check(mem) Void_t* mem;
 }
 
 static Void_t*
-#ifdef _LIBC
-realloc_check(Void_t* oldmem, size_t bytes, const Void_t *caller)
-#else
 #if __STD_C
-realloc_check(Void_t* oldmem, size_t bytes)
+realloc_check(Void_t* oldmem, size_t bytes, const Void_t *caller)
 #else
-realloc_check(oldmem, bytes) Void_t* oldmem; size_t bytes;
-#endif
+realloc_check(oldmem, bytes, caller)
+     Void_t* oldmem; size_t bytes; const Void_t *caller;
 #endif
 {
   mchunkptr oldp, newp;
   INTERNAL_SIZE_T nb, oldsize;
 
-#ifdef _LIBC
   if (oldmem == 0) return malloc_check(bytes, NULL);
-#else
-  if (oldmem == 0) return malloc_check(bytes);
-#endif
   (void)mutex_lock(&main_arena.mutex);
   oldp = mem2chunk_check(oldmem);
   if(!oldp) {
@@ -4270,11 +4252,7 @@ realloc_check(oldmem, bytes) Void_t* oldmem; size_t bytes;
     case 2:
       abort();
     }
-#ifdef _LIBC
     return malloc_check(bytes, NULL);
-#else
-    return malloc_check(bytes);
-#endif
   }
   oldsize = chunksize(oldp);
 
@@ -4327,24 +4305,17 @@ realloc_check(oldmem, bytes) Void_t* oldmem; size_t bytes;
 }
 
 static Void_t*
-#ifdef _LIBC
-memalign_check(size_t alignment, size_t bytes, const Void_t *caller)
-#else
 #if __STD_C
-memalign_check(size_t alignment, size_t bytes)
+memalign_check(size_t alignment, size_t bytes, const Void_t *caller)
 #else
-memalign_check(alignment, bytes) size_t alignment; size_t bytes;
-#endif
+memalign_check(alignment, bytes, caller)
+     size_t alignment; size_t bytes; const Void_t *caller;
 #endif
 {
   INTERNAL_SIZE_T nb;
   mchunkptr p;
 
-#ifdef _LIBC
   if (alignment <= MALLOC_ALIGNMENT) return malloc_check(bytes, NULL);
-#else
-  if (alignment <= MALLOC_ALIGNMENT) return malloc_check(bytes);
-#endif
   if (alignment <  MINSIZE) alignment = MINSIZE;
 
   nb = request2size(bytes+1);
@@ -4365,14 +4336,10 @@ memalign_check(alignment, bytes) size_t alignment; size_t bytes;
    ptmalloc_init() hasn't completed yet. */
 
 static Void_t*
-#ifdef _LIBC
-malloc_starter(size_t sz, const Void_t *caller)
-#else
 #if __STD_C
-malloc_starter(size_t sz)
+malloc_starter(size_t sz, const Void_t *caller)
 #else
-malloc_starter(sz) size_t sz;
-#endif
+malloc_starter(sz, caller) size_t sz; const Void_t *caller;
 #endif
 {
   mchunkptr victim = chunk_alloc(&main_arena, request2size(sz));
@@ -4381,14 +4348,10 @@ malloc_starter(sz) size_t sz;
 }
 
 static void
-#ifdef _LIBC
-free_starter(Void_t* mem, const Void_t *caller)
-#else
 #if __STD_C
-free_starter(Void_t* mem)
+free_starter(Void_t* mem, const Void_t *caller)
 #else
-free_starter(mem) Void_t* mem;
-#endif
+free_starter(mem, caller) Void_t* mem; const Void_t *caller;
 #endif
 {
   mchunkptr p;
@@ -4408,14 +4371,10 @@ free_starter(mem) Void_t* mem;
    is active. */
 
 static Void_t*
-#ifdef _LIBC
-malloc_atfork (size_t sz, const Void_t *caller)
-#else
 #if __STD_C
-malloc_atfork(size_t sz)
+malloc_atfork (size_t sz, const Void_t *caller)
 #else
-malloc_atfork(sz) size_t sz;
-#endif
+malloc_atfork(sz, caller) size_t sz; const Void_t *caller;
 #endif
 {
   Void_t *vptr = NULL;
@@ -4435,14 +4394,10 @@ malloc_atfork(sz) size_t sz;
 }
 
 static void
-#ifdef _LIBC
-free_atfork(Void_t* mem, const Void_t *caller)
-#else
 #if __STD_C
-free_atfork(Void_t* mem)
+free_atfork(Void_t* mem, const Void_t *caller)
 #else
-free_atfork(mem) Void_t* mem;
-#endif
+free_atfork(mem, caller) Void_t* mem; const Void_t *caller;
 #endif
 {
   Void_t *vptr = NULL;
@@ -4471,7 +4426,7 @@ free_atfork(mem) Void_t* mem;
     (void)mutex_unlock(&ar_ptr->mutex);
 }
 
-#endif /* defined(_LIBC) || defined(MALLOC_HOOKS) */
+#endif /* defined _LIBC || defined MALLOC_HOOKS */
 
 \f
 
index 65381705df80209f69ec3356de1f5ec6d9328c92..81966b856cb81b75ed1a724e1fd864fe29a128da 100644 (file)
 */
 
 #if defined(__STDC__) || defined (__cplusplus)
-#include <stddef.h>
-#define __malloc_ptr_t  void *
+# include <stddef.h>
+# define __malloc_ptr_t  void *
 #else
-#undef  size_t
-#define size_t          unsigned int
-#undef  ptrdiff_t
-#define ptrdiff_t       int
-#define __malloc_ptr_t  char *
+# undef  size_t
+# define size_t          unsigned int
+# undef  ptrdiff_t
+# define ptrdiff_t       int
+# define __malloc_ptr_t  char *
 #endif
 
 #ifdef _LIBC
 /* Used by GNU libc internals. */
-#define __malloc_size_t size_t
-#define __malloc_ptrdiff_t ptrdiff_t
+# define __malloc_size_t size_t
+# define __malloc_ptrdiff_t ptrdiff_t
 #endif
 
-#if defined (__STDC__) || defined (__cplusplus) || defined (__GNUC__)
-#define __MALLOC_P(args)        args
+#if defined __STDC__ || defined __cplusplus || defined __GNUC__
+# define __MALLOC_P(args)        args
 #else
-#define __MALLOC_P(args)        ()
+# define __MALLOC_P(args)        ()
 #endif
 
 #ifndef NULL
-#ifdef __cplusplus
-#define NULL    0
-#else
-#define NULL    ((__malloc_ptr_t) 0)
-#endif
+# ifdef __cplusplus
+#  define NULL 0
+# else
+#  define NULL ((__malloc_ptr_t) 0)
+# endif
 #endif
 
 #ifdef __cplusplus
@@ -77,7 +77,7 @@ extern "C" {
 #ifdef _LIBC
 /* In the GNU libc we rename the global variable
    `__malloc_initialized' to `__libc_malloc_initialized'.  */
-#define __malloc_initialized __libc_malloc_initialized
+# define __malloc_initialized __libc_malloc_initialized
 #endif
 extern int __malloc_initialized;
 
@@ -138,16 +138,16 @@ extern struct mallinfo mallinfo __MALLOC_P ((void));
 
 /* SVID2/XPG mallopt options */
 #ifndef M_MXFAST
-#define M_MXFAST  1    /* UNUSED in this malloc */
+# define M_MXFAST  1   /* UNUSED in this malloc */
 #endif
 #ifndef M_NLBLKS
-#define M_NLBLKS  2    /* UNUSED in this malloc */
+# define M_NLBLKS  2   /* UNUSED in this malloc */
 #endif
 #ifndef M_GRAIN
-#define M_GRAIN   3    /* UNUSED in this malloc */
+# define M_GRAIN   3   /* UNUSED in this malloc */
 #endif
 #ifndef M_KEEP
-#define M_KEEP    4    /* UNUSED in this malloc */
+# define M_KEEP    4   /* UNUSED in this malloc */
 #endif
 
 /* mallopt options that actually do something */
@@ -178,7 +178,7 @@ extern __malloc_ptr_t malloc_get_state __MALLOC_P ((void));
    malloc_get_state(). */
 extern int malloc_set_state __MALLOC_P ((__malloc_ptr_t __ptr));
 
-#ifdef __GLIBC__
+#if defined __GLIBC__ || defined MALLOC_HOOKS
 /* Hooks for debugging versions. */
 extern void (*__malloc_initialize_hook) __MALLOC_P ((void));
 extern void (*__free_hook) __MALLOC_P ((__malloc_ptr_t __ptr,
@@ -195,21 +195,6 @@ extern void (*__after_morecore_hook) __MALLOC_P ((void));
 
 /* Activate a standard set of debugging hooks. */
 extern void __malloc_check_init __MALLOC_P ((void));
-#else
-#ifdef MALLOC_HOOKS
-/* Hooks for debugging versions. */
-extern void (*__malloc_initialize_hook) __MALLOC_P ((void));
-extern void (*__free_hook) __MALLOC_P ((__malloc_ptr_t __ptr));
-extern __malloc_ptr_t (*__malloc_hook) __MALLOC_P ((size_t __size));
-extern __malloc_ptr_t (*__realloc_hook) __MALLOC_P ((__malloc_ptr_t __ptr,
-                                                    size_t __size));
-extern __malloc_ptr_t (*__memalign_hook) __MALLOC_P ((size_t __size,
-                                                     size_t __alignment));
-extern void (*__after_morecore_hook) __MALLOC_P ((void));
-
-/* Activate a standard set of debugging hooks. */
-extern void __malloc_check_init __MALLOC_P ((void));
-#endif
 #endif
 
 #ifdef __cplusplus
index 54c9dfffbd082d20f97f56c83ae08da4fef02aee..c1704d00eaf9ff925088aaf2e50b85a2f88f08d0 100644 (file)
@@ -73,8 +73,9 @@ tr_break ()
 {
 }
 
-static void tr_where __P ((const __ptr_t));
+static void tr_where __P ((const __ptr_t)) internal_function;
 static void
+internal_function
 tr_where (caller)
      const __ptr_t caller;
 {
index ad6b830fcb986ea4893dbb5815b132eda28fdbfd..49492eb73cbef4e9de5353eabd0eacca8aff9613 100644 (file)
@@ -379,6 +379,11 @@ __extension__                                                              \
      _obstack_newchunk (__o, __len);                                   \
    (void) 0; })
 
+#define obstack_empty_p(OBSTACK)                                       \
+  __extension__                                                                \
+  ({ struct obstack *__o = (OBSTACK);                                  \
+     (__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); })
+
 #define obstack_grow(OBSTACK,where,length)                             \
 __extension__                                                          \
 ({ struct obstack *__o = (OBSTACK);                                    \
@@ -492,6 +497,9 @@ __extension__                                                               \
 #define obstack_room(h)                \
  (unsigned) ((h)->chunk_limit - (h)->next_free)
 
+#define obstack_empty_p(h) \
+ (h->chunk->prev == 0 && h->next_free - h->chunk->contents == 0)
+
 /* Note that the call to _obstack_newchunk is enclosed in (..., 0)
    so that we can avoid having void expressions
    in the arms of the conditional expression.
index 7f8c205ebbfa115aa8c2aad261fcec1000e3f12d..2e418838db3e92f290653bbc9a5b53b3527455a1 100644 (file)
@@ -414,13 +414,19 @@ This function returns the absolute value of the floating-point number
 @deftypefunx float cabsf (complex float @var{z})
 @deftypefunx {long double} cabsl (complex long double @var{z})
 These functions return the absolute value of the complex number @var{z}.
-The compiler must support complex numbers to use these functions.  (See
-also the function @code{hypot} in @ref{Exponents and Logarithms}.)  The
+The compiler must support complex numbers to use these functions.  The
 value is:
 
 @smallexample
 sqrt (creal (@var{z}) * creal (@var{z}) + cimag (@var{z}) * cimag (@var{z}))
 @end smallexample
+
+This function should always be used instead of the direct formula since
+using the simple straight-forward method can mean to loose accuracy.  If
+one of the squared values is neglectable in size compared to the other
+value the result should be the same as the larger value.  But squaring
+the value and afterwards using the square root function leads to
+unaccuracy.  See @code{hypot} in @xref{Exponents and Logarithms}.
 @end deftypefun
 
 @node Normalization Functions
index 4f9326e9d46e46a6df9778e0f18dfd1046f4a5f0..64591ee9f27b73c8bfd4fdcbd60b3830818468d8 100644 (file)
@@ -236,7 +236,7 @@ always defines this as @code{1}, on the assumption that you had to have
 @deftypevr Macro {long int} _POSIX_VERSION
 This constant represents the version of the POSIX.1 standard to which
 the implementation conforms.  For an implementation conforming to the
-1990 POSIX.1 standard, the value is the integer @code{199009L}.
+1995 POSIX.1 standard, the value is the integer @code{199506L}.
 
 @code{_POSIX_VERSION} is always defined (in @file{unistd.h}) in any
 POSIX system.
@@ -367,6 +367,294 @@ Inquire about the parameter corresponding to @code{_POSIX_VERSION}.
 Inquire about the parameter corresponding to @code{CLOCKS_PER_SEC};
 @pxref{Basic CPU Time}.
 
+@comment unistd.h
+@comment GNU
+@item _SC_CHARCLASS_NAME_MAX
+Inquire about the parameter corresponding to maximal length allowed for
+a character class name in an extended locale specification.  These
+extensions are not yet standardized and so this option is not standardized
+as well.
+
+@comment unistdh.h
+@comment POSIX.1
+@item _SC_REALTIME_SIGNALS
+Inquire about the parameter corresponding to @code{_POSIX_REALTIME_SIGNALS}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_PRIORITY_SCHEDULING
+Inquire about the parameter corresponding to @code{_POSIX_PRIORITY_SCHEDULING}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_TIMERS
+Inquire about the parameter corresponding to @code{_POSIX_TIMERS}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_ASYNCHRONOUS_IO
+Inquire about the parameter corresponding to @code{_POSIX_ASYNCHRONOUS_IO}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_PRIORITIZED_IO
+Inquire about the parameter corresponding to @code{_POSIX_PRIORITIZED_IO}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_SYNCHRONIZED_IO
+Inquire about the parameter corresponding to @code{_POSIX_SYNCHRONIZED_IO}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_FSYNC
+Inquire about the parameter corresponding to @code{_POSIX_FSYNC}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_MAPPED_FILES
+Inquire about the parameter corresponding to @code{_POSIX_MAPPED_FILES}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_MEMLOCK
+Inquire about the parameter corresponding to @code{_POSIX_MEMLOCK}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_MEMLOCK_RANGE
+Inquire about the parameter corresponding to @code{_POSIX_MEMLOCK_RANGE}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_MEMORY_PROTECTION
+Inquire about the parameter corresponding to @code{_POSIX_MEMORY_PROTECTION}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_MESSAGE_PASSING
+Inquire about the parameter corresponding to @code{_POSIX_MESSAGE_PASSING}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_SEMAPHORES
+Inquire about the parameter corresponding to @code{_POSIX_SEMAPHORES}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_SHARED_MEMORY_OBJECTS
+Inquire about the parameter corresponding to
+@code{_POSIX_SHARED_MEMORY_OBJECTS}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_AIO_LISTIO_MAX
+Inquire about the parameter corresponding to @code{_POSIX_AIO_LISTIO_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_AIO_MAX
+Inquire about the parameter corresponding to @code{_POSIX_AIO_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_AIO_PRIO_DELTA_MAX
+Inquire the value by which a process can decrease its asynchronous I/O
+priority level from its own scheduling priority.  This corresponds to the
+run-time invariant value @code{AIO_PRIO_DELTA_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_DELAYTIMER_MAX
+Inquire about the parameter corresponding to @code{_POSIX_DELAYTIMER_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_MQ_OPEN_MAX
+Inquire about the parameter corresponding to @code{_POSIX_MQ_OPEN_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_MQ_PRIO_MAX
+Inquire about the parameter corresponding to @code{_POSIX_MQ_PRIO_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_RTSIG_MAX
+Inquire about the parameter corresponding to @code{_POSIX_RTSIG_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_SEM_NSEMS_MAX
+Inquire about the parameter corresponding to @code{_POSIX_SEM_NSEMS_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_SEM_VALUE_MAX
+Inquire about the parameter corresponding to @code{_POSIX_SEM_VALUE_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_SIGQUEUE_MAX
+Inquire about the parameter corresponding to @code{_POSIX_SIGQUEUE_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_TIMER_MAX
+Inquire about the parameter corresponding to @code{_POSIX_TIMER_MAX}.
+
+@comment unistd.h
+@comment POSIX.1g
+@item _SC_PII
+Inquire about the parameter corresponding to @code{_POSIX_PII}.
+
+@comment unistd.h
+@comment POSIX.1g
+@item _SC_PII_XTI
+Inquire about the parameter corresponding to @code{_POSIX_PII_XTI}.
+
+@comment unistd.h
+@comment POSIX.1g
+@item _SC_PII_SOCKET
+Inquire about the parameter corresponding to @code{_POSIX_PII_SOCKET}.
+
+@comment unistd.h
+@comment POSIX.1g
+@item _SC_PII_INTERNET
+Inquire about the parameter corresponding to @code{_POSIX_PII_INTERNET}.
+
+@comment unistd.h
+@comment POSIX.1g
+@item _SC_PII_OSI
+Inquire about the parameter corresponding to @code{_POSIX_PII_OSI}.
+
+@comment unistd.h
+@comment POSIX.1g
+@item _SC_SELECT
+Inquire about the parameter corresponding to @code{_POSIX_SELECT}.
+
+@comment unistd.h
+@comment POSIX.1g
+@item _SC_UIO_MAXIOV
+Inquire about the parameter corresponding to @code{_POSIX_UIO_MAXIOV}.
+
+@comment unistd.h
+@comment POSIX.1g
+@item _SC_PII_INTERNET_STREAM
+Inquire about the parameter corresponding to @code{_POSIX_PII_INTERNET_STREAM}.
+
+@comment unistd.h
+@comment POSIX.1g
+@item _SC_PII_INTERNET_DGRAM
+Inquire about the parameter corresponding to @code{_POSIX_PII_INTERNET_DGRAM}.
+
+@comment unistd.h
+@comment POSIX.1g
+@item _SC_PII_OSI_COTS
+Inquire about the parameter corresponding to @code{_POSIX_PII_OSI_COTS}.
+
+@comment unistd.h
+@comment POSIX.1g
+@item _SC_PII_OSI_CLTS
+Inquire about the parameter corresponding to @code{_POSIX_PII_OSI_CLTS}.
+
+@comment unistd.h
+@comment POSIX.1g
+@item _SC_PII_OSI_M
+Inquire about the parameter corresponding to @code{_POSIX_PII_OSI_M}.
+
+@comment unistd.h
+@comment POSIX.1g
+@item _SC_T_IOV_MAX
+Inquire the value of the value associated with the @code{T_IOV_MAX}
+variable.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_THREADS
+Inquire about the parameter corresponding to @code{_POSIX_THREADS}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_THREAD_SAFE_FUNCTIONS
+Inquire about the parameter corresponding to
+@code{_POSIX_THREAD_SAFE_FUNCTIONS}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_GETGR_R_SIZE_MAX
+Inquire about the parameter corresponding to @code{_POSIX_GETGR_R_SIZE_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_GETPW_R_SIZE_MAX
+Inquire about the parameter corresponding to @code{_POSIX_GETPW_R_SIZE_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_LOGIN_NAME_MAX
+Inquire about the parameter corresponding to @code{_POSIX_LOGIN_NAME_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_TTY_NAME_MAX
+Inquire about the parameter corresponding to @code{_POSIX_TTY_NAME_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_THREAD_DESTRUCTOR_ITERATIONS
+Inquire about the parameter corresponding to
+@code{_POSIX_THREAD_DESTRUCTOR_ITERATIONS}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_THREAD_KEYS_MAX
+Inquire about the parameter corresponding to @code{_POSIX_THREAD_KEYS_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_THREAD_STACK_MIN
+Inquire about the parameter corresponding to @code{_POSIX_THREAD_STACK_MIN}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_THREAD_THREADS_MAX
+Inquire about the parameter corresponding to @code{_POSIX_THREAD_THREADS_MAX}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_THREAD_ATTR_STACKADDR
+Inquire about the parameter corresponding to
+@code{_POSIX_THREAD_ATTR_STACKADDR}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_THREAD_ATTR_STACKSIZE
+Inquire about the parameter corresponding to
+@code{_POSIX_THREAD_ATTR_STACKSIZE}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_THREAD_PRIORITY_SCHEDULING
+Inquire about the parameter corresponding to
+@code{_POSIX_THREAD_PRIORITY_SCHEDULING}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_THREAD_PRIO_INHERIT
+Inquire about the parameter corresponding to @code{_POSIX_THREAD_PRIO_INHERIT}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_THREAD_PRIO_PROTECT
+Inquire about the parameter corresponding to @code{_POSIX_THREAD_PRIO_PROTECT}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _SC_THREAD_PROCESS_SHARED
+Inquire about the parameter corresponding to
+@code{_POSIX_THREAD_PROCESS_SHARED}.
+
 @comment unistd.h
 @comment POSIX.2
 @item _SC_2_C_DEV
@@ -465,6 +753,212 @@ support.
 Inquire about the virtual memory page size of the machine.
 @code{getpagesize} returns the same value.
 @c @xref{XXX getpagesize}. !!! ???
+
+@comment unistd.h
+@comment GNU
+@item _SC_NPROCESSORS_CONF
+Inquire about number of configured processors.
+
+@comment unistd.h
+@comment GNU
+@item _SC_NPROCESSORS_ONLN
+Inquire about number of processors online.
+
+@comment unistd.h
+@comment GNU
+@item _SC_PHYS_PAGES
+Inquire about number of physical pages in the system.
+
+@comment unistd.h
+@comment GNU
+@item _SC_AVPHYS_PAGES
+Inquire about number of available physical pages in the system.
+
+@comment unistd.h
+@comment GNU
+@item _SC_ATEXIT_MAX
+Inquire about number of functions which can be registered as termination
+functions for @code{atexit}; @pxref{Cleanups on Exit}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_XOPEN_VERSION
+Inquire about the parameter corresponding to @code{_XOPEN_VERSION}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_XOPEN_XCU_VERSION
+Inquire about the parameter corresponding to @code{_XOPEN_XCU_VERSION}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_XOPEN_UNIX
+Inquire about the parameter corresponding to @code{_XOPEN_UNIX}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_XOPEN_CRYPT
+Inquire about the parameter corresponding to @code{_XOPEN_CRYPT}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_XOPEN_ENH_I18N
+Inquire about the parameter corresponding to @code{_XOPEN_ENH_I18N}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_XOPEN_SHM
+Inquire about the parameter corresponding to @code{_XOPEN_SHM}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_XOPEN_XPG2
+Inquire about the parameter corresponding to @code{_XOPEN_XPG2}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_XOPEN_XPG3
+Inquire about the parameter corresponding to @code{_XOPEN_XPG3}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_XOPEN_XPG4
+Inquire about the parameter corresponding to @code{_XOPEN_XPG4}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_CHAR_BIT
+Inquire about number of bits in a variable of type @code{char}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_CHAR_MAX
+Inquire about maximum value which can be stored in a variable of type
+@code{char}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_CHAR_MIN
+Inquire about minimum value which can be stored in a variable of type
+@code{char}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_INT_MAX
+Inquire about maximum value which can be stored in a variable of type
+@code{int}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_INT_MIN
+Inquire about minimum value which can be stored in a variable of type
+@code{int}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_LONG_BIT
+Inquire about number of bits in a variable of type @code{long int}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_WORD_BIT
+Inquire about number of bits in a variable of a register word.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_MB_LEN_MAX
+Inquire the maximum length of a multi-byte representation of a wide
+character value.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_NZERO
+Inquire value used to internally represent the zero priority level for
+the process execution.
+
+@comment unistd.h
+@comment X/Open
+@item SC_SSIZE_MAX
+Inquire about maximum value which can be stored in a variable of type
+@code{ssize_t}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_SCHAR_MAX
+Inquire about maximum value which can be stored in a variable of type
+@code{signed char}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_SCHAR_MIN
+Inquire about minimum value which can be stored in a variable of type
+@code{signed char}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_SHRT_MAX
+Inquire about maximum value which can be stored in a variable of type
+@code{short int}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_SHRT_MIN
+Inquire about minimum value which can be stored in a variable of type
+@code{short int}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_UCHAR_MAX
+Inquire about maximum value which can be stored in a variable of type
+@code{unsigned char}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_UINT_MAX
+Inquire about maximum value which can be stored in a variable of type
+@code{unsigned int}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_ULONG_MAX
+Inquire about maximum value which can be stored in a variable of type
+@code{unsigned long int}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_USHRT_MAX
+Inquire about maximum value which can be stored in a variable of type
+@code{unsigned short int}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_NL_ARGMAX
+Inquire about the parameter corresponding to @code{NL_ARGMAX}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_NL_LANGMAX
+Inquire about the parameter corresponding to @code{NL_LANGMAX}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_NL_MSGMAX
+Inquire about the parameter corresponding to @code{NL_MSGMAX}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_NL_NMAX
+Inquire about  the parameter corresponding to @code{NL_NMAX}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_NL_SETMAX
+Inquire about  the parameter corresponding to @code{NL_SETMAX}.
+
+@comment unistd.h
+@comment X/Open
+@item _SC_NL_TEXTMAX
+Inquire about  the parameter corresponding to @code{NL_TEXTMAX}.
 @end table
 
 @node Examples of Sysconf
@@ -520,6 +1014,23 @@ safely push to these limits without checking whether the particular
 system you are using can go that far.
 
 @table @code
+@comment limits.h
+@comment POSIX.1
+@item _POSIX_AIO_LISTIO_MAX
+The most restrictive limit permitted by POSIX for the maximum number of
+I/O operations that can be specified in a list I/O call.  The value of
+this constant is @code{2}; thus you can add up to two new entries
+of the list of outstandard operations.
+
+@comment limits.h
+@comment POSIX.1
+@item _POSIX_AIO_MAX
+The most restrictive limit permitted by POSIX for the maximum number of
+outstanding asynchronous I/O operations.  The value of this constant is
+@code{1}.  So you cannot expect that you can issue more than one
+operation and immediately continue with the normal work, receiving the
+notifications asynchronously.
+
 @comment limits.h
 @comment POSIX.1
 @item _POSIX_ARG_MAX
@@ -732,7 +1243,9 @@ particular file, call @code{pathconf} or @code{fpathconf}.
 Here are the names for the POSIX minimum upper bounds for some of the
 above parameters.  The significance of these values is that you can
 safely push to these limits without checking whether the particular
-system you are using can go that far.
+system you are using can go that far.  In most cases GNU systems do not
+have these strict limitations.  The actual limit should be requested if
+necessary.
 
 @table @code
 @comment limits.h
@@ -883,6 +1396,26 @@ Inquire about the value of @code{_POSIX_NO_TRUNC}.
 @comment POSIX.1
 @item _PC_VDISABLE
 Inquire about the value of @code{_POSIX_VDISABLE}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _PC_SYNC_IO
+Inquire about the value of @code{_POSIX_SYNC_IO}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _PC_ASYNC_IO
+Inquire about the value of @code{_POSIX_ASYNC_IO}.
+
+@comment unistd.h
+@comment POSIX.1
+@item _PC_PRIO_IO
+Inquire about the value of @code{_POSIX_PRIO_IO}.
+
+@comment unistd.h
+@comment POSIX.1g
+@item _PC_SOCK_MAXBUF
+Inquire about the value of @code{_POSIX_PIPE_BUF}.
 @end table
 
 @node Utility Limits
@@ -1064,6 +1597,62 @@ Currently there is just one parameter you can read with @code{confstr}:
 This parameter's value is the recommended default path for searching for
 executable files.  This is the path that a user has by default just
 after logging in.
+
+@comment unistd.h
+@comment Unix98
+@item _CS_LFS_CFLAGS
+The returned string specifies which additionals flags must be given to
+the C compiler if a source is compiled using the
+@code{_LARGEFILE_SOURCE} feature select macro; @pxref{Feature Test Macros}.
+
+@comment unistd.h
+@comment Unix98
+@item _CS_LFS_LDFLAGS
+The returned string specifies which additionals flags must be given to
+the linker if a source is compiled using the
+@code{_LARGEFILE_SOURCE} feature select macro; @pxref{Feature Test Macros}.
+
+@comment unistd.h
+@comment Unix98
+@item _CS_LFS_LIBS
+The returned string specifies which additionals libraries must be linked
+to the application if a source is compiled using the
+@code{_LARGEFILE_SOURCE} feature select macro; @pxref{Feature Test Macros}.
+
+@comment unistd.h
+@comment Unix98
+@item _CS_LFS_LINTFLAGS
+The returned string specifies which additionals flags must be given to
+the the lint tool if a source is compiled using the
+@code{_LARGEFILE_SOURCE} feature select macro; @pxref{Feature Test Macros}.
+
+@comment unistd.h
+@comment Unix98
+@item _CS_LFS64_CFLAGS
+The returned string specifies which additionals flags must be given to
+the C compiler if a source is compiled using the
+@code{_LARGEFILE64_SOURCE} feature select macro; @pxref{Feature Test Macros}.
+
+@comment unistd.h
+@comment Unix98
+@item _CS_LFS64_LDFLAGS
+The returned string specifies which additionals flags must be given to
+the linker if a source is compiled using the
+@code{_LARGEFILE64_SOURCE} feature select macro; @pxref{Feature Test Macros}.
+
+@comment unistd.h
+@comment Unix98
+@item _CS_LFS64_LIBS
+The returned string specifies which additionals libraries must be linked
+to the application if a source is compiled using the
+@code{_LARGEFILE64_SOURCE} feature select macro; @pxref{Feature Test Macros}.
+
+@comment unistd.h
+@comment Unix98
+@item _CS_LFS64_LINTFLAGS
+The returned string specifies which additionals flags must be given to
+the the lint tool if a source is compiled using the
+@code{_LARGEFILE64_SOURCE} feature select macro; @pxref{Feature Test Macros}.
 @end table
 
 The way to use @code{confstr} without any arbitrary limit on string size
index 9d9b451a948597d471f5f01af30808890c741bdc..2e0c62e1f72ed78276b8dfa304928c4c8ace7917 100644 (file)
@@ -71,7 +71,7 @@ included as well as the @w{ISO C}, POSIX.1, POSIX.2, and X/Open material.
 @end defvr
 
 @comment (none)
-@comment XOPEN
+@comment X/Open
 @defvr Macro _XOPEN_SOURCE
 @defvrx Macro _XOPEN_SOURCE_EXTENDED
 If you define this macro, functionality described in the X/Open
@@ -91,11 +91,72 @@ all functionality described so far plus some new definitions from the
 Single Unix specification, @w{version 2}.
 @end defvr
 
+@comment (NONE)
+@comment X/Open
+@defvr Macro _LARGEFILE_SOURCE
+If this macro is defined some extra functions are available which
+rectify a few shortcomings in all previous standards.  More concreten
+the functions @code{fseeko} and @code{ftello} are available.  Without
+these functions the difference between the @w{ISO C} interface
+(@code{fseek}, @code{ftell}) and the low-level POSIX interface
+(@code{lseek}) would lead to problems.
+
+This macro was introduced as part of the Large File Support extension (LFS).
+@end defvr
+
+@comment (NONE)
+@comment X/Open
+@defvar Macro _LARGEFILE64_SOURCE
+If you define this macro an additional set of function gets available
+which enables to use on @w{32 bit} systems to use files of sizes beyond
+the usual limit of 2GB.  This interface is not available if the system
+does not support files that large.  On systems where the natural file
+size limit is greater than 2GB (i.e., on @w{64 bit} systems) the new
+functions are identical to the replaced functions.
+
+The new functionality is made available by a new set of types and
+functions which replace existing.  The names of these new objects
+contain @code{64} to indicate the intention, e.g., @code{off_t}
+vs. @code{off64_t} and @code{fseeko} vs. @code{fseeko64}.
+
+This macro was introduced as part of the Large File Support extension
+(LFS).  It is a transition interface for the time @w{64 bit} offsets are
+not generally used (see @code{_FILE_OFFSET_BITS}.
+@end defvar
+
+@comment (NONE)
+@comment X/Open
+@defvar _FILE_OFFSET_BITS
+This macro lets decide which file system interface shall be used, one
+replacing the other.  While @code{_LARGEFILE64_SOURCE} makes the @w{64
+bit} interface available as an additional interface
+@code{_FILE_OFFSET_BITS} allows to use the @w{64 bit} interface to
+replace the old interface.
+
+If @code{_FILE_OFFSET_BITS} is undefined or if it is defined to the
+value @code{32} nothing changes.  The @w{32 bit} interface is used and
+types like @code{off_t} have a size of @w{32 bits} on @w{32 bit}
+systems.
+
+If the macro is defined to the value @code{64} the large file interface
+replaces the old interface.  I.e., the functions are not made available
+under different names as @code{_LARGEFILE64_SOURCE} does.  Instead the
+old function names now reference the new functions, e.g., a call to
+@code{fseeko} now indeed calls @code{fseeko64}.
+
+This macro should only be selected if the system provides mechanisms for
+handling large files.  On @w{64 bit} systems this macro has no effect
+since the @code{*64} functions are identical to the normal functions.
+
+This macro was introduced as part of the Large File Support extension
+(LFS).
+@end defvar
+
 @comment (none)
 @comment GNU
 @defvr Macro _GNU_SOURCE
 If you define this macro, everything is included: @w{ISO C}, POSIX.1,
-POSIX.2, BSD, SVID, X/Open, and GNU extensions.  In the cases where
+POSIX.2, BSD, SVID, X/Open, LFS, and GNU extensions.  In the cases where
 POSIX.1 conflicts with BSD, the POSIX definitions take precedence.
 
 If you want to get the full effect of @code{_GNU_SOURCE} but make the
index 4c10b725784610bb06c60fe0223741de853c12fc..23c5f767f1374ec169fbe39974d49f1923383670 100644 (file)
@@ -32,6 +32,7 @@ directly.)
 @menu
 * Opening and Closing Files::           How to open and close file
                                          descriptors.
+* Truncating Files::                    Change the size of a file.
 * I/O Primitives::                      Reading and writing data.
 * File Position Primitive::             Setting a descriptor's file
                                          position.
@@ -41,6 +42,7 @@ directly.)
                                          descriptors and streams.
 * Waiting for I/O::                     How to check for input or output
                                         on multiple file descriptors.
+* Synchronizing I/O::                   Making sure all I/O actions completed.
 * Control Operations::                  Various other operations on file
                                         descriptors.
 * Duplicating Descriptors::             Fcntl commands for duplicating
@@ -136,6 +138,14 @@ or @code{O_CREAT} is set and the file does not already exist.
 
 @c !!! umask
 
+This function is a cancelation point in multi-threaded programs.  This
+is a problem if the thread allocates some resources (like memory, file
+descriptors, semaphores or whatever) at the time @code{open} is
+called.  If the thread gets canceled these resources stay allocated
+until the program ends.  To avoid this calls to @code{open} should be
+protected using cancelation handlers.
+@c ref pthread_cleanup_push / pthread_cleanup_pop
+
 The @code{open} function is the underlying primitive for the @code{fopen}
 and @code{freopen} functions, that create streams.
 @end deftypefun
@@ -175,6 +185,14 @@ When all file descriptors associated with a pipe or FIFO have been closed,
 any unread data is discarded.
 @end itemize
 
+This function is a cancelation point in multi-threaded programs.  This
+is a problem if the thread allocates some resources (like memory, file
+descriptors, semaphores or whatever) at the time @code{close} is
+called.  If the thread gets canceled these resources stay allocated
+until the program ends.  To avoid this calls to @code{close} should be
+protected using cancelation handlers.
+@c ref pthread_cleanup_push / pthread_cleanup_pop
+
 The normal return value from @code{close} is @code{0}; a value of @code{-1}
 is returned in case of failure.  The following @code{errno} error
 conditions are defined for this function:
@@ -206,6 +224,73 @@ of trying to close its underlying file descriptor with @code{close}.
 This flushes any buffered output and updates the stream object to
 indicate that it is closed.
 
+
+@node Truncating Files
+@section Change the size of a file
+
+In some situations it is useful to explicitly determine the size of a
+file.  Since the 4.2BSD days there is a function to truncate a file to
+at most a given number of bytes and POSIX defines one additional
+function.  The prototypes for these functions are in @file{unistd.h}.
+
+@comment unistd.h
+@comment X/Open
+@deftypefun int truncate (const char *@var{name}, size_t @var{length})
+The @code{truncation} function truncates the file named by @var{name} to
+at most @var{length} bytes.  I.e., if the file was larger before the
+extra bytes are stripped of.  If the file was small or equal to
+@var{length} in size before nothing is done.  The file must be writable
+by the user to perform this operation.
+
+The return value is zero is everything wnet ok.  Otherwise the return
+value is @math{-1} and the global variable @var{errno} is set to:
+@table @code
+@item EACCES
+The file is not accessible to the user.
+@item EINVAL
+The @var{length} value is illegal.
+@item EISDIR
+The object named by @var{name} is a directory.
+@item ENOENT
+The file named by @var{name} does not exist.
+@item ENOTDIR
+One part of the @var{name} is not a directory.
+@end table
+
+This function was introduced in 4.2BSD but also was available in later
+@w{System V} systems.  It is not added to POSIX since the authors felt
+it is only of marginally additional utility.  See below.
+@end deftypefun
+
+@comment unistd.h
+@comment POSIX
+@deftypefun int ftruncate (int @var{fd}, size_t @var{length})
+The @code{ftruncate} function is similar to the @code{truncate}
+function.  The main difference is that it takes a descriptor for an
+opened file instead of a file name to identify the object.  The file
+must be opened for writing to successfully carry out the operation.
+
+The POSIX standard leaves it implementation defined what happens if the
+specified new @var{length} of the file is bigger than the original size.
+The @code{ftruncate} function might simply leave the file alone and do
+nothing or it can increase the size to the desired size.  In this later
+case the extended area should be zero-filled.  So using @code{ftruncate}
+is no reliable way to increase the file size but if it is possible it is
+probably the fastest way.  The function also operates on POSIX shared
+memory segments if these are implemented by the system.
+
+On success the function returns zero.  Otherwise it returns @math{-1}
+and set @var{errno} to one of these values:
+@table @code
+@item EBADF
+@var{fd} is no valid file descriptor or is not opened for writing.
+@item EINVAL
+The object referred to by @var{fd} does not permit this operation.
+@item EROFS
+The file is on a read-only file system.
+@end table
+@end deftypefun
+
 @node I/O Primitives
 @section Input and Output Primitives
 
@@ -297,6 +382,14 @@ orphaned.  @xref{Job Control}, for more information about job control,
 and @ref{Signal Handling}, for information about signals.
 @end table
 
+This function is a cancelation point in multi-threaded programs.  This
+is a problem if the thread allocates some resources (like memory, file
+descriptors, semaphores or whatever) at the time @code{read} is
+called.  If the thread gets canceled these resources stay allocated
+until the program ends.  To avoid this calls to @code{read} should be
+protected using cancelation handlers.
+@c ref pthread_cleanup_push / pthread_cleanup_pop
+
 The @code{read} function is the underlying primitive for all of the
 functions that read from streams, such as @code{fgetc}.
 @end deftypefun
@@ -419,6 +512,14 @@ macro @code{TEMP_FAILURE_RETRY}, as follows:
 nbytes = TEMP_FAILURE_RETRY (write (desc, buffer, count));
 @end smallexample
 
+This function is a cancelation point in multi-threaded programs.  This
+is a problem if the thread allocates some resources (like memory, file
+descriptors, semaphores or whatever) at the time @code{write} is
+called.  If the thread gets canceled these resources stay allocated
+until the program ends.  To avoid this calls to @code{write} should be
+protected using cancelation handlers.
+@c ref pthread_cleanup_push / pthread_cleanup_pop
+
 The @code{write} function is the underlying primitive for all of the
 functions that write to streams, such as @code{fputc}.
 @end deftypefun
@@ -537,9 +638,18 @@ only for pipes and FIFOs, but in the GNU system, you always get
 @code{ESPIPE} if the object is not seekable.)
 @end table
 
+This function is a cancelation point in multi-threaded programs.  This
+is a problem if the thread allocates some resources (like memory, file
+descriptors, semaphores or whatever) at the time @code{lseek} is
+called.  If the thread gets canceled these resources stay allocated
+until the program ends.  To avoid this calls to @code{lseek} should be
+protected using cancelation handlers.
+@c ref pthread_cleanup_push / pthread_cleanup_pop
+
 The @code{lseek} function is the underlying primitive for the
-@code{fseek}, @code{ftell} and @code{rewind} functions, which operate on
-streams instead of file descriptors.
+@code{fseek}, @code{fseeko}, @code{ftell}, @code{ftello} and
+@code{rewind} functions, which operate on streams instead of file
+descriptors.
 @end deftypefun
 
 You can have multiple descriptors for the same file if you open the file
@@ -1007,6 +1117,100 @@ There is another example showing the use of @code{select} to multiplex
 input from multiple sockets in @ref{Server Example}.
 
 
+@node Synchronizing I/O
+@section Synchronizing I/O operations
+
+@cindex synchronizing
+In most modern operation systems the normal I/O operations are not
+executed synchronously.  I.e., even if a @code{write} system call
+returns this does not mean the data is actually written to the media,
+e.g., the disk.
+
+In situations where synchronization points are necessary the user can
+use special functions which ensure that all operations finished before
+they return.
+
+@comment unistd.h
+@comment X/Open
+@deftypefun int sync (void)
+A call to this function will not return as long as there is data which
+that is not written to the device.  All dirty buffers in the kernel will
+be written and so an overall consistent system can be achieved (if no
+other process in parallel writes data).
+
+A prototype for @code{sync} can be found in @file{unistd.h}.
+
+The return value is zero to indicate no error.
+@end deftypefun
+
+More often it is wanted that not all data in the system is committed.
+Programs want to ensure that data written to a given file are all
+committed and in this situation @code{sync} is overkill.
+
+@comment unistd.h
+@comment POSIX
+@deftypefun int fsync (int @var{fildes})
+The @code{fsync} can be used to make sure all data associated with the
+open file @var{fildes} is written to the device associated with the
+descriptor.  The function call does not return unless all actions have
+finished.
+
+A prototype for @code{fsync} can be found in @file{unistd.h}.
+
+This function is a cancelation point in multi-threaded programs.  This
+is a problem if the thread allocates some resources (like memory, file
+descriptors, semaphores or whatever) at the time @code{fsync} is
+called.  If the thread gets canceled these resources stay allocated
+until the program ends.  To avoid this calls to @code{fsync} should be
+protected using cancelation handlers.
+@c ref pthread_cleanup_push / pthread_cleanup_pop
+
+The return value of the function is zero if no error occured.  Otherwise
+it is @math{-1} and the global variable @var{errno} is set to the
+following values:
+@table @code
+@item EBADF
+The descriptor @var{fildes} is not valid.
+
+@item EINVAL
+No synchronization is possible since the system does not implement this.
+@end table
+@end deftypefun
+
+Sometimes it is not even necessary to write all data associated with a
+file descriptor.  E.g., in database files which do not change in size it
+is enough to write all the file content data to the device.
+Metainformation like the modification time etc. are not that important
+and leaving such information uncommitted does not prevent a successful
+recovering of the file in case of a problem.
+
+@comment unistd.h
+@comment POSIX
+@deftypefun int fdatasync (int @var{fildes})
+When a call to the @code{fdatasync} function returns it is maed sure
+that all of the file data is written to the device.  For all pending I/O
+operations the parts guaranteeing data integrety finished.
+
+Not all systems implement the @code{fdatasync} operation.  On systems
+missing this functionality @code{fdatasync} is emulated by a call to
+@code{fsync} since the performed actions are a superset of those
+required by @code{fdatasyn}.
+
+The prototype for @code{fdatasync} is in @file{unistd.h}.
+
+The return value of the function is zero if no error occured.  Otherwise
+it is @math{-1} and the global variable @var{errno} is set to the
+following values:
+@table @code
+@item EBADF
+The descriptor @var{fildes} is not valid.
+
+@item EINVAL
+No synchronization is possible since the system does not implement this.
+@end table
+@end deftypefun
+
+
 @node Control Operations
 @section Control Operations on Files
 
@@ -1069,6 +1273,14 @@ Get process or process group ID to receive @code{SIGIO} signals.
 Set process or process group ID to receive @code{SIGIO} signals.
 @xref{Interrupt Input}.
 @end table
+
+This function is a cancelation point in multi-threaded programs.  This
+is a problem if the thread allocates some resources (like memory, file
+descriptors, semaphores or whatever) at the time @code{fcntl} is
+called.  If the thread gets canceled these resources stay allocated
+until the program ends.  To avoid this calls to @code{fcntl} should be
+protected using cancelation handlers.
+@c ref pthread_cleanup_push / pthread_cleanup_pop
 @end deftypefun
 
 
index 28182701036cbe77d0a7ac1d5ec707689cdc7390..e6fc47f8e1b5d986e35e9e42e02f9229efaf281f 100644 (file)
@@ -50,28 +50,21 @@ Here are some options that you should specify (if appropriate) when
 you run @code{configure}:
 
 @table @samp
-@item --with-gnu-ld
-Use this option if you plan to use GNU @code{ld} to link programs with
-the GNU C Library.  (We strongly recommend that you do.)  This option
-enables use of features that exist only in GNU @code{ld}; so if you
-configure for GNU @code{ld} you must use GNU @code{ld} @emph{every time}
-you link with the GNU C Library, and when building it.
-
-@item --with-gnu-as
-Use this option if you plan to use the GNU assembler, @code{gas}, when
-building the GNU C Library.  On some systems, the library may not build
-properly if you do @emph{not} use @code{gas}.
-
-@item --with-gnu-binutils
-This option implies both @w{@samp{--with-gnu-ld}} and @w{@samp{--with-gnu-as}}.
-On systems where GNU tools are the system tools, there is no need to
-specify this option.  These include GNU, GNU/Linux, and free BSD systems.
+@item --with-binutils=@var{directory}
+Use the binutils (assembler and linker) in @file{@var{directory}}, not
+the ones the C compiler would default to.  You could use this option if
+the default binutils on your system cannot deal with all the constructs
+in the GNU C library.  (@code{configure} will detect the problem and
+suppress these constructs, so the library will still be usable, but
+functionality may be lost---for example, you can not build a shared libc
+with old binutils.)
 
 @c extra blank line makes it look better
 @item --without-fp
 @itemx --nfp
 
-Use this option if your computer lacks hardware floating-point support.
+Use this option if your computer lacks hardware floating-point support
+and your operating system does not emulate an FPU.
 
 @item --prefix=@var{directory}
 Install machine-independent data files in subdirectories of
@@ -1133,6 +1126,114 @@ extensions that they make and grant Carnegie Mellon the rights to
 redistribute these changes.
 @end quotation
 
+@item
+The code for the database library @file{libdb} comes from the 2.3
+release of Berkeley DB. That code is under the same copyright as 4.4 BSD
+and also:
+
+@quotation
+@display
+Copyright @copyright{} 1990, 1993, 1994, 1995, 1996, 1997
+Sleepycat Software.  All rights reserved.
+@end display
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+@enumerate
+@item
+Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+@item
+Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+@item
+Redistributions in any form must be accompanied by information on
+how to obtain complete source code for the DB software and any
+accompanying software that uses the DB software.  The source code
+must either be included in the distribution or be available for no
+more than the cost of distribution plus a nominal fee, and must be
+freely redistributable under reasonable conditions.  For an
+executable file, complete source code means the source code for all
+modules it contains.  It does not mean source code for modules or
+files that typically accompany the operating system on which the
+executable file runs, e.g., standard library modules or system
+header files.
+@end enumerate
+
+@sc{this software is provided by sleepycat software ``as is'' and
+any express or implied warranties, including, but not limited to, the
+implied warranties of merchantability and fitness for a particular purpose
+are disclaimed.  in no event shall sleepycat software be liable
+for any direct, indirect, incidental, special, exemplary, or consequential
+damages (including, but not limited to, procurement of substitute goods
+or services; loss of use, data, or profits; or business interruption)
+however caused and on any theory of liability, whether in contract, strict
+liability, or tort (including negligence or otherwise) arising in any way
+out of the use of this software, even if advised of the possibility of
+such damage.}
+
+@display
+Portions copyright @copyright{} 1995, 1996
+The President and Fellows of Harvard University.
+All rights reserved.
+@end display
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+@enumerate
+@item
+Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+@item
+Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+@item
+All advertising materials mentioning features or use of this software
+must display the following acknowledgement:
+@quotation
+ This product includes software developed by Harvard University
+ and its contributors.
+@end quotation
+@item
+Neither the name of the University nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+@end enumerate
+
+@sc{this software is provided by harvard and its contributors ``as is'' and
+any express or implied warranties, including, but not limited to, the
+implied warranties of merchantability and fitness for a particular purpose
+are disclaimed.  in no event shall harvard or its contributors be liable
+for any direct, indirect, incidental, special, exemplary, or consequential
+damages (including, but not limited to, procurement of substitute goods
+or services; loss of use, data, or profits; or business interruption)
+however caused and on any theory of liability, whether in contract, strict
+liability, or tort (including negligence or otherwise) arising in any way
+out of the use of this software, even if advised of the possibility of
+such damage.}
+
+@noindent
+For a license to use, redistribute or sell DB software under conditions
+other than those described above, or to purchase support for this
+software, please contact Sleepycat Software at
+
+@display
+ Sleepycat Software
+ 394 E. Riding Dr.
+ Carlisle, MA 01741
+ USA
+ +1-508-287-4781
+@end display
+
+or @email{db@@sleepycat.com}.
+
+@end quotation
+
 @end itemize
 
 @c @bye
index 15a2075d3368c02561d252b1473ea7dd4975ebe0..fe9394b22de2ca93996136ccd870fc5502e01cdc 100644 (file)
@@ -1259,6 +1259,31 @@ $$\log(z) = \log(|z|) + i \arg(z)$$
 @end iftex
 @end deftypefun
 
+
+@comment complex.h
+@comment GNU
+@deftypefun {complex double} clog10 (complex double @var{z})
+@deftypefunx {complex float} clog10f (complex float @var{z})
+@deftypefunx {complex long double} clog10l (complex long double @var{z})
+These functions return the base 10 logarithm of the complex value
+@var{z}.  Unlike the real value version @code{log} and its variants,
+@code{clog} has no limit for the range of its argument @var{z}.
+
+@noindent
+Mathematically this corresponds to the value
+
+@ifinfo
+@math{log (z) = log10 (cabs (z)) + I * carg (z)}
+@end ifinfo
+@iftex
+@tex
+$$\log_{10}(z) = \log_{10}(|z|) + i \arg(z)$$
+@end tex
+@end iftex
+
+This function is a GNU extension.
+@end deftypefun
+
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} csqrt (complex double @var{z})
@@ -1274,7 +1299,7 @@ the value of the argument.
 @deftypefun {complex double} cpow (complex double @var{base}, complex double @var{power})
 @deftypefunx {complex float} cpowf (complex float @var{base}, complex float @var{power})
 @deftypefunx {complex long double} cpowl (complex long double @var{base}, complex long double @var{power})
-These functions return the complex value @var{BASE} raised to the power of
+These functions return the complex value @var{base} raised to the power of
 @var{power}.  This is computed as
 
 @ifinfo
index d382df5df10573139ddb4d3cfe3e0281b8cd9cd9..43230154f61513994d1c59b2d5f347f3eb95178f 100644 (file)
@@ -62,6 +62,14 @@ possible to create the shell process, and otherwise is the status of the
 shell process.  @xref{Process Completion}, for details on how this
 status code can be interpreted.
 
+This function is a cancelation point in multi-threaded programs.  This
+is a problem if the thread allocates some resources (like memory, file
+descriptors, semaphores or whatever) at the time @code{system} is
+called.  If the thread gets canceled these resources stay allocated
+until the program ends.  To avoid this calls to @code{system} should be
+protected using cancelation handlers.
+@c ref pthread_cleanup_push / pthread_cleanup_pop
+
 @pindex stdlib.h
 The @code{system} function is declared in the header file
 @file{stdlib.h}.
@@ -477,6 +485,14 @@ processes as well as processes that have terminated.
 The status information from the child process is stored in the object
 that @var{status-ptr} points to, unless @var{status-ptr} is a null pointer.
 
+This function is a cancelation point in multi-threaded programs.  This
+is a problem if the thread allocates some resources (like memory, file
+descriptors, semaphores or whatever) at the time @code{waitpid} is
+called.  If the thread gets canceled these resources stay allocated
+until the program ends.  To avoid this calls to @code{waitpid} should be
+protected using cancelation handlers.
+@c ref pthread_cleanup_push / pthread_cleanup_pop
+
 The return value is normally the process ID of the child process whose
 status is reported.  If the @code{WNOHANG} option was specified and no
 child process is waiting to be noticed, the value is zero.  A value of
@@ -547,6 +563,14 @@ is exactly equivalent to:
 @smallexample
 waitpid (-1, &status, 0)
 @end smallexample
+
+This function is a cancelation point in multi-threaded programs.  This
+is a problem if the thread allocates some resources (like memory, file
+descriptors, semaphores or whatever) at the time @code{wait} is
+called.  If the thread gets canceled these resources stay allocated
+until the program ends.  To avoid this calls to @code{wait} should be
+protected using cancelation handlers.
+@c ref pthread_cleanup_push / pthread_cleanup_pop
 @end deftypefun
 
 @comment sys/wait.h
index bc69019e639dbbafb6b00f7a701df54deac63a11..79482298713026a50eefaa72844a988f4091c95c 100644 (file)
@@ -2927,6 +2927,14 @@ The function was interrupted by delivery of a signal.
 If the signal causes program termination, @code{pause} doesn't return
 (obviously).
 
+This function is a cancelation point in multi-threaded programs.  This
+is a problem if the thread allocates some resources (like memory, file
+descriptors, semaphores or whatever) at the time @code{pause} is
+called.  If the thread gets canceled these resources stay allocated
+until the program ends.  To avoid this calls to @code{pause} should be
+protected using cancelation handlers.
+@c ref pthread_cleanup_push / pthread_cleanup_pop
+
 The @code{pause} function is declared in  @file{unistd.h}.
 @end deftypefun
 
index 4c90b25447fa75ff1217f628fc8e133ca9271546..fbf218ebf37f721716c9745ecba2329d8536db0c 100644 (file)
@@ -895,7 +895,7 @@ The conversion specifications in a @code{printf} template string have
 the general form:
 
 @example
-% @var{flags} @var{width} @r{[} . @var{precision} @r{]} @var{type} @var{conversion}
+% @r{[} @var{param-no} @r{$]} @var{flags} @var{width} @r{[} . @var{precision} @r{]} @var{type} @var{conversion}
 @end example
 
 For example, in the conversion specifier @samp{%-10.8ld}, the @samp{-}
@@ -909,6 +909,33 @@ In more detail, output conversion specifications consist of an
 initial @samp{%} character followed in sequence by:
 
 @itemize @bullet
+@item
+An optional specification of the parameter used for this format.
+Normally the parameters to the @code{printf} function a assigned to the
+formats in the order of appearence in the format string.  But in some
+situations (such as message translation) this is not desirable and this
+extension allows to specify and explicit parameter to be used.
+
+The @var{param-no} part of the format must be an integer in the range of
+1 to the maximum number of arguments present to the function call.  Some
+implementations limit this number to a certainly upper bound.  The exact
+limit can be retrieved by the following constant.
+
+@defvr Macro NL_ARGMAX
+The value of @code{ARGMAX} is the maximum value allowed for the
+specification of an positional parameter in a @code{printf} call.  The
+actual value in effect at runtime can be retrieved by using
+@code{sysconf} using the @code{_SC_NL_ARGMAX} parameter @pxref{Sysconf
+Definition}.
+
+Some system have a quite low limit such as @math{9} for @w{System V}
+systems.  The GNU C library has no real limit.
+@end defvr
+
+If any of the formats has a specification for the parameter position all
+of them in the format string shall have one.  Otherwise the behaviour is
+undefined.
+
 @item
 Zero or more @dfn{flag characters} that modify the normal behavior of
 the conversion specification.
index fcd30a11aafa23b3eaf75b2d3a7b84d95c6a9734..7e0f9852202deba9a1bcd99a64e42a0e26345466 100644 (file)
@@ -1638,6 +1638,14 @@ The @var{filedes} is not associated with a terminal device.
 The @code{tcdrain} function waits until all queued
 output to the terminal @var{filedes} has been transmitted.
 
+This function is a cancelation point in multi-threaded programs.  This
+is a problem if the thread allocates some resources (like memory, file
+descriptors, semaphores or whatever) at the time @code{tcdrain} is
+called.  If the thread gets canceled these resources stay allocated
+until the program ends.  To avoid this calls to @code{tcdrain} should be
+protected using cancelation handlers.
+@c ref pthread_cleanup_push / pthread_cleanup_pop
+
 The return value is normally zero.  In the event of an error, a value
 of @code{-1} is returned.  The following @code{errno} error conditions
 are defined for this function:
index 7a5cd655c023fc126e10082141db7a8a23b5d9fc..c2b2378da8cbfd884f58255594b88b0ae50629d9 100644 (file)
@@ -1455,6 +1455,42 @@ On the GNU system, it is safe to use @code{sleep} and @code{SIGALRM} in
 the same program, because @code{sleep} does not work by means of
 @code{SIGALRM}.
 
+@comment time.h
+@comment POSIX.1
+@deftypefun int nanosleep (const struct timespec *@var{requested_time}, struct timespec *@var{remaining})
+If the resolution of seconds is not enough the @code{nanosleep} function
+can be used.  As the name suggests the sleeping period can be specified
+in nanoseconds.  The actual period of waiting time might be longer since
+the requested time in the @var{requested_time} parameter is rounded up
+to the next integer multiple of the actual resolution of the system.
+
+If the function returns because the time has elapsed the return value is
+zero.  If the function return @math{-1} the global variable @var{errno}
+is set to the following values:
+
+@table @code
+@item EINTR
+The call was interrupted because a signal was delivered to the thread.
+If the @var{remaining} parameter is not the null pointer the structure
+pointed to by @var{remaining} is updated to contain the remaining time.
+
+@item EINVAL
+The nanosecond value in the @var{requested_time} parameter contains an
+illegal value.  Either the value is negative or greater than or equal to
+1000 million.
+@end table
+
+This function is a cancelation point in multi-threaded programs.  This
+is a problem if the thread allocates some resources (like memory, file
+descriptors, semaphores or whatever) at the time @code{nanosleep} is
+called.  If the thread gets canceled these resources stay allocated
+until the program ends.  To avoid this calls to @code{nanosleep} should
+be protected using cancelation handlers.
+@c ref pthread_cleanup_push / pthread_cleanup_pop
+
+The @code{nanosleep} function is declared in @file{time.h}.
+@end deftypefun
+
 @node Resource Usage
 @section Resource Usage
 
index bc54d57c43f59a63d87c3a1f9131940fae27a155..d7525d084d29794382009eac17a0203154fafbbc 100644 (file)
@@ -23,7 +23,7 @@ subdir                := math
 # Installed header files.
 headers                := math.h bits/mathcalls.h bits/mathinline.h bits/huge_val.h \
                   bits/nan.h fpu_control.h complex.h bits/cmathcalls.h \
-                  fenv.h bits/fenv.h bits/mathdef.h
+                  fenv.h bits/fenv.h bits/mathdef.h tgmath.h
 
 # Internal header files.
 distribute     := math_private.h machine/asm.h machine/endian.h
@@ -39,7 +39,6 @@ extra-libs-others = $(extra-libs)
 libm-map       := libm.map
 
 libm-support = k_standard s_lib_version s_matherr s_signgam            \
-              s_lrint s_llrint s_lround s_llround                      \
               fclrexcpt fgetexcptflg fraiseexcpt fsetexcptflg          \
               ftestexcept fegetround fesetround fegetenv feholdexcpt   \
               fesetenv feupdateenv
@@ -49,8 +48,8 @@ libm-calls = e_acos e_acosh e_asin e_atan2 e_atanh e_cosh e_exp e_fmod        \
             k_cos k_rem_pio2 k_sin k_tan s_asinh s_atan s_cbrt         \
             s_ceil s_copysign s_cos s_erf s_expm1 s_fabs s_finite      \
             s_floor s_frexp s_ilogb s_ldexp s_log1p s_logb             \
-            s_modf s_nextafter s_rint s_scalbn s_significand           \
-            s_sin s_tan s_tanh w_acos w_acosh w_asin                   \
+            s_modf s_nextafter s_nextafterx s_rint s_scalbn s_scalbln  \
+            s_significand s_sin s_tan s_tanh w_acos w_acosh w_asin     \
             w_atan2 w_atanh w_cosh w_drem w_exp w_exp2 w_fmod w_gamma  \
             w_hypot w_j0 w_j1 w_jn w_lgamma w_lgamma_r                 \
             w_log w_log10 w_pow w_remainder w_scalb w_sinh w_sqrt      \
@@ -58,7 +57,8 @@ libm-calls = e_acos e_acosh e_asin e_atan2 e_atanh e_cosh e_exp e_fmod        \
             s_remquo s_log2 s_exp2 s_round s_nearbyint s_sincos        \
             conj cimag creal cabs carg s_cexp s_csinh s_ccosh s_clog   \
             s_catan s_casin s_ccos s_csin s_ctan s_ctanh s_cacos       \
-            s_casinh s_cacosh s_catanh s_csqrt s_cpow s_cproj
+            s_casinh s_cacosh s_catanh s_csqrt s_cpow s_cproj s_clog10 \
+            s_fma s_lrint s_llrint s_lround s_llround
 libm-routines = $(libm-support) $(libm-calls) \
                $(patsubst %_rf,%f_r,$(libm-calls:=f))  \
                $(long-m-$(long-double-fcts))
index d94e76493064f044d55d71d6fb669d8a004d7f4c..ca0dfe1b9cd4e752d1276055fa279fa8e8eb62a7 100644 (file)
@@ -90,6 +90,11 @@ __MATHCALL (cexp, (_Mdouble_complex_ __z));
 /* Natural logarithm of Z.  */
 __MATHCALL (clog, (_Mdouble_complex_ __z));
 
+#ifdef __USE_GNU
+/* The base 10 logarithm is not defined by the standard but to implement
+   the standard C++ library it is handy.  */
+__MATHCALL (clog10, (_Mdouble_complex_ __z));
+#endif
 
 /* Power functions.  */
 
index e0bf1008d39cfa9fdeec69646a6afe4853a0df14..dacc264136a3dfcb2d4f420d010f1278334eecc7 100644 (file)
@@ -232,6 +232,9 @@ __MATHCALL (rint,, (_Mdouble_ __x));
 
 /* Return X + epsilon if X < Y, X - epsilon if X > Y.  */
 __MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+#ifdef __USE_ISOC9X
+__MATHCALLX (nextafterx,, (_Mdouble_ __x, long double __y), (__const__));
+#endif
 
 /* Return the remainder of integer divison X / Y with infinite precision.  */
 __MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
@@ -240,13 +243,16 @@ __MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
 __MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n));
 
 /* Return X times (2 to the Nth power).  */
-__MATHCALL (scalbn,, (_Mdouble_ __x, long int __n));
+__MATHCALL (scalbn,, (_Mdouble_ __x, int __n));
 
 /* Return the binary exponent of X, which must be nonzero.  */
 __MATHDECL (int,ilogb,, (_Mdouble_ __x));
 #endif
 
 #ifdef __USE_ISOC9X
+/* Return X times (2 to the Nth power).  */
+__MATHCALL (scalbln,, (_Mdouble_ __x, long int __n));
+
 /* Round X to integral valuein floating-point format using current
    rounding direction, but do not raise inexact exception.  */
 __MATHCALL (nearbyint,, (_Mdouble_ __x));
@@ -265,6 +271,19 @@ __MATHCALLX (trunc,, (_Mdouble_ __x), (__const__));
 __MATHCALL (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo));
 
 
+/* Conversion functions.  */
+
+/* Round X to nearest integral value according to current rounding
+   direction.  */
+__MATHDECL (long int, lrint,, (_Mdouble_ __x));
+__MATHDECL (long long int, llrint,, (_Mdouble_ __x));
+
+/* Round X to nearest integral value, rounding halfway cases away from
+   zero.  */
+__MATHDECL (long int, lround,, (_Mdouble_ __x));
+__MATHDECL (long long int, llround,, (_Mdouble_ __x));
+
+
 /* Return positive difference between X and Y.  */
 __MATHCALL (fdim,, (_Mdouble_ __x, _Mdouble_ __y));
 
@@ -282,4 +301,8 @@ __MATHDECL_1 (int, __fpclassify,, (_Mdouble_ __value))
 /* Test for negative number.  */
 __MATHDECL_1 (int, __signbit,, (_Mdouble_ __value))
      __attribute__ ((__const__));
+
+
+/* Multiply-add function computed as a ternary operation.  */
+__MATHCALL (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z));
 #endif /* Use ISO C 9X.  */
index 2075adcb59863666265dcf89f09b058b55b48ad1..c24b5f0f8330a2c381127dfe908b1e42f63033d4 100644 (file)
@@ -4300,6 +4300,160 @@ clog_test (void)
 }
 
 
+static void
+clog10_test (void)
+{
+  __complex__ MATHTYPE result;
+
+  result = FUNC(clog10) (BUILD_COMPLEX (minus_zero, 0));
+  check_isinfn_exc ("real(clog10(-0 + i0)) = -Inf plus divide-by-zero exception",
+                   __real__ result, DIVIDE_BY_ZERO_EXCEPTION);
+  check ("imag(clog10(-0 + i0)) = pi plus divide-by-zero exception",
+        __imag__ result, M_PI);
+  result = FUNC(clog10) (BUILD_COMPLEX (minus_zero, minus_zero));
+  check_isinfn_exc ("real(clog10(-0 - i0)) = -Inf plus divide-by-zero exception",
+                   __real__ result, DIVIDE_BY_ZERO_EXCEPTION);
+  check ("imag(clog10(-0 - i0)) = -pi plus divide-by-zero exception",
+        __imag__ result, -M_PI);
+
+  result = FUNC(clog10) (BUILD_COMPLEX (0, 0));
+  check_isinfn_exc ("real(clog10(0 + i0)) = -Inf plus divide-by-zero exception",
+                   __real__ result, DIVIDE_BY_ZERO_EXCEPTION);
+  check ("imag(clog10(0 + i0)) = 0 plus divide-by-zero exception",
+        __imag__ result, 0);
+  result = FUNC(clog10) (BUILD_COMPLEX (0, minus_zero));
+  check_isinfn_exc ("real(clog10(0 - i0)) = -Inf plus divide-by-zero exception",
+                   __real__ result, DIVIDE_BY_ZERO_EXCEPTION);
+  check ("imag(clog10(0 - i0)) = -0 plus divide-by-zero exception",
+        __imag__ result, minus_zero);
+
+  result = FUNC(clog10) (BUILD_COMPLEX (minus_infty, plus_infty));
+  check_isinfp ("real(clog10(-Inf + i Inf)) = +Inf", __real__ result);
+  check ("imag(clog10(-Inf + i Inf)) = 3*pi/4", __imag__ result, M_PI - M_PI_4);
+  result = FUNC(clog10) (BUILD_COMPLEX (minus_infty, minus_infty));
+  check_isinfp ("real(clog10(-Inf - i Inf)) = +Inf", __real__ result);
+  check ("imag(clog10(-Inf - i Inf)) = -3*pi/4", __imag__ result, M_PI_4 - M_PI);
+
+  result = FUNC(clog10) (BUILD_COMPLEX (plus_infty, plus_infty));
+  check_isinfp ("real(clog10(+Inf + i Inf)) = +Inf", __real__ result);
+  check ("imag(clog10(+Inf + i Inf)) = pi/4", __imag__ result, M_PI_4);
+  result = FUNC(clog10) (BUILD_COMPLEX (plus_infty, minus_infty));
+  check_isinfp ("real(clog10(+Inf - i Inf)) = +Inf", __real__ result);
+  check ("imag(clog10(+Inf - i Inf)) = -pi/4", __imag__ result, -M_PI_4);
+
+  result = FUNC(clog10) (BUILD_COMPLEX (0, plus_infty));
+  check_isinfp ("real(clog10(0 + i Inf)) = +Inf", __real__ result);
+  check ("imag(clog10(0 + i Inf)) = pi/2", __imag__ result, M_PI_2);
+  result = FUNC(clog10) (BUILD_COMPLEX (3, plus_infty));
+  check_isinfp ("real(clog10(3 + i Inf)) = +Inf", __real__ result);
+  check ("imag(clog10(3 + i Inf)) = pi/2", __imag__ result, M_PI_2);
+  result = FUNC(clog10) (BUILD_COMPLEX (minus_zero, plus_infty));
+  check_isinfp ("real(clog10(-0 + i Inf)) = +Inf", __real__ result);
+  check ("imag(clog10(-0 + i Inf)) = pi/2", __imag__ result, M_PI_2);
+  result = FUNC(clog10) (BUILD_COMPLEX (-3, plus_infty));
+  check_isinfp ("real(clog10(-3 + i Inf)) = +Inf", __real__ result);
+  check ("imag(clog10(-3 + i Inf)) = pi/2", __imag__ result, M_PI_2);
+  result = FUNC(clog10) (BUILD_COMPLEX (0, minus_infty));
+  check_isinfp ("real(clog10(0 - i Inf)) = +Inf", __real__ result);
+  check ("imag(clog10(0 - i Inf)) = -pi/2", __imag__ result, -M_PI_2);
+  result = FUNC(clog10) (BUILD_COMPLEX (3, minus_infty));
+  check_isinfp ("real(clog10(3 - i Inf)) = +Inf", __real__ result);
+  check ("imag(clog10(3 - i Inf)) = -pi/2", __imag__ result, -M_PI_2);
+  result = FUNC(clog10) (BUILD_COMPLEX (minus_zero, minus_infty));
+  check_isinfp ("real(clog10(-0 - i Inf)) = +Inf", __real__ result);
+  check ("imag(clog10(-0 - i Inf)) = -pi/2", __imag__ result, -M_PI_2);
+  result = FUNC(clog10) (BUILD_COMPLEX (-3, minus_infty));
+  check_isinfp ("real(clog10(-3 - i Inf)) = +Inf", __real__ result);
+  check ("imag(clog10(-3 - i Inf)) = -pi/2", __imag__ result, -M_PI_2);
+
+  result = FUNC(clog10) (BUILD_COMPLEX (minus_infty, 0));
+  check_isinfp ("real(clog10(-Inf + i0)) = +Inf", __real__ result);
+  check ("imag(clog10(-Inf + i0)) = pi", __imag__ result, M_PI);
+  result = FUNC(clog10) (BUILD_COMPLEX (minus_infty, 1));
+  check_isinfp ("real(clog10(-Inf + i1)) = +Inf", __real__ result);
+  check ("imag(clog10(-Inf + i1)) = pi", __imag__ result, M_PI);
+  result = FUNC(clog10) (BUILD_COMPLEX (minus_infty, minus_zero));
+  check_isinfp ("real(clog10(-Inf - i0)) = +Inf", __real__ result);
+  check ("imag(clog10(-Inf - i0)) = -pi", __imag__ result, -M_PI);
+  result = FUNC(clog10) (BUILD_COMPLEX (minus_infty, -1));
+  check_isinfp ("real(clog10(-Inf - i1)) = +Inf", __real__ result);
+  check ("imag(clog10(-Inf - i1)) = -pi", __imag__ result, -M_PI);
+
+  result = FUNC(clog10) (BUILD_COMPLEX (plus_infty, 0));
+  check_isinfp ("real(clog10(+Inf + i0)) = +Inf", __real__ result);
+  check ("imag(clog10(+Inf + i0)) = 0", __imag__ result, 0);
+  result = FUNC(clog10) (BUILD_COMPLEX (plus_infty, 1));
+  check_isinfp ("real(clog10(+Inf + i1)) = +Inf", __real__ result);
+  check ("imag(clog10(+Inf + i1)) = 0", __imag__ result, 0);
+  result = FUNC(clog10) (BUILD_COMPLEX (plus_infty, minus_zero));
+  check_isinfp ("real(clog10(+Inf - i0)) = +Inf", __real__ result);
+  check ("imag(clog10(+Inf - i0)) = -0", __imag__ result, minus_zero);
+  result = FUNC(clog10) (BUILD_COMPLEX (plus_infty, -1));
+  check_isinfp ("real(clog10(+Inf - i1)) = +Inf", __real__ result);
+  check ("imag(clog10(+Inf - i1)) = -0", __imag__ result, minus_zero);
+
+  result = FUNC(clog10) (BUILD_COMPLEX (plus_infty, nan_value));
+  check_isinfp ("real(clog10(+Inf + i NaN)) = +Inf", __real__ result);
+  check_isnan ("imag(clog10(+Inf + i NaN)) = NaN", __imag__ result);
+  result = FUNC(clog10) (BUILD_COMPLEX (minus_infty, nan_value));
+  check_isinfp ("real(clog10(-Inf + i NaN)) = +Inf", __real__ result);
+  check_isnan ("imag(clog10(-Inf + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(clog10) (BUILD_COMPLEX (nan_value, plus_infty));
+  check_isinfp ("real(clog10(NaN + i Inf)) = +Inf", __real__ result);
+  check_isnan ("imag(clog10(NaN + i Inf)) = NaN", __imag__ result);
+  result = FUNC(clog10) (BUILD_COMPLEX (nan_value, minus_infty));
+  check_isinfp ("real(clog10(NaN - i Inf)) = +Inf", __real__ result);
+  check_isnan ("imag(clog10(NaN - i Inf)) = NaN", __imag__ result);
+
+  result = FUNC(clog10) (BUILD_COMPLEX (0, nan_value));
+  check_isnan_maybe_exc ("real(clog10(0 + i NaN)) = NaN plus maybe invalid exception",
+                        __real__ result, INVALID_EXCEPTION);
+  check_isnan ("imag(clog10(0 + i NaN)) = NaN plus maybe invalid exception",
+              __imag__ result);
+  result = FUNC(clog10) (BUILD_COMPLEX (3, nan_value));
+  check_isnan_maybe_exc ("real(clog10(3 + i NaN)) = NaN plus maybe invalid exception",
+                        __real__ result, INVALID_EXCEPTION);
+  check_isnan ("imag(clog10(3 + i NaN)) = NaN plus maybe invalid exception",
+              __imag__ result);
+  result = FUNC(clog10) (BUILD_COMPLEX (minus_zero, nan_value));
+  check_isnan_maybe_exc ("real(clog10(-0 + i NaN)) = NaN plus maybe invalid exception",
+                        __real__ result, INVALID_EXCEPTION);
+  check_isnan ("imag(clog10(-0 + i NaN)) = NaN plus maybe invalid exception",
+              __imag__ result);
+  result = FUNC(clog10) (BUILD_COMPLEX (-3, nan_value));
+  check_isnan_maybe_exc ("real(clog10(-3 + i NaN)) = NaN plus maybe invalid exception",
+                        __real__ result, INVALID_EXCEPTION);
+  check_isnan ("imag(clog10(-3 + i NaN)) = NaN plus maybe invalid exception",
+              __imag__ result);
+
+  result = FUNC(clog10) (BUILD_COMPLEX (nan_value, 0));
+  check_isnan_maybe_exc ("real(clog10(NaN + i0)) = NaN plus maybe invalid exception",
+                        __real__ result, INVALID_EXCEPTION);
+  check_isnan ("imag(clog10(NaN + i0)) = NaN plus maybe invalid exception",
+              __imag__ result);
+  result = FUNC(clog10) (BUILD_COMPLEX (nan_value, 5));
+  check_isnan_maybe_exc ("real(clog10(NaN + i5)) = NaN plus maybe invalid exception",
+                        __real__ result, INVALID_EXCEPTION);
+  check_isnan ("imag(clog10(NaN + i5)) = NaN plus maybe invalid exception",
+              __imag__ result);
+  result = FUNC(clog10) (BUILD_COMPLEX (nan_value, minus_zero));
+  check_isnan_maybe_exc ("real(clog10(NaN - i0)) = NaN plus maybe invalid exception",
+                        __real__ result, INVALID_EXCEPTION);
+  check_isnan ("imag(clog10(NaN - i0)) = NaN plus maybe invalid exception",
+              __imag__ result);
+  result = FUNC(clog10) (BUILD_COMPLEX (nan_value, -5));
+  check_isnan_maybe_exc ("real(clog10(NaN - i5)) = NaN plus maybe invalid exception",
+                        __real__ result, INVALID_EXCEPTION);
+  check_isnan ("imag(clog10(NaN - i5)) = NaN plus maybe invalid exception",
+              __imag__ result);
+
+  result = FUNC(clog10) (BUILD_COMPLEX (nan_value, nan_value));
+  check_isnan ("real(clog10(NaN + i NaN)) = NaN", __real__ result);
+  check_isnan ("imag(clog10(NaN + i NaN)) = NaN", __imag__ result);
+}
+
+
 static void
 csqrt_test (void)
 {
@@ -4539,43 +4693,52 @@ round_test (void)
 static void
 lround_test (void)
 {
-  check_long ("lround(0) = 0", lround (0), 0);
-  check_long ("lround(-0) = 0", lround (minus_zero), 0);
-  check_long ("lround(0.2) = 0", lround (0.2), 0.0);
-  check_long ("lround(-0.2) = 0", lround (-0.2), 0);
-  check_long ("lround(0.5) = 1", lround (0.5), 1);
-  check_long ("lround(-0.5) = -1", lround (-0.5), -1);
-  check_long ("lround(0.8) = 1", lround (0.8), 1);
-  check_long ("lround(-0.8) = -1", lround (-0.8), -1);
-  check_long ("lround(1.5) = 2", lround (1.5), 2);
-  check_long ("lround(-1.5) = -2", lround (-1.5), -2);
-  check_long ("lround(2097152.5) = 2097153", lround (2097152.5), 2097153);
-  check_long ("lround(-2097152.5) = -2097153", lround (-2097152.5),
+  check_long ("lround(0) = 0", FUNC(lround) (0), 0);
+  check_long ("lround(-0) = 0", FUNC(lround) (minus_zero), 0);
+  check_long ("lround(0.2) = 0", FUNC(lround) (0.2), 0.0);
+  check_long ("lround(-0.2) = 0", FUNC(lround) (-0.2), 0);
+  check_long ("lround(0.5) = 1", FUNC(lround) (0.5), 1);
+  check_long ("lround(-0.5) = -1", FUNC(lround) (-0.5), -1);
+  check_long ("lround(0.8) = 1", FUNC(lround) (0.8), 1);
+  check_long ("lround(-0.8) = -1", FUNC(lround) (-0.8), -1);
+  check_long ("lround(1.5) = 2", FUNC(lround) (1.5), 2);
+  check_long ("lround(-1.5) = -2", FUNC(lround) (-1.5), -2);
+  check_long ("lround(22514.5) = 22514", FUNC(lround) (1.5), 2);
+  check_long ("lround(-22514.5) = -22514", FUNC(lround) (-1.5), -2);
+#ifndef TEST_FLOAT
+  check_long ("lround(2097152.5) = 2097153", FUNC(lround) (2097152.5),
+             2097153);
+  check_long ("lround(-2097152.5) = -2097153", FUNC(lround) (-2097152.5),
              -2097153);
+#endif
 }
 
 
 static void
 llround_test (void)
 {
-  check_longlong ("llround(0) = 0", llround (0), 0);
-  check_longlong ("llround(-0) = 0", llround (minus_zero), 0);
-  check_longlong ("llround(0.2) = 0", llround (0.2), 0.0);
-  check_longlong ("llround(-0.2) = 0", llround (-0.2), 0);
-  check_longlong ("llround(0.5) = 1", llround (0.5), 1);
-  check_longlong ("llround(-0.5) = -1", llround (-0.5), -1);
-  check_longlong ("llround(0.8) = 1", llround (0.8), 1);
-  check_longlong ("llround(-0.8) = -1", llround (-0.8), -1);
-  check_longlong ("llround(1.5) = 2", llround (1.5), 2);
-  check_longlong ("llround(-1.5) = -2", llround (-1.5), -2);
+  check_longlong ("llround(0) = 0", FUNC(llround) (0), 0);
+  check_longlong ("llround(-0) = 0", FUNC(llround) (minus_zero), 0);
+  check_longlong ("llround(0.2) = 0", FUNC(llround) (0.2), 0.0);
+  check_longlong ("llround(-0.2) = 0", FUNC(llround) (-0.2), 0);
+  check_longlong ("llround(0.5) = 1", FUNC(llround) (0.5), 1);
+  check_longlong ("llround(-0.5) = -1", FUNC(llround) (-0.5), -1);
+  check_longlong ("llround(0.8) = 1", FUNC(llround) (0.8), 1);
+  check_longlong ("llround(-0.8) = -1", FUNC(llround) (-0.8), -1);
+  check_longlong ("llround(1.5) = 2", FUNC(llround) (1.5), 2);
+  check_longlong ("llround(-1.5) = -2", FUNC(llround) (-1.5), -2);
+  check_longlong ("llround(22514.5) = 22514", FUNC(llround) (1.5), 2);
+  check_longlong ("llround(-22514.5) = -22514", FUNC(llround) (-1.5), -2);
+#ifndef TEST_FLOAT
   check_longlong ("llround(2097152.5) = 2097153",
-                 llround (2097152.5), 2097153);
+                 FUNC(llround) (2097152.5), 2097153);
   check_longlong ("llround(-2097152.5) = -2097153",
-                 llround (-2097152.5), -2097153);
+                 FUNC(llround) (-2097152.5), -2097153);
   check_longlong ("llround(34359738368.5) = 34359738369",
-                 llround (34359738368.5), 34359738369ll);
+                 FUNC(llround) (34359738368.5), 34359738369ll);
   check_longlong ("llround(-34359738368.5) = -34359738369",
-                 llround (-34359738368.5), -34359738369ll);
+                 FUNC(llround) (-34359738368.5), -34359738369ll);
+#endif
 }
 
 
@@ -4962,6 +5125,7 @@ main (int argc, char *argv[])
   ccos_test ();
   ccosh_test ();
   clog_test ();
+  clog10_test ();
   cacos_test ();
   cacosh_test ();
   casin_test ();
index 2a1aa6cfbeccb586abe0816d697972021e4ec6fa..296d55d6759fc05b8a5d369f4dbeb57c1e96c17e 100644 (file)
@@ -23,6 +23,7 @@ GLIBC_2.0 {
     fdim; fdimf; fdiml;
     finite; finitef; finitel;
     floor; floorf; floorl;
+    fma; fmaf; fmal;
     fmax; fmaxf; fmaxl;
     fmin; fminf; fminl;
     fmod; fmodf; fmodl;
@@ -47,15 +48,19 @@ GLIBC_2.0 {
     nan; nanf; nanl;
     nearbyint; nearbyintf; nearbyintl;
     nextafter; nextafterf; nextafterl;
+    nextafterx; nextafterxf; nextafterxl;
     pow; powf; powl;
     remainder; remainderf; remainderl;
     remquo; remquof; remquol;
     rint; rintf; rintl;
-    lrint; llrint;
+    lrint; lrintf; lrintl;
+    llrint; llrintf; llrintl;
     round; roundf; roundl;
-    lround; llround;
+    lround; lroundf; lroundl;
+    llround; llroundf; llroundl;
     scalb; scalbf; scalbl;
     scalbn; scalbnf; scalbnl;
+    scalbln; scalblnf; scalblnl;
     significand; significandf; significandl;
     sin; sinf; sinl;
     sincos; sincosf; sincosl;
@@ -82,6 +87,8 @@ GLIBC_2.0 {
     cexp; cexpf; cexpl;
     cimag; cimagf; cimagl;
     clog; clogf; clogl;
+    clog10; clog10f; clog10l;
+    __clog10; __clog10f; __clog10l;
     conj; conjf; conjl;
     cpow; cpowf; cpowl;
     cproj; cprojf; cprojl;
index 762ccbe409573691e20be492b42c7e4cf2877562..51055849ce9aa7e24aeeef18e19e52f81f2525f6 100644 (file)
@@ -131,6 +131,18 @@ extern int signgam;
                  else  `float_t' and `double_t' are unspecified
 
      INFINITY  representation of the infinity value of type `float_t'
+
+     FP_FAST_FMA
+     FP_FAST_FMAF
+     FP_FAST_FMAL
+               If defined it indicates that the the `fma' function
+               generally executes about as fast as a multiply and an add.
+               This macro is defined only iff the `fma' function is
+               implemented directly with a hardware multiply-add instructions.
+
+    FP_ILOGB0  Expands to a value returned by `ilogb (0.0)'.
+    FP_ILOGBNAN        Expands to a value returned by `ilogb (NAN)'.
+
 */
 # include <bits/mathdef.h>
 
@@ -181,19 +193,6 @@ enum
       : sizeof (x) == sizeof (double) ?                                              \
         __isnan (x) : __isnanl (x))
 
-
-/* Conversion functions.  */
-
-/* Round X to nearest integral value according to current rounding
-   direction.  */
-extern long int lrint __P ((long double __x));
-extern long long int llrint __P ((long double __x));
-
-/* Round X to nearest integral value, rounding halfway cases away from
-   zero.  */
-extern long int lround __P ((long double __x));
-extern long long int llround __P ((long double __x));
-
 #endif /* Use ISO C 9X.  */
 
 #ifdef __USE_MISC
index 1f4ff8e0d036e40b53613de14ab96a8bd3795cc4..c2e7dc92b3e0384fb4800ec408797f67e98cb480 100644 (file)
@@ -23,6 +23,7 @@
 #define MATHCONST(x) x
 #define CHOOSE(Clongdouble,Cdouble,Cfloat) Cdouble
 #define PRINTF_EXPR "e"
+#define TEST_DOUBLE 1
 
 #ifndef __NO_MATH_INLINES
 # define __NO_MATH_INLINES
index de918a38860ffd68fce91f96ab21c05f4de5f938..849067c8da701c89c6dbfbb6e846d4ffade3e2f0 100644 (file)
@@ -23,6 +23,7 @@
 #define MATHCONST(x) x
 #define CHOOSE(Clongdouble,Cdouble,Cfloat) Cfloat
 #define PRINTF_EXPR "e"
+#define TEST_FLOAT 1
 
 #ifndef __NO_MATH_INLINES
 # define __NO_MATH_INLINES
index 614f10feb48c76ae79f42ddaf9c250dd3d074fba..3039ccf5b47661cc69612e6de3356be3a6655fa9 100644 (file)
@@ -24,6 +24,7 @@
 #define MATHCONST(x) x
 #define CHOOSE(Clongdouble,Cdouble,Cfloat) Cdouble
 #define PRINTF_EXPR "e"
+#define TEST_DOUBLE 1
 #define TEST_INLINE
 
 #ifdef __NO_MATH_INLINES
index 05e5de62ffd6aa3d0e5b82cbce05e28f9b78c0e2..d6f96f8622cb4e1b242428685f66c4f305b9f209 100644 (file)
@@ -23,7 +23,8 @@
 #define MATHCONST(x) x
 #define CHOOSE(Clongdouble,Cdouble,Cfloat) Cfloat
 #define PRINTF_EXPR "e"
-#define TEST_INLINE
+#define TEST_FLOAT 1
+#define TEST_INLINE 1
 
 #ifdef __NO_MATH_INLINES
 # undef __NO_MATH_INLINES
diff --git a/math/tgmath.h b/math/tgmath.h
new file mode 100644 (file)
index 0000000..4c7d957
--- /dev/null
@@ -0,0 +1,312 @@
+/* Copyright (C) 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.  */
+
+/*
+ *     ISO C 9X Standard: 7.9 Type-generic math        <tgmath.h>
+ */
+
+#ifndef _TGMATH_H
+#define _TGMATH_H      1
+
+/* Include the needed headers.  */
+#include <math.h>
+#include <complex.h>
+
+
+/* Since `complex' is currently not really implemented in most C compilers
+   and if it is implemented, the implementations differ.  This makes it
+   quite difficult to write a generic implementation of this header.  We
+   do not try this for now and instead concentrate only on GNU CC.  Once
+   we have more information support for other compilers might follow.  */
+
+#if defined __GNUC__ && (__GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+
+/* We have two kinds of generic macros: to support functions which are
+   only defined on real valued parameters and those which are defined
+   for complex functions as well.  */
+# define __TGMATH_UNARY_REAL_ONLY(Val, Fct) \
+     (__extension__ (sizeof (__real__ (Val)) == sizeof (long double)         \
+                    ? Fct##l (Val)                                           \
+                    : (sizeof (__real__ (Val)) == sizeof (double)            \
+                       ? Fct (Val)                                           \
+                       : Fct##f (Val))))
+
+# define __TGMATH_BINARY_FIRST_REAL_ONLY(Val1, Val2, Fct) \
+     (__extension__ (sizeof (__real__ (Val1)) == sizeof (long double)        \
+                    ? Fct##l (Val1, Val2)                                    \
+                    : (sizeof (__real__ (Val1)) == sizeof (double)           \
+                       ? Fct (Val1, Val2)                                    \
+                       : Fct##f (Val1, Val2))))
+
+# define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \
+     (__extension__ (sizeof (Val1) == sizeof (long double)                   \
+                    || sizeof (Val2) == sizeof (long double)                 \
+                    ? Fct##l (Val1, Val2)                                    \
+                    : (sizeof (Val1) == sizeof (double)                      \
+                       || sizeof (Val2) == sizeof (double)                   \
+                       ? Fct (Val1, Val2)                                    \
+                       : Fct##f (Val1, Val2))))
+
+# define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \
+     (__extension__ (sizeof (Val1) == sizeof (long double)                   \
+                    || sizeof (Val2) == sizeof (long double)                 \
+                    ? Fct##l (Val1, Val2, Val3)                              \
+                    : (sizeof (Val1) == sizeof (double)                      \
+                       || sizeof (Val2) == sizeof (double)                   \
+                       ? Fct (Val1, Val2, Val3)                              \
+                       : Fct##f (Val1, Val2, Val3))))
+
+# define __TGMATH_UNARY_REAL_IMAG(Val, Fct, Cfct) \
+     (__extension__ (sizeof (__real__ (Val)) == sizeof (long double)         \
+                    ? (sizeof (__real__ (Val)) == sizeof (Val)               \
+                       ? Fct##l (Val)                                        \
+                       : Cfct##l (Val))                                      \
+                    : (sizeof (__real__ (Val)) == sizeof (double)            \
+                       ? (sizeof (__real__ (Val)) == sizeof (Val)            \
+                          ? Fct (Val)                                        \
+                          : Cfct (Val))                                      \
+                       : (sizeof (__real__ (Val)) == sizeof (Val)            \
+                          ? Fct##f (Val)                                     \
+                          : Cfct##f (Val)))))
+
+# define __TGMATH_UNARY_IMAG_ONLY(Val, Fct) \
+     (__extension__ (sizeof (Val) == sizeof (__complex__ long double)        \
+                    ? Fct##l (Val)                                           \
+                    : (sizeof (Val) == sizeof (__complex__ double)           \
+                       ? Fct (Val)                                           \
+                       : Fct##f (Val))))
+
+# define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \
+     (__extension__ (sizeof (__real__ (Val1)) == sizeof (long double)        \
+                    || sizeof (__real__ (Val2)) == sizeof (long double)      \
+                    ? (sizeof (__real__ (Val1)) == sizeof (Val1)             \
+                       && sizeof (__real__ (Val2)) == sizeof (Val2)          \
+                       ? Fct##l (Val1, Val2)                                 \
+                       : Cfct##l (Val1, Val2))                               \
+                    : (sizeof (__real__ (Val1)) == sizeof (double)           \
+                       || sizeof (__real__ (Val2)) == sizeof (double)        \
+                       ? (sizeof (__real__ (Val1)) == sizeof (Val1)          \
+                          && sizeof (__real__ (Val2)) == sizeof (Val2)       \
+                          ? Fct (Val1, Val2)                                 \
+                          : Cfct (Val1, Val2))                               \
+                       : (sizeof (__real__ (Val1)) == sizeof (Val1)          \
+                          && sizeof (__real__ (Val2)) == sizeof (Val2)       \
+                          ? Fct##f (Val1, Val2)                              \
+                          : Cfct##f (Val1, Val2)))))
+#else
+# error "Unsupported compiler; you cannot use <tgmath.h>"
+#endif
+
+
+/* Unary functions defined for real and complex values.  */
+
+
+/* Trigonometric functions.  */
+
+/* Arc cosine of X.  */
+#define acos(Val) __TGMATH_UNARY_REAL_IMAG (Val, acos, cacos)
+/* Arc sine of X.  */
+#define asin(Val) __TGMATH_UNARY_REAL_IMAG (Val, asin, casin)
+/* Arc tangent of X.  */
+#define atan(Val) __TGMATH_UNARY_REAL_IMAG (Val, atan, catan)
+/* Arc tangent of Y/X.  */
+#define atan2(Val) __TGMATH_UNARY_REAL_ONLY (Val, atan2)
+
+/* Cosine of X.  */
+#define cos(Val) __TGMATH_UNARY_REAL_IMAG (Val, cos, ccos)
+/* Sine of X.  */
+#define sin(Val) __TGMATH_UNARY_REAL_IMAG (Val, sin, csin)
+/* Tangent of X.  */
+#define tan(Val) __TGMATH_UNARY_REAL_IMAG (Val, tan, ctan)
+
+
+/* Hyperbolic functions.  */
+
+/* Hyperbolic arc cosine of X.  */
+#define acosh(Val) __TGMATH_UNARY_REAL_IMAG (Val, acosh, cacosh)
+/* Hyperbolic arc sine of X.  */
+#define asinh(Val) __TGMATH_UNARY_REAL_IMAG (Val, asinh, casinh)
+/* Hyperbolic arc tangent of X.  */
+#define atanh(Val) __TGMATH_UNARY_REAL_IMAG (Val, atanh, catanh)
+
+/* Hyperbolic cosine of X.  */
+#define cosh(Val) __TGMATH_UNARY_REAL_IMAG (Val, cosh, ccosh)
+/* Hyperbolic sine of X.  */
+#define sinh(Val) __TGMATH_UNARY_REAL_IMAG (Val, sinh, csinh)
+/* Hyperbolic tangent of X.  */
+#define tanh(Val) __TGMATH_UNARY_REAL_IMAG (Val, tanh, ctanh)
+
+
+/* Exponential and logarithmic functions.  */
+
+/* Exponential function of X.  */
+#define exp(Val) __TGMATH_UNARY_REAL_IMAG (Val, exp, cexp)
+
+/* Break VALUE into a normalized fraction and an integral power of 2.  */
+#define frexp(Val1, Val2) __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, frexp)
+
+/* X times (two to the EXP power).  */
+#define ldexp(Val1, Val2) __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, ldexp)
+
+/* Natural logarithm of X.  */
+#define log(Val) __TGMATH_UNARY_REAL_IMAG (Val, log, clog)
+
+/* Base-ten logarithm of X.  */
+#define log10(Val) __TGMATH_UNARY_REAL_IMAG (Val, log10, __clog10)
+
+/* Return exp(X) - 1.  */
+#define expm1(Val) __TGMATH_UNARY_REAL_ONLY (Val, expm1)
+
+/* Return log(1 + X).  */
+#define log1p(Val) __TGMATH_UNARY_REAL_ONLY (Val, log1p)
+
+/* Return the base 2 signed integral exponent of X.  */
+#define logb(Val) __TGMATH_UNARY_REAL_ONLY (Val, logb)
+
+/* Compute base-2 exponential of X.  */
+#define exp2(Val) __TGMATH_UNARY_REAL_ONLY (Val, exp2)
+
+/* Compute base-2 logarithm of X.  */
+#define log2(Val) __TGMATH_UNARY_REAL_ONLY (Val, log2)
+
+
+/* Power functions.  */
+
+/* Return X to the Y power.  */
+#define pow(Val1, Val2) __TGMATH_BINARY_REAL_IMAG (Val1, Val2, pow, cpow)
+
+/* Return the square root of X.  */
+#define sqrt(Val) __TGMATH_UNARY_REAL_IMAG (Val, sqrt, csqrt)
+
+/* Return `sqrt(X*X + Y*Y)'.  */
+#define hypot(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, hypot)
+
+/* Return the cube root of X.  */
+#define cbrt(Val) __TGMATH_UNARY_REAL_ONLY (Val, cbrt)
+
+
+/* Nearest integer, absolute value, and remainder functions.  */
+
+/* Smallest integral value not less than X.  */
+#define ceil(Val) __TGMATH_UNARY_REAL_ONLY (Val, ceil)
+
+/* Absolute value of X.  */
+#define fabs(Val) __TGMATH_UNARY_REAL_IMAG (Val, fabs, cabs)
+
+/* Largest integer not greater than X.  */
+#define floor(Val) __TGMATH_UNARY_REAL_ONLY (Val, floor)
+
+/* Floating-point modulo remainder of X/Y.  */
+#define fmod(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmod)
+
+/* Round X to integral valuein floating-point format using current
+   rounding direction, but do not raise inexact exception.  */
+#define nearbyint(Val) __TGMATH_UNARY_REAL_ONLY (Val, nearbyint)
+
+/* Round X to nearest integral value, rounding halfway cases away from
+   zero.  */
+#define round(Val) __TGMATH_UNARY_REAL_ONLY (Val, round)
+
+/* Round X to the integral value in floating-point format nearest but
+   not larger in magnitude.  */
+#define trunc(Val) __TGMATH_UNARY_REAL_ONLY (Val, trunc)
+
+/* Compute remainder of X and Y and put in *QUO a value with sign of x/y
+   and magnitude congruent `mod 2^n' to the magnitude of the integral
+   quotient x/y, with n >= 3.  */
+#define remquo(Val1, Val2, Val3) \
+     __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY (Val1, Val2, Val3, remquo)
+
+/* Round X to nearest integral value according to current rounding
+   direction.  */
+#define lrint(Val) __TGMATH_UNARY_REAL_ONLY (Val, lrint)
+#define llrint(Val) __TGMATH_UNARY_REAL_ONLY (Val, llrint)
+
+/* Round X to nearest integral value, rounding halfway cases away from
+   zero.  */
+#define lround(Val) __TGMATH_UNARY_REAL_ONLY (Val, lround)
+#define llround(Val) __TGMATH_UNARY_REAL_ONLY (Val, llround)
+
+
+/* Return X with its signed changed to Y's.  */
+#define copysign(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, copysign)
+
+/* Error and gamma functions.  */
+#define erf(Val) __TGMATH_UNARY_REAL_ONLY (Val, erf)
+#define erfc(Val) __TGMATH_UNARY_REAL_ONLY (Val, erfc)
+#define gamma(Val) __TGMATH_UNARY_REAL_ONLY (Val, gamma)
+#define lgamma(Val) __TGMATH_UNARY_REAL_ONLY (Val, lgamma)
+
+
+/* Return the integer nearest X in the direction of the
+   prevailing rounding mode.  */
+#define rint(Val) __TGMATH_UNARY_REAL_ONLY (Val, rint)
+
+/* Return X + epsilon if X < Y, X - epsilon if X > Y.  */
+#define nextafter(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, nextafter)
+#define nextafterx(Val1, Val2) \
+     __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, nextafterx)
+
+/* Return the remainder of integer divison X / Y with infinite precision.  */
+#define remainder(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, remainder)
+
+/* Return X times (2 to the Nth power).  */
+#define scalb(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, scalb)
+
+/* Return X times (2 to the Nth power).  */
+#define scalbn(Val1, Val2) __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, scalbn)
+
+/* Return X times (2 to the Nth power).  */
+#define scalbln(Val1, Val2) \
+     __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, scalbln)
+
+/* Return the binary exponent of X, which must be nonzero.  */
+#define ilogb(Val) __TGMATH_UNARY_REAL_ONLY (Val, ilogb)
+
+
+/* Return positive difference between X and Y.  */
+#define fdim(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fdim)
+
+/* Return maximum numeric value from X and Y.  */
+#define fmax(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmax)
+
+/* Return minimum numeric value from X and Y.  */
+#define fmin(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmin)
+
+
+/* Absolute value, conjugates, and projection.  */
+
+/* Argument value of Z.  */
+#define carg(Val) __TGMATH_UNARY_IMAG_ONLY (Val, carg)
+
+/* Complex conjugate of Z.  */
+#define conj(Val) __TGMATH_UNARY_IMAG_ONLY (Val, conj)
+
+/* Projection of Z onto the Riemann sphere.  */
+#define cproj(Val) __TGMATH_UNARY_IMAG_ONLY (Val, cproj)
+
+
+/* Decomposing complex values.  */
+
+/* Imaginary part of Z.  */
+#define cimag(Val) __TGMATH_UNARY_IMAG_ONLY (Val, cimag)
+
+/* Real part of Z.  */
+#define creal(Val) __TGMATH_UNARY_IMAG_ONLY (Val, creal)
+
+#endif /* tgmath.h */
index fa971cabf0d97271e2cca396c8012314da284e0b..643e96f2f5f00db9e14187f70ed768cd112195fe 100644 (file)
@@ -1,5 +1,5 @@
-/* err.h -- 4.4BSD utility functions for error messages.
-   Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+/* 4.4BSD utility functions for error messages.
+   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
@@ -25,7 +25,7 @@
 #define        __need___va_list
 #include <stdarg.h>
 #ifndef        __GNUC_VA_LIST
-#define        __gnuc_va_list  __ptr_t
+# define __gnuc_va_list        __ptr_t
 #endif
 
 __BEGIN_DECLS
index 7f68cb13095845f85fbc0ada0974cfaa51147045..8b87a1f1f0e00b3c51a2ba3feb7cb2fc76bd5b19 100644 (file)
@@ -47,6 +47,7 @@ setfsent (void)
 }
 
 static struct fstab *
+internal_function
 mnt2fs (struct mntent *m)
 {
   static struct fstab f;
index 777108ff709ab7976e1b8e1f1d253fbedd0e531c..6743ac5d7dc5f1a705a6e3753be4d9fbc5389760 100644 (file)
@@ -57,7 +57,8 @@ getttynam(tty)
        return (t);
 }
 
-static char *skip __P((char *)), *value __P((char *));
+static char *skip __P((char *)) internal_function;
+static char *value __P((char *)) internal_function;
 
 struct ttyent *
 getttyent()
@@ -133,6 +134,7 @@ getttyent()
  * the next field.
  */
 static char *
+internal_function
 skip(p)
        register char *p;
 {
@@ -167,6 +169,7 @@ skip(p)
 }
 
 static char *
+internal_function
 value(p)
        register char *p;
 {
index 04da70a53464db7b77c0c5eeecd4aa2e6945cf7a..384001366e73a4e1535a406e7f0b08189ad43060 100644 (file)
@@ -28,6 +28,7 @@
    included only for compatibility reasons.  Use the POSIX definition
    in <regex.h> for portable applications and a reasonable interface.  */
 
+#include <features.h>
 #include <alloca.h>
 #include <regex.h>
 #include <stdlib.h>
@@ -110,13 +111,13 @@ compile (char *__instring, char *__expbuf, __const char *__endbuf, int __eof)
      of type `regex_t'.  Then check for minimum size of the buffer for
      the compiled regular expression.  */
   regex_t *__expr_ptr;
-#if defined __GNUC__ && __GNUC__ >= 2
+# if defined __GNUC__ && __GNUC__ >= 2
   const size_t __req = __alignof__ (regex_t *);
-#else
+# else
   /* How shall we find out?  We simply guess it and can change it is
      this really proofs to be wrong.  */
   const size_t __req = 8;
-#endif
+# endif
   __expbuf += __req;
   __expbuf -= (__expbuf - ((char *) 0)) % __req;
   if (__endbuf < __expbuf + sizeof (regex_t))
index 602779ebb7972ef26674bc230a1181399b7d5df9..5f40a0a45dc70beb954d640a901b3eafc6f922af 100644 (file)
 
 #ifdef __GNUC__
 
-#define        __P(args)       args    /* GCC can always grok prototypes.  */
-#define        __DOTS          , ...
+# define __P(args)     args    /* GCC can always grok prototypes.  */
+# define __DOTS                , ...
 
 #else  /* Not GCC.  */
 
-#define        __inline                /* No inline functions.  */
+# define __inline              /* No inline functions.  */
 
-#if (defined (__STDC__) && __STDC__) || defined (__cplusplus)
+# if (defined __STDC__ && __STDC__) || defined __cplusplus
 
-#define        __P(args)       args
-#define        __const         const
-#define        __signed        signed
-#define        __volatile      volatile
-#define        __DOTS          , ...
+#  define __P(args)    args
+#  define __const      const
+#  define __signed     signed
+#  define __volatile   volatile
+#  define __DOTS       , ...
 
-#else  /* Not ANSI C or C++.  */
+# else /* Not ANSI C or C++.  */
 
-#define        __P(args)       ()      /* No prototypes.  */
-#define        __const                 /* No ANSI C keywords.  */
-#define        __signed
-#define        __volatile
-#define        __DOTS
+#  define __P(args)    ()      /* No prototypes.  */
+#  define __const              /* No ANSI C keywords.  */
+#  define __signed
+#  define __volatile
+#  define __DOTS
 
-#endif /* ANSI C or C++.  */
+# endif        /* ANSI C or C++.  */
 
 #endif /* GCC.  */
 
 /* For these things, GCC behaves the ANSI way normally,
    and the non-ANSI way under -traditional.  */
 
-#if defined (__STDC__) && __STDC__
+#if defined __STDC__ && __STDC__
 
-#define        __CONCAT(x,y)   x ## y
-#define        __STRING(x)     #x
+# define __CONCAT(x,y) x ## y
+# define __STRING(x)   #x
 
 /* This is not a typedef so `const __ptr_t' does the right thing.  */
-#define __ptr_t void *
-#define __long_double_t  long double
+# define __ptr_t void *
+# define __long_double_t  long double
 
 #else
 
-#define        __CONCAT(x,y)   x/**/y
-#define        __STRING(x)     "x"
+# define __CONCAT(x,y) x/**/y
+# define __STRING(x)   "x"
 
-#define __ptr_t char *
-#define __long_double_t  long double
+# define __ptr_t char *
+# define __long_double_t  long double
 
 /* The BSD header files use the ANSI keywords unmodified (this means that
    old programs may lose if they use the new keywords as identifiers), but
    those names are not available under -traditional.  We define them to
    their __ versions, which are taken care of above.  */
 #ifdef __USE_BSD
-#define        const           __const
-#define        signed          __signed
-#define        volatile        __volatile
+# define const         __const
+# define signed                __signed
+# define volatile      __volatile
 #endif
 
 #endif /* __STDC__ */
 
 /* C++ needs to know that types and declarations are C, not C++.  */
 #ifdef __cplusplus
-#define        __BEGIN_DECLS   extern "C" {
-#define        __END_DECLS     }
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS   }
 #else
-#define        __BEGIN_DECLS
-#define        __END_DECLS
+# define __BEGIN_DECLS
+# define __END_DECLS
 #endif
 
 /* GCC2 has various useful declarations that can be made with the
    `__attribute__' syntax.  All of the ways we use this do fine if
    they are omitted for compilers that don't understand it.  */
-#if !defined (__GNUC__) || __GNUC__ < 2
-#define __attribute__(xyz)     /* Ignore.  */
+#if !defined __GNUC__ || __GNUC__ < 2
+# define __attribute__(xyz)    /* Ignore.  */
 #endif
 
 
index 9f946fb327f16fca2412cad08e8fd23cb6c21f87..02285938cf1743c11cffc10e9363defc97e24227 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 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
@@ -22,7 +22,7 @@
 #include <features.h>
 
 #ifndef        _FCNTL_H
-#include <fcntl.h>
+# include <fcntl.h>
 #endif
 
 __BEGIN_DECLS
@@ -31,19 +31,19 @@ __BEGIN_DECLS
 /* Alternate names for values for the WHENCE argument to `lseek'.
    These are the same as SEEK_SET, SEEK_CUR, and SEEK_END, respectively.  */
 #ifndef L_SET
-#define        L_SET   0       /* Seek from beginning of file.  */
-#define        L_INCR  1       /* Seek from current position.  */
-#define        L_XTND  2       /* Seek from end of file.  */
+# define L_SET 0       /* Seek from beginning of file.  */
+# define L_INCR        1       /* Seek from current position.  */
+# define L_XTND        2       /* Seek from end of file.  */
 #endif
 
 
 /* Operations for the `flock' call.  */
-#define        LOCK_SH 1    /* Shared lock.  */
-#define        LOCK_EX 2    /* Exclusive lock.  */
-#define        LOCK_UN 8    /* Unlock.  */
+#define        LOCK_SH 1       /* Shared lock.  */
+#define        LOCK_EX 2       /* Exclusive lock.  */
+#define        LOCK_UN 8       /* Unlock.  */
 
 /* Can be OR'd in to one of the above.  */
-#define        LOCK_NB 4    /* Don't block when locking.  */
+#define        LOCK_NB 4       /* Don't block when locking.  */
 
 
 /* Apply or remove an advisory lock, according to OPERATION,
index acb1b69e00101bbb4d292d864a972f6227327f6d..7aa29dad7d1686cab9e9e8e38b7a76a5047343dc 100644 (file)
@@ -70,7 +70,7 @@ extern char   *__progname;            /* Program name, from crt0. */
 /* Define the lock.  */
 __libc_lock_define_initialized (static, syslog_lock)
 
-static void openlog_internal(const char *, int, int);
+static void openlog_internal(const char *, int, int) internal_function;
 static void closelog_internal(void);
 static void sigpipe_handler (int);
 #ifdef _LIBC_REENTRANT
@@ -230,6 +230,7 @@ vsyslog(pri, fmt, ap)
 static struct sockaddr SyslogAddr;     /* AF_UNIX address of local logger */
 
 static void
+internal_function
 openlog_internal(const char *ident, int logstat, int logfac)
 {
        if (ident != NULL)
index e372a9e971dcc134d388b530366270f20269f242..c5af3ec689c7586a3808fc08b656b30898266233 100644 (file)
@@ -593,6 +593,7 @@ weak_alias (__tdelete, tdelete)
    ROOT is the root of the tree to be walked, ACTION the function to be
    called at each node.  LEVEL is the level of ROOT in the whole tree.  */
 static void
+internal_function
 trecurse (const void *vroot, __action_fn_t action, int level)
 {
   node root = (node ) vroot;
@@ -632,6 +633,7 @@ weak_alias (__twalk, twalk)
 /* The standardized functions miss an important functionality: the
    tree cannot be removed easily.  We provide a function to do this.  */
 static void
+internal_function
 tdestroy_recurse (node root, __free_fn_t freefct)
 {
   if (root->left != NULL)
index d6cf7a9f5e7c21c058f840757fa1edea61966628..c280caad63be63bb5b1baf21b74e609ce45ffa94 100644 (file)
@@ -1 +1 @@
-NIS(YP)/NIS+ NSS modules 0.14 by Thorsten Kukuk
+NIS(YP)/NIS+ NSS modules 0.15 by Thorsten Kukuk
index 82c5f24963a59a36d1032b58a8ae8ac5e74cc67d..e114faf1c75094acf6f132a92c27e574f522a1b9 100644 (file)
@@ -44,14 +44,15 @@ vpath %.c $(subdir-dirs)
 
 libnsl-routines = yp_xdr ypclnt ypupdate_xdr \
                   nis_subr nis_local_names nis_free nis_file \
-                  nis_print nis_error nis_call nis_lookup nis_clone\
-                  nis_cache nis_table nis_xdr nis_server nis_ping\
+                  nis_print nis_error nis_call nis_lookup\
+                  nis_table nis_xdr nis_server nis_ping\
                  nis_checkpoint nis_mkdir nis_rmdir nis_getservlist\
                  nis_verifygroup nis_ismember nis_addmember nis_util\
                  nis_removemember nis_creategroup nis_destroygroup\
                  nis_print_group_entry nis_domain_of nis_domain_of_r\
-                 nis_modify nis_remove nis_add nis_defaults lckcache\
-                 nis_findserv nis_callback
+                 nis_modify nis_remove nis_add nis_defaults\
+                 nis_findserv nis_callback nis_clone_dir nis_clone_obj\
+                 nis_clone_res
 libnsl-map     = libnsl.map
 
 libnss_compat-routines := $(addprefix compat-,grp pwd spwd) nisplus-parser
diff --git a/nis/TODO b/nis/TODO
deleted file mode 100644 (file)
index 8528de7..0000000
--- a/nis/TODO
+++ /dev/null
@@ -1,3 +0,0 @@
-
- * nis_addmember: Where checks for duplicate group members ? nisgrpadm or
-                 nis_addmember ?
diff --git a/nis/lckcache.c b/nis/lckcache.c
deleted file mode 100644 (file)
index f8c0a97..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/* Handle locking of NIS+ cache file.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
-   This file is part of the GNU C Library and based on shadow/lckfile.c.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-#include <fcntl.h>
-#include <bits/libc-lock.h>
-#include <shadow.h>
-#include <signal.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/file.h>
-#include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
-#include <rpcsvc/nis_cache.h>
-
-/* How long to wait for getting the lock before returning with an
-   error.  */
-#define TIMEOUT 5 /* sec */
-
-
-/* File descriptor for lock file.  */
-static int lock_fd = -1;
-
-/* Prevent problems in multithreaded program by using mutex.  */
-__libc_lock_define_initialized (static, lock)
-
-
-/* Prototypes for local functions.  */
-static void noop_handler __P ((int __sig));
-
-
-/* We cannot simply return in error cases.  We have to close the file
-   and perhaps restore the signal handler.  */
-#define RETURN_CLOSE_FD(code)                                                \
-  do {                                                                       \
-    if ((code) < 0 && lock_fd >= 0)                                          \
-      {                                                                              \
-       close (lock_fd);                                                      \
-       lock_fd = -1;                                                         \
-      }                                                                              \
-    __libc_lock_unlock (lock);                                               \
-    return (code);                                                           \
-  } while (0)
-
-#define RETURN_RESTORE_HANDLER(code)                                         \
-  do {                                                                       \
-    /* Restore old action handler for alarm.  We don't need to know          \
-       about the current one.  */                                            \
-    sigaction (SIGALRM, &saved_act, NULL);                                   \
-    RETURN_CLOSE_FD (code);                                                  \
-  } while (0)
-
-#define RETURN_CLEAR_ALARM(code)                                             \
-  do {                                                                       \
-    /* Clear alarm.  */                                                              \
-    alarm (0);                                                               \
-    /* Restore old set of handled signals.  We don't need to know            \
-       about the current one.*/                                                      \
-    sigprocmask (SIG_SETMASK, &saved_set, NULL);                             \
-    RETURN_RESTORE_HANDLER (code);                                           \
-  } while (0)
-
-
-int
-__nis_lock_cache (void)
-{
-  int flags;
-  sigset_t saved_set;                  /* Saved set of caught signals.  */
-  struct sigaction saved_act;          /* Saved signal action.  */
-  sigset_t new_set;                    /* New set of caught signals.  */
-  struct sigaction new_act;            /* New signal action.  */
-  struct flock fl;                     /* Information struct for locking.  */
-  int result;
-
-  if (lock_fd != -1)
-    /* Still locked by own process.  */
-    return -1;
-
-  /* Prevent problems caused by multiple threads.  */
-  __libc_lock_lock (lock);
-
-  lock_fd = open (CACHELOCK, O_RDONLY|O_CREAT, 0666);
-  if (lock_fd == -1)
-    /* Cannot create lock file.  */
-    RETURN_CLOSE_FD (-1);
-
-  /* Make sure file gets correctly closed when process finished.  */
-  flags = fcntl (lock_fd, F_GETFD, 0);
-  if (flags == -1)
-    /* Cannot get file flags.  */
-    RETURN_CLOSE_FD (-1);
-  flags |= FD_CLOEXEC;         /* Close on exit.  */
-  if (fcntl (lock_fd, F_SETFD, flags) < 0)
-    /* Cannot set new flags.  */
-    RETURN_CLOSE_FD (-1);
-
-  /* Now we have to get exclusive write access.  Since multiple
-     process could try this we won't stop when it first fails.
-     Instead we set a timeout for the system call.  Once the timer
-     expires it is likely that there are some problems which cannot be
-     resolved by waiting.
-
-     It is important that we don't change the signal state.  We must
-     restore the old signal behaviour.  */
-  memset (&new_act, '\0', sizeof (struct sigaction));
-  new_act.sa_handler = noop_handler;
-  sigfillset (&new_act.sa_mask);
-  new_act.sa_flags = 0ul;
-
-  /* Install new action handler for alarm and save old.  */
-  if (sigaction (SIGALRM, &new_act, &saved_act) < 0)
-    /* Cannot install signal handler.  */
-    RETURN_CLOSE_FD (-1);
-
-  /* Now make sure the alarm signal is not blocked.  */
-  sigemptyset (&new_set);
-  sigaddset (&new_set, SIGALRM);
-  if (sigprocmask (SIG_UNBLOCK, &new_set, &saved_set) < 0)
-    RETURN_RESTORE_HANDLER (-1);
-
-  /* Start timer.  If we cannot get the lock in the specified time we
-     get a signal.  */
-  alarm (TIMEOUT);
-
-  /* Try to get the lock.  */
-  memset (&fl, '\0', sizeof (struct flock));
-  fl.l_type = F_RDLCK;
-  fl.l_whence = SEEK_SET;
-  result = fcntl (lock_fd, F_SETLKW, &fl);
-
-  RETURN_CLEAR_ALARM (result);
-}
-
-
-int
-__nis_unlock_cache ()
-{
-  int result;
-
-  if (lock_fd == -1)
-    /* There is no lock set.  */
-    result = -1;
-  else
-    {
-      /* Prevent problems caused by multiple threads.  */
-      __libc_lock_lock (lock);
-
-      result = close (lock_fd);
-
-      /* Mark descriptor as unused.  */
-      lock_fd = -1;
-
-      /* Clear mutex.  */
-      __libc_lock_unlock (lock);
-    }
-
-  return result;
-}
-
-
-static void
-noop_handler (sig)
-     int sig;
-{
-  /* We simply return which makes the `fcntl' call return with an error.  */
-}
index cf22d27d2fcb979013d605749032cc403ef84cdc..49b3754e6df395a5d498614b4f024164ac44161b 100644 (file)
@@ -1,20 +1,12 @@
 GLIBC_2.0 {
   global:
-    __nis_default_access; __nis_default_group; __nis_default_owner;
-    __nis_default_ttl;    __nis_finddirectory; __nis_lock_cache;
-    __nis_unlock_cache;   __nis_hash;
 
-    nis_add;
-    nis_add_entry;        nis_addmember;       nis_checkpoint;
-    nis_clone_directory;  nis_clone_entry;     nis_clone_group;
-    nis_clone_link;       nis_clone_nis_attr;  nis_clone_objdata;
-    nis_clone_object;     nis_clone_result;    nis_clone_table;
-    nis_creategroup;      nis_destroy_object;  nis_destroygroup;
-    nis_dir_cmp;          nis_domain_of;       nis_domain_of_r;
-    nis_first_entry;      nis_free_attr;       nis_free_directory;
-    nis_free_endpoints;   nis_free_entry;      nis_free_group;
-    nis_free_link;        nis_free_object;     nis_free_request;
-    nis_free_servers;     nis_free_table;      nis_freenames;
+    nis_add;              nis_add_entry;       nis_addmember;
+    nis_checkpoint;       nis_clone_directory; nis_clone_object;
+    nis_clone_result;     nis_creategroup;     nis_destroy_object;
+    nis_destroygroup;     nis_dir_cmp;         nis_domain_of;
+    nis_domain_of_r;      nis_first_entry;     nis_free_directory;
+    nis_free_object;      nis_free_request;    nis_freenames;
     nis_freeresult;       nis_freeservlist;    nis_freetags;
     nis_getnames;         nis_getservlist;     nis_ismember;
     nis_leaf_of;          nis_leaf_of_r;       nis_lerror;
@@ -31,8 +23,15 @@ GLIBC_2.0 {
     nis_sperror;          nis_sperror_r;       nis_stats;
     nis_verifygroup;      nis_write_obj;
 
-    readColdStartFile;    writeColdStartFile;
+    # This functions are needed by the NIS+ tools and rpc.nisd,
+    # they should never be used in a normal user program !
+    __nis_default_access; __nis_default_group; __nis_default_owner;
+    __nis_default_ttl;    __nis_free_fdresult; __nis_finddirectory;
+    __nis_hash;                  readColdStartFile;   writeColdStartFile;
 
+    # Many programs expect this, but every user program should
+    # have it's own version, since the interface is different on
+    # various platforms.
     xdr_cp_result;        xdr_directory_obj;   xdr_domainname;
     xdr_dump_args;        xdr_endpoint;        xdr_entry_col;
     xdr_entry_obj;        xdr_fd_args;         xdr_fd_result;
@@ -54,7 +53,7 @@ GLIBC_2.0 {
     xdr_ypresp_xfr;       xdr_ypstat;          xdr_ypupdate_args;
     xdr_ypxfrstat;        xdr_zotypes;
 
-    __yp_check;          
+    __yp_check;
     yp_all;               yp_bind;             yp_first;
     yp_get_default_domain; yp_maplist;         yp_master;
     yp_match;             yp_next;             yp_order;
index 6693a25766a3900e0aba5d6116f8ba29f6ee20a6..d30ccde2f6e570e11db06bbcaa59df63f7e6367b 100644 (file)
@@ -18,7 +18,6 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 #include "nis_intern.h"
 
index 8fd7e12a5883d4cecd3c9c1504f716bfdf085045..6d55bd0d07000fa3c69c6cca4bb42ae5a6c342ec 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 nis_error
 nis_addmember (const_nis_name member, const_nis_name group)
@@ -42,28 +41,28 @@ nis_addmember (const_nis_name member, const_nis_name group)
           stpcpy (cp, cp2);
         }
       res = nis_lookup (buf, FOLLOW_LINKS|EXPAND_NAME);
-      if (res->status != NIS_SUCCESS)
+      if (NIS_RES_STATUS (res) != NIS_SUCCESS)
        {
-         status = res->status;
+         status = NIS_RES_STATUS (res);
          nis_freeresult (res);
          return status;
        }
-      if ((res->objects.objects_len != 1) ||
-          (res->objects.objects_val[0].zo_data.zo_type != GROUP_OBJ))
+      if ((NIS_RES_NUMOBJ (res)  != 1) ||
+          (__type_of (NIS_RES_OBJECT (res)) != NIS_GROUP_OBJ))
         return NIS_INVALIDOBJ;
 
-      res->objects.objects_val[0].GR_data.gr_members.gr_members_val
-       = realloc (res->objects.objects_val[0].GR_data.gr_members.gr_members_val,
-                  (res->objects.objects_val[0].GR_data.gr_members.gr_members_len + 1)
+      NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val
+       = realloc (NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val,
+                  (NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_len + 1)
                   * sizeof (char *));
-      res->objects.objects_val[0].GR_data.gr_members.gr_members_val[res->objects.objects_val[0].GR_data.gr_members.gr_members_len] = strdup (member);
-      ++res->objects.objects_val[0].GR_data.gr_members.gr_members_len;
+      NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val[NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_len] = strdup (member);
+      ++NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_len;
 
-      cp = stpcpy (buf, res->objects.objects_val->zo_name);
+      cp = stpcpy (buf, NIS_RES_OBJECT(res)->zo_name);
       *cp++ = '.';
-      strncpy (cp, res->objects.objects_val->zo_domain, NIS_MAXNAMELEN);
-      res2 = nis_modify (buf, res->objects.objects_val);
-      status = res2->status;
+      strncpy (cp, NIS_RES_OBJECT (res)->zo_domain, NIS_MAXNAMELEN);
+      res2 = nis_modify (buf, NIS_RES_OBJECT (res));
+      status = NIS_RES_STATUS (res2);
       nis_freeresult (res);
       nis_freeresult (res2);
 
diff --git a/nis/nis_cache.c b/nis/nis_cache.c
deleted file mode 100644 (file)
index e10b8c0..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-/* Copyright (C) 1997 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <syslog.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <rpcsvc/nis.h>
-#include <rpcsvc/nis_cache.h>
-#include <bits/libc-lock.h>
-
-#include "nis_intern.h"
-
-static struct timeval TIMEOUT = {10, 0};
-
-#define HEADER_MAGIC  0x07021971
-#define SPACER_MAGIC  0x07654321
-
-#define CACHE_VERSION 0x00000001
-
-struct cache_header
-{
-  u_long magic;               /* Magic number */
-  u_long vers;                /* Cache file format version */
-  u_short tcp_port;           /* tcp port of nis_cachemgr */
-  u_short udp_port;           /* udp port of nis_cachemgr */
-  u_long entries;             /* Number of cached objs. */
-  off_t used;                 /* How many space are used ? */
-};
-typedef struct cache_header cache_header;
-
-struct cache_spacer
-{
-  u_long magic;                /* Magic number */
-  u_long hashval;
-  time_t ctime;                /* time we have created this object */
-  time_t ttl;                  /* time to life of this object */
-  off_t next_offset;
-};
-typedef struct cache_spacer cache_spacer;
-
-static int cache_fd = -1;
-static int clnt_sock;
-static caddr_t maddr = NULL;
-static size_t msize;
-static CLIENT *cache_clnt = NULL;
-
-/* If there is no cachemgr, we shouldn't use NIS_SHARED_DIRCACHE, if
-   there is no NIS_SHARED_DIRCACHE, we couldn't use nis_cachemgr.
-   So, if the clnt_call to nis_cachemgr fails, we also close the cache file.
-   But another thread could read the cache => lock the cache_fd and cache_clnt
-   variables with the same lock */
-__libc_lock_define_initialized (static, mgrlock)
-
-/* close file handles and nis_cachemgr connection */
-static void
-__cache_close (void)
-{
-  if (cache_fd != -1)
-    {
-      close (cache_fd);
-      cache_fd = -1;
-    }
-  if (cache_clnt != NULL)
-    {
-      clnt_destroy (cache_clnt);
-      close (clnt_sock);
-      cache_clnt = NULL;
-    }
-}
-
-/* open the cache file and connect to nis_cachemgr */
-static bool_t
-__cache_open (void)
-{
-  struct sockaddr_in sin;
-  cache_header hptr;
-
-  if ((cache_fd = open (CACHEFILE, O_RDONLY)) == -1)
-    return FALSE;
-
-  if (read (cache_fd, &hptr, sizeof (cache_header)) == -1
-      || lseek (cache_fd, 0, SEEK_SET) < 0)
-    {
-      close (cache_fd);
-      cache_fd = -1;
-      return FALSE;
-    }
-  if (hptr.magic != HEADER_MAGIC)
-    {
-      close (cache_fd);
-      cache_fd = -1;
-      syslog (LOG_ERR, _("NIS+: cache file is corrupt!"));
-      return FALSE;
-    }
-
-  memset (&sin, '\0', sizeof (sin));
-  sin.sin_family = AF_INET;
-  clnt_sock = RPC_ANYSOCK;
-  sin.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
-  sin.sin_port = htons (hptr.tcp_port);
-  cache_clnt = clnttcp_create (&sin, CACHEPROG, CACHE_VER_1, &clnt_sock, 0, 0);
-  if (cache_clnt == NULL)
-    {
-      close (cache_fd);
-      cache_fd = -1;
-      return FALSE;
-    }
-  /* If the program exists, close the socket */
-  if (fcntl (clnt_sock, F_SETFD, FD_CLOEXEC) == -1)
-    perror (_("fcntl: F_SETFD"));
-  return TRUE;
-}
-
-/* Ask the cache manager to update directory 'name'
-   for us (because the ttl has expired). */
-static nis_error
-__cache_refresh (nis_name name)
-{
-  char clnt_res = 0;
-  nis_error result = NIS_SUCCESS;
-
-  __libc_lock_lock (mgrlock);
-
-  if (cache_clnt == NULL)
-    result = NIS_FAIL;
-  else if (clnt_call (cache_clnt, NIS_CACHE_REFRESH_ENTRY,
-                     (xdrproc_t) xdr_wrapstring, (caddr_t) &name,
-                     (xdrproc_t) xdr_void, &clnt_res, TIMEOUT)
-          != RPC_SUCCESS)
-    {
-      __cache_close ();
-      result = NIS_FAIL;
-    }
-
-  __libc_lock_unlock (mgrlock);
-
-  return result;
-}
-
-static nis_error
-__cache_find (const_nis_name name, directory_obj **obj)
-{
-  unsigned long hash;
-  struct cache_header *hptr;
-  struct cache_spacer *cs;
-  struct directory_obj *dir;
-  XDR xdrs;
-  caddr_t addr, ptr;
-  time_t now = time (NULL);
-
-  if (maddr == NULL)
-    return NIS_FAIL;
-
-  hash = __nis_hash (name, strlen(name));
-  hptr = (cache_header *)maddr;
-  if ((hptr->magic != HEADER_MAGIC) || (hptr->vers != CACHE_VERSION))
-    {
-      syslog (LOG_ERR, _("NIS+: cache file is corrupt!"));
-      return NIS_SYSTEMERROR;
-    }
-  cs = (cache_spacer *)(maddr + sizeof (cache_header));
-  while (cs->next_offset)
-    {
-      if (cs->magic != SPACER_MAGIC)
-       {
-         syslog (LOG_ERR, _("NIS+: cache file is corrupt!"));
-         return NIS_SYSTEMERROR;
-       }
-      if (cs->hashval == hash)
-       {
-         if ((now - cs->ctime) > cs->ttl)
-           return NIS_CACHEEXPIRED;
-         dir = calloc (1, sizeof (directory_obj));
-         addr = (caddr_t)cs + sizeof (cache_spacer);
-         xdrmem_create (&xdrs, addr, cs->next_offset, XDR_DECODE);
-         xdr_directory_obj (&xdrs, dir);
-         xdr_destroy (&xdrs);
-         *obj = dir;
-         return NIS_SUCCESS;
-       }
-      ptr = (caddr_t)cs;
-      ptr += cs->next_offset + sizeof (struct cache_spacer);
-      cs = (struct cache_spacer *)ptr;
-    }
-  return NIS_NOTFOUND;
-}
-
-static directory_obj *
-internal_cache_search (const_nis_name name)
-{
-  directory_obj *dir;
-  nis_error res;
-  int second_refresh = 0;
-  struct stat s;
-
-  if (cache_fd == -1)
-    if (__cache_open () == FALSE)
-      return NULL;
-
- again:
-  /* This lock is for nis_cachemgr, so it couldn't write a new cache
-     file if we reading it */
-  if (__nis_lock_cache () == -1)
-    return NULL;
-
-  if (maddr != NULL)
-    munmap (maddr, msize);
-  if (fstat (cache_fd, &s) < 0)
-    maddr = MAP_FAILED;
-  else
-    {
-      msize = s.st_size;
-      maddr = mmap (0, msize, PROT_READ, MAP_SHARED, cache_fd, 0);
-    }
-  if (maddr == MAP_FAILED)
-    {
-      __nis_unlock_cache ();
-      return NULL;
-    }
-
-  res = __cache_find (name, &dir);
-
-  munmap (maddr, msize);
-  maddr = NULL;
-  /* Allow nis_cachemgr to write a new cachefile */
-  __nis_unlock_cache ();
-
-  switch(res)
-    {
-    case NIS_CACHEEXPIRED:
-      if (second_refresh)
-       {
-         __cache_close ();
-         syslog (LOG_WARNING,
-                 _("NIS+: nis_cachemgr failed to refresh object for us"));
-         return NULL;
-       }
-      ++second_refresh;
-      if (__cache_refresh ((char *) name) != NIS_SUCCESS)
-       return NULL;
-      goto again;
-      break;
-    case NIS_SUCCESS:
-      return dir;
-    default:
-      return NULL;
-    }
-}
-
-directory_obj *
-__cache_search (const_nis_name name)
-{
-  directory_obj *dir;
-
-  __libc_lock_lock (mgrlock);
-
-  dir = internal_cache_search (name);
-
-  __libc_lock_unlock (mgrlock);
-
-  return dir;
-}
-
-nis_error
-__cache_add (fd_result *fd)
-{
-  char clnt_res = 0;
-  nis_error result = NIS_SUCCESS;
-
-  __libc_lock_lock (mgrlock);
-
-  if (cache_clnt == NULL)
-    if (__cache_open () == FALSE)
-      result = NIS_FAIL;
-
-  if (cache_clnt != NULL &&
-      (clnt_call (cache_clnt, NIS_CACHE_ADD_ENTRY, (xdrproc_t) xdr_fd_result,
-                 (caddr_t)fd, (xdrproc_t) xdr_void, &clnt_res, TIMEOUT)
-       != RPC_SUCCESS))
-    {
-      __cache_close ();
-      result = NIS_RPCERROR;
-    }
-
-  __libc_lock_unlock (mgrlock);
-
-  return result;
-}
index 06f63ee52e4cd03fbcf140f5ccfeb7b757d60add..aaefdd22ba7683e2162eae235dded3d4a8925c76 100644 (file)
@@ -462,13 +462,12 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, u_long flags,
            xdr_free((xdrproc_t)xdr_fd_result, (caddr_t)fd_res);
            return NULL;
          }
-       __cache_add (fd_res);
        obj = calloc(1, sizeof(directory_obj));
        xdrmem_create(&xdrs, fd_res->dir_data.dir_data_val,
                      fd_res->dir_data.dir_data_len, XDR_DECODE);
        xdr_directory_obj(&xdrs, obj);
        xdr_destroy(&xdrs);
-       xdr_free((xdrproc_t)xdr_fd_result, (caddr_t)fd_res);
+       __free_fdresult (fd_res);
        if (obj != NULL)
          {
            /* We have found a NIS+ server serving ndomain, now
@@ -515,13 +514,12 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, u_long flags,
            xdr_free((xdrproc_t)xdr_fd_result, (caddr_t)fd_res);
            return NULL;
          }
-       __cache_add (fd_res);
        obj = calloc(1, sizeof(directory_obj));
        xdrmem_create(&xdrs, fd_res->dir_data.dir_data_val,
                      fd_res->dir_data.dir_data_len, XDR_DECODE);
        xdr_directory_obj(&xdrs, obj);
        xdr_destroy(&xdrs);
-       xdr_free((xdrproc_t)xdr_fd_result, (caddr_t)fd_res);
+       __free_fdresult (fd_res);
        if (obj != NULL)
          {
            /* We have found a NIS+ server serving ndomain, now
@@ -554,9 +552,6 @@ __do_niscall (const_nis_name name, u_long prog, xdrproc_t xargs,
   if (name == NULL)
     return NIS_BADNAME;
 
-  if ((flags & NO_CACHE) !=  NO_CACHE)
-    dir = __cache_search (name);
-
   if (dir == NULL)
     {
       nis_error status;
index 15cdd58402eb19f661f7a075f816c0c06ca195ab..f4bd07252c87fb7589a327fc6c479858f08931ed 100644 (file)
@@ -18,7 +18,6 @@
    Boston, MA 02111-1307, USA. */
 
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 #include "nis_intern.h"
 
 nis_result *
@@ -35,26 +34,25 @@ nis_checkpoint(const_nis_name dirname)
       u_int i;
 
       res2 = nis_lookup (dirname, EXPAND_NAME);
-      if (res2->status != NIS_SUCCESS && res2->status != NIS_S_SUCCESS)
+      if (NIS_RES_STATUS (res2) != NIS_SUCCESS)
         return res2;
 
       /* Check if obj is really a diryectory object */
-      if (res2->objects.objects_val[0].zo_data.zo_type != DIRECTORY_OBJ)
+      if (__type_of (NIS_RES_OBJECT (res2)) != NIS_DIRECTORY_OBJ)
        {
          nis_freeresult (res);
-         res->status = NIS_INVALIDOBJ;
+         NIS_RES_STATUS (res) = NIS_INVALIDOBJ;
          return res;
        }
 
       for (i = 0;
-          i < res2->objects.objects_val[0].DI_data.do_servers.do_servers_len;
-          ++i)
+          i < NIS_RES_OBJECT (res2)->DI_data.do_servers.do_servers_len; ++i)
        {
-         if (__do_niscall2 (&res2->objects.objects_val[0].DI_data.do_servers.do_servers_val[i],
-                           1, NIS_CHECKPOINT, (xdrproc_t) xdr_nis_name,
-                           (caddr_t) &dirname, (xdrproc_t) xdr_cp_result,
-                           (caddr_t) &cpres, 0, NULL) != RPC_SUCCESS)
-           res->status = NIS_RPCERROR;
+         if (__do_niscall2 (&NIS_RES_OBJECT(res2)->DI_data.do_servers.do_servers_val[i],
+                            1, NIS_CHECKPOINT, (xdrproc_t) xdr_nis_name,
+                            (caddr_t) &dirname, (xdrproc_t) xdr_cp_result,
+                            (caddr_t) &cpres, 0, NULL) != RPC_SUCCESS)
+           NIS_RES_STATUS (res) = NIS_RPCERROR;
          else
            {
              res->status += cpres->cp_status;
@@ -65,7 +63,7 @@ nis_checkpoint(const_nis_name dirname)
       nis_freeresult (res2);
     }
   else
-    res->status = NIS_NOSUCHNAME;
+    NIS_RES_STATUS (res) = NIS_NOSUCHNAME;
 
   return res;
 }
diff --git a/nis/nis_clone.c b/nis/nis_clone.c
deleted file mode 100644 (file)
index a1d7536..0000000
+++ /dev/null
@@ -1,573 +0,0 @@
-/* Copyright (c) 1997 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-#include <string.h>
-#include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
-
-directory_obj *
-nis_clone_directory (const directory_obj *src, directory_obj *dest)
-{
-  directory_obj *res;
-
-  if (src == NULL)
-    return NULL;
-
-  if (dest == NULL)
-    {
-      res = calloc (1, sizeof (directory_obj));
-      if (res == NULL)
-       return NULL;
-    }
-  else
-    res = dest;
-
-  if (src->do_name)
-    res->do_name = strdup (src->do_name);
-  else
-    res->do_name = NULL;
-  res->do_type = src->do_type;
-  if (src->do_servers.do_servers_len > 0)
-    {
-      size_t i;
-
-      res->do_servers.do_servers_len = src->do_servers.do_servers_len;
-      if ((res->do_servers.do_servers_val =
-          malloc (src->do_servers.do_servers_len * sizeof (nis_server)))
-         == NULL)
-       return NULL;
-
-      for (i = 0; i < src->do_servers.do_servers_len; ++i)
-       {
-         if (src->do_servers.do_servers_val[i].name != NULL)
-           res->do_servers.do_servers_val[i].name =
-             strdup (src->do_servers.do_servers_val[i].name);
-         else
-           res->do_servers.do_servers_val[i].name = NULL;
-
-         res->do_servers.do_servers_val[i].ep.ep_len =
-           src->do_servers.do_servers_val[i].ep.ep_len;
-         if (res->do_servers.do_servers_val[i].ep.ep_len > 0)
-           {
-             size_t j;
-
-             res->do_servers.do_servers_val[i].ep.ep_val =
-               malloc (src->do_servers.do_servers_val[i].ep.ep_len *
-                       sizeof (endpoint));
-             for (j = 0; j < res->do_servers.do_servers_val[i].ep.ep_len; ++j)
-               {
-                 if (src->do_servers.do_servers_val[i].ep.ep_val[j].uaddr)
-                   res->do_servers.do_servers_val[i].ep.ep_val[j].uaddr
-                     = strdup (src->do_servers.do_servers_val[i].ep.ep_val[j].uaddr);
-                 else
-                   res->do_servers.do_servers_val[i].ep.ep_val[j].uaddr = NULL;
-
-                 if (src->do_servers.do_servers_val[i].ep.ep_val[j].family)
-                   res->do_servers.do_servers_val[i].ep.ep_val[j].family
-                     = strdup (src->do_servers.do_servers_val[i].ep.ep_val[j].family);
-                 else
-                   res->do_servers.do_servers_val[i].ep.ep_val[j].family = NULL;
-
-                 if (src->do_servers.do_servers_val[i].ep.ep_val[j].proto)
-                   res->do_servers.do_servers_val[i].ep.ep_val[j].proto
-                     = strdup (src->do_servers.do_servers_val[i].ep.ep_val[j].proto);
-                 else
-                   res->do_servers.do_servers_val[i].ep.ep_val[j].proto = NULL;
-               }
-           }
-         else
-           {
-             res->do_servers.do_servers_val[i].ep.ep_val = NULL;
-           }
-         res->do_servers.do_servers_val[i].key_type =
-           src->do_servers.do_servers_val[i].key_type;
-         res->do_servers.do_servers_val[i].pkey.n_len =
-           src->do_servers.do_servers_val[i].pkey.n_len;
-         if (res->do_servers.do_servers_val[i].pkey.n_len > 0)
-           {
-             res->do_servers.do_servers_val[i].pkey.n_bytes =
-               malloc (src->do_servers.do_servers_val[i].pkey.n_len);
-             if (res->do_servers.do_servers_val[i].pkey.n_bytes == NULL)
-               return NULL;
-             memcpy (res->do_servers.do_servers_val[i].pkey.n_bytes,
-                     src->do_servers.do_servers_val[i].pkey.n_bytes,
-                     src->do_servers.do_servers_val[i].pkey.n_len);
-           }
-         else
-           res->do_servers.do_servers_val[i].pkey.n_bytes = NULL;
-       }
-    }
-  else
-    {
-      res->do_servers.do_servers_len = 0;
-      res->do_servers.do_servers_val = NULL;
-    }
-  res->do_ttl  = src->do_ttl;
-  res->do_armask.do_armask_len = src->do_armask.do_armask_len;
-  if (res->do_armask.do_armask_len > 0)
-    {
-      if ((res->do_armask.do_armask_val =
-          malloc (src->do_armask.do_armask_len * sizeof (oar_mask))) == NULL)
-       return NULL;
-      memcpy (res->do_armask.do_armask_val, src->do_armask.do_armask_val,
-             src->do_armask.do_armask_len * sizeof (oar_mask));
-    }
-  else
-    {
-      res->do_armask.do_armask_val = NULL;
-    }
-
-  return res;
-}
-
-group_obj *
-nis_clone_group (const group_obj *src, group_obj *dest)
-{
-  size_t i;
-  group_obj *res = NULL;
-
-  if (src == NULL)
-    return NULL;
-
-  if (dest == NULL)
-    {
-      res = calloc (1, sizeof (group_obj));
-      if (res == NULL)
-       return NULL;
-    }
-  else
-    res = dest;
-
-  res->gr_flags = src->gr_flags;
-
-  res->gr_members.gr_members_len = src->gr_members.gr_members_len;
-  if (res->gr_members.gr_members_len > 0)
-    {
-      if (res->gr_members.gr_members_val == NULL)
-       {
-         if ((res->gr_members.gr_members_val =
-              malloc (res->gr_members.gr_members_len * sizeof (nis_name))) == NULL)
-           return NULL;
-       }
-      for (i = 0; i < res->gr_members.gr_members_len; ++i)
-       if (src->gr_members.gr_members_val[i] != NULL)
-         res->gr_members.gr_members_val[i] =
-           strdup (src->gr_members.gr_members_val[i]);
-       else
-         res->gr_members.gr_members_val[i] = NULL;
-    }
-
-  return res;
-}
-
-table_obj *
-nis_clone_table (const table_obj *src, table_obj *dest)
-{
-  size_t i;
-  table_obj *res = NULL;
-
-  if (src == NULL)
-    return NULL;
-
-  if (dest == NULL)
-    {
-      res = calloc (1, sizeof (table_obj));
-      if (res == NULL)
-       return res;
-    }
-  else
-    res = dest;
-
-  if (src->ta_type != NULL)
-    {
-      if ((res->ta_type = strdup (src->ta_type)) == NULL)
-       return NULL;
-    }
-  else
-    res->ta_type = NULL;
-
-  res->ta_maxcol = src->ta_maxcol;
-  res->ta_sep = src->ta_sep;
-  res->ta_cols.ta_cols_len = src->ta_cols.ta_cols_len;
-  if (res->ta_cols.ta_cols_val == NULL)
-    {
-      if ((res->ta_cols.ta_cols_val =
-          calloc (1, src->ta_cols.ta_cols_len * sizeof (table_col))) == NULL)
-       return NULL;
-    }
-  for (i = 0; i < res->ta_cols.ta_cols_len; i++)
-    {
-      if (src->ta_cols.ta_cols_val[i].tc_name == NULL)
-       res->ta_cols.ta_cols_val[i].tc_name = NULL;
-      else
-       res->ta_cols.ta_cols_val[i].tc_name =
-         strdup (src->ta_cols.ta_cols_val[i].tc_name);
-      res->ta_cols.ta_cols_val[i].tc_flags =
-       src->ta_cols.ta_cols_val[i].tc_flags;
-      res->ta_cols.ta_cols_val[i].tc_rights =
-       src->ta_cols.ta_cols_val[i].tc_rights;
-    }
-
-  if (src->ta_path != NULL)
-    {
-      if ((res->ta_path = strdup (src->ta_path)) == NULL)
-       return NULL;
-    }
-  else
-    res->ta_path = NULL;
-
-  return res;
-}
-
-entry_obj *
-nis_clone_entry (const entry_obj *src, entry_obj *dest)
-{
-  size_t i;
-  entry_obj *res = NULL;
-
-  if (src == NULL)
-    return NULL;
-
-  if (dest == NULL)
-    {
-      res = calloc (1, sizeof (entry_obj));
-      if (res == NULL)
-       return NULL;
-    }
-  else
-    res = dest;
-
-  if (src->en_type)
-    res->en_type = strdup (src->en_type);
-  else
-    res->en_type = NULL;
-
-  res->en_cols.en_cols_len = src->en_cols.en_cols_len;
-  if (res->en_cols.en_cols_val == NULL && src->en_cols.en_cols_len > 0)
-    {
-      res->en_cols.en_cols_val =
-       calloc (1, src->en_cols.en_cols_len * sizeof (entry_col));
-      if (res->en_cols.en_cols_val == NULL)
-       return NULL;
-    }
-  for (i = 0; i < res->en_cols.en_cols_len; ++i)
-    {
-      res->en_cols.en_cols_val[i].ec_flags =
-       src->en_cols.en_cols_val[i].ec_flags;
-      res->en_cols.en_cols_val[i].ec_value.ec_value_len =
-       src->en_cols.en_cols_val[i].ec_value.ec_value_len;
-      if (res->en_cols.en_cols_val[i].ec_value.ec_value_val == NULL &&
-         src->en_cols.en_cols_val[i].ec_value.ec_value_len > 0)
-       res->en_cols.en_cols_val[i].ec_value.ec_value_val =
-         malloc (src->en_cols.en_cols_val[i].ec_value.ec_value_len);
-      memcpy (res->en_cols.en_cols_val[i].ec_value.ec_value_val,
-             src->en_cols.en_cols_val[i].ec_value.ec_value_val,
-             res->en_cols.en_cols_val[i].ec_value.ec_value_len);
-    }
-
-  return res;
-}
-
-nis_attr *
-nis_clone_nis_attr (const nis_attr *src, nis_attr *dest)
-{
-  nis_attr *res = NULL;
-
-  if (src == NULL)
-    return NULL;
-
-  if (dest == NULL)
-    {
-      res = calloc (1, sizeof (nis_attr));
-      if (res == NULL)
-       return NULL;
-    }
-  else
-    res = dest;
-
-  if (src->zattr_ndx != NULL)
-    {
-      if ((res->zattr_ndx = strdup (src->zattr_ndx)) == NULL)
-        return NULL;
-    }
-  else
-    res->zattr_ndx = NULL;
-
-  res->zattr_val.zattr_val_len = src->zattr_val.zattr_val_len;
-  if (res->zattr_val.zattr_val_len > 0)
-    {
-      if (res->zattr_val.zattr_val_val == NULL)
-       {
-         if ((res->zattr_val.zattr_val_val =
-              calloc (1, src->zattr_val.zattr_val_len)) == NULL)
-           return NULL;
-       }
-      memcpy (res->zattr_val.zattr_val_val, src->zattr_val.zattr_val_val,
-             src->zattr_val.zattr_val_len);
-    }
-  else
-    res->zattr_val.zattr_val_val = NULL;
-  return res;
-}
-
-static nis_attr *
-__nis_clone_attrs (const nis_attr *src, nis_attr *dest, u_int len)
-{
-  unsigned int i;
-  nis_attr *res;
-
-  if (len == 0)
-    return dest;
-
-  if (dest == NULL)
-    {
-      res = calloc (len, sizeof (nis_attr));
-      if (res == NULL)
-       return NULL;
-    }
-  else
-    res = dest;
-
-  for (i = 0; i < len; i++)
-    nis_clone_nis_attr(&src[i], &res[i]);
-
-  return res;
-}
-
-link_obj *
-nis_clone_link (const link_obj *src, link_obj *dest)
-{
-  link_obj *res = NULL;
-
-  if (src == NULL)
-    return NULL;
-
-  if (dest == NULL)
-    {
-      res = calloc (1, sizeof (link_obj));
-      if (res == NULL)
-       return NULL;
-    }
-  else
-    res = dest;
-
-  res->li_rtype = src->li_rtype;
-
-  res->li_attrs.li_attrs_len = src->li_attrs.li_attrs_len;
-  res->li_attrs.li_attrs_val =
-    __nis_clone_attrs (src->li_attrs.li_attrs_val,
-                      res->li_attrs.li_attrs_val,
-                      src->li_attrs.li_attrs_len);
-
-  if (src->li_name)
-    {
-      if ((res->li_name = strdup (src->li_name)) == NULL)
-       return NULL;
-    }
-  else
-    res->li_name = NULL;
-
-  return res;
-}
-
-objdata *
-nis_clone_objdata (const objdata *src, objdata *dest)
-{
-  objdata *res = NULL;
-
-  if (src == NULL)
-    return NULL;
-
-  if (dest == NULL)
-    {
-      res = calloc (1, sizeof (objdata));
-      if (res == NULL)
-       return res;
-    }
-  else
-    res = dest;
-
-  res->zo_type = src->zo_type;
-
-  switch (src->zo_type)
-    {
-    case BOGUS_OBJ:
-      break;
-    case NO_OBJ:
-      break;
-    case DIRECTORY_OBJ:
-      if (nis_clone_directory (&src->objdata_u.di_data,
-                              &res->objdata_u.di_data) == NULL)
-       return NULL;
-      break;
-    case GROUP_OBJ:
-      if (nis_clone_group (&src->objdata_u.gr_data,
-                          &res->objdata_u.gr_data) == NULL)
-       return NULL;
-      break;
-    case TABLE_OBJ:
-      if (nis_clone_table (&src->objdata_u.ta_data,
-                          &res->objdata_u.ta_data) == NULL)
-       return NULL;
-      break;
-    case ENTRY_OBJ:
-      if (nis_clone_entry (&src->objdata_u.en_data,
-                          &res->objdata_u.en_data) == NULL)
-       return NULL;
-      break;
-    case LINK_OBJ:
-      if (nis_clone_link (&src->objdata_u.li_data,
-                         &res->objdata_u.li_data) == NULL)
-       return NULL;
-      break;
-    case PRIVATE_OBJ:
-      res->objdata_u.po_data.po_data_len =
-       src->objdata_u.po_data.po_data_len;
-      if (src->objdata_u.po_data.po_data_val)
-        {
-         if ((res->objdata_u.po_data.po_data_val =
-              malloc (res->objdata_u.po_data.po_data_len)) == NULL)
-           return NULL;
-         memcpy (res->objdata_u.po_data.po_data_val,
-                 src->objdata_u.po_data.po_data_val,
-                 src->objdata_u.po_data.po_data_len);
-        }
-      else
-        {
-         res->objdata_u.po_data.po_data_val = NULL;
-         res->objdata_u.po_data.po_data_len = 0;
-        }
-      break;
-    default:
-      return NULL;
-    }
-
-  return res;
-}
-
-nis_object *
-nis_clone_object (const nis_object *src, nis_object *dest)
-{
-  nis_object *res = NULL;
-
-  if (src == NULL)
-    return NULL;
-
-  if (dest == NULL)
-    {
-      res = calloc (1, sizeof (nis_object));
-      if (res == NULL)
-       return NULL;
-    }
-  else
-    res = dest;
-
-  res->zo_oid = src->zo_oid;
-
-  if (src->zo_name)
-    {
-      if ((res->zo_name = strdup (src->zo_name)) == NULL)
-       return NULL;
-    }
-  else
-    res->zo_name = NULL;
-  if (src->zo_owner)
-    {
-      if ((res->zo_owner = strdup (src->zo_owner)) == NULL)
-       return NULL;
-    }
-  else
-    res->zo_owner = NULL;
-  if (src->zo_group)
-    {
-      if ((res->zo_group = strdup (src->zo_group)) == NULL)
-       return NULL;
-    }
-  else
-    res->zo_group = NULL;
-  if (src->zo_domain)
-    {
-      if ((res->zo_domain = strdup (src->zo_domain)) == NULL)
-       return NULL;
-    }
-  else
-    res->zo_domain = NULL;
-  res->zo_access = src->zo_access;
-  res->zo_ttl = src->zo_ttl;
-
-  if (nis_clone_objdata (&src->zo_data, &res->zo_data) == NULL)
-    return NULL;
-
-  return res;
-}
-
-static nis_object *
-__nis_clone_objects (const nis_object *src, nis_object *dest, u_int len)
-{
-  unsigned int i;
-  nis_object *res;
-
-  if (len == 0)
-    return dest;
-
-  if (dest == NULL)
-    {
-      res = calloc (len, sizeof (nis_object));
-      if (res == NULL)
-       return NULL;
-    }
-  else
-    res = dest;
-
-  for (i = 0; i < len; ++i)
-    nis_clone_object(&src[i], &res[i]);
-
-  return res;
-}
-
-nis_result *
-nis_clone_result (const nis_result *src, nis_result *dest)
-{
-  nis_result *res = NULL;
-
-  if (src == NULL)
-    return NULL;
-
-  if (dest == NULL)
-    {
-      res = calloc (1, sizeof (nis_result));
-      if (res == NULL)
-       return NULL;
-    }
-  else
-    res = dest;
-
-  res->status = src->status;
-  res->objects.objects_len = src->objects.objects_len;
-  res->objects.objects_val =
-    __nis_clone_objects (src->objects.objects_val,
-                        res->objects.objects_val,
-                        src->objects.objects_len);
-  res->zticks = src->zticks;
-  res->dticks = src->dticks;
-  res->aticks = src->aticks;
-  res->cticks = src->cticks;
-
-  return res;
-}
diff --git a/nis/nis_clone_dir.c b/nis/nis_clone_dir.c
new file mode 100644 (file)
index 0000000..4d641e5
--- /dev/null
@@ -0,0 +1,69 @@
+/* Copyright (c) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <string.h>
+#include <rpc/rpc.h>
+#include <rpcsvc/nis.h>
+
+directory_obj *
+nis_clone_directory (const directory_obj *src, directory_obj *dest)
+{
+  unsigned char *addr;
+  unsigned int size;
+  XDR xdrs;
+  directory_obj *res;
+
+  if (src == NULL)
+    return (NULL);
+
+  size = xdr_sizeof ((xdrproc_t)xdr_directory_obj, (char *)src);
+  if ((addr = calloc(1, size)) == NULL)
+    return NULL;
+
+  if (dest == NULL)
+    {
+      if ((res = calloc (1, sizeof (directory_obj))) == NULL)
+       {
+         free (addr);
+         return NULL;
+       }
+    }
+  else
+    res = dest;
+
+  xdrmem_create(&xdrs, addr, size, XDR_ENCODE);
+  if (!xdr_directory_obj (&xdrs, (directory_obj *)src))
+    {
+      xdr_destroy (&xdrs);
+      free (addr);
+      return NULL;
+    }
+  xdr_destroy (&xdrs);
+  xdrmem_create (&xdrs, addr, size, XDR_DECODE);
+  if (!xdr_directory_obj (&xdrs, res))
+    {
+      xdr_destroy (&xdrs);
+      free (addr);
+      return NULL;
+    }
+  xdr_destroy (&xdrs);
+  free (addr);
+
+  return res;
+}
diff --git a/nis/nis_clone_obj.c b/nis/nis_clone_obj.c
new file mode 100644 (file)
index 0000000..291148f
--- /dev/null
@@ -0,0 +1,69 @@
+/* Copyright (c) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <string.h>
+#include <rpc/rpc.h>
+#include <rpcsvc/nis.h>
+
+nis_object *
+nis_clone_object (const nis_object *src, nis_object *dest)
+{
+  unsigned char *addr;
+  unsigned int size;
+  XDR xdrs;
+  nis_object *res;
+
+  if (src == NULL)
+    return (NULL);
+
+  size = xdr_sizeof ((xdrproc_t)xdr_nis_object, (char *)src);
+  if ((addr = calloc(1, size)) == NULL)
+    return NULL;
+
+  if (dest == NULL)
+    {
+      if ((res = calloc (1, sizeof (nis_object))) == NULL)
+       {
+         free (addr);
+         return NULL;
+       }
+    }
+  else
+    res = dest;
+
+  xdrmem_create(&xdrs, addr, size, XDR_ENCODE);
+  if (!xdr_nis_object (&xdrs, (nis_object *)src))
+    {
+      xdr_destroy (&xdrs);
+      free (addr);
+      return NULL;
+    }
+  xdr_destroy (&xdrs);
+  xdrmem_create(&xdrs, addr, size, XDR_DECODE);
+  if (!xdr_nis_object(&xdrs, res))
+    {
+      xdr_destroy (&xdrs);
+      free (addr);
+      return NULL;
+    }
+  xdr_destroy (&xdrs);
+  free (addr);
+
+  return res;
+}
diff --git a/nis/nis_clone_res.c b/nis/nis_clone_res.c
new file mode 100644 (file)
index 0000000..9bdc4d8
--- /dev/null
@@ -0,0 +1,69 @@
+/* Copyright (c) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <string.h>
+#include <rpc/rpc.h>
+#include <rpcsvc/nis.h>
+
+nis_result *
+nis_clone_result (const nis_result *src, nis_result *dest)
+{
+  unsigned char *addr;
+  unsigned int size;
+  XDR xdrs;
+  nis_result *res;
+
+  if (src == NULL)
+    return (NULL);
+
+  size = xdr_sizeof ((xdrproc_t)xdr_nis_result, (char *)src);
+  if ((addr = calloc(1, size)) == NULL)
+    return NULL;
+
+  if (dest == NULL)
+    {
+      if ((res = calloc (1, sizeof (nis_result))) == NULL)
+       {
+         free (addr);
+         return NULL;
+       }
+    }
+  else
+    res = dest;
+
+  xdrmem_create(&xdrs, addr, size, XDR_ENCODE);
+  if (!xdr_nis_result (&xdrs, (nis_result *)src))
+    {
+      xdr_destroy (&xdrs);
+      free (addr);
+      return NULL;
+    }
+  xdr_destroy (&xdrs);
+  xdrmem_create(&xdrs, addr, size, XDR_DECODE);
+  if (!xdr_nis_result(&xdrs, res))
+    {
+      xdr_destroy (&xdrs);
+      free (addr);
+      return NULL;
+    }
+  xdr_destroy (&xdrs);
+  free (addr);
+
+  return res;
+}
index d1de08c08d01cf4789bc62ef56dd61e6b8bc6e54..240573145f9d94f8c7f18626498494240979ff0b 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 nis_error
 nis_creategroup (const_nis_name group, u_long flags)
@@ -50,7 +49,7 @@ nis_creategroup (const_nis_name group, u_long flags)
       obj->zo_group = strdup (__nis_default_group (NULL));
       obj->zo_access = __nis_default_access (NULL, 0);
       obj->zo_ttl = __nis_default_ttl (0);
-      obj->zo_data.zo_type = GROUP_OBJ;
+      obj->zo_data.zo_type = NIS_GROUP_OBJ;
       obj->zo_data.objdata_u.gr_data.gr_flags = flags;
       obj->zo_data.objdata_u.gr_data.gr_members.gr_members_len = 0;
       obj->zo_data.objdata_u.gr_data.gr_members.gr_members_val = NULL;
index 53a585b5169d7cfcd79fe74b734a75e7e9599dbf..21a80506ffedb6d4c60de1c69e81b3ac543f202a 100644 (file)
@@ -23,7 +23,6 @@
 #include <sys/types.h>
 #include <rpc/rpc.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 #define DEFAULT_TTL 43200
 
@@ -33,8 +32,7 @@
 static nis_name
 searchgroup (char *str)
 {
-  static char default_group[NIS_MAXNAMELEN];
- char *cptr;
+  char *cptr;
   int i;
 
   cptr = strstr (str, "group=");
@@ -48,13 +46,12 @@ searchgroup (char *str)
   if (i == 0)                  /* only "group=" ? */
     return (nis_name) "";
 
-  return strncpy (default_group, cptr, i);
+  return strndup (cptr, i);
 }
 
 static nis_name
 searchowner (char *str)
 {
-  static char default_owner[NIS_MAXNAMELEN];
   char *cptr;
   int i;
 
@@ -67,9 +64,9 @@ searchowner (char *str)
   while (cptr[i] != '\0' && cptr[i] != ':')
     i++;
   if (i == 0)                  /* only "owner=" ? */
-    return (nis_name)"";
+    return strdup ("");
 
-  return strncpy (default_owner, cptr, i);
+  return strndup (cptr, i);
 }
 
 static u_long
@@ -134,9 +131,9 @@ searchttl (char *str)
 static u_long
 searchaccess (char *str, u_long access)
 {
-  static char buf[NIS_MAXNAMELEN];
+  char buf[NIS_MAXNAMELEN];
   char *cptr;
-  u_long result;
+  u_long result = access;
   int i;
   int n, o, g, w;
 
@@ -153,7 +150,7 @@ searchaccess (char *str, u_long access)
 
   strncpy (buf, cptr, i);
 
-  result = n = o = g = w = 0;
+  n = o = g = w = 0;
   cptr = buf;
   while (*cptr != '\0')
     {
@@ -221,11 +218,11 @@ searchaccess (char *str, u_long access)
                    result = result & ~(NIS_DESTROY_ACC);
                  break;
                default:
-                 fprintf (stderr, "Parse error in \"%s\"\n", buf);
-                 return 0;
+                 return ULONG_MAX;
                }
              cptr++;
            }
+         n = o = g = w = 0;
          break;
        case '+':
          cptr++;               /* Remove "=" from beginning */
@@ -274,11 +271,11 @@ searchaccess (char *str, u_long access)
                    result = result | (NIS_DESTROY_ACC);
                  break;
                default:
-                 fprintf (stderr, "Parse error in \"%s\"\n", buf);
-                 return 0;
+                 return ULONG_MAX;
                }
              cptr++;
            }
+         n = o = g = w = 0;
          break;
        case '=':
          cptr++;               /* Remove "=" from beginning */
@@ -341,26 +338,25 @@ searchaccess (char *str, u_long access)
                    result = result | (NIS_DESTROY_ACC);
                  break;
                default:
-                 fprintf (stderr, "Parse error in \"%s\"\n", buf);
-                 return 0;
+                 return result = ULONG_MAX;
                }
              cptr++;
            }
+         n = o = g = w = 0;
          break;
        default:
-         fprintf (stderr, "Parse error in \"%s\"\n", buf);
-         return 0;
+         return result = ULONG_MAX;
        }
       cptr++;
     }
 
-  return 0;
+  return result;
 }
 
 nis_name
 __nis_default_owner (char *defaults)
 {
-  static char default_owner[NIS_MAXNAMELEN];
+  char default_owner[NIS_MAXNAMELEN];
   char *cptr, *dptr;
 
   strcpy (default_owner, nis_local_principal ());
@@ -369,7 +365,11 @@ __nis_default_owner (char *defaults)
     {
       dptr = strstr (defaults, "owner=");
       if (dptr != NULL)
-       strcpy (default_owner, searchowner (defaults));
+       {
+         char *p = searchowner (defaults);
+         strcpy (default_owner, p);
+         free (p);
+       }
     }
   else
     {
@@ -378,17 +378,21 @@ __nis_default_owner (char *defaults)
        {
          dptr = strstr (cptr, "owner=");
          if (dptr != NULL)
-           strcpy (default_owner, searchowner (cptr));
+           {
+             char *p = searchowner (cptr);
+             strcpy (default_owner, p);
+             free (p);
+           }
        }
     }
 
-  return default_owner;
+  return strdup (default_owner);
 }
 
 nis_name
 __nis_default_group (char *defaults)
 {
-  static char default_group[NIS_MAXNAMELEN];
+  char default_group[NIS_MAXNAMELEN];
   char *cptr, *dptr;
 
   strcpy (default_group, nis_local_group ());
@@ -397,7 +401,11 @@ __nis_default_group (char *defaults)
     {
       dptr = strstr (defaults, "group=");
       if (dptr != NULL)
-       strcpy (default_group, searchgroup (defaults));
+       {
+         char *p = searchgroup (defaults);
+         strcpy (default_group, p);
+         free (p);
+       }
     }
   else
     {
@@ -406,11 +414,15 @@ __nis_default_group (char *defaults)
        {
          dptr = strstr (cptr, "group=");
          if (dptr != NULL)
-           strcpy (default_group, searchgroup (cptr));
+           {
+             char *p = searchgroup (cptr);
+             strcpy (default_group, p);
+             free (p);
+           }
        }
     }
 
-  return default_group;
+  return strdup (default_group);
 }
 
 u_long
index 6ece45345d767521cce1b16f709e8e4a7586cde8..5b70a67b683df915ef6f452d43b62f6f8fcdb41d 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 nis_error
 nis_destroygroup (const_nis_name group)
@@ -42,7 +41,7 @@ nis_destroygroup (const_nis_name group)
          stpcpy (cp, cp2);
        }
       res = nis_remove (buf, NULL);
-      status = res->status;
+      status = NIS_RES_STATUS (res);
       nis_freeresult (res);
       return status;
     }
index f0cfe316e69d32de8ad1285c999feac67e4d58d2..f6cca815b45c2df91809762561bafec46d79e3f1 100644 (file)
@@ -18,7 +18,6 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 nis_name
 nis_domain_of (const_nis_name name)
index 3435233aef42e8c185083e06d7e01182a8639686..00238d06939a94d16cc686e0128b5ee38c3b6f24 100644 (file)
@@ -20,7 +20,6 @@
 #include <errno.h>
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 nis_name
 nis_domain_of_r (const_nis_name name, char *buffer, size_t buflen)
index 6ed1cc914abfdfc428613edc505f229f678a12aa..ced0f716fd5efc1d81eef141bedc3693eb37ad5d 100644 (file)
@@ -21,7 +21,6 @@
 #include <syslog.h>
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 
 static const char *nis_errlist[] =
index c32d54a622ecca3cad68380dfd9ff05297ecd9f7..fdd7cd4214a2200511b73d6645a90b8c1950b9f7 100644 (file)
@@ -21,8 +21,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
-
 
 static const char cold_start_file[] = "/var/nis/NIS_COLD_START";
 
index a4ab7378e6ac324fa65a347575ad3cd137557358..5d08882f8454fde0e82c5e59b4f63fc28aafbe61 100644 (file)
    Boston, MA 02111-1307, USA.  */
 
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 void
-nis_free_attr (nis_attr *obj)
+__free_fdresult (fd_result *res)
 {
-  if (obj == NULL)
-    return;
-
-  if (obj->zattr_ndx)
-    {
-      free (obj->zattr_ndx);
-      obj->zattr_ndx = NULL;
-    }
-
-  if (obj->zattr_val.zattr_val_val)
+  if (res != NULL)
     {
-      free (obj->zattr_val.zattr_val_val);
-      obj->zattr_val.zattr_val_val = NULL;
-      obj->zattr_val.zattr_val_len = 0;
+      xdr_free ((xdrproc_t)xdr_fd_result, (char *)res);
+      free (res);
     }
 }
 
 void
 nis_free_request (ib_request *ibreq)
 {
-  unsigned int i;
-
-  for (i = 0; i < ibreq->ibr_srch.ibr_srch_len; ++i)
-    {
-      nis_free_attr (&(ibreq->ibr_srch.ibr_srch_val)[i]);
-      ibreq->ibr_srch.ibr_srch_val = NULL;
-      ibreq->ibr_srch.ibr_srch_len = 0;
-    }
-
-  if (ibreq->ibr_name)
-    {
-      free (ibreq->ibr_name);
-      ibreq->ibr_name = NULL;
-    }
-
-  if (ibreq->ibr_cookie.n_bytes)
-    {
-      free (ibreq->ibr_cookie.n_bytes);
-      ibreq->ibr_cookie.n_bytes = NULL;
-      ibreq->ibr_cookie.n_len = 0;
-    }
-}
-
-void
-nis_free_endpoints (endpoint *ep, unsigned int len)
-{
-  unsigned int i;
-
-  if (ep == NULL)
-    return;
-
-  for (i = 0; i < len; ++i)
-    {
-      if (ep[i].uaddr)
-       {
-         free (ep[i].uaddr);
-         ep[i].uaddr = NULL;
-       }
-      if (ep[i].family)
-       {
-         free (ep[i].family);
-         ep[i].family = NULL;
-       }
-      if (ep[i].proto)
-       {
-         free (ep[i].proto);
-         ep[i].proto = NULL;
-       }
-    }
-}
-
-void
-nis_free_servers (nis_server *obj, unsigned int len)
-{
-  unsigned int i;
-
-  if (obj == NULL)
-    return;
-
-  for (i = 0; i < len; i++)
+  if (ibreq != NULL)
     {
-      if (obj[i].name)
-       {
-         free (obj[i].name);
-         obj[i].name = NULL;
-       }
-      if (obj[i].ep.ep_len > 0)
-       {
-         nis_free_endpoints (obj[i].ep.ep_val, obj[i].ep.ep_len);
-         free (obj[i].ep.ep_val);
-         obj[i].ep.ep_val = NULL;
-         obj[i].ep.ep_len = 0;
-       }
-      if (obj[i].pkey.n_bytes && obj[i].pkey.n_len > 0)
-       {
-         free (obj[i].pkey.n_bytes);
-         obj[i].pkey.n_bytes = NULL;
-         obj[i].pkey.n_len = 0;
-       }
+      xdr_free ((xdrproc_t)xdr_ib_request, (char *)ibreq);
+      free (ibreq);
     }
 }
 
 void
 nis_free_directory (directory_obj *obj)
 {
-  if (obj == NULL)
-    return;
-  if (obj->do_name)
-    {
-      free (obj->do_name);
-      obj->do_name = NULL;
-    }
-  if (obj->do_servers.do_servers_len > 0)
+  if (obj != NULL)
     {
-      nis_free_servers (obj->do_servers.do_servers_val,
-                       obj->do_servers.do_servers_len);
-      free (obj->do_servers.do_servers_val);
-      obj->do_servers.do_servers_val = NULL;
-      obj->do_servers.do_servers_len = 0;
-    }
-  if (obj->do_armask.do_armask_len > 0)
-    {
-      free (obj->do_armask.do_armask_val);
-      obj->do_armask.do_armask_val = NULL;
-      obj->do_armask.do_armask_len = 0;
-    }
-}
-
-void
-nis_free_group (group_obj *obj)
-{
-  unsigned int i;
-
-  if (obj->gr_members.gr_members_len > 0)
-    {
-      for (i = 0; i < obj->gr_members.gr_members_len; ++i)
-       if (obj->gr_members.gr_members_val[i])
-         free (obj->gr_members.gr_members_val[i]);
-      free (obj->gr_members.gr_members_val);
-      obj->gr_members.gr_members_val = NULL;
-      obj->gr_members.gr_members_len = 0;
-    }
-}
-
-void
-nis_free_table (table_obj *obj)
-{
-  if (obj == NULL)
-    return;
-
-  if (obj->ta_type)
-    {
-      free (obj->ta_type);
-      obj->ta_type = NULL;
-    }
-
-  if (obj->ta_cols.ta_cols_val)
-    {
-      unsigned int i;
-
-      for (i = 0; i < obj->ta_cols.ta_cols_len; ++i)
-       if (obj->ta_cols.ta_cols_val[i].tc_name)
-         free (obj->ta_cols.ta_cols_val[i].tc_name);
-      free (obj->ta_cols.ta_cols_val);
-      obj->ta_cols.ta_cols_val = NULL;
-      obj->ta_cols.ta_cols_len = 0;
-    }
-
-  if (obj->ta_path)
-    {
-      free (obj->ta_path);
-      obj->ta_path = NULL;
-    }
-}
-
-void
-nis_free_entry (entry_obj *obj)
-{
-  if (obj == NULL)
-    return;
-
-  if (obj->en_type)
-    {
-      free (obj->en_type);
-      obj->en_type = 0;
-    }
-
-  if (obj->en_cols.en_cols_val)
-    {
-      unsigned int i;
-
-      for (i = 0; i < obj->en_cols.en_cols_len; ++i)
-       if (obj->en_cols.en_cols_val[i].ec_value.ec_value_val)
-         free (obj->en_cols.en_cols_val[i].ec_value.ec_value_val);
-      free (obj->en_cols.en_cols_val);
-      obj->en_cols.en_cols_val = NULL;
-      obj->en_cols.en_cols_len = 0;
-    }
-}
-
-void
-nis_free_link (link_obj *obj)
-{
-  if (obj == NULL)
-    return;
-
-  if (obj->li_attrs.li_attrs_val)
-    {
-      unsigned int i;
-
-      for (i = 0; i < obj->li_attrs.li_attrs_len; ++i)
-       {
-         if (obj->li_attrs.li_attrs_val[i].zattr_ndx)
-           free (obj->li_attrs.li_attrs_val[i].zattr_ndx);
-         if (obj->li_attrs.li_attrs_val[i].zattr_val.zattr_val_val)
-           free (obj->li_attrs.li_attrs_val[i].zattr_val.zattr_val_val);
-       }
-      free (obj->li_attrs.li_attrs_val);
-      obj->li_attrs.li_attrs_val = NULL;
-      obj->li_attrs.li_attrs_len = 0;
-    }
-
-  if (obj->li_name)
-    {
-      free (obj->li_name);
-      obj->li_name = NULL;
+      xdr_free ((xdrproc_t)xdr_directory_obj, (char *)obj);
+      free (obj);
     }
 }
 
 void
 nis_free_object (nis_object *obj)
 {
-
-  if (obj == NULL)
-    return;
-
-  if (obj->zo_name)
-    {
-      free (obj->zo_name);
-      obj->zo_name = NULL;
-    }
-  if (obj->zo_owner)
-    {
-      free (obj->zo_owner);
-      obj->zo_owner = NULL;
-    }
-  if (obj->zo_group)
+  if (obj != NULL)
     {
-      free (obj->zo_group);
-      obj->zo_group = NULL;
+      xdr_free ((xdrproc_t)xdr_nis_object, (char *)obj);
+      free (obj);
     }
-  if (obj->zo_domain)
-    {
-      free (obj->zo_domain);
-      obj->zo_domain = NULL;
-    }
-  switch (obj->zo_data.zo_type)
-    {
-    case BOGUS_OBJ:
-      break;
-    case NO_OBJ:
-      break;
-    case DIRECTORY_OBJ:
-      nis_free_directory (&obj->zo_data.objdata_u.di_data);
-      break;
-    case GROUP_OBJ:
-      nis_free_group (&obj->zo_data.objdata_u.gr_data);
-      break;
-    case TABLE_OBJ:
-      nis_free_table (&obj->zo_data.objdata_u.ta_data);
-      break;
-    case ENTRY_OBJ:
-      nis_free_entry (&obj->zo_data.objdata_u.en_data);
-      break;
-    case LINK_OBJ:
-      nis_free_link (&obj->zo_data.objdata_u.li_data);
-      break;
-    case PRIVATE_OBJ:
-      if (obj->zo_data.objdata_u.po_data.po_data_val)
-       {
-         free (obj->zo_data.objdata_u.po_data.po_data_val);
-         obj->zo_data.objdata_u.po_data.po_data_val = NULL;
-       }
-      break;
-    default:
-      break;
-    }
-  obj->zo_data.zo_type = NO_OBJ;
 }
 
 void
 nis_freeresult (nis_result *res)
 {
-  unsigned int i;
-
-  if (res == NULL)
-    return;
-
-  for (i = 0; i < res->objects.objects_len; i++)
-    nis_free_object (&(res->objects.objects_val)[i]);
-
-  if (res->objects.objects_val != NULL)
-    free (res->objects.objects_val);
-
-  if (res->cookie.n_bytes != NULL && res->cookie.n_len > 0)
-    free (res->cookie.n_bytes);
-
-  free (res);
+  if (res != NULL)
+    {
+      xdr_free ((xdrproc_t)xdr_nis_result, (char *)res);
+      free (res);
+    }
 }
index b30b70b584f38f7a02f300f3fe146c6d9117582e..1629c24053a80417e2abd46f45c3699bf3f891c8 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 #include "nis_intern.h"
 
 nis_server **
@@ -30,19 +29,21 @@ nis_getservlist (const_nis_name dir)
 
   res = nis_lookup (dir, FOLLOW_LINKS);
 
-  if (res->status == NIS_SUCCESS || res->status == NIS_S_SUCCESS)
+  if (NIS_RES_STATUS (res) == NIS_SUCCESS)
     {
       unsigned long i;
       nis_server *server;
 
-      serv = calloc (1, sizeof (nis_server *) *
-                    (res->objects.objects_val->DI_data.do_servers.do_servers_len + 1));
+      serv =
+       calloc (1, sizeof (nis_server *) *
+               (NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_len + 1));
       if (serv == NULL)
        return NULL;
-      for (i = 0; i < res->objects.objects_val->DI_data.do_servers.do_servers_len; ++i)
+      for (i = 0; i < NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_len;
+          ++i)
        {
          server =
-           &res->objects.objects_val->DI_data.do_servers.do_servers_val[i];
+           &NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_val[i];
          serv[i] = calloc (1, sizeof (nis_server));
          if (server->name != NULL)
             serv[i]->name = strdup (server->name);
@@ -110,7 +111,7 @@ nis_freeservlist (nis_server **serv)
   i = 0;
   while (serv[i] != NULL)
     {
-      nis_free_servers (serv[i], 1);
+      xdr_free ((xdrproc_t)xdr_nis_server, (char *)serv[i]);
       free (serv[i]);
       ++i;
     }
index ce88f0790dd34e7ffdb7b71ab59ca50392f50bf9..e714621f1b74536554e3f5137753ba1958346d52 100644 (file)
@@ -67,10 +67,6 @@ extern nis_error __do_niscall __P ((const_nis_name name, u_long prog,
 extern AUTH *authdes_pk_create __P ((const char *, const netobj *, u_int,
                                     struct sockaddr *, des_block *));
 
-/* NIS+ cache */
-extern directory_obj *__cache_search __P ((const_nis_name name));
-extern nis_error __cache_add __P ((fd_result *));
-
 /* NIS+ callback */
 extern nis_error __nis_do_callback __P ((struct dir_binding *bptr,
                                         netobj *cookie, struct nis_cb *cb));
index 85c401531e5485e65b4ac934096e868d79ae8c83..aadd19753ace71aadae0376abe5bd8d653fbcb31 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 /* internal_nis_ismember ()
    return codes: -1 principal is in -group
 static int
 internal_ismember (const_nis_name principal, const_nis_name group)
 {
-  if (group != NULL && strlen (group) > 0)
-    {
-      char buf[strlen (group) + 50];
-      char leafbuf[strlen (group) + 2];
-      char domainbuf[strlen (group) + 2];
-      nis_result *res;
-      char *cp, *cp2;
-      u_int i;
+  char buf[strlen (group) + 50];
+  char leafbuf[strlen (group) + 2];
+  char domainbuf[strlen (group) + 2];
+  nis_result *res;
+  char *cp, *cp2;
+  u_int i;
 
-      cp = stpcpy (buf, nis_leaf_of_r (group, leafbuf, sizeof (leafbuf) - 1));
-      cp = stpcpy (cp, ".groups_dir");
-      cp2 = nis_domain_of_r (group, domainbuf, sizeof (domainbuf) - 1);
-      if (cp2 != NULL && strlen (cp2) > 0)
-        {
-         *cp++ = '.';
-          strcpy (cp, cp2);
-       }
-      res = nis_lookup (buf, EXPAND_NAME|FOLLOW_LINKS);
-      if (res->status != NIS_SUCCESS && res->status != NIS_S_SUCCESS)
-        return 0;
+  cp = stpcpy (buf, nis_leaf_of_r (group, leafbuf, sizeof (leafbuf) - 1));
+  cp = stpcpy (cp, ".groups_dir");
+  cp2 = nis_domain_of_r (group, domainbuf, sizeof (domainbuf) - 1);
+  if (cp2 != NULL && strlen (cp2) > 0)
+    {
+      *cp++ = '.';
+      strcpy (cp, cp2);
+    }
+  res = nis_lookup (buf, EXPAND_NAME|FOLLOW_LINKS);
+  if (NIS_RES_STATUS (res) != NIS_SUCCESS)
+    return 0;
 
-      if ((res->objects.objects_len != 1) ||
-          (res->objects.objects_val[0].zo_data.zo_type != GROUP_OBJ))
-        return 0;
+  if ((NIS_RES_NUMOBJ (res) != 1) ||
+      (__type_of (NIS_RES_OBJECT (res)) != NIS_GROUP_OBJ))
+    return 0;
 
-      /* We search twice in the list, at first, if we have the name
-        with a "-", then if without. "-member" has priority */
-      for (i = 0;
-           i < res->objects.objects_val[0].GR_data.gr_members.gr_members_len;
-           ++i)
+  /* We search twice in the list, at first, if we have the name
+     with a "-", then if without. "-member" has priority */
+  for (i = 0; i < NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_len; ++i)
+    {
+      cp = NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val[i];
+      if (cp[0] == '-')
        {
-         cp =res->objects.objects_val[0].GR_data.gr_members.gr_members_val[i];
-         if (cp[0] == '-')
-           {
-             if (strcmp (&cp[1], principal) == 0)
+         if (strcmp (&cp[1], principal) == 0)
+           return -1;
+         if (cp[1] == '@')
+           switch (internal_ismember (principal, &cp[2]))
+             {
+             case -1:
                return -1;
-             if (cp[1] == '@')
-               switch (internal_ismember (principal, &cp[2]))
-                 {
-                 case -1:
-                   return -1;
-                 case 1:
-                   return -1;
-                 default:
-                   break;
-                 }
-             else
-               if (cp[1] == '*')
-                 {
-                   char buf1[strlen (principal) + 2];
-                   char buf2[strlen (cp) + 2];
+             case 1:
+               return -1;
+             default:
+               break;
+             }
+         else
+           if (cp[1] == '*')
+             {
+               char buf1[strlen (principal) + 2];
+               char buf2[strlen (cp) + 2];
 
-                   strcpy (buf1, nis_domain_of (principal));
-                   strcpy (buf2, nis_domain_of (cp));
-                   if (strcmp (buf1, buf2) == 0)
-                     return -1;
-                 }
-           }
+               strcpy (buf1, nis_domain_of (principal));
+               strcpy (buf2, nis_domain_of (cp));
+               if (strcmp (buf1, buf2) == 0)
+                 return -1;
+             }
        }
-      for (i = 0;
-          i < res->objects.objects_val[0].GR_data.gr_members.gr_members_len;
-           ++i)
+    }
+  for (i = 0; i < NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_len; ++i)
+    {
+      cp = NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val[i];
+      if (cp[0] != '-')
        {
-         cp =res->objects.objects_val[0].GR_data.gr_members.gr_members_val[i];
-         if (cp[0] != '-')
-           {
-             if (strcmp (cp, principal) == 0)
+         if (strcmp (cp, principal) == 0)
+           return 1;
+         if (cp[0] == '@')
+           switch (internal_ismember (principal, &cp[1]))
+             {
+             case -1:
+               return -1;
+             case 1:
                return 1;
-             if (cp[0] == '@')
-               switch (internal_ismember (principal, &cp[1]))
-                 {
-                 case -1:
-                   return -1;
-                 case 1:
-                   return 1;
-                 default:
-                   break;
-                 }
-             else
-               if (cp[0] == '*')
-                 {
-                   char buf1[strlen (principal) + 2];
-                   char buf2[strlen (cp) + 2];
+             default:
+               break;
+             }
+         else
+           if (cp[0] == '*')
+             {
+               char buf1[strlen (principal) + 2];
+               char buf2[strlen (cp) + 2];
 
-                   if (strcmp (nis_domain_of_r (principal, buf1, sizeof buf1),
-                               nis_domain_of_r (cp, buf2, sizeof buf2)) == 0)
-                     return 1;
-                 }
-           }
+               if (strcmp (nis_domain_of_r (principal, buf1, sizeof buf1),
+                           nis_domain_of_r (cp, buf2, sizeof buf2)) == 0)
+                 return 1;
+             }
        }
     }
-
   return 0;
 }
 
 bool_t
 nis_ismember (const_nis_name principal, const_nis_name group)
 {
-  if (group != NULL && strlen (group) > 0)
+  if (group != NULL && strlen (group) > 0 && principal != NULL)
     return internal_ismember (principal, group) == 1 ? TRUE : FALSE;
   else
     return FALSE;
index 348c7534a3692b240d0bf4ab09592c36264e6a3b..bcae9958378ef74d6ec45ffad64303d49c2b7585 100644 (file)
@@ -21,7 +21,6 @@
 #include <string.h>
 #include <unistd.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 nis_name
 nis_local_group (void)
index bdce5d5a0ac20028a15835b6911577caa3dffdd1..cbc64c34a490b3ab892dcd712e3199185f175a70 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 #include "nis_intern.h"
 
@@ -72,7 +71,7 @@ nis_lookup (const_nis_name name, const u_long flags)
        case NIS_PARTIAL:
        case NIS_SUCCESS:
        case NIS_S_SUCCESS:
-         if (__type_of(NIS_RES_OBJECT (res)) == LINK_OBJ &&
+         if (__type_of(NIS_RES_OBJECT (res)) == NIS_LINK_OBJ &&
              flags & FOLLOW_LINKS) /* We are following links */
            {
              /* if we hit the link limit, bail */
@@ -93,7 +92,7 @@ nis_lookup (const_nis_name name, const u_long flags)
            ++done;
          break;
        case NIS_CBRESULTS:
-         /* XXX Implement CALLBACK here ! */
+         /* The callback is handled in __do_niscall2 */
          ++done;
          break;
        case NIS_UNAVAIL:
index ab693d7da1686ece6c4d84baeed2d200884ecc3a..acd0122bdf17be5b11581cb3176a9bfd2c2b91a8 100644 (file)
@@ -18,7 +18,6 @@
    Boston, MA 02111-1307, USA. */
 
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 #include "nis_intern.h"
 
 nis_error
index 739ae0c3517bf04199eddfd5917874995d48ed37..3f2cca46986c83987a6b07fecfbcea8c18d11793 100644 (file)
@@ -18,7 +18,6 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 #include "nis_intern.h"
 
@@ -60,7 +59,7 @@ nis_modify (const_nis_name name, const nis_object *obj)
                              (caddr_t) & req, (xdrproc_t) xdr_nis_result,
                              (caddr_t) res, MASTER_ONLY,
                              NULL)) != RPC_SUCCESS)
-    res->status = status;
+    NIS_RES_STATUS (res) = status;
 
   req.ns_object.ns_object_val[0].zo_name = p1;
   req.ns_object.ns_object_val[0].zo_owner = p2;
index a06dfdee8d64cf26c3fbd8d3bcc11de16015c12e..1397cb9c98c052658e9585108dc716e0add45755 100644 (file)
@@ -18,7 +18,6 @@
    Boston, MA 02111-1307, USA. */
 
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 #include "nis_intern.h"
 
 void
@@ -35,7 +34,7 @@ nis_ping (const_nis_name dirname, u_long utime, const nis_object *dirobj)
   if (dirobj == NULL)
     {
       res = nis_lookup (dirname, MASTER_ONLY);
-      if (res->status != NIS_SUCCESS && res->status != NIS_S_SUCCESS)
+      if (res->status != NIS_SUCCESS)
        return;
       obj = res->objects.objects_val;
     }
@@ -43,7 +42,7 @@ nis_ping (const_nis_name dirname, u_long utime, const nis_object *dirobj)
     obj = (nis_object *) dirobj;
 
   /* Check if obj is really a diryectory object */
-  if (obj->zo_data.zo_type != DIRECTORY_OBJ)
+  if (__type_of (obj) != NIS_DIRECTORY_OBJ)
     {
       if (res != NULL)
        nis_freeresult (res);
index 1914840e86340a6124a3c571a7dfb4aa6f239654..5aa43c340f3147236dc1ef85d441cfee1b3242bb 100644 (file)
@@ -21,7 +21,6 @@
 #include <string.h>
 
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 static const char *
 nis_nstype2str (const nstype type)
@@ -49,10 +48,9 @@ nis_nstype2str (const nstype type)
     }
 }
 
-static char *
-nis_ttl2str (const u_long ttl)
+static void
+print_ttl (const u_long ttl)
 {
-  static char buf[64];
   unsigned long int time, s, m, h;
 
   time = ttl;
@@ -62,19 +60,40 @@ nis_ttl2str (const u_long ttl)
   m = time / 60;
   time %= 60;
   s = time;
-  snprintf (buf, 63, "%lu:%02lu:%02lu", h, m, s);
-
-  return buf;
+  printf ("%lu:%lu:%lu\n", h, m, s);
 }
 
-static char *
-nis_flags2str (const u_long flags)
+static void
+print_flags (const u_long flags)
 {
-  static char buf[1024];
+  fputs ("(", stdout);
 
-  snprintf (buf, 1023, "%lu", flags);
+  if (flags & TA_SEARCHABLE)
+    fputs ("SEARCHABLE, ", stdout);
 
-  return buf;
+  if (flags & TA_BINARY)
+    {
+      fputs ("BINARY DATA", stdout);
+      if (flags & TA_XDR)
+       fputs (", XDR ENCODED", stdout);
+      if (flags & TA_ASN1)
+       fputs (", ASN.1 ENCODED", stdout);
+      if (flags & TA_CRYPT)
+       fputs (", ENCRYPTED", stdout);
+    }
+  else
+    {
+      fputs("TEXTUAL DATA", stdout);
+      if (flags & TA_SEARCHABLE)
+       {
+         if (flags & TA_CASE)
+           fputs (", CASE INSENSITIVE", stdout);
+         else
+           fputs (", CASE SENSITIVE", stdout);
+       }
+    }
+
+  fputs (")\n", stdout);
 }
 
 static void
@@ -82,28 +101,28 @@ nis_print_objtype (enum zotypes type)
 {
   switch (type)
     {
-    case BOGUS_OBJ:
+    case NIS_BOGUS_OBJ:
       fputs (_("BOGUS OBJECT\n"), stdout);
       break;
-    case NO_OBJ:
+    case NIS_NO_OBJ:
       fputs (_("NO OBJECT\n"), stdout);
       break;
-    case DIRECTORY_OBJ:
+    case NIS_DIRECTORY_OBJ:
       fputs (_("DIRECTORY\n"), stdout);
       break;
-    case GROUP_OBJ:
+    case NIS_GROUP_OBJ:
       fputs (_("GROUP\n"), stdout);
       break;
-    case TABLE_OBJ:
+    case NIS_TABLE_OBJ:
       fputs (_("TABLE\n"), stdout);
       break;
-    case ENTRY_OBJ:
+    case NIS_ENTRY_OBJ:
       fputs (_("ENTRY\n"), stdout);
       break;
-    case LINK_OBJ:
+    case NIS_LINK_OBJ:
       fputs (_("LINK\n"), stdout);
       break;
-    case PRIVATE_OBJ:
+    case NIS_PRIVATE_OBJ:
       fputs (_("PRIVATE\n"), stdout);
       break;
     default:
@@ -141,7 +160,7 @@ nis_print_directory (const directory_obj *dir)
   unsigned int i;
 
   printf (_("Name : '%s'\n"), dir->do_name);
-  printf (_("Type : %s\n"), gettext (nis_nstype2str (dir->do_type)));
+  printf (_("Type : %s\n"), nis_nstype2str (dir->do_type));
   sptr = dir->do_servers.do_servers_val;
   for (i = 0; i < dir->do_servers.do_servers_len; i++)
     {
@@ -157,16 +176,20 @@ nis_print_directory (const directory_obj *dir)
          fputs (_("None.\n"), stdout);
          break;
        case NIS_PK_DH:
-         fputs (_("DH.\n"), stdout);
+         fprintf (stdout, _("Diffie-Hellmann (%d bits)\n"),
+                  (sptr->pkey.n_len - 1) * 4);
+         /* sptr->pkey.n_len counts the last 0, too */
          break;
        case NIS_PK_RSA:
-         fputs (_("RSA.\n"), stdout);
+         fprintf (stdout, _("RSA (%d bits)\n"),
+                  (sptr->pkey.n_len - 1) * 4);
          break;
        case NIS_PK_KERB:
-         fputs (_("Kerberous.\n"), stdout);
+         fputs (_("Kerberos.\n"), stdout);
          break;
        default:
-         fputs (_("Unknown.\n"), stdout);
+         fprintf (stdout, _("Unknown (type = %d, bits = %d)\n"),
+                  sptr->key_type, (sptr->pkey.n_len - 1) * 4);
          break;
        }
 
@@ -198,7 +221,9 @@ nis_print_directory (const directory_obj *dir)
       sptr++;
     }
 
-  printf (_("Time to live : %s\n"), nis_ttl2str (dir->do_ttl));
+  fputs (_("Time to live : "), stdout);
+  print_ttl (dir->do_ttl);
+  fputs (_("Default Access rights :\n"), stdout);
   if (dir->do_armask.do_armask_len != 0)
     {
       oar_mask *ptr;
@@ -206,9 +231,11 @@ nis_print_directory (const directory_obj *dir)
       ptr = dir->do_armask.do_armask_val;
       for (i = 0; i < dir->do_armask.do_armask_len; i++)
        {
-         fputs (_("Default Access rights: "), stdout);
          nis_print_rights (ptr->oa_rights);
-         printf (_("\nDirect Type : %d\n"), ptr->oa_otype);
+         printf (_("\tType         : %s\n"), nis_nstype2str (ptr->oa_otype));
+         printf (_("\tAccess rights: "));
+         nis_print_rights (ptr->oa_rights);
+         fputs ("\n", stdout);
          ptr++;
        }
     }
@@ -242,8 +269,8 @@ nis_print_table (const table_obj *obj)
     {
       printf (_("\t[%d]\tName          : %s\n"), i,
              obj->ta_cols.ta_cols_val[i].tc_name);
-      printf (_("\t\tAttributes    : %s\n"),
-             nis_flags2str (obj->ta_cols.ta_cols_val[i].tc_flags));
+      fputs (_("\t\tAttributes    : "), stdout);
+      print_flags (obj->ta_cols.ta_cols_val[i].tc_flags);
       fputs (_("\t\tAccess Rights : "), stdout);
       nis_print_rights (obj->ta_cols.ta_cols_val[i].tc_rights);
       fputc ('\n', stdout);
@@ -274,7 +301,8 @@ nis_print_entry (const entry_obj *obj)
       else if ((obj->en_cols.en_cols_val[i].ec_flags & EN_BINARY) == EN_BINARY)
        fputs (_("Binary data\n"), stdout);
       else
-       printf ("%s\n", obj->en_cols.en_cols_val[i].ec_value.ec_value_val);
+       printf ("%.*s\n", (int)obj->en_cols.en_cols_val[i].ec_value.ec_value_len,
+               obj->en_cols.en_cols_val[i].ec_value.ec_value_val);
     }
 }
 
@@ -287,29 +315,30 @@ nis_print_object (const nis_object * obj)
   printf (_("Group         : %s\n"), obj->zo_group);
   fputs (_("Access Rights : "), stdout);
   nis_print_rights (obj->zo_access);
-  printf (_("\nTime to Live  : %lu (seconds)\n"), obj->zo_ttl);
+  printf (_("\nTime to Live  : "));
+  print_ttl (obj->zo_ttl);
   printf (_("Creation Time : %s"), ctime (&obj->zo_oid.ctime));
   printf (_("Mod. Time     : %s"), ctime (&obj->zo_oid.mtime));
   fputs (_("Object Type   : "), stdout);
   nis_print_objtype (obj->zo_data.zo_type);
   switch (obj->zo_data.zo_type)
     {
-    case DIRECTORY_OBJ:
+    case NIS_DIRECTORY_OBJ:
       nis_print_directory (&obj->zo_data.objdata_u.di_data);
       break;
-    case GROUP_OBJ:
+    case NIS_GROUP_OBJ:
       nis_print_group (&obj->zo_data.objdata_u.gr_data);
       break;
-    case TABLE_OBJ:
+    case NIS_TABLE_OBJ:
       nis_print_table (&obj->zo_data.objdata_u.ta_data);
       break;
-    case ENTRY_OBJ:
+    case NIS_ENTRY_OBJ:
       nis_print_entry (&obj->zo_data.objdata_u.en_data);
       break;
-    case LINK_OBJ:
+    case NIS_LINK_OBJ:
       nis_print_link (&obj->zo_data.objdata_u.li_data);
       break;
-    case PRIVATE_OBJ:
+    case NIS_PRIVATE_OBJ:
       printf (_("    Data Length = %u\n"),
              obj->zo_data.objdata_u.po_data.po_data_len);
       break;
index 1063ef84119c53d71c2803c840bfbd1b812e1abf..fbc9ad11bae7dba80f5f5c5c342a498ef3f9fe46 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 void
 nis_print_group_entry (const_nis_name group)
@@ -29,6 +28,10 @@ nis_print_group_entry (const_nis_name group)
       char buf[strlen (group) + 50];
       char leafbuf[strlen (group) + 3];
       char domainbuf[strlen (group) + 3];
+      unsigned long mem_exp_cnt = 0, mem_imp_cnt = 0, mem_rec_cnt = 0;
+      unsigned long nomem_exp_cnt = 0, nomem_imp_cnt = 0, nomem_rec_cnt = 0;
+      char **mem_exp, **mem_imp, **mem_rec;
+      char **nomem_exp, **nomem_imp, **nomem_rec;
       nis_result *res;
       char *cp, *cp2;
       u_int i;
@@ -41,19 +44,132 @@ nis_print_group_entry (const_nis_name group)
          *cp++ = '.';
          stpcpy (cp, cp2);
        }
-      res = nis_lookup (buf, FOLLOW_LINKS|EXPAND_NAME);
+      res = nis_lookup (buf, FOLLOW_LINKS | EXPAND_NAME);
 
-      if (res->status != NIS_SUCCESS && res->status != NIS_S_SUCCESS)
+      if (NIS_RES_STATUS(res) != NIS_SUCCESS)
        return;
 
-      if ((res->objects.objects_len != 1) ||
-          (res->objects.objects_val[0].zo_data.zo_type != GROUP_OBJ))
+      if ((NIS_RES_NUMOBJ (res) != 1) ||
+         (__type_of (NIS_RES_OBJECT (res)) != NIS_GROUP_OBJ))
        return;
 
+      mem_exp = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res));
+      mem_imp = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res));
+      mem_rec = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res));
+      nomem_exp = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res));
+      nomem_imp = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res));
+      nomem_rec = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res));
+
       for (i = 0;
-          i < res->objects.objects_val[0].GR_data.gr_members.gr_members_len;
-          ++i)
-       fprintf (stdout, "  %s\n",
-                res->objects.objects_val[0].GR_data.gr_members.gr_members_val[i]);
+        i < NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_len; ++i)
+       {
+         char *grmem =
+         NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val[i];
+         int neg = grmem[0] == '-';
+
+         switch (grmem[neg])
+           {
+           case '*':
+             if (neg)
+               {
+                 nomem_imp[nomem_imp_cnt] = grmem;
+                 ++nomem_imp_cnt;
+               }
+             else
+               {
+                 mem_imp[mem_imp_cnt] = grmem;
+                 ++mem_imp_cnt;
+               }
+             break;
+           case '@':
+             if (neg)
+               {
+                 nomem_rec[nomem_rec_cnt] = grmem;
+                 ++nomem_rec_cnt;
+               }
+             else
+               {
+                 mem_rec[mem_rec_cnt] = grmem;
+                 ++mem_rec_cnt;
+               }
+             break;
+           default:
+             if (neg)
+               {
+                 nomem_exp[nomem_exp_cnt] = grmem;
+                 ++nomem_exp_cnt;
+               }
+             else
+               {
+                 mem_exp[mem_exp_cnt] = grmem;
+                 ++mem_exp_cnt;
+               }
+             break;
+           }
+       }
+      {
+       char buf[strlen (NIS_RES_OBJECT (res)->zo_domain) + 10];
+       printf (_("Group entry for \"%s.%s\" group:\n"),
+               NIS_RES_OBJECT (res)->zo_name,
+               nis_domain_of_r (NIS_RES_OBJECT (res)->zo_domain,
+                                buf, strlen (NIS_RES_OBJECT (res)->zo_domain)
+                                + 10));
+      }
+      if (mem_exp_cnt)
+       {
+         fputs (_("    Explicit members:\n"), stdout);
+         for (i = 0; i < mem_exp_cnt; ++i)
+           printf ("\t%s\n", mem_exp[i]);
+       }
+      else
+       fputs (_("    No explicit members\n"), stdout);
+      if (mem_imp_cnt)
+       {
+         fputs (_("    Implicit members:\n"), stdout);
+         for (i = 0; i < mem_imp_cnt; ++i)
+           printf ("\t%s\n", &mem_imp[i][2]);
+       }
+      else
+       fputs (_("    No implicit members\n"), stdout);
+      if (mem_rec_cnt)
+       {
+         fputs (_("    Recursive members:\n"), stdout);
+         for (i = 0; i < mem_rec_cnt; ++i)
+           printf ("\t%s\n", &mem_rec[i][1]);
+       }
+      else
+        fputs (_("    No recursive members\n"), stdout);
+      if (nomem_exp_cnt)
+       {
+         fputs (_("    Explicit nonmembers:\n"), stdout);
+         for (i = 0; i < nomem_exp_cnt; ++i)
+           printf ("\t%s\n", &nomem_exp[i][1]);
+       }
+      else
+       fputs (_("    No explicit nonmembers\n"), stdout);
+      if (nomem_imp_cnt)
+       {
+         fputs (_("    Implicit nonmembers:\n"), stdout);
+         for (i = 0; i < nomem_imp_cnt; ++i)
+           printf ("\t%s\n", &mem_imp[i][3]);
+       }
+      else
+       fputs (_("    No implicit nonmembers\n"), stdout);
+      if (nomem_rec_cnt)
+       {
+         fputs (_("    Explicit nonmembers:\n"), stdout);
+         for (i = 0; i < nomem_rec_cnt; ++i)
+           printf ("\t%s=n", &nomem_rec[i][2]);
+       }
+      else
+        fputs (_("    No recursive nonmembers\n"), stdout);
+
+      free (mem_exp);
+      free (mem_imp);
+      free (mem_rec);
+      free (nomem_exp);
+      free (nomem_imp);
+      free (nomem_rec);
+      nis_freeresult (res);
     }
 }
index 2fa9ecc35349d18cdad3b0cdada03b4e952a1b18..cbbbdfcfd04922030a08a736bf478686428c311a 100644 (file)
@@ -18,7 +18,6 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 #include "nis_intern.h"
 
@@ -48,7 +47,7 @@ nis_remove (const_nis_name name, const nis_object *obj)
                              (caddr_t) & req, (xdrproc_t) xdr_nis_result,
                              (caddr_t) res, MASTER_ONLY,
                              NULL)) != RPC_SUCCESS)
-    res->status = status;
+    NIS_RES_STATUS (res) = status;
 
   nis_destroy_object (req.ns_object.ns_object_val);
 
index 8ed67caf982931ec41127a284ace435bfc3081d6..71807a3ffe2332b634a31a03acadbdaf7468f8c2 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 nis_error
 nis_removemember (const_nis_name member, const_nis_name group)
@@ -50,40 +49,40 @@ nis_removemember (const_nis_name member, const_nis_name group)
           nis_freeresult (res);
           return status;
         }
+
       if ((res->objects.objects_len != 1) ||
-          (res->objects.objects_val[0].zo_data.zo_type != GROUP_OBJ))
+          (__type_of (NIS_RES_OBJECT (res)) != NIS_GROUP_OBJ))
         return NIS_INVALIDOBJ;
 
-
-      newmem = calloc (1, res->objects.objects_val[0].GR_data.gr_members.gr_members_len *
-                      sizeof (char *));
-
-      k = res->objects.objects_val[0].GR_data.gr_members.gr_members_len;
+      newmem =
+       calloc (1, NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_len *
+               sizeof (char *));
+      k = NIS_RES_OBJECT (res)[0].GR_data.gr_members.gr_members_len;
       j = 0;
-      for (i = 0; i < res->objects.objects_val[0].GR_data.gr_members.gr_members_len;
+      for (i = 0; i < NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_len;
           ++i)
        {
-         if (strcmp (res->objects.objects_val[0].GR_data.gr_members.gr_members_val[i],
+         if (strcmp (NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_val[i],
                      member) != 0)
            {
-             newmem[j] = res->objects.objects_val[0].GR_data.gr_members.gr_members_val[i];
+             newmem[j] = NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_val[i];
              ++j;
            }
          else
            {
-             free (res->objects.objects_val[0].GR_data.gr_members.gr_members_val[i]);
+             free (NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_val[i]);
              --k;
            }
        }
-      free (res->objects.objects_val[0].GR_data.gr_members.gr_members_val);
+      free (NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val);
       newmem = realloc (newmem, k * sizeof (char*));
-      res->objects.objects_val[0].GR_data.gr_members.gr_members_val = newmem;
-      res->objects.objects_val[0].GR_data.gr_members.gr_members_len = k;
+      NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val = newmem;
+      NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_len = k;
 
-      cp = stpcpy (buf, res->objects.objects_val->zo_name);
+      cp = stpcpy (buf, NIS_RES_OBJECT (res)->zo_name);
       *cp++ = '.';
-      strncpy (cp, res->objects.objects_val->zo_domain, NIS_MAXNAMELEN);
-      res2 = nis_modify (buf, res->objects.objects_val);
+      strncpy (cp, NIS_RES_OBJECT (res)->zo_domain, NIS_MAXNAMELEN);
+      res2 = nis_modify (buf, NIS_RES_OBJECT (res));
       status = res2->status;
       nis_freeresult (res);
       nis_freeresult (res2);
index ff84ed81e250975905249f4f21d7b23b267b9a9e..f1214f9f8043d9f8649229ad8fb7e46ce3aaedeb 100644 (file)
@@ -18,7 +18,6 @@
    Boston, MA 02111-1307, USA. */
 
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 #include "nis_intern.h"
 
 nis_error
index fcd19036386052b275ceb1ad11787708edc59dea..3283e4cf939863b87abaf7a19a549e02b1c0ca1f 100644 (file)
@@ -20,7 +20,6 @@
 #include <errno.h>
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 nis_name
 nis_leaf_of (const_nis_name name)
index 3efba6084e3fd0b92e762f34dee5fc91f0880263..d2a1df76b2c1273fe0b8b984596b8618a9c60dbb 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 #include "nis_intern.h"
 
 static void
@@ -146,9 +145,7 @@ __create_ib_request (const_nis_name name, struct ib_request *ibreq,
   if (ibreq->ibr_name == NULL)
     return NULL;
 
-  ibreq->ibr_flags = (flags & (RETURN_RESULT | ADD_OVERWRITE | REM_MULTIPLE |
-                              MOD_SAMEOBJ | ADD_RESERVED | REM_RESERVED |
-                              MOD_EXCLUSIVE | ALL_RESULTS));
+  ibreq->ibr_flags = flags;
   ibreq->ibr_obj.ibr_obj_len = 0;
   ibreq->ibr_obj.ibr_obj_val = NULL;
   ibreq->ibr_cbhost.ibr_cbhost_len = 0;
@@ -168,7 +165,7 @@ nis_list (const_nis_name name, u_long flags,
          const void *userdata)
 {
   nis_result *res = NULL;
-  struct ib_request ibreq;
+  ib_request *ibreq = calloc (1, sizeof (ib_request));
   int status;
   int count_links = 0;         /* We will only follow NIS_MAXLINKS links! */
   int done = 0;
@@ -179,7 +176,7 @@ nis_list (const_nis_name name, u_long flags,
 
   res = calloc (1, sizeof (nis_result));
 
-  if (__create_ib_request (name, &ibreq, flags) == NULL)
+  if (__create_ib_request (name, ibreq, flags) == NULL)
     {
       res->status = NIS_BADNAME;
       return res;
@@ -187,20 +184,20 @@ nis_list (const_nis_name name, u_long flags,
 
   if (flags & EXPAND_NAME)
     {
-      names = nis_getnames (ibreq.ibr_name);
-      free (ibreq.ibr_name);
-      ibreq.ibr_name = NULL;
+      names = nis_getnames (ibreq->ibr_name);
+      free (ibreq->ibr_name);
+      ibreq->ibr_name = NULL;
       if (names == NULL)
        {
          res->status = NIS_BADNAME;
          return res;
        }
-      ibreq.ibr_name = strdup (names[name_nr]);
+      ibreq->ibr_name = strdup (names[name_nr]);
     }
   else
     {
       names = namebuf;
-      names[name_nr] = ibreq.ibr_name;
+      names[name_nr] = ibreq->ibr_name;
     }
 
   cb = NULL;
@@ -228,7 +225,7 @@ nis_list (const_nis_name name, u_long flags,
 
          /* nis_lookup handles FOLLOW_LINKS,
             so we must have a table object.  */
-         if (__type_of (NIS_RES_OBJECT (lres)) != TABLE_OBJ)
+         if (__type_of (NIS_RES_OBJECT (lres)) != NIS_TABLE_OBJ)
            {
              nis_freeresult (lres);
              res->status = NIS_INVALIDOBJ;
@@ -276,17 +273,17 @@ nis_list (const_nis_name name, u_long flags,
       if (callback != NULL)
        {
          cb = __nis_create_callback (callback, userdata, flags);
-         ibreq.ibr_cbhost.ibr_cbhost_len = 1;
-         ibreq.ibr_cbhost.ibr_cbhost_val = cb->serv;
+         ibreq->ibr_cbhost.ibr_cbhost_len = 1;
+         ibreq->ibr_cbhost.ibr_cbhost_val = cb->serv;
          }
 
       while (!done)
        {
          memset (res, '\0', sizeof (nis_result));
 
-         status = __do_niscall (ibreq.ibr_name, NIS_IBLIST,
+         status = __do_niscall (ibreq->ibr_name, NIS_IBLIST,
                                 (xdrproc_t) xdr_ib_request,
-                                (caddr_t) ibreq, (xdrproc_t) xdr_nis_result,
+                                (caddr_t) ibreq, (xdrproc_t) xdr_nis_result,
                                 (caddr_t) res, flags, cb);
          if (status != NIS_SUCCESS)
            res->status = status;
@@ -296,7 +293,7 @@ nis_list (const_nis_name name, u_long flags,
            case NIS_PARTIAL:
            case NIS_SUCCESS:
            case NIS_S_SUCCESS:
-             if (__type_of (NIS_RES_OBJECT (res)) == LINK_OBJ &&
+             if (__type_of (NIS_RES_OBJECT (res)) == NIS_LINK_OBJ &&
                  flags & FOLLOW_LINKS)         /* We are following links.  */
                {
                  /* If we hit the link limit, bail.  */
@@ -307,17 +304,17 @@ nis_list (const_nis_name name, u_long flags,
                      break;
                    }
                  if (count_links)
-                   free (ibreq.ibr_name);
+                   free (ibreq->ibr_name);
                  ++count_links;
-                 free (ibreq.ibr_name);
-                 ibreq.ibr_name =
+                 free (ibreq->ibr_name);
+                 ibreq->ibr_name =
                    strdup (NIS_RES_OBJECT (res)->LI_data.li_name);
                  if (NIS_RES_OBJECT (res)->LI_data.li_attrs.li_attrs_len)
-                   if (ibreq.ibr_srch.ibr_srch_len == 0)
+                   if (ibreq->ibr_srch.ibr_srch_len == 0)
                      {
-                       ibreq.ibr_srch.ibr_srch_len =
+                       ibreq->ibr_srch.ibr_srch_len =
                          NIS_RES_OBJECT (res)->LI_data.li_attrs.li_attrs_len;
-                       ibreq.ibr_srch.ibr_srch_val =
+                       ibreq->ibr_srch.ibr_srch_val =
                          NIS_RES_OBJECT (res)->LI_data.li_attrs.li_attrs_val;
                      }
                  nis_freeresult (res);
@@ -338,7 +335,7 @@ nis_list (const_nis_name name, u_long flags,
              /* Try the next domainname if we don't follow a link.  */
              if (count_links)
                {
-                 free (ibreq.ibr_name);
+                 free (ibreq->ibr_name);
                  res->status = NIS_LINKNAMEERROR;
                  ++done;
                  break;
@@ -349,7 +346,7 @@ nis_list (const_nis_name name, u_long flags,
                  ++done;
                  break;
                }
-             ibreq.ibr_name = names[name_nr];
+             ibreq->ibr_name = names[name_nr];
              break;
            }
        }
@@ -358,10 +355,14 @@ nis_list (const_nis_name name, u_long flags,
   if (names != namebuf)
     nis_freenames (names);
 
-  nis_free_request (&ibreq);
-
   if (cb)
-    __nis_destroy_callback (cb);
+    {
+      __nis_destroy_callback (cb);
+      ibreq->ibr_cbhost.ibr_cbhost_len = 0;
+      ibreq->ibr_cbhost.ibr_cbhost_val = NULL;
+    }
+
+  nis_free_request (ibreq);
 
   return res;
 }
@@ -372,53 +373,52 @@ nis_add_entry (const_nis_name name, const nis_object *obj,
 {
   nis_result *res;
   nis_error status;
-  struct ib_request ibreq;
+  ib_request *ibreq = calloc (1, sizeof (ib_request));
   char *p1, *p2, *p3, *p4;
   char buf1[strlen (name) + 20];
   char buf4[strlen (name) + 20];
 
   res = calloc (1, sizeof (nis_result));
 
-  if (__create_ib_request (name, &ibreq, flags) == NULL)
+  if (__create_ib_request (name, ibreq, flags) == NULL)
     {
       res->status = NIS_BADNAME;
       return res;
     }
 
-  ibreq.ibr_flags = flags;
-  ibreq.ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL);
-  ibreq.ibr_obj.ibr_obj_len = 1;
+  ibreq->ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL);
+  ibreq->ibr_obj.ibr_obj_len = 1;
 
-  p1 = ibreq.ibr_obj.ibr_obj_val->zo_name;
+  p1 = ibreq->ibr_obj.ibr_obj_val->zo_name;
   if (p1 == NULL || strlen (p1) == 0)
-    ibreq.ibr_obj.ibr_obj_val->zo_name =
+    ibreq->ibr_obj.ibr_obj_val->zo_name =
       nis_leaf_of_r (name, buf1, sizeof (buf1));
 
-  p2 = ibreq.ibr_obj.ibr_obj_val->zo_owner;
+  p2 = ibreq->ibr_obj.ibr_obj_val->zo_owner;
   if (p2 == NULL || strlen (p2) == 0)
-    ibreq.ibr_obj.ibr_obj_val->zo_owner = nis_local_principal ();
+    ibreq->ibr_obj.ibr_obj_val->zo_owner = nis_local_principal ();
 
-  p3 = ibreq.ibr_obj.ibr_obj_val->zo_group;
+  p3 = ibreq->ibr_obj.ibr_obj_val->zo_group;
   if (p3 == NULL || strlen (p3) == 0)
-    ibreq.ibr_obj.ibr_obj_val->zo_group = nis_local_group ();
+    ibreq->ibr_obj.ibr_obj_val->zo_group = nis_local_group ();
 
-  p4 = ibreq.ibr_obj.ibr_obj_val->zo_domain;
-  ibreq.ibr_obj.ibr_obj_val->zo_domain =
+  p4 = ibreq->ibr_obj.ibr_obj_val->zo_domain;
+  ibreq->ibr_obj.ibr_obj_val->zo_domain =
     nis_domain_of_r (name, buf4, sizeof (buf4));
 
-  if ((status = __do_niscall (ibreq.ibr_name, NIS_IBADD,
+  if ((status = __do_niscall (ibreq->ibr_name, NIS_IBADD,
                              (xdrproc_t) xdr_ib_request,
-                             (caddr_t) ibreq,
+                             (caddr_t) ibreq,
                              (xdrproc_t) xdr_nis_result,
                              (caddr_t) res, 0, NULL)) != NIS_SUCCESS)
     res->status = status;
 
-  ibreq.ibr_obj.ibr_obj_val->zo_name = p1;
-  ibreq.ibr_obj.ibr_obj_val->zo_owner = p2;
-  ibreq.ibr_obj.ibr_obj_val->zo_group = p3;
-  ibreq.ibr_obj.ibr_obj_val->zo_domain = p4;
+  ibreq->ibr_obj.ibr_obj_val->zo_name = p1;
+  ibreq->ibr_obj.ibr_obj_val->zo_owner = p2;
+  ibreq->ibr_obj.ibr_obj_val->zo_group = p3;
+  ibreq->ibr_obj.ibr_obj_val->zo_domain = p4;
 
-  nis_free_request (&ibreq);
+  nis_free_request (ibreq);
 
   return res;
 }
@@ -429,52 +429,51 @@ nis_modify_entry (const_nis_name name, const nis_object *obj,
 {
   nis_result *res;
   nis_error status;
-  struct ib_request ibreq;
+  ib_request *ibreq = calloc (1, sizeof (ib_request));
   char *p1, *p2, *p3, *p4;
   char buf1[strlen (name) + 20];
   char buf4[strlen (name) + 20];
 
   res = calloc (1, sizeof (nis_result));
 
-  if (__create_ib_request (name, &ibreq, flags) == NULL)
+  if (__create_ib_request (name, ibreq, flags) == NULL)
     {
       res->status = NIS_BADNAME;
       return res;
     }
 
-  ibreq.ibr_flags = flags;
-  ibreq.ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL);
-  ibreq.ibr_obj.ibr_obj_len = 1;
+  ibreq->ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL);
+  ibreq->ibr_obj.ibr_obj_len = 1;
 
-  p1 = ibreq.ibr_obj.ibr_obj_val->zo_name;
+  p1 = ibreq->ibr_obj.ibr_obj_val->zo_name;
   if (p1 == NULL || strlen (p1) == 0)
-    ibreq.ibr_obj.ibr_obj_val->zo_name =
+    ibreq->ibr_obj.ibr_obj_val->zo_name =
       nis_leaf_of_r (name, buf1, sizeof (buf1));
 
-  p2 = ibreq.ibr_obj.ibr_obj_val->zo_owner;
+  p2 = ibreq->ibr_obj.ibr_obj_val->zo_owner;
   if (p2 == NULL || strlen (p2) == 0)
-    ibreq.ibr_obj.ibr_obj_val->zo_owner = nis_local_principal ();
+    ibreq->ibr_obj.ibr_obj_val->zo_owner = nis_local_principal ();
 
-  p3 = ibreq.ibr_obj.ibr_obj_val->zo_group;
+  p3 = ibreq->ibr_obj.ibr_obj_val->zo_group;
   if (p3 == NULL || strlen (p3) == 0)
-    ibreq.ibr_obj.ibr_obj_val->zo_group = nis_local_group ();
+    ibreq->ibr_obj.ibr_obj_val->zo_group = nis_local_group ();
 
-  p4 = ibreq.ibr_obj.ibr_obj_val->zo_domain;
-  ibreq.ibr_obj.ibr_obj_val->zo_domain =
+  p4 = ibreq->ibr_obj.ibr_obj_val->zo_domain;
+  ibreq->ibr_obj.ibr_obj_val->zo_domain =
     nis_domain_of_r (name, buf4, sizeof (buf4));
 
-  if ((status = __do_niscall (ibreq.ibr_name, NIS_IBMODIFY,
+  if ((status = __do_niscall (ibreq->ibr_name, NIS_IBMODIFY,
                              (xdrproc_t) xdr_ib_request,
-                             (caddr_t) ibreq, (xdrproc_t) xdr_nis_result,
+                             (caddr_t) ibreq, (xdrproc_t) xdr_nis_result,
                              (caddr_t) res, 0, NULL)) != NIS_SUCCESS)
     res->status = status;
 
-  ibreq.ibr_obj.ibr_obj_val->zo_name = p1;
-  ibreq.ibr_obj.ibr_obj_val->zo_owner = p2;
-  ibreq.ibr_obj.ibr_obj_val->zo_group = p3;
-  ibreq.ibr_obj.ibr_obj_val->zo_domain = p4;
+  ibreq->ibr_obj.ibr_obj_val->zo_name = p1;
+  ibreq->ibr_obj.ibr_obj_val->zo_owner = p2;
+  ibreq->ibr_obj.ibr_obj_val->zo_group = p3;
+  ibreq->ibr_obj.ibr_obj_val->zo_domain = p4;
 
-  nis_free_request (&ibreq);
+  nis_free_request (ibreq);
 
   return res;
 }
@@ -484,31 +483,30 @@ nis_remove_entry (const_nis_name name, const nis_object *obj,
                  u_long flags)
 {
   nis_result *res;
-  struct ib_request ibreq;
+  ib_request *ibreq = calloc (1, sizeof (ib_request));
   nis_error status;
 
   res = calloc (1, sizeof (nis_result));
 
-  if (__create_ib_request (name, &ibreq, flags) == NULL)
+  if (__create_ib_request (name, ibreq, flags) == NULL)
     {
       res->status = NIS_BADNAME;
       return res;
     }
 
-  ibreq.ibr_flags = flags;
   if (obj != NULL)
     {
-      ibreq.ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL);
-      ibreq.ibr_obj.ibr_obj_len = 1;
+      ibreq->ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL);
+      ibreq->ibr_obj.ibr_obj_len = 1;
     }
 
-  if ((status = __do_niscall (ibreq.ibr_name, NIS_IBREMOVE,
+  if ((status = __do_niscall (ibreq->ibr_name, NIS_IBREMOVE,
                              (xdrproc_t) xdr_ib_request,
-                             (caddr_t) ibreq, (xdrproc_t) xdr_nis_result,
+                             (caddr_t) ibreq, (xdrproc_t) xdr_nis_result,
                              (caddr_t) res, 0, NULL)) != NIS_SUCCESS)
     res->status = status;
 
-  nis_free_request (&ibreq);
+  nis_free_request (ibreq);
 
   return res;
 }
@@ -517,24 +515,24 @@ nis_result *
 nis_first_entry (const_nis_name name)
 {
   nis_result *res;
-  struct ib_request ibreq;
+  ib_request *ibreq = calloc (1, sizeof (ib_request));
   nis_error status;
 
   res = calloc (1, sizeof (nis_result));
 
-  if (__create_ib_request (name, &ibreq, 0) == NULL)
+  if (__create_ib_request (name, ibreq, 0) == NULL)
     {
       res->status = NIS_BADNAME;
       return res;
     }
 
-  if ((status = __do_niscall (ibreq.ibr_name, NIS_IBFIRST,
+  if ((status = __do_niscall (ibreq->ibr_name, NIS_IBFIRST,
                              (xdrproc_t) xdr_ib_request,
-                             (caddr_t) ibreq, (xdrproc_t) xdr_nis_result,
+                             (caddr_t) ibreq, (xdrproc_t) xdr_nis_result,
                              (caddr_t) res, 0, NULL)) != NIS_SUCCESS)
     res->status = status;
 
-  nis_free_request (&ibreq);
+  nis_free_request (ibreq);
 
   return res;
 }
@@ -543,12 +541,12 @@ nis_result *
 nis_next_entry (const_nis_name name, const netobj *cookie)
 {
   nis_result *res;
-  struct ib_request ibreq;
+  ib_request *ibreq = calloc (1, sizeof (ib_request));
   nis_error status;
 
   res = calloc (1, sizeof (nis_result));
 
-  if (__create_ib_request (name, &ibreq, 0) == NULL)
+  if (__create_ib_request (name, ibreq, 0) == NULL)
     {
       res->status = NIS_BADNAME;
       return res;
@@ -556,24 +554,24 @@ nis_next_entry (const_nis_name name, const netobj *cookie)
 
   if (cookie != NULL)
     {
-      ibreq.ibr_cookie.n_bytes = malloc (cookie->n_len);
-      if (ibreq.ibr_cookie.n_bytes == NULL)
+      ibreq->ibr_cookie.n_bytes = malloc (cookie->n_len);
+      if (ibreq->ibr_cookie.n_bytes == NULL)
        {
          res->status = NIS_NOMEMORY;
          free (res);
          return NULL;
        }
-      memcpy (ibreq.ibr_cookie.n_bytes, cookie->n_bytes, cookie->n_len);
-      ibreq.ibr_cookie.n_len = cookie->n_len;
+      memcpy (ibreq->ibr_cookie.n_bytes, cookie->n_bytes, cookie->n_len);
+      ibreq->ibr_cookie.n_len = cookie->n_len;
     }
 
-  if ((status = __do_niscall (ibreq.ibr_name, NIS_IBNEXT,
+  if ((status = __do_niscall (ibreq->ibr_name, NIS_IBNEXT,
                              (xdrproc_t) xdr_ib_request,
-                             (caddr_t) ibreq, (xdrproc_t) xdr_nis_result,
+                             (caddr_t) ibreq, (xdrproc_t) xdr_nis_result,
                              (caddr_t) res, 0, NULL)) != NIS_SUCCESS)
     res->status = status;
 
-  nis_free_request (&ibreq);
+  nis_free_request (ibreq);
 
   return res;
 }
index 6a8ab01bd78cbb7951657a687d214bfd0b8d6891..be65120ae841b23460e6fee3a2fd450059e319fb 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
 
 nis_error
 nis_verifygroup (const_nis_name group)
index 82df04e44990f81594271782471b90edb95869d6..0c253da1270d7f9c5c51f1b7f4346f4065dd4736 100644 (file)
@@ -198,34 +198,34 @@ xdr_objdata (XDR *xdrs, objdata *objp)
     return FALSE;
   switch (objp->zo_type)
     {
-    case DIRECTORY_OBJ:
+    case NIS_DIRECTORY_OBJ:
       if (!xdr_directory_obj (xdrs, &objp->objdata_u.di_data))
        return FALSE;
       break;
-    case GROUP_OBJ:
+    case NIS_GROUP_OBJ:
       if (!xdr_group_obj (xdrs, &objp->objdata_u.gr_data))
        return FALSE;
       break;
-    case TABLE_OBJ:
+    case NIS_TABLE_OBJ:
       if (!xdr_table_obj (xdrs, &objp->objdata_u.ta_data))
        return FALSE;
       break;
-    case ENTRY_OBJ:
+    case NIS_ENTRY_OBJ:
       if (!xdr_entry_obj (xdrs, &objp->objdata_u.en_data))
        return FALSE;
       break;
-    case LINK_OBJ:
+    case NIS_LINK_OBJ:
       if (!xdr_link_obj (xdrs, &objp->objdata_u.li_data))
        return FALSE;
       break;
-    case PRIVATE_OBJ:
+    case NIS_PRIVATE_OBJ:
       if (!xdr_bytes (xdrs, (char **) &objp->objdata_u.po_data.po_data_val,
                      (u_int *) & objp->objdata_u.po_data.po_data_len, ~0))
        return FALSE;
       break;
-    case NO_OBJ:
+    case NIS_NO_OBJ:
       break;
-    case BOGUS_OBJ:
+    case NIS_BOGUS_OBJ:
       break;
     default:
       break;
index f074c5fa63211ee23e8d078f71de24b8885533c1..76c6f258132031557fbe8d46e4f8fb6c2a8e7445 100644 (file)
@@ -67,7 +67,7 @@ _nss_nisplus_parse_aliasent (nis_result *result, unsigned long entry,
     return 0;
 
   if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) ||
-      __type_of (&result->objects.objects_val[entry]) != ENTRY_OBJ ||
+      __type_of (&result->objects.objects_val[entry]) != NIS_ENTRY_OBJ ||
       strcmp(result->objects.objects_val[entry].EN_data.en_type,
             "mail_aliases") != 0 ||
       result->objects.objects_val[entry].EN_data.en_cols.en_cols_len < 2)
index b21c276df2951f52f6c2db880cec14b2386048d5..8ca6935cc7e1645ed84f2467a00a200ad8383ee8 100644 (file)
@@ -63,7 +63,7 @@ _nss_nisplus_parse_etherent (nis_result *result, struct etherent *ether,
 
   if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) ||
       result->objects.objects_len != 1 ||
-      __type_of (NIS_RES_OBJECT (result)) != ENTRY_OBJ ||
+      __type_of (NIS_RES_OBJECT (result)) != NIS_ENTRY_OBJ ||
       strcmp(NIS_RES_OBJECT (result)->EN_data.en_type,
              "ethers_tbl") != 0 ||
       NIS_RES_OBJECT(result)->EN_data.en_cols.en_cols_len < 2)
index 7fefec0fd34ff989fd92c77835ab7bf3fb0bfe5b..d1aa5ef78792771f2f2607a6cc73dd71b4e49823 100644 (file)
@@ -57,7 +57,7 @@ _nss_nisplus_parse_hostent (nis_result *result, int af, struct hostent *host,
     return 0;
 
   if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) ||
-      __type_of (result->objects.objects_val) != ENTRY_OBJ ||
+      __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ ||
       strcmp(result->objects.objects_val[0].EN_data.en_type,
             "hosts_tbl") != 0 ||
       result->objects.objects_val[0].EN_data.en_cols.en_cols_len < 4)
@@ -340,7 +340,7 @@ _nss_nisplus_gethostbyname2_r (const char *name, int af, struct hostent *host,
       /* If we do not find it, try it as original name. But if the
         database is correct, we should find it in the first case, too */
       if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) ||
-         __type_of (result->objects.objects_val) != ENTRY_OBJ ||
+         __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ ||
          strcmp(result->objects.objects_val->EN_data.en_type,
                 "hosts_tbl") != 0 ||
          result->objects.objects_val->EN_data.en_cols.en_cols_len < 3)
index 8aa8bc0f9eade1ff4442de2e5e75b19ece9cc8fc..e548017068a74d028bd3bc9423826f56da28d2b7 100644 (file)
@@ -54,7 +54,7 @@ _nss_nisplus_parse_netent (nis_result *result, struct netent *network,
     return 0;
 
   if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) ||
-      __type_of (result->objects.objects_val) != ENTRY_OBJ ||
+      __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ ||
       strcmp(result->objects.objects_val[0].EN_data.en_type,
              "networks_tbl") != 0 ||
       result->objects.objects_val[0].EN_data.en_cols.en_cols_len < 3)
@@ -310,7 +310,7 @@ _nss_nisplus_getnetbyname_r (const char *name, struct netent *network,
         database is correct, we should find it in the first case, too */
       if ((result->status != NIS_SUCCESS &&
           result->status != NIS_S_SUCCESS) ||
-         __type_of (result->objects.objects_val) != ENTRY_OBJ ||
+         __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ ||
          strcmp(result->objects.objects_val[0].EN_data.en_type,
                 "networks_tbl") != 0 ||
          result->objects.objects_val[0].EN_data.en_cols.en_cols_len < 3)
index db5f487159a829f18c28f0b96dd69b22801490d2..b700fa66b47e6636379785cb8133e725e8e01f3f 100644 (file)
@@ -44,7 +44,7 @@ _nss_nisplus_parse_pwent (nis_result *result, struct passwd *pw,
 
   if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) ||
       result->objects.objects_len != 1 ||
-      __type_of (result->objects.objects_val) != ENTRY_OBJ ||
+      __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ ||
       strcmp(result->objects.objects_val->EN_data.en_type,
             "passwd_tbl") != 0 ||
       result->objects.objects_val->EN_data.en_cols.en_cols_len < 7)
@@ -141,7 +141,7 @@ _nss_nisplus_parse_grent (nis_result *result, u_long entry,
     return 0;
 
   if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) ||
-      __type_of(result->objects.objects_val) != ENTRY_OBJ ||
+      __type_of(result->objects.objects_val) != NIS_ENTRY_OBJ ||
       strcmp (result->objects.objects_val[entry].EN_data.en_type,
              "group_tbl") != 0 ||
       result->objects.objects_val[entry].EN_data.en_cols.en_cols_len < 4)
@@ -250,7 +250,7 @@ _nss_nisplus_parse_spent (nis_result *result, struct spwd *sp,
 
   if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) ||
       result->objects.objects_len != 1 ||
-      __type_of(result->objects.objects_val) != ENTRY_OBJ ||
+      __type_of(result->objects.objects_val) != NIS_ENTRY_OBJ ||
       strcmp (result->objects.objects_val->EN_data.en_type,
              "passwd_tbl") != 0 ||
       result->objects.objects_val[0].EN_data.en_cols.en_cols_len < 8)
index b64d4bdd0250aff19a1e04d5747956d5ef6ca0dc..2cbd9fe2fa6fc35b0ef67a780483ed3016895f79 100644 (file)
@@ -52,7 +52,7 @@ _nss_nisplus_parse_protoent (nis_result * result, struct protoent *proto,
     return 0;
 
   if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) ||
-      __type_of (NIS_RES_OBJECT (result)) != ENTRY_OBJ ||
+      __type_of (NIS_RES_OBJECT (result)) != NIS_ENTRY_OBJ ||
       strcmp (NIS_RES_OBJECT (result)->EN_data.en_type, "protocols_tbl") != 0
       || NIS_RES_OBJECT (result)->EN_data.en_cols.en_cols_len < 3)
     return 0;
@@ -282,7 +282,7 @@ _nss_nisplus_getprotobyname_r (const char *name, struct protoent *proto,
          database is correct, we should find it in the first case, too */
       if ((result->status != NIS_SUCCESS &&
           result->status != NIS_S_SUCCESS) ||
-         __type_of (result->objects.objects_val) != ENTRY_OBJ ||
+         __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ ||
          strcmp (result->objects.objects_val->EN_data.en_type,
                  "protocols_tbl") != 0 ||
          result->objects.objects_val->EN_data.en_cols.en_cols_len < 3)
index e93a51652eeb48542d9ea6489f69317638446e15..77a7248305ee605fd13a6b609a1e1a4f8c908cda 100644 (file)
@@ -53,7 +53,7 @@ _nss_nisplus_parse_rpcent (nis_result *result, struct rpcent *rpc,
     return 0;
 
   if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) ||
-      __type_of (result->objects.objects_val) != ENTRY_OBJ ||
+      __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ ||
       strcmp(result->objects.objects_val[0].EN_data.en_type,
              "rpc_tbl") != 0 ||
       result->objects.objects_val[0].EN_data.en_cols.en_cols_len < 3)
@@ -282,7 +282,7 @@ _nss_nisplus_getrpcbyname_r (const char *name, struct rpcent *rpc,
          database is correct, we should find it in the first case, too */
       if ((result->status != NIS_SUCCESS &&
            result->status != NIS_S_SUCCESS) ||
-          __type_of (result->objects.objects_val) != ENTRY_OBJ ||
+          __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ ||
           strcmp (result->objects.objects_val->EN_data.en_type,
                  "rpc_tbl") != 0 ||
           result->objects.objects_val->EN_data.en_cols.en_cols_len < 3)
index e1a89f92bed1b49282038f1fe73e7d20a7d4964d..95a8cfa74bf088816ec18ace509e8e1e543a2242 100644 (file)
@@ -52,7 +52,7 @@ _nss_nisplus_parse_servent (nis_result *result, struct servent *serv,
     return 0;
 
   if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) ||
-      __type_of (result->objects.objects_val) != ENTRY_OBJ ||
+      __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ ||
       strcmp (result->objects.objects_val->EN_data.en_type,
              "services_tbl") != 0 ||
       result->objects.objects_val->EN_data.en_cols.en_cols_len < 4)
@@ -294,7 +294,7 @@ _nss_nisplus_getservbyname_r (const char *name, const char *protocol,
          database is correct, we should find it in the first case, too */
       if ((result->status != NIS_SUCCESS &&
           result->status != NIS_S_SUCCESS) ||
-         __type_of (result->objects.objects_val) != ENTRY_OBJ ||
+         __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ ||
          strcmp (result->objects.objects_val->EN_data.en_type,
                  "services_tbl") != 0 ||
          result->objects.objects_val->EN_data.en_cols.en_cols_len < 4)
index f94b96cba4d21be1f8f460154c9f471865408902..c0d25325c1dda73d1bd1fd5119098390d83a565a 100644 (file)
@@ -46,14 +46,15 @@ __BEGIN_DECLS
  *     which defines the tag values. This allows the tags to change without
  *     having to change the nis.x file.
  *
- *     NOTE : DO NOT EDIT THIS FILE! It is automatically generated when
- *            rpcgen is run on the nis.x file. Note that there is a
- *            simple sed script to remove some unneeded lines. (See the
- *            Makefile target nis.h)
+ *     NOTE : THIS FILE IS NOT GENERATED WITH RPCGEN ! SO YOU HAVE TO
+ *             ADD ALL THE CHANGES ON nis_*.x FILES HERE AGAIN !
  *
+ *      I have removed all the Solaris internal structs and variables,
+ *      because they are not supported, Sun changed them between various
+ *      releases and they shouldn't be used in user programs.
+ *                                              <kukuk@vt.uni-paderborn.de>
  */
 
-#pragma ident  "@(#)nis_object.x       1.7     92/07/14 SMI"
 
 #ifndef __nis_object_h
 #define __nis_object_h
@@ -94,6 +95,14 @@ enum zotypes {
        ENTRY_OBJ = 5,
        LINK_OBJ = 6,
        PRIVATE_OBJ = 7,
+       NIS_BOGUS_OBJ = 0,
+       NIS_NO_OBJ = 1,
+       NIS_DIRECTORY_OBJ = 2,
+       NIS_GROUP_OBJ = 3,
+       NIS_TABLE_OBJ = 4,
+       NIS_ENTRY_OBJ = 5,
+       NIS_LINK_OBJ = 6,
+       NIS_PRIVATE_OBJ = 7
 };
 typedef enum zotypes zotypes;
 extern  bool_t xdr_zotypes __P ((XDR *, zotypes*));
@@ -472,30 +481,6 @@ struct fd_result {
 typedef struct fd_result fd_result;
 extern  bool_t xdr_fd_result __P ((XDR *, fd_result*));
 
-/*
- * Generic "hash" datastructures, used by all types of hashed data.
- */
-struct nis_hash_data {
-       nis_name                name;      /* NIS name of hashed item      */
-       int                     keychain;  /* It's hash key (for pop)      */
-       struct nis_hash_data    *next;     /* Hash collision pointer       */
-       struct nis_hash_data    *prv_item; /* A serial, doubly linked list */
-       struct nis_hash_data    *nxt_item; /* of items in the hash table   */
-};
-typedef struct nis_hash_data NIS_HASH_ITEM;
-
-struct nis_hash_table {
-       NIS_HASH_ITEM   *keys[64];      /* A hash table of items           */
-       NIS_HASH_ITEM   *first;         /* The first "item" in serial list */
-};
-typedef struct nis_hash_table NIS_HASH_TABLE;
-
-/* Structure for storing dynamically allocated static data */
-struct nis_sdata {
-       void    *buf;   /* Memory allocation pointer    */
-       u_long  size;   /* Buffer size                  */
-};
-
 /* Generic client creating flags */
 #define ZMH_VC         1
 #define ZMH_DG         2
@@ -508,6 +493,15 @@ struct nis_sdata {
 #define NIS_CREATE_ACC         4
 #define NIS_DESTROY_ACC        8
 /* Test macros. a == access rights, m == desired rights. */
+#define NIS_WORLD(a, m)        (((a) & (m)) != 0)
+#define NIS_GROUP(a, m)        (((a) & ((m) << 8)) != 0)
+#define NIS_OWNER(a, m)        (((a) & ((m) << 16)) != 0)
+#define NIS_NOBODY(a, m)       (((a) & ((m) << 24)) != 0)
+/*
+ * EOL Alert - The following non-prefixed test macros are
+ * here for backward compatability, and will be not be present
+ * in future releases - use the NIS_*() macros above.
+ */
 #define WORLD(a, m)    (((a) & (m)) != 0)
 #define GROUP(a, m)    (((a) & ((m) << 8)) != 0)
 #define OWNER(a, m)    (((a) & ((m) << 16)) != 0)
index 20a4733741f968b61bbc2cb3af34bdb2b439ecce..2d19f379314c7b96a145383333b30c7e778ed821 100644 (file)
 % * Mountain View, California  94043
 % */
 
-/*
- * From 4.1 : @(#)nis.x        1.61 Copyright 1989 Sun Microsystems
- *
- * RPC Language Protocol description file for NIS Plus
- * This version : 1.61
- * Last Modified : 3/19/91
- */
 #ifdef RPC_HDR
 %/*
 % *    nis.h
@@ -44,9 +37,9 @@
 % *    structures used by the NIS service. It includes the file nis_tags.h
 % *    which defines the tag values. This allows the tags to change without
 % *    having to change the nis.x file.
-% *
+% *    
 % *    NOTE : DO NOT EDIT THIS FILE! It is automatically generated when
-% *           rpcgen is run on the nis.x file. Note that there is a
+% *           rpcgen is run on the nis.x file. Note that there is a 
 % *           simple sed script to remove some unneeded lines. (See the
 % *           Makefile target nis.h)
 % *
@@ -75,7 +68,7 @@ enum nis_error {
        NIS_NAMEUNREACHABLE = 5, /* Can't get there from here */
        NIS_UNKNOWNOBJ = 6,     /* Object type is bogus */
        NIS_TRYAGAIN = 7,       /* I'm busy, call back */
-       NIS_SYSTEMERROR = 8,    /* Out of band failure */
+       NIS_SYSTEMERROR = 8,    /* Generic system error */
        NIS_CHAINBROKEN = 9,    /* First/Next warning */
        NIS_PERMISSION = 10,    /* Not enough permission to access */
        NIS_NOTOWNER = 11,      /* You don't own it, sorry */
@@ -118,11 +111,11 @@ enum nis_error {
 };
 
 
-/*
+/* 
  * Structure definitions for the parameters and results of the actual
  * NIS RPC calls.
  *
- * This is the standard result (in the protocol) of most of the nis
+ * This is the standard result (in the protocol) of most of the nis 
  * requests.
  */
 
@@ -136,11 +129,11 @@ struct nis_result {
        u_long          cticks;         /* Client ticks           */
 };
 
-/*
- * A Name Service request
- * This request is used to access the name space, ns_name is the name
+/* 
+ * A Name Service request 
+ * This request is used to access the name space, ns_name is the name 
  * of the object within the namespace and the object is it's value, for
- * add/modify, a copy of the original for remove.
+ * add/modify, a copy of the original for remove. 
  */
 
 struct ns_request {
@@ -148,7 +141,7 @@ struct ns_request {
        nis_object      ns_object<1>;   /* Optional Object (add/remove) */
 };
 
-/*
+/* 
  * An information base request
  * This request includes the NIS name of the table we wish to search, the
  * search criteria in the form of attribute/value pairs and an optional
@@ -168,7 +161,7 @@ struct ib_request {
 };
 
 /*
- * This argument to the PING call notifies the replicas that something in
+ * This argument to the PING call notifies the replicas that something in 
  * a directory has changed and this is it's timestamp. The replica will use
  * the timestamp to determine if its resync operation was successful.
  */
@@ -177,8 +170,8 @@ struct ping_args {
        u_long          stamp;  /* timestamp of the transaction  */
 };
 
-/*
- * These are the type of entries that are stored in the transaction log,
+/* 
+ * These are the type of entries that are stored in the transaction log, 
  * note that modifications will appear as two entries, for names, they have
  * a "OLD" entry followed by a "NEW" entry. For entries in tables, there
  * is a remove followed by an add. It is done this way so that we can read
@@ -196,13 +189,13 @@ enum log_entry_t {
        MOD_IBASE = 7,          /* Entry was modified in information base */
        UPD_STAMP = 8           /* Update timestamp (used as fenceposts)  */
 };
-
+       
 /*
- * This result is returned from the name service when it is requested to
+ * This result is returned from the name service when it is requested to 
  * dump logged entries from its transaction log. Information base updates
  * will have the name of the information base in the le_name field and
  * a canonical set of attribute/value pairs to fully specify the entry's
- * 'name'.
+ * 'name'. 
  */
 struct log_entry {
        u_long          le_time;        /* Time in seconds              */
@@ -218,7 +211,7 @@ struct log_result {
        netobj          lr_cookie;      /* Used by the dump callback    */
        log_entry       lr_entries<>;   /* zero or more entries         */
 };
-
+       
 struct cp_result {
        nis_error       cp_status;      /* Status of the checkpoint     */
        u_long          cp_zticks;      /* Service 'ticks'              */
@@ -227,7 +220,7 @@ struct cp_result {
 
 /*
  * This structure defines a generic NIS tag list. The taglist contains
- * zero or tags, each of which is a type and a value. (u_long).
+ * zero or tags, each of which is a type and a value. (u_long). 
  * These are used to report statistics (see tag definitions below)
  * and to set or reset state variables.
  */
@@ -254,17 +247,59 @@ struct fd_args {
 struct fd_result {
        nis_error       status;         /* Status returned by function  */
        nis_name        source;         /* Source of this answer        */
-       opaque          dir_data<>;     /* Directory Data (XDR'ed)      */
+       opaque          dir_data<>;     /* Directory Data (XDR'ed)      */ 
        opaque          signature<>;    /* Signature of the source      */
 };
 
+%/*
+% * Structures used for server binding.
+% */
+struct nis_bound_endpoint {
+       endpoint ep;
+       int generation;
+       int rank;
+       u_long flags;
+       int hostnum;
+       int epnum;
+       nis_name uaddr;
+       endpoint cbep;
+};
+typedef struct nis_bound_endpoint nis_bound_endpoint;
+struct nis_bound_directory {
+       int generation;
+       int min_rank;           /* minimum rank of bound endpoints */
+       int optimal_rank;       /* best possible rank of all endpoints */
+       directory_obj dobj;
+       nis_bound_endpoint BEP<>;
+};
+typedef struct nis_bound_directory nis_bound_directory;
+%#define bep_len BEP.BEP_len
+%#define bep_val BEP.BEP_val
+struct nis_active_endpoint {
+       endpoint ep;
+       nis_name hostname;
+       int rank;
+       int uaddr_generation;
+       nis_name uaddr;
+       int cbep_generation;
+       endpoint cbep;
+};
+typedef struct nis_active_endpoint nis_active_endpoint;
+%/* defines for nis_bound_endpoint.flags */
+%#define NIS_BOUND 0x1
+%#define NIS_TRANSIENT_ERRORS 0x2
+
 
-/*
+
+/* 
  * What's going on here? Well, it's like this. When the service
  * is being compiled it wants to have the service definition specific
  * info included, and when the client is being compiled it wants that
  * info. This includes the appropriate file which was generated by
- * make in the protocols directory (probably /usr/include/rpcsvc).
+ * make in the protocols directory (probably /usr/include/rpcsvc). 
  */
 #ifdef RPC_SVC
 %#include "nis_svc.h"
@@ -296,10 +331,10 @@ program  NIS_PROG {
 
                /* If fetch and optionally reset statistics */
                nis_taglist  NIS_STATUS(nis_taglist) = 14;
-
+               
                /* Dump changes to directory since time in da_time */
                log_result  NIS_DUMPLOG(dump_args) = 15;
-
+               
                /* Dump contents of directory named */
                log_result  NIS_DUMP(dump_args) = 16;
 
@@ -314,16 +349,16 @@ program  NIS_PROG {
 
                /* Send 'status changed' ping to replicates */
                void        NIS_PING(ping_args) = 20;
-
+       
                /* Modify server behaviour (such as debugging) */
                nis_taglist NIS_SERVSTATE(nis_taglist) = 21;
-
+       
                /* Create a Directory */
                nis_error   NIS_MKDIR(nis_name) = 22;
-
+       
                /* Remove a Directory */
                nis_error   NIS_RMDIR(nis_name) = 23;
-
+               
                /* Update public keys of a directory object */
                nis_error   NIS_UPDKEYS(nis_name) = 24;
        } = 3;
@@ -372,6 +407,15 @@ program  NIS_PROG {
 %#define NIS_CREATE_ACC                4
 %#define NIS_DESTROY_ACC       8
 %/* Test macros. a == access rights, m == desired rights. */
+%#define NIS_WORLD(a, m)       (((a) & (m)) != 0)
+%#define NIS_GROUP(a, m)       (((a) & ((m) << 8)) != 0)
+%#define NIS_OWNER(a, m)       (((a) & ((m) << 16)) != 0)
+%#define NIS_NOBODY(a, m)      (((a) & ((m) << 24)) != 0)
+%/* 
+% * EOL Alert - The following non-prefixed test macros are 
+% * here for backward compatability, and will be not be present
+% * in future releases - use the NIS_*() macros above.
+% */
 %#define WORLD(a, m)   (((a) & (m)) != 0)
 %#define GROUP(a, m)   (((a) & ((m) << 8)) != 0)
 %#define OWNER(a, m)   (((a) & ((m) << 16)) != 0)
@@ -418,6 +462,8 @@ program  NIS_PROG {
 %#define ENTRY_LEN(obj, col) \
 %      (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len
 %
+%
+%
 %#ifdef __cplusplus
 %}
 %#endif
@@ -429,12 +475,12 @@ program  NIS_PROG {
 %
 %/*
 % * nis_3.h
-% *
+% * 
 % * This file contains definitions that are only of interest to the actual
 % * service daemon and client stubs. Normal users of NIS will not include
 % * this file.
 % *
-% * NOTE : This include file is automatically created by a combination
+% * NOTE : This include file is automatically created by a combination 
 % * of rpcgen and sed. DO NOT EDIT IT, change the nis.x file instead
 % * and then remake this file.
 % */
diff --git a/nis/rpcsvc/nis_cache.h b/nis/rpcsvc/nis_cache.h
deleted file mode 100644 (file)
index ca91a22..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef __RPCSVC_NIS_CACHE_H_
-#define __RPCSVC_NIS_CACHE_H_
-
-#include <features.h>
-#include <rpc/rpc.h>
-#include <rpc/types.h>
-#include <rpcsvc/nis.h>
-
-__BEGIN_DECLS
-
-/* default cache file */
-#define CACHEFILE "/var/nis/NIS_SHARED_DIRCACHE" 
-
-/* clients have to read-lock the cache file, and SVR4 locking requires that */
-/*   the file be writable, but we don't want a world-writable cache file.   */
-/*   So... everyone agrees to use a different, world-writable file for the  */
-/*   locking operations, but the data is in CACHEFILE.                      */
-#define CACHELOCK "/usr/tmp/.NIS_DIR_CACHELOCK"
-
-/* the file containing one trusted XDR'ed directory object.
- * This has to be present for the system to work.
- */
-#define COLD_START_FILE "/var/nis/NIS_COLD_START"
-
-enum pc_status {HIT, MISS, NEAR_MISS};
-
-#define CACHEPROG ((u_long)100301)
-#define CACHE_VER_1 ((u_long)1)
-
-#define NIS_CACHE_ADD_ENTRY ((u_long)1)
-#define NIS_CACHE_REMOVE_ENTRY ((u_long)2)
-#define NIS_CACHE_READ_COLDSTART ((u_long)3)
-#define NIS_CACHE_REFRESH_ENTRY ((u_long)4)
-
-extern void *nis_cache_add_entry_1 __P ((fd_result *, CLIENT *));
-extern void *nis_cache_add_entry_1_svc __P ((fd_result *, struct svc_req *));
-extern void *nis_cache_remove_entry_1 __P ((directory_obj *, CLIENT *));
-extern void *nis_cache_remove_entry_1_svc __P ((directory_obj *,
-                                               struct svc_req *));
-extern void *nis_cache_read_coldstart_1 __P ((void *, CLIENT *));
-extern void *nis_cache_read_coldstart_1_svc __P ((void *, struct svc_req *));
-extern void *nis_cache_refresh_entry_1 __P ((char **, CLIENT *));
-extern void *nis_cache_refresh_entry_1_svc __P ((char **, struct svc_req *));
-
-__END_DECLS
-
-#endif /* !_RPCSVC_NIS_CACHE_H_ */
diff --git a/nis/rpcsvc/nis_cache.x b/nis/rpcsvc/nis_cache.x
deleted file mode 100644 (file)
index 91870d8..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *     nis_cache.x
- *
- *     Copyright (c) 1988-1992 Sun Microsystems Inc
- *     All Rights Reserved.
- */
-
-%#pragma ident "@(#)nis_cache.x        1.8     92/07/14 SMI"
-
-
-#ifdef RPC_HDR
-%#include <rpc/types.h>
-%#include <rpcsvc/nis.h>
-%
-%/* default cache file */
-%#define CACHEFILE "/var/nis/NIS_SHARED_DIRCACHE" 
-%
-%/* clients have to read-lock the cache file, and SVR4 locking requires that */
-%/*   the file be writable, but we don't want a world-writable cache file.   */
-%/*   So... everyone agrees to use a different, world-writable file for the  */
-%/*   locking operations, but the data is in CACHEFILE.                      */
-%#define CACHELOCK "/usr/tmp/.NIS_DIR_CACHELOCK"
-%
-%/* the file containing one trusted XDR'ed directory object.
-% * This has to be present for the system to work.
-% */
-%#define COLD_START_FILE "/var/nis/NIS_COLD_START"
-%
-%enum pc_status {HIT, MISS, NEAR_MISS};
-%
-%extern int __nis_debuglevel;
-%
-%
-#endif
-
-#ifdef RPC_CLNT
-%#include "../gen/nis_clnt.h"
-#endif
-
-program CACHEPROG {
-       version CACHE_VER_1 {
-               void NIS_CACHE_ADD_ENTRY(fd_result) = 1;
-               void NIS_CACHE_REMOVE_ENTRY(directory_obj) = 2;
-               void NIS_CACHE_READ_COLDSTART(void) = 3;
-               void NIS_CACHE_REFRESH_ENTRY(string<>) = 4;
-       } = 1;
-} = 100301;
index e13ae47b70ac27a299e313798077d3f24420a9c2..496a16a1e1075b46c004dc40677e09b1cffbf03c 100644 (file)
@@ -5,7 +5,7 @@
  *     All Rights Reserved.
  */
 
-%#pragma ident "@(#)nis_object.x       1.7     92/07/14 SMI"
+%#pragma ident "@(#)nis_object.x       1.9     96/07/09 SMI"
 
 #if RPC_HDR
 %
@@ -65,9 +65,14 @@ typedef string nis_name<>;   /* The NIS name itself. */
  *             1024 - 2047 are defined to be private to a particular tree.
  *             2048 - 4095 are defined to be user defined.
  *             4096 - ...  are reserved for future use.
+ *
+ * EOL Alert - The non-prefixed names are present for backward
+ * compatability only, and will not exist in future releases. Use
+ * the NIS_* names for future compatability.
  */
 
 enum zotypes {
+       
        BOGUS_OBJ       = 0,    /* Uninitialized object structure       */
        NO_OBJ          = 1,    /* NULL object (no data)                */
        DIRECTORY_OBJ   = 2,    /* Directory object describing domain   */
@@ -75,7 +80,16 @@ enum zotypes {
        TABLE_OBJ       = 4,    /* Table object (a database schema)     */
        ENTRY_OBJ       = 5,    /* Entry object (a database record)     */
        LINK_OBJ        = 6,    /* A name link.                         */
-       PRIVATE_OBJ     = 7     /* Private object (all opaque data)     */
+       PRIVATE_OBJ     = 7,    /* Private object (all opaque data)     */
+       
+       NIS_BOGUS_OBJ   = 0,    /* Uninitialized object structure       */
+       NIS_NO_OBJ      = 1,    /* NULL object (no data)                */
+       NIS_DIRECTORY_OBJ = 2, /* Directory object describing domain    */
+       NIS_GROUP_OBJ   = 3,    /* Group object (a list of names)       */
+       NIS_TABLE_OBJ   = 4,    /* Table object (a database schema)     */
+       NIS_ENTRY_OBJ   = 5,    /* Entry object (a database record)     */
+       NIS_LINK_OBJ    = 6,    /* A name link.                         */
+       NIS_PRIVATE_OBJ  = 7 /* Private object (all opaque data) */
 };
 
 /*
@@ -230,21 +244,21 @@ struct table_obj {
  * This union joins together all of the currently known objects. 
  */
 union objdata switch (zotypes zo_type) {
-        case DIRECTORY_OBJ :
+        case NIS_DIRECTORY_OBJ :
                 struct directory_obj di_data;
-        case GROUP_OBJ :
+        case NIS_GROUP_OBJ :
                 struct group_obj gr_data;
-        case TABLE_OBJ :
+        case NIS_TABLE_OBJ :
                 struct table_obj ta_data;
-        case ENTRY_OBJ:
+        case NIS_ENTRY_OBJ:
                 struct entry_obj en_data;
-        case LINK_OBJ :
+        case NIS_LINK_OBJ :
                 struct link_obj li_data;
-        case PRIVATE_OBJ :
+        case NIS_PRIVATE_OBJ :
                 opaque po_data<>;
-       case NO_OBJ :
+       case NIS_NO_OBJ :
                void;
-        case BOGUS_OBJ :
+        case NIS_BOGUS_OBJ :
                void;
         default :
                 void;
index 30bdff6d1a43485307513004d52b4d02fba935ca..19a5bcab19f83261512e520f414ef4e262b308d9 100644 (file)
@@ -12,7 +12,7 @@
 #ifndef        _RPCSVC_NIS_TAGS_H
 #define        _RPCSVC_NIS_TAGS_H
 
-#pragma ident  "@(#)nis_tags.h 1.13    95/02/17 SMI"
+#pragma ident  "@(#)nis_tags.h 1.16    96/10/25 SMI"
 /* from file: zns_tags.h       1.7 Copyright (c) 1990 Sun Microsystems */
 
 #ifdef __cplusplus
@@ -40,6 +40,9 @@ extern "C" {
 #define        REM_RESERVED    (1<<12) /* Spare REM semantic                   */
 #define        MOD_EXCLUSIVE   (1<<13) /* Modify no overwrite on modified keys */
 
+/* Lookup and List function flags (continued) */
+#define        SOFT_LOOKUP     (1<<14) /* The "old default" return on failure  */
+
 /* Transport specific modifications to the operation */
 #define        USE_DGRAM       (1<<16) /* Use a datagram transport             */
 #define        NO_AUTHINFO     (1<<17) /* Don't bother attaching auth info     */
@@ -63,6 +66,8 @@ extern "C" {
 #define        TAG_TCACHE_ALL  9       /* Flush entire table cache     */
 #define        TAG_GCACHE_ONE  10      /* Flush one group object       */
 #define        TAG_DCACHE_ONE_REFRESH 11 /* Flush and refresh one DO   */
+#define        TAG_READONLY    12      /* Set read only mode           */
+#define        TAG_READWRITE   14      /* Reset read-write mode        */
 
 #define        TAG_OPSTATS     2048    /* NIS+ operations statistics   */
 #define        TAG_THREADS     2049    /* Child process/thread status  */
index 73b3804e85c4cbff9b97d074947e44435c812872..016bedc769c1c9644a600f4c13b0f6c070540d57 100644 (file)
@@ -224,29 +224,14 @@ extern bool_t nis_write_obj __P ((const char *file, const nis_object *obj));
 */
 extern directory_obj *nis_clone_directory __P ((const directory_obj *src,
                                                directory_obj *dest));
-extern group_obj *nis_clone_group __P ((const group_obj *src,
-                                       group_obj *dest));
-extern table_obj *nis_clone_table __P ((const table_obj *src,
-                                       table_obj *dest));
-extern entry_obj *nis_clone_entry __P ((const entry_obj *src,
-                                       entry_obj *dest));
-extern link_obj *nis_clone_link __P ((const link_obj *src, link_obj *dest));
-extern objdata *nis_clone_objdata __P ((const objdata *src, objdata *dest));
 extern nis_result *nis_clone_result __P ((const nis_result *src,
                                          nis_result *dest));
 
 /* nis_free - nis_freeresult */
 extern void nis_freeresult __P ((nis_result *result));
 /* (XXX THE FOLLOWING ARE INTERNAL FUNCTIONS, SHOULD NOT BE USED !!) */
-extern void nis_free_attr __P ((nis_attr *attr));
 extern void nis_free_request __P ((ib_request *req));
-extern void nis_free_endpoints __P ((endpoint *ep, unsigned int count));
-extern void nis_free_servers __P ((nis_server *machine, unsigned int count));
 extern void nis_free_directory __P ((directory_obj *dirobj));
-extern void nis_free_group __P ((group_obj *grpobj));
-extern void nis_free_table __P ((table_obj *tblobj));
-extern void nis_free_entry __P ((entry_obj *enobj));
-extern void nis_free_link __P ((link_obj *lnkobj));
 extern void nis_free_object __P ((nis_object *obj));
 
 /* (XXX INTERNAL FUNCTIONS, SHOULD NOT BE USED !!) */
@@ -255,10 +240,9 @@ extern nis_name __nis_default_group __P ((char *));
 extern u_long __nis_default_ttl __P ((char *));
 extern u_long __nis_default_access __P ((char *, u_long));
 extern fd_result *__nis_finddirectory __P ((directory_obj *, const_nis_name));
+extern void __free_fdresult __P ((fd_result *));
 extern u_long __nis_hash __P ((const void *keyarg, register size_t len));
-extern log_result *__nis_dumplog __P ((nis_server *,nis_name, u_long));
-extern log_result *__nis_dump __P ((nis_server *, nis_name,
-                                   int (*)(nis_name, nis_object *, void *)));
+
 /* NIS+ cache locking */
 extern int __nis_lock_cache __P ((void));
 extern int __nis_unlock_cache __P ((void));
index dace7824d4ce5b5cda653aae641f617c5adc9fb1..d7ce0d76d0c59f43af0d5d0a0c8dbbb8ae96310e 100644 (file)
@@ -85,4 +85,6 @@ extern  u_int * ypu_delete_1_svc __P ((ypdelete_args *, struct svc_req *));
 extern  u_int * ypu_store_1 __P ((ypupdate_args *, CLIENT *));
 extern  u_int * ypu_store_1_svc __P ((ypupdate_args *, struct svc_req *));
 
+__END_DECLS
+
 #endif /* !__RPCSVC_YPUPD_H__ */
index e1baafa843e47bb74c09327ea23c3c11088e1ccb..dab64bfe1f06575f0b9a22a44bca759d0013205d 100644 (file)
@@ -25,7 +25,6 @@
     {
       const char *cp;
       char *hostname;
-      struct hostent *host;
       typedef unsigned char host_addr_t [16];
       host_addr_t *host_addr;
       typedef char *host_addr_list_t [2];
@@ -53,7 +52,7 @@
          break;
        }
 
-      size_needed = (sizeof (*host) + sizeof (*host_addr)
+      size_needed = (sizeof (*host_addr)
                     + sizeof (*host_aliases) + sizeof (*h_addr_ptrs)
                     + strlen (name) + 1);
 
@@ -86,8 +85,7 @@
 
       memset (buffer, 0, size_needed);
 
-      host = (struct hostent *) buffer;
-      host_addr = (host_addr_t *) ((char *) host + sizeof (*host));
+      host_addr = (host_addr_t *) buffer;
       host_aliases = (host_addr_list_t *)
        ((char *) host_addr + sizeof (*host_addr));
       h_addr_ptrs = (host_addr_list_t *)
                      goto done;
                    }
 
-                 strcpy (hostname, name);
-                 host->h_name = hostname;
-                 host->h_aliases = *host_aliases;
+                 resbuf.h_name = strcpy (hostname, name);
+                 resbuf.h_aliases = *host_aliases;
                  (*host_aliases)[0] = NULL;
                  (*h_addr_ptrs)[0] = (char *)host_addr;
                  (*h_addr_ptrs)[1] = (char *)0;
-                 host->h_addr_list = *h_addr_ptrs;
+                 resbuf.h_addr_list = *h_addr_ptrs;
                  if (_res.options & RES_USE_INET6 && af == AF_INET)
                    {
                      /* We need to change the IP v4 address into the
                      *p++ = 0xff;
                      /* Copy the IP v4 address. */
                      memcpy (p, tmp, INADDRSZ);
-                     host->h_addrtype = AF_INET6;
-                     host->h_length = IN6ADDRSZ;
+                     resbuf.h_addrtype = AF_INET6;
+                     resbuf.h_length = IN6ADDRSZ;
                    }
                  else
                    {
-                     host->h_addrtype = af;
-                     host->h_length = addr_size;
+                     resbuf.h_addrtype = af;
+                     resbuf.h_length = addr_size;
                    }
                  __set_h_errno (NETDB_SUCCESS);
 #ifdef HAVE_LOOKUP_BUFFER
                  status = NSS_STATUS_SUCCESS;
 #else
-                 result = host;
+                 result = &resbuf;
 #endif
                  goto done;
                }
        {
          const char *cp;
          char *hostname;
-         struct hostent *host;
          typedef unsigned char host_addr_t [16];
          host_addr_t *host_addr;
          typedef char *host_addr_list_t [2];
              break;
            }
 
-         size_needed = (sizeof (*host) + sizeof (*host_addr)
+         size_needed = (sizeof (*host_addr)
                         + sizeof (*host_aliases) + sizeof (*h_addr_ptrs)
                         + strlen (name) + 1);
 
 
          memset (buffer, 0, size_needed);
 
-         host = (struct hostent *) buffer;
-         host_addr = (host_addr_t *) ((char *) host + sizeof (*host));
+         host_addr = (host_addr_t *) buffer;
          host_aliases = (host_addr_list_t *)
            ((char *) host_addr + sizeof (*host_addr));
          h_addr_ptrs = (host_addr_list_t *)
                    }
 
                  strcpy (hostname, name);
-                 host->h_name = hostname;
-                 host->h_aliases = *host_aliases;
+                 resbuf.h_name = hostname;
+                 resbuf.h_aliases = *host_aliases;
                  (*host_aliases)[0] = NULL;
                  (*h_addr_ptrs)[0] = (char *) host_addr;
                  (*h_addr_ptrs)[1] = (char *) 0;
-                 host->h_addr_list = *h_addr_ptrs;
-                 host->h_addrtype = af;
-                 host->h_length = addr_size;
+                 resbuf.h_addr_list = *h_addr_ptrs;
+                 resbuf.h_addrtype = af;
+                 resbuf.h_length = addr_size;
                  __set_h_errno (NETDB_SUCCESS);
 #ifdef HAVE_LOOKUP_BUFFER
                  status = NSS_STATUS_SUCCESS;
 #else
-                 result = host;
+                 result = &resbuf;
 #endif
                  goto done;
                }
index 988f46c88e6f8f1055339e896e9d079899ec29e5..18f0bae03aa4a7924ab4df5a73f32e753c4af75c 100644 (file)
@@ -94,7 +94,9 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
   enum nss_status status = NSS_STATUS_UNAVAIL;
 
 #ifdef HANDLE_DIGITS_DOTS
+# define resbuf (*resbuf)
 # include "digits_dots.c"
+# undef resbuf
 #endif
 
   if (startp == NULL)
index 7dd3e0526f87bb967c224de62a0071ae7a568fc1..18129bb5c017f86dbd53fe6be985ea1bc17ee273 100644 (file)
 #include "nsswitch.h"
 
 /* Prototypes for the local functions.  */
-static void *nss_lookup_function (service_user *ni, const char *fct_name);
-static name_database *nss_parse_file (const char *fname);
-static name_database_entry *nss_getline (char *line);
-static service_user *nss_parse_service_list (const char *line);
+static void *nss_lookup_function (service_user *ni, const char *fct_name)
+     internal_function;
+static name_database *nss_parse_file (const char *fname) internal_function;
+static name_database_entry *nss_getline (char *line) internal_function;
+static service_user *nss_parse_service_list (const char *line)
+     internal_function;
 static service_library *nss_new_service (name_database *database,
-                                        const char *name);
+                                        const char *name) internal_function;
 
 
 /* Declare external database variables.  */
@@ -310,6 +312,7 @@ known_compare (const void *p1, const void *p2)
 
 
 static void *
+internal_function
 nss_lookup_function (service_user *ni, const char *fct_name)
 {
   void **found, *result;
@@ -476,6 +479,7 @@ nss_lookup_function (service_user *ni, const char *fct_name)
 
 
 static name_database *
+internal_function
 nss_parse_file (const char *fname)
 {
   FILE *fp;
@@ -548,6 +552,7 @@ nss_parse_file (const char *fname)
        `( <source> ( "[" "!"? (<status> "=" <action> )+ "]" )? )*'
    */
 static service_user *
+internal_function
 nss_parse_service_list (const char *line)
 {
   service_user *result = NULL, **nextp = &result;
@@ -697,6 +702,7 @@ nss_parse_service_list (const char *line)
 }
 
 static name_database_entry *
+internal_function
 nss_getline (char *line)
 {
   const char *name;
@@ -743,6 +749,7 @@ nss_getline (char *line)
 
 
 static service_library *
+internal_function
 nss_new_service (name_database *database, const char *name)
 {
   service_library **currentp = &database->library;
index a8adb1fe8105d52edd81cca80e71f178b5c76147..b7050867e42205f024ac22f18daf6e0a4b435fa8 100644 (file)
@@ -49,7 +49,7 @@ routines :=                                                                 \
        sched_setp sched_getp sched_sets sched_gets sched_yield sched_primax  \
        sched_primin sched_rr_gi                                              \
        getaddrinfo gai_strerror wordexp                                      \
-       pread pwrite
+       pread pwrite pread64 pwrite64
 
 aux            := init-posix environ
 tests          := tstgetopt testfnm runtests
@@ -65,7 +65,7 @@ include ../Rules
 
 ifeq (no,$(cross-compiling))
 tests: $(objpfx)globtest
-       $(SHELL) -e globtest.sh $(common-objpfx)
+       $(SHELL) -e globtest.sh $(common-objpfx) $(elf-objpfx) $(rtld-installed-name)
 endif
 
 CFLAGS-regex.c = -Wno-unused -Wno-strict-prototypes
index 850130b2a9916873b510a3e300f329bcf10abb38..98bdc65d0b6985288bb2b672f059f97304847e1d 100644 (file)
@@ -44,6 +44,19 @@ confstr (name, buf, len)
       }
       break;
 
+    case _CS_LFS_CFLAGS:
+    case _CS_LFS_LINTFLAGS:
+    case _CS_LFS_LDFLAGS:
+    case _CS_LFS_LIBS:
+    case _CS_LFS64_CFLAGS:
+    case _CS_LFS64_LINTFLAGS:
+    case _CS_LFS64_LDFLAGS:
+    case _CS_LFS64_LIBS:
+      /* GNU libc does not require special actions to use LFS.  */
+      string = "";
+      string_len = 1;
+      break;
+
     default:
       __set_errno (EINVAL);
       return 0;
index fc37638f06bbd54031e74b3c3fda924b0ecf81cb..26c7be99ab94f91e9ac2f00c1e06b116aee99c5a 100644 (file)
 #include <errno.h>
 #include <paths.h>
 
+
+static void
+internal_function
+execute (const char *file, char *const argv[])
+{
+  execv (file, argv);
+
+  if (errno == ENOEXEC)
+    {
+      /* The file is accessible but it is not an executable file.
+        Invoke the shell to interpret it as a script.  */
+
+      /* Count the arguments.  */
+      int argc = 0;
+      while (argv[argc++])
+       ;
+
+      /* Construct an argument list for the shell.  */
+      {
+       char *new_argv[argc + 1];
+       new_argv[0] = (char *) _PATH_BSHELL;
+       new_argv[1] = (char *) file;
+       while (argc > 1)
+         {
+           new_argv[argc] = argv[argc - 1];
+           --argc;
+         }
+
+       /* Execute the shell.  */
+       execv (new_argv[0], new_argv);
+      }
+       }
+}
+
+
 /* Execute FILE, searching in the `PATH' environment variable if it contains
    no slashes, with arguments ARGV and environment from `environ'.  */
 int
@@ -32,37 +67,6 @@ execvp (file, argv)
 {
   int got_eacces = 0;
 
-  void execute (const char *file, char *const argv[])
-    {
-      execv (file, argv);
-
-      if (errno == ENOEXEC)
-       {
-         /* The file is accessible but it is not an executable file.
-            Invoke the shell to interpret it as a script.  */
-
-         /* Count the arguments.  */
-         int argc = 0;
-         while (argv[argc++])
-           ;
-
-         /* Construct an argument list for the shell.  */
-         {
-           char *new_argv[argc + 1];
-           new_argv[0] = (char *) _PATH_BSHELL;
-           new_argv[1] = (char *) file;
-           while (argc > 1)
-             {
-               new_argv[argc] = argv[argc - 1];
-               --argc;
-             }
-
-           /* Execute the shell.  */
-           execv (new_argv[0], new_argv);
-         }
-       }
-    }
-
   if (strchr (file, '/') != NULL)
     /* Don't search when it contains a slash.  */
     execute (file, argv);
index 5b67a281df4896013e895d7c3498c943f7aad8f0..c6371cb60b7e0daea4f8099694eb0069b81a1661 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1995, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 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 conf
     const enum { SYSCONF, CONFSTR, PATHCONF } call;
   };
 
-static struct conf vars[] =
+static const struct conf vars[] =
   {
     { "LINK_MAX", _PC_LINK_MAX, PATHCONF },
     { "_POSIX_LINK_MAX", _PC_LINK_MAX, PATHCONF },
@@ -188,6 +188,16 @@ static struct conf vars[] =
     { "PATH", _CS_PATH, CONFSTR },
     { "CS_PATH", _CS_PATH, CONFSTR },
 
+    /* LFS */
+    { "LFS_CFLAGS", _CS_LFS_CFLAGS, CONFSTR },
+    { "LFS_LDFLAGS", _CS_LFS_LDFLAGS, CONFSTR },
+    { "LFS_LIBS", _CS_LFS_LIBS, CONFSTR },
+    { "LFS_LINTFLAGS", _CS_LFS_LINTFLAGS, CONFSTR },
+    { "LFS64_CFLAGS", _CS_LFS64_CFLAGS, CONFSTR },
+    { "LFS64_LDFLAGS", _CS_LFS64_LDFLAGS, CONFSTR },
+    { "LFS64_LIBS", _CS_LFS64_LIBS, CONFSTR },
+    { "LFS64_LINTFLAGS", _CS_LFS64_LINTFLAGS, CONFSTR },
+
     { NULL, 0, SYSCONF }
   };
 
index 61fec9874c5dd8f42bf060720bcd856737adc419..48328af032ac3684a7573adb38efed1cac1065b6 100755 (executable)
@@ -1,6 +1,8 @@
 #! /bin/sh
 
 common_objpfx=$1; shift
+elf_objpfx=$1; shift
+rtld_installed_name=$1; shift
 
 # Create the arena
 : ${TMPDIR=/tmp}
@@ -22,7 +24,7 @@ echo 1_2 > $testdir/dir1/file1_2
 result=0
 
 LD_LIBRARY_PATH=$common_objpfx \
-${common_objpfx}posix/globtest "$testdir" "*" |
+${elf_objpfx}${rtld_installed_name} ${common_objpfx}posix/globtest "$testdir" "*" |
 sort > $testout
 cat <<"EOF" | cmp - $testout || result=1
 `dir1'
@@ -33,7 +35,7 @@ not NULL
 EOF
 
 LD_LIBRARY_PATH=$common_objpfx \
-${common_objpfx}posix/globtest "$testdir" "*/*" |
+${elf_objpfx}${rtld_installed_name} ${common_objpfx}posix/globtest "$testdir" "*/*" |
 sort > $testout
 cat <<"EOF" | cmp - $testout || result=1
 `dir1/file1_1'
@@ -42,7 +44,7 @@ not NULL
 EOF
 
 LD_LIBRARY_PATH=$common_objpfx \
-${common_objpfx}posix/globtest "$testdir" "*/1" |
+${elf_objpfx}${rtld_installed_name} ${common_objpfx}posix/globtest "$testdir" "*/1" |
 sort > $testout
 cat <<"EOF" | cmp - $testout || result=1
 GLOB_NOMATCH
@@ -50,7 +52,7 @@ NULL
 EOF
 
 LD_LIBRARY_PATH=$common_objpfx \
-${common_objpfx}posix/globtest "$testdir" "*/*1_1" |
+${elf_objpfx}${rtld_installed_name} ${common_objpfx}posix/globtest "$testdir" "*/*1_1" |
 sort > $testout
 cat <<"EOF" | cmp - $testout || result=1
 `dir1/file1_1'
@@ -58,7 +60,7 @@ not NULL
 EOF
 
 LD_LIBRARY_PATH=$common_objpfx \
-${common_objpfx}posix/globtest "$testdir" "*/file1_1" |
+${elf_objpfx}${rtld_installed_name} ${common_objpfx}posix/globtest "$testdir" "*/file1_1" |
 sort > $testout
 cat <<"EOF" | cmp - $testout || result=1
 `dir1/file1_1'
@@ -66,7 +68,7 @@ not NULL
 EOF
 
 LD_LIBRARY_PATH=$common_objpfx \
-${common_objpfx}posix/globtest "$testdir" "*-/*" |
+${elf_objpfx}${rtld_installed_name} ${common_objpfx}posix/globtest "$testdir" "*-/*" |
 sort > $testout
 cat <<"EOF" | cmp - $testout || result=1
 GLOB_NOMATCH
@@ -74,7 +76,7 @@ NULL
 EOF
 
 LD_LIBRARY_PATH=$common_objpfx \
-${common_objpfx}posix/globtest "$testdir" "*-" |
+${elf_objpfx}${rtld_installed_name} ${common_objpfx}posix/globtest "$testdir" "*-" |
 sort > $testout
 cat <<"EOF" | cmp - $testout || result=1
 GLOB_NOMATCH
index 675e2522fadf65a54faf35c0eede22279d84a9b8..ab28d39aaf21bdd01102ae05f744424e67ab25ee 100644 (file)
@@ -40,11 +40,19 @@ typedef __fsid_t fsid_t;
 #endif
 
 typedef __dev_t dev_t;
-typedef __ino_t ino_t;
 typedef __mode_t mode_t;
 typedef __nlink_t nlink_t;
 typedef __loff_t loff_t;
 
+#ifndef __USE_FILE_OFFSET64
+typedef __ino_t ino_t;
+#else
+typedef __ino64_t ino_t;
+#endif
+#ifdef __USE_LARGEFILE64
+typedef __ino64_t ino64_t;
+#endif
+
 #ifndef gid_t
 typedef __gid_t gid_t;
 # define gid_t gid_t
@@ -56,9 +64,17 @@ typedef __uid_t uid_t;
 #endif
 
 #ifndef off_t
+# ifndef __USE_FILE_OFFSET64
 typedef __off_t off_t;
+# else
+typedef __off64_t off_t;
+# endif
 # define off_t off_t
 #endif
+#if defined __USE_LARGEFILE64 && !defined off64_t
+typedef __off64_t off64_t;
+# define off64_t off64_t
+#endif
 
 #ifndef pid_t
 typedef __pid_t pid_t;
@@ -156,6 +172,23 @@ typedef int register_t __attribute__ ((__mode__ (__word__)));
 #endif /* Use BSD.  */
 
 
+/* Types from the Large File Support interface.  */
+#ifndef __USE_FILE_OFFSET64
+typedef __blkcnt_t blkcnt_t;    /* Type to count number of disk blocks.  */
+typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks.  */
+typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes.  */
+#else
+typedef __blkcnt64_t blkcnt_t;    /* Type to count number of disk blocks.  */
+typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks.  */
+typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes.  */
+#endif
+
+#ifdef __USE_LARGEFILE64
+typedef __blkcnt64_t blkcnt64_t;     /* Type to count number of disk blocks. */
+typedef __fsblkcnt64_t fsblkcnt64_t; /* Type to count file system blocks.  */
+typedef __fsfilcnt64_t fsfilcnt64_t; /* Type to count file system inodes.  */
+#endif
+
 __END_DECLS
 
 #endif /* sys/types.h */
index bebef5d456333c29cf21c52d82babc1d302cb19d..629dd5902a10d0d5ecc79d8f2420f81467498891 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1994, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 1994, 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
@@ -30,7 +30,7 @@ __BEGIN_DECLS
 #include <bits/utsname.h>
 
 #ifndef _UTSNAME_NODENAME_LENGTH
-#define _UTSNAME_NODENAME_LENGTH _UTSNAME_LENGTH
+# define _UTSNAME_NODENAME_LENGTH _UTSNAME_LENGTH
 #endif
 
 /* Structure describing the system and machine.  */
@@ -52,16 +52,16 @@ struct utsname
 
 #if _UTSNAME_DOMAIN_LENGTH - 0
     /* Name of the domain of this node on the network.  */
-#ifdef __USE_GNU
+# ifdef __USE_GNU
     char domainname[_UTSNAME_DOMAIN_LENGTH];
-#else
+# else
     char __domainname[_UTSNAME_DOMAIN_LENGTH];
-#endif
+# endif
 #endif
   };
 
 #ifdef __USE_SVID
-#define SYS_NMLN  _UTSNAME_LENGTH
+# define SYS_NMLN  _UTSNAME_LENGTH
 #endif
 
 
index f573d778f72ec3eede728ad4483bbf801387068a..9b5025ab83bce668ea839699a640ac753e04fe29 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 92, 93, 94, 96 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 94, 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
@@ -38,43 +38,37 @@ __BEGIN_DECLS
 /* Lots of hair to allow traditional BSD use of `union wait'
    as well as POSIX.1 use of `int' for the status word.  */
 
-#ifdef __GNUC__
-#define        __WAIT_INT(status)                                                    \
+# ifdef        __GNUC__
+#  define __WAIT_INT(status)                                                 \
   (__extension__ ({ union { __typeof(status) __in; int __i; } __u;           \
                    __u.__in = (status); __u.__i; }))
-#else
-#define        __WAIT_INT(status)      (*(int *) &(status))
-#endif
-
-/* This is the type of the argument to `wait'.
-
-   NOTE: Since this functionality is volatile, I'm disabling the use of it for
-   now.
-
-With GCC 2.6.1 and later, the funky union causes redeclarations with either
-   `int *' or `union wait *' to be allowed without complaint.
-   __WAIT_STATUS_DEFN is the type used in the actual function
-   definitions. */
-
-#if    (!defined (__GNUC__) || __GNUC__ < 2 || \
-        /*(__GNUC__ == 2 && __GNUC_MINOR__ < 6)*/ 1)
-#define        __WAIT_STATUS           __ptr_t
-#define        __WAIT_STATUS_DEFN      __ptr_t
-#else
+# else
+#  define __WAIT_INT(status)   (*(int *) &(status))
+# endif
+
+/* This is the type of the argument to `wait'.  The funky union
+   causes redeclarations with ether `int *' or `union wait *' to be
+   allowed without complaint.  __WAIT_STATUS_DEFN is the type used in
+   the actual function definitions.  */
+
+# if !defined __GNUC__ || __GNUC__ < 2
+#  define __WAIT_STATUS                __ptr_t
+#  define __WAIT_STATUS_DEFN   __ptr_t
+# else
 /* This works in GCC 2.6.1 and later.  */
 typedef union
   {
     union wait *__uptr;
     int *__iptr;
   } __WAIT_STATUS __attribute__ ((transparent_union));
-#define        __WAIT_STATUS_DEFN      int *
+# define __WAIT_STATUS_DEFN    int *
 #endif
 
 #else /* Don't use BSD.  */
 
-#define        __WAIT_INT(status)      (status)
-#define        __WAIT_STATUS           int *
-#define        __WAIT_STATUS_DEFN      int *
+# define __WAIT_INT(status)    (status)
+# define __WAIT_STATUS         int *
+# define __WAIT_STATUS_DEFN    int *
 
 #endif /* Use BSD.  */
 
@@ -89,10 +83,10 @@ typedef union
 #define        WIFSTOPPED(status)      __WIFSTOPPED(__WAIT_INT(status))
 
 #ifdef __USE_BSD
-#define        WCOREFLAG               __WCOREFLAG
-#define        WCOREDUMP(status)       __WCOREDUMP(__WAIT_INT(status))
-#define        W_EXITCODE(ret, sig)    __W_EXITCODE(ret, sig)
-#define        W_STOPCODE(sig)         __W_STOPCODE(sig)
+# define WCOREFLAG             __WCOREFLAG
+# define WCOREDUMP(status)     __WCOREDUMP(__WAIT_INT(status))
+# define W_EXITCODE(ret, sig)  __W_EXITCODE(ret, sig)
+# define W_STOPCODE(sig)       __W_STOPCODE(sig)
 #endif
 
 
@@ -103,8 +97,8 @@ extern __pid_t wait __P ((__WAIT_STATUS __stat_loc));
 
 #ifdef __USE_BSD
 /* Special values for the PID argument to `waitpid' and `wait4'.  */
-#define        WAIT_ANY        (-1)    /* Any process.  */
-#define        WAIT_MYPGRP     0       /* Any process in my process group.  */
+# define WAIT_ANY      (-1)    /* Any process.  */
+# define WAIT_MYPGRP   0       /* Any process in my process group.  */
 #endif
 
 /* Wait for a child matching PID to die.
@@ -124,7 +118,7 @@ extern __pid_t __waitpid __P ((__pid_t __pid, int *__stat_loc,
 extern __pid_t waitpid __P ((__pid_t __pid, int *__stat_loc,
                             int __options));
 
-#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
+#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
 /* This being here makes the prototypes valid whether or not
    we have already included <sys/resource.h> to define `struct rusage'.  */
 struct rusage;
index 9fcad90cb141421056dddf0367b58bd3c490cd5d..e44dcff84f1e226dcfe3b0510ee9002896fe3522 100644 (file)
@@ -133,6 +133,11 @@ __BEGIN_DECLS
    _POSIX_SYNC_IO              Synchronous I/O may be performed.
    _POSIX_ASYNC_IO             Asynchronous I/O may be performed.
    _POSIX_PRIO_IO              Prioritized Asynchronous I/O may be performed.
+
+   Support for the Large File Support interface is not generally available.
+   If it is available the following constants are defined to one.
+   _LFS64_LARGEFILE            Low-level I/O supports large files.
+   _LFS64_STDIO                        Standard I/O supports large files.
    */
 
 #include <bits/posix_opt.h>
@@ -171,15 +176,23 @@ typedef __uid_t uid_t;
 # endif
 
 # ifndef off_t
+#  ifndef __USE_FILE_OFFSET64
 typedef __off_t off_t;
+#  else
+typedef __off64_t off_t;
+#  endif
 #  define off_t off_t
 # endif
+# if defined __USE_LARGEFILE64 && !defined off64_t
+typedef __off64_t off64_t;
+#  define off64_t off64_t
+# endif
 
 # ifndef pid_t
 typedef __pid_t pid_t;
 #  define pid_t pid_t
 # endif
-#endif
+#endif /* Unix98 */
 
 /* Values for the second argument to access.
    These may be OR'd together.  */
@@ -221,7 +234,15 @@ extern int euidaccess __P ((__const char *__name, int __type));
    or the end of the file (if WHENCE is SEEK_END).
    Return the new file position.  */
 extern __off_t __lseek __P ((int __fd, __off_t __offset, int __whence));
+#ifndef __USE_FILE_OFFSET64
 extern __off_t lseek __P ((int __fd, __off_t __offset, int __whence));
+#else
+extern __off_t lseek __P ((int __fd, __off_t __offset, int __whence))
+     __asm__ ("lseek64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence));
+#endif
 
 /* Close the file descriptor FD.  */
 extern int __close __P ((int __fd));
@@ -240,13 +261,31 @@ extern ssize_t write __P ((int __fd, __const __ptr_t __buf, size_t __n));
 /* Read NBYTES into BUF from FD at the given position OFFSET without
    changing the file pointer.  Return the number read, -1 for errors
    or 0 for EOF.  */
+# ifndef __USE_FILE_OFFSET64
 extern ssize_t pread __P ((int __fd, __ptr_t __buf, size_t __nbytes,
                           __off_t __offset));
+# else
+extern ssize_t pread __P ((int __fd, __ptr_t __buf, size_t __nbytes,
+                          __off_t __offset)) __asm__ ("pread64");
+# endif
+# ifdef __USE_LARGEFILE64
+extern ssize_t pread64 __P ((int __fd, __ptr_t __buf, size_t __nbytes,
+                            __off64_t __offset));
+# endif
 
 /* Write N bytes of BUF to FD at the given position OFFSET without
    changing the file pointer.  Return the number written, or -1.  */
+# ifndef __USE_FILE_OFFSET64
 extern ssize_t pwrite __P ((int __fd, __const __ptr_t __buf, size_t __n,
                            __off_t __offset));
+# else
+extern ssize_t pwrite __P ((int __fd, __const __ptr_t __buf, size_t __n,
+                           __off_t __offset)) __asm__ ("pwrite64");
+# endif
+# ifdef __USE_LARGEFILE64
+extern ssize_t pwrite64 __P ((int __fd, __const __ptr_t __buf, size_t __n,
+                             __off64_t __offset));
+# endif
 #endif
 
 
@@ -489,18 +528,18 @@ extern __pid_t getpgid __P ((__pid_t __pid));
    The default in GNU is to provide the System V function.  The BSD
    function is available under -D_BSD_SOURCE with -lbsd-compat.  */
 
-#ifndef        __FAVOR_BSD
+# ifndef __FAVOR_BSD
 
 /* Set the process group ID of the calling process to its own PID.
    This is exactly the same as `setpgid (0, 0)'.  */
 extern int setpgrp __P ((void));
 
-#else
+# else
 
 /* Another name for `setpgid' (above).  */
 extern int setpgrp __P ((__pid_t __pid, __pid_t __pgrp));
 
-#endif /* Favor BSD.  */
+# endif        /* Favor BSD.  */
 #endif /* Use SVID or BSD.  */
 
 /* Create a new session with the calling process as its leader.
@@ -792,10 +831,26 @@ extern int getpagesize __P ((void));
 
 
 /* Truncate FILE to LENGTH bytes.  */
+#ifndef __USE_FILE_OFFSET64
 extern int truncate __P ((__const char *__file, __off_t __length));
+#else
+extern int truncate __P ((__const char *__file, __off_t __length))
+     __asm__ ("truncate64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern int truncate64 __P ((__const char *__file, __off64_t __length));
+#endif
 
 /* Truncate the file FD is open on to LENGTH bytes.  */
+#ifndef __USE_FILE_OFFSET64
 extern int ftruncate __P ((int __fd, __off_t __length));
+#else
+extern int ftruncate __P ((int __fd, __off_t __length))
+     __asm__ ("ftruncate64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern int ftruncate64 __P ((int __fd, __off64_t __length));
+#endif
 
 
 /* Return the maximum number of file descriptors
@@ -855,7 +910,15 @@ extern long int syscall __P ((long int __sysno, ...));
 # define F_TLOCK 2     /* Test and lock a region for exclusive use.  */
 # define F_TEST  3     /* Test a region for other processes locks.  */
 
+# ifndef __USE_FILE_OFFSET64
 extern int lockf __P ((int __fd, int __cmd, __off_t __len));
+# else
+extern int lockf __P ((int __fd, int __cmd, __off_t __len))
+     __asm__ ("lockf64");
+# endif
+# ifdef __USE_LARGEFILE64
+extern int lockf64 __P ((int __fd, int __cmd, __off64_t __len));
+# endif
 #endif /* Use misc and F_LOCK not already defined.  */
 
 
index e89f30d628db290005a296346b600858f7869245..651c67d5529fa760a83f6a13f753b0023d34fc55 100644 (file)
 /* Some forward declarations */
 static int parse_dollars (char **word, size_t *word_length, size_t *max_length,
                          const char *words, size_t *offset, int flags,
-                         wordexp_t *pwordexp);
+                         wordexp_t *pwordexp)
+     internal_function;
 static int parse_backtick (char **word, size_t *word_length,
                           size_t *max_length, const char *words,
-                          size_t *offset, int flags, wordexp_t *pwordexp);
-static int eval_expr (char *expr, int *result);
+                          size_t *offset, int flags, wordexp_t *pwordexp)
+     internal_function;
+static int eval_expr (char *expr, int *result) internal_function;
 
 /* The w_*() functions manipulate word lists. */
 
@@ -138,6 +140,7 @@ w_addword (wordexp_t *pwordexp, char *word)
  */
 
 static int
+internal_function
 parse_backslash (char **word, size_t *word_length, size_t *max_length,
                 const char *words, size_t *offset)
 {
@@ -166,6 +169,7 @@ parse_backslash (char **word, size_t *word_length, size_t *max_length,
 }
 
 static int
+internal_function
 parse_qtd_backslash (char **word, size_t *word_length, size_t *max_length,
                     const char *words, size_t *offset)
 {
@@ -208,6 +212,7 @@ parse_qtd_backslash (char **word, size_t *word_length, size_t *max_length,
 }
 
 static int
+internal_function
 parse_tilde (char **word, size_t *word_length, size_t *max_length,
             const char *words, size_t *offset, size_t wordc)
 {
@@ -303,6 +308,7 @@ parse_tilde (char **word, size_t *word_length, size_t *max_length,
 }
 
 static int
+internal_function
 parse_glob (char **word, size_t *word_length, size_t *max_length,
            const char *words, size_t *offset, int flags,
            wordexp_t *pwordexp, char *ifs)
@@ -431,6 +437,7 @@ parse_squote (char **word, size_t *word_length, size_t *max_length,
 
 /* Functions to evaluate an arithmetic expression */
 static int
+internal_function
 eval_expr_val (char **expr, int *result)
 {
   int sgn = +1;
@@ -481,6 +488,7 @@ eval_expr_val (char **expr, int *result)
 }
 
 static int
+internal_function
 eval_expr_multdiv (char **expr, int *result)
 {
   int arg;
@@ -517,6 +525,7 @@ eval_expr_multdiv (char **expr, int *result)
 }
 
 static int
+internal_function
 eval_expr (char *expr, int *result)
 {
   int arg;
@@ -553,6 +562,7 @@ eval_expr (char *expr, int *result)
 }
 
 static int
+internal_function
 parse_arith (char **word, size_t *word_length, size_t *max_length,
             const char *words, size_t *offset, int flags, int bracket)
 {
@@ -680,6 +690,7 @@ parse_arith (char **word, size_t *word_length, size_t *max_length,
 /* Function to execute a command and retrieve the results */
 /* pwordexp contains NULL if field-splitting is forbidden */
 static int
+internal_function
 exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length,
           int flags, wordexp_t *pwordexp)
 {
@@ -858,6 +869,7 @@ parse_comm (char **word, size_t *word_length, size_t *max_length,
 }
 
 static int
+internal_function
 parse_param (char **word, size_t *word_length, size_t *max_length,
             const char *words, size_t *offset, int flags, wordexp_t *pwordexp)
 {
@@ -1173,6 +1185,7 @@ no_space:
 }
 
 static int
+internal_function
 parse_dollars (char **word, size_t *word_length, size_t *max_length,
               const char *words, size_t *offset, int flags,
               wordexp_t *pwordexp)
@@ -1281,6 +1294,7 @@ parse_backtick (char **word, size_t *word_length, size_t *max_length,
 }
 
 static int
+internal_function
 parse_dquote (char **word, size_t *word_length, size_t *max_length,
              const char *words, size_t *offset, int flags)
 {
index 1910f07f77f20334aa28f68eb020f1e486512f62..3b639305cf744af09036b674a5e4ea48dcff9a5e 100644 (file)
--- a/pwd/pwd.h
+++ b/pwd/pwd.h
@@ -45,9 +45,9 @@ struct passwd
 };
 
 
-#if defined(__USE_SVID) || defined(__USE_GNU)
-#define        __need_FILE
-#include <stdio.h>
+#if defined __USE_SVID || defined __USE_GNU
+# define __need_FILE
+# include <stdio.h>
 #endif
 
 #ifdef __USE_GNU
@@ -69,7 +69,7 @@ extern struct passwd *__pwdscan __P ((__ptr_t *__p,
 #endif
 
 
-#if defined(__USE_SVID) || defined(__USE_MISC) || defined(__USE_XOPEN_EXTENDED)
+#if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN_EXTENDED
 /* Rewind the password-file stream.  */
 extern void setpwent __P ((void));
 
@@ -96,11 +96,11 @@ extern struct passwd *getpwnam __P ((__const char *__name));
 
 #if defined __USE_POSIX || defined __USE_MISC
 
-#ifdef __USE_MISC
+# ifdef __USE_MISC
 /* Reasonable value for the buffer sized used in the reentrant
    functions below.  But better use `sysconf'.  */
-#define NSS_BUFLEN_PASSWD      1024
-#endif
+#  define NSS_BUFLEN_PASSWD    1024
+# endif
 
 /* Reentrant versions of some of the functions above.
 
@@ -110,12 +110,12 @@ extern struct passwd *getpwnam __P ((__const char *__name));
    other reentrant functions so the chances are good this is what the
    POSIX people would choose.  */
 
-#if defined(__USE_SVID) || defined(__USE_MISC) || defined(__USE_XOPEN_EXTENDED)
+# if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN_EXTENDED
 extern int __getpwent_r __P ((struct passwd *__resultbuf, char *__buffer,
                              size_t __buflen, struct passwd **__result));
 extern int getpwent_r __P ((struct passwd *__resultbuf, char *__buffer,
                            size_t __buflen, struct passwd **__result));
-#endif
+# endif
 
 extern int __getpwuid_r __P ((__uid_t __uid, struct passwd *__resultbuf,
                              char *__buffer, size_t __buflen,
@@ -132,7 +132,7 @@ extern int getpwnam_r __P ((__const char *__name, struct passwd *__resultbuf,
                            struct passwd **__result));
 
 
-#ifdef __USE_SVID
+# ifdef        __USE_SVID
 /* Read an entry from STREAM.  This function is not standardized and
    probably never will.  */
 extern int __fgetpwent_r __P ((FILE * __stream, struct passwd *__resultbuf,
@@ -141,7 +141,7 @@ extern int __fgetpwent_r __P ((FILE * __stream, struct passwd *__resultbuf,
 extern int fgetpwent_r __P ((FILE * __stream, struct passwd *__resultbuf,
                             char *__buffer, size_t __buflen,
                             struct passwd **__result));
-#endif
+# endif
 
 #endif /* POSIX or reentrant */
 
index 49aea2a71954fcc02d6072686ceb820c7c7cd4d9..5b9950af1f8363b36cad040b904c905cbae8badb 100644 (file)
@@ -386,9 +386,10 @@ getanswer(answer, anslen, qname, qtype)
                                continue;
                        }
                        if (hap >= &h_addr_ptrs[MAXADDRS-1]) {
-                               if (!toobig++)
+                               if (!toobig++) {
                                        dprintf("Too many addresses (%d)\n",
                                                MAXADDRS);
+                               }
                                cp += n;
                                continue;
                        }
index bbdabd0fe00862c61e12edaa21165644cad99d35..644abee4a770a53c5830c8358f8639bc22b48264 100644 (file)
@@ -40,8 +40,10 @@ static char rcsid[] = "$Id$";
  * sizeof(int) < 4.  sizeof(int) > 4 is fine; all the world's not a VAX.
  */
 
-static const char *inet_ntop4 __P((const u_char *src, char *dst, size_t size));
-static const char *inet_ntop6 __P((const u_char *src, char *dst, size_t size));
+static const char *inet_ntop4 __P((const u_char *src, char *dst, size_t size))
+     internal_function;
+static const char *inet_ntop6 __P((const u_char *src, char *dst, size_t size))
+     internal_function;
 
 /* char *
  * inet_ntop(af, src, dst, size)
@@ -82,6 +84,7 @@ inet_ntop(af, src, dst, size)
  *     Paul Vixie, 1996.
  */
 static const char *
+internal_function
 inet_ntop4(src, dst, size)
        const u_char *src;
        char *dst;
@@ -105,6 +108,7 @@ inet_ntop4(src, dst, size)
  *     Paul Vixie, 1996.
  */
 static const char *
+internal_function
 inet_ntop6(src, dst, size)
        const u_char *src;
        char *dst;
index 3593da262b0e1f16fee0ea1ed7c63ba3cf736b47..0c8f79f2c522e759f98686ceac5342bb3a63c86b 100644 (file)
@@ -33,8 +33,8 @@ static char rcsid[] = "$Id$";
  * sizeof(int) < 4.  sizeof(int) > 4 is fine; all the world's not a VAX.
  */
 
-static int     inet_pton4 __P((const char *src, u_char *dst));
-static int     inet_pton6 __P((const char *src, u_char *dst));
+static int inet_pton4 __P((const char *src, u_char *dst)) internal_function;
+static int inet_pton6 __P((const char *src, u_char *dst)) internal_function;
 
 /* int
  * inet_pton(af, src, dst)
@@ -76,6 +76,7 @@ inet_pton(af, src, dst)
  *     Paul Vixie, 1996.
  */
 static int
+internal_function
 inet_pton4(src, dst)
        const char *src;
        u_char *dst;
@@ -130,6 +131,7 @@ inet_pton4(src, dst)
  *     Paul Vixie, 1996.
  */
 static int
+internal_function
 inet_pton6(src, dst)
        const char *src;
        u_char *dst;
index c59553c7ed383eb2741a93163dd71ac0008e44a2..fdfc056750acbfb83e8c20df4b3f22ab67248d5c 100644 (file)
@@ -413,30 +413,30 @@ struct addrinfo
 };
 
 /* Possible values for `ai_flags' field in `addrinfo' structure.  */
-#define        AI_PASSIVE      1       /* Socket address is intended for `bind'.  */
-#define        AI_CANONNAME    2       /* Request for canonical name.  */
+# define AI_PASSIVE    1       /* Socket address is intended for `bind'.  */
+# define AI_CANONNAME  2       /* Request for canonical name.  */
 
 /* Error values for `getaddrinfo' function.  */
-#define        EAI_BADFLAGS    -1      /* Invalid value for `ai_flags' field.  */
-#define        EAI_NONAME      -2      /* NAME or SERVICE is unknown.  */
-#define        EAI_AGAIN       -3      /* Temporary failure in name resolution.  */
-#define        EAI_FAIL        -4      /* Non-recoverable failure in name res.  */
-#define        EAI_NODATA      -5      /* No address associated with NAME.  */
-#define        EAI_FAMILY      -6      /* `ai_family' not supported.  */
-#define        EAI_SOCKTYPE    -7      /* `ai_socktype' not supported.  */
-#define        EAI_SERVICE     -8      /* SERVICE not supported for `ai_socktype'.  */
-#define        EAI_ADDRFAMILY  -9      /* Address family for NAME not supported.  */
-#define        EAI_MEMORY      -10     /* Memory allocation failure.  */
-#define        EAI_SYSTEM      -11     /* System error returned in `errno'.  */
-
-#define NI_MAXHOST      1025
-#define NI_MAXSERV      32
-
-#define NI_NUMERICHOST 1
-#define NI_NUMERICSERV 2
-#define NI_NOFQDN 4
-#define NI_NAMEREQD 8
-#define NI_DGRAM 16
+# define EAI_BADFLAGS  -1      /* Invalid value for `ai_flags' field.  */
+# define EAI_NONAME    -2      /* NAME or SERVICE is unknown.  */
+# define EAI_AGAIN     -3      /* Temporary failure in name resolution.  */
+# define EAI_FAIL      -4      /* Non-recoverable failure in name res.  */
+# define EAI_NODATA    -5      /* No address associated with NAME.  */
+# define EAI_FAMILY    -6      /* `ai_family' not supported.  */
+# define EAI_SOCKTYPE  -7      /* `ai_socktype' not supported.  */
+# define EAI_SERVICE   -8      /* SERVICE not supported for `ai_socktype'.  */
+# define EAI_ADDRFAMILY        -9      /* Address family for NAME not supported.  */
+# define EAI_MEMORY    -10     /* Memory allocation failure.  */
+# define EAI_SYSTEM    -11     /* System error returned in `errno'.  */
+
+# define NI_MAXHOST      1025
+# define NI_MAXSERV      32
+
+# define NI_NUMERICHOST 1
+# define NI_NUMERICSERV 2
+# define NI_NOFQDN 4
+# define NI_NAMEREQD 8
+# define NI_DGRAM 16
 
 /* Translate name of a service location and/or a service name to set of
    socket addresses.  */
index 755b88d46685a4a5ddc658498aefb71810d9d112..a2de01f1a226f44de41fc5261efcedd8b5a02017 100644 (file)
@@ -110,7 +110,7 @@ static int netinfo_res_init __P((int *haveenv, int *havesearch));
 # include "../conf/options.h"
 #endif
 
-static void res_setoptions __P((char *, char *));
+static void res_setoptions __P((char *, char *)) internal_function;
 
 #ifdef RESOLVSORT
 static const char sort_mask[] = "/&";
@@ -428,6 +428,7 @@ res_init()
 }
 
 static void
+internal_function
 res_setoptions(options, source)
        char *options, *source;
 {
index 38d5a2c379967043789d5526e96156320661748f..1ad0bb3bc4741ebdffa858f341d9810f4568ce64 100644 (file)
@@ -20,7 +20,7 @@ subdir := resource
 
 headers          := sys/resource.h bits/resource.h sys/vlimit.h sys/vtimes.h
 
-routines := getrlimit setrlimit getrusage ulimit vlimit vtimes \
-           getpriority setpriority nice
+routines := getrlimit setrlimit getrlimit64 setrlimit64 getrusage ulimit      \
+           vlimit vtimes getpriority setpriority nice
 
 include ../Rules
index e0158767f6c57fbd75cb5a9c61e54eb9f9936203..f9c6bb248831431c0d7ec723cb75f7b0f9bf8188 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1994, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1994, 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
@@ -30,14 +30,32 @@ __BEGIN_DECLS
    Returns 0 if successful, -1 if not (and sets errno).  */
 extern int __getrlimit __P ((enum __rlimit_resource __resource,
                             struct rlimit *__rlimits));
+#ifndef __USE_FILE_OFFSET64
 extern int getrlimit __P ((enum __rlimit_resource __resource,
                           struct rlimit *__rlimits));
+#else
+extern int getrlimit __P ((enum __rlimit_resource __resource,
+                          struct rlimit *__rlimits)) __asm__ ("getrlimit64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern int getrlimit64 __P ((enum __rlimit_resource __resource,
+                            struct rlimit64 *__rlimits));
+#endif
 
 /* Set the soft and hard limits for RESOURCE to *RLIMITS.
    Only the super-user can increase hard limits.
    Return 0 if successful, -1 if not (and sets errno).  */
+#ifndef __USE_FILE_OFFSET64
 extern int setrlimit __P ((enum __rlimit_resource __resource,
                           struct rlimit *__rlimits));
+#else
+extern int setrlimit __P ((enum __rlimit_resource __resource,
+                          struct rlimit *__rlimits)) __asm__ ("setrlimit64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern int setrlimit64 __P ((enum __rlimit_resource __resource,
+                            struct rlimit64 *__rlimits));
+#endif
 
 /* Return resource usage information on process indicated by WHO
    and put it in *USAGE.  Returns 0 for success, -1 for failure.  */
index 588c779f113f940f5a1df7502b18df0c28b82e77..5fb4bc2a1421ba37807d29da9c9c76bdb49ea337 100644 (file)
@@ -23,8 +23,8 @@
 #ifndef        _SIGNAL_H
 
 #if !defined __need_sig_atomic_t && !defined __need_sigset_t
-#define        _SIGNAL_H       1
-#include <features.h>
+# define _SIGNAL_H     1
+# include <features.h>
 #endif
 
 __BEGIN_DECLS
@@ -47,22 +47,26 @@ typedef __sig_atomic_t sig_atomic_t;
 /* Type of a signal handler.  */
 typedef void (*__sighandler_t) __P ((int));
 
-/* Set the handler for the signal SIG to HANDLER, returning the old
-   handler, or SIG_ERR on error.
-   By default `signal' has the BSD semantic.  */
-extern __sighandler_t signal __P ((int __sig, __sighandler_t __handler));
-
 /* The X/Open definition of `signal' specifies the SVID semantic.  Use
    the additional function `sysv_signal' when X/Open compatibility is
    requested.  */
 extern __sighandler_t __sysv_signal __P ((int __sig,
                                          __sighandler_t __handler));
 
-#if defined __USE_XOPEN && !defined __USE_GNU
-extern __sighandler_t sysv_signal __P ((int __sig, __sighandler_t __handler));
-
-/* Make sure the used `signal' implementation is the SVID version.  */
-#define signal(sig, handler) __sysv_signal ((sig), (handler))
+/* Set the handler for the signal SIG to HANDLER, returning the old
+   handler, or SIG_ERR on error.
+   By default `signal' has the BSD semantic.  */
+#if !defined __USE_XOPEN || defined __USE_GNU
+extern __sighandler_t signal __P ((int __sig, __sighandler_t __handler));
+#else
+/* Make sure the used `signal' implementation is the SVID version.
+   When GNU CC is used we have a clean way to write this.  */
+# if defined __GNUC__ && __GNUC__ >= 2
+extern __sighandler_t signal __P ((int __sig, __sighandler_t __handler))
+     __asm__ ("__sysv_signal");
+# else
+#  define signal(sig, handler) __sysv_signal ((sig), (handler))
+# endif
 #endif
 
 #ifdef __USE_XOPEN
@@ -120,17 +124,17 @@ extern int __sigpause __P ((int __sig_or_mask, int __is_sig));
 /* Set the mask of blocked signals to MASK,
    wait for a signal to arrive, and then restore the mask.  */
 extern int sigpause __P ((int __mask));
-#define sigpause(mask) __sigpause ((mask), 0)
+# define sigpause(mask) __sigpause ((mask), 0)
 #else
-#ifdef __USE_XOPEN
+# ifdef __USE_XOPEN
 /* Remove a signal from the signal mask and suspend the process.  */
-#define sigpause(sig) __sigpause ((sig), 1)
-#endif
+#  define sigpause(sig) __sigpause ((sig), 1)
+# endif
 #endif
 
 
 #ifdef __USE_BSD
-#define        sigmask(sig)    __sigmask(sig)
+# define sigmask(sig)  __sigmask(sig)
 
 extern int sigblock __P ((int __mask));
 extern int sigsetmask __P ((int __mask));
@@ -142,7 +146,7 @@ extern int siggetmask __P ((void));
 
 
 #ifdef __USE_MISC
-#define        NSIG    _NSIG
+# define NSIG  _NSIG
 #endif
 
 #ifdef __USE_GNU
@@ -159,14 +163,14 @@ typedef __sighandler_t sig_t;
 
 #ifdef __USE_POSIX
 
-#if !defined __sigset_t_defined \
+# if !defined __sigset_t_defined \
     && (defined _SIGNAL_H  || defined __need_sigset_t)
 typedef __sigset_t sigset_t;
-#define        __sigset_t_defined      1
-#endif /* `sigset_t' not defined and <signal.h> or need `sigset_t'.  */
-#undef __need_sigset_t
+#  define __sigset_t_defined   1
+# endif /* `sigset_t' not defined and <signal.h> or need `sigset_t'.  */
+# undef __need_sigset_t
 
-#ifdef _SIGNAL_H
+# ifdef _SIGNAL_H
 
 /* Clear all signals from SET.  */
 extern int sigemptyset __P ((sigset_t *__set));
@@ -183,7 +187,7 @@ extern int sigdelset __P ((sigset_t *__set, int __signo));
 /* Return 1 if SIGNO is in SET, 0 if not.  */
 extern int sigismember __P ((__const sigset_t *__set, int __signo));
 
-#ifdef __USE_GNU
+#  ifdef __USE_GNU
 /* Return non-empty value is SET is not empty.  */
 extern int sigisemptyset __P ((__const sigset_t *__set));
 
@@ -194,11 +198,11 @@ extern int sigandset __P ((sigset_t *__set, __const sigset_t *__left,
 /* Build new signal set by combining the two inputs set using logical OR.  */
 extern int sigorset __P ((sigset_t *__set, __const sigset_t *__left,
                          __const sigset_t *__right));
-#endif /* GNU */
+#  endif /* GNU */
 
 /* Get the system-specific definitions of `struct sigaction'
    and the `SA_*' and `SIG_*'. constants.  */
-#include <bits/sigaction.h>
+#  include <bits/sigaction.h>
 
 /* Get and/or change the set of blocked signals.  */
 extern int __sigprocmask __P ((int __how,
@@ -225,7 +229,7 @@ extern int sigpending __P ((sigset_t *__set));
 extern int __sigwait __P ((__const sigset_t *__set, int *__sig));
 extern int sigwait __P ((__const sigset_t *__set, int *__sig));
 
-#endif /* <signal.h> included.  */
+# endif /* <signal.h> included.  */
 
 #endif /* Use POSIX.  */
 
@@ -243,13 +247,13 @@ struct sigvec
     int sv_mask;               /* Mask of signals to be blocked.  */
 
     int sv_flags;              /* Flags (see below).  */
-#define        sv_onstack      sv_flags /* 4.2 BSD compatibility.  */
+# define sv_onstack    sv_flags /* 4.2 BSD compatibility.  */
   };
 
 /* Bits in `sv_flags'.  */
-#define        SV_ONSTACK      (1 << 0)/* Take the signal on the signal stack.  */
-#define        SV_INTERRUPT    (1 << 1)/* Do not restart system calls.  */
-#define        SV_RESETHAND    (1 << 2)/* Reset handler to SIG_DFL on receipt.  */
+# define SV_ONSTACK    (1 << 0)/* Take the signal on the signal stack.  */
+# define SV_INTERRUPT  (1 << 1)/* Do not restart system calls.  */
+# define SV_RESETHAND  (1 << 2)/* Reset handler to SIG_DFL on receipt.  */
 
 
 /* If VEC is non-NULL, set the handler for SIG to the `sv_handler' member
@@ -264,7 +268,7 @@ extern int sigvec __P ((int __sig, __const struct sigvec *__vec,
 
 
 /* Get machine-dependent `struct sigcontext' and signal subcodes.  */
-#include <bits/sigcontext.h>
+# include <bits/sigcontext.h>
 
 /* Restore the state saved in SCP.  */
 extern int __sigreturn __P ((struct sigcontext *__scp));
@@ -275,8 +279,8 @@ extern int sigreturn __P ((struct sigcontext *__scp));
 
 #if defined _SIGNAL_H && (defined __USE_BSD || defined __USE_XOPEN_EXTENDED)
 
-#define         __need_size_t
-#include <stddef.h>
+# define __need_size_t
+# include <stddef.h>
 
 /* If INTERRUPT is nonzero, make signal SIG interrupt system calls
    (causing them to fail with EINTR); if INTERRUPT is zero, make system
index 95a606230a5b0b47bcbfdf7087a6b64ed163f668..362c77c24fb9b644e9aadcd54bf16066cc001bc9 100644 (file)
@@ -30,7 +30,7 @@ routines      :=                                                            \
        vfscanf                                                               \
        fscanf scanf sscanf                                                   \
        perror psignal                                                        \
-       tmpfile tmpnam tmpnam_r tempnam tempname                              \
+       tmpfile tmpfile64 tmpnam tmpnam_r tempnam tempname                    \
        getline getw putw                                                     \
        remove rename                                                         \
        lockfile
index 969f338f482a0020c93318109017d1bcfff959e8..fd6d20d11c6e6361660284a7814139d6d984f7b6 100644 (file)
@@ -34,3 +34,10 @@ fprintf (FILE *stream, const char *format, ...)
 
   return done;
 }
+
+#ifdef USE_IN_LIBIO
+/* We define the function with the real name here.  But deep down in
+   libio the original function _IO_fprintf is also needed.  So make
+   an alias.  */
+weak_alias (fprintf, _IO_fprintf)
+#endif
index 85286bec158d043c6b6b2a8ad99523c88bfc42e2..33bc25bfd277e436b70562e9a0b45a55771512ef 100644 (file)
@@ -125,7 +125,8 @@ extern unsigned int __guess_grouping (unsigned int intdig_max,
 
 
 static char *group_number (char *buf, char *bufend, unsigned int intdig_no,
-                          const char *grouping, wchar_t thousands_sep);
+                          const char *grouping, wchar_t thousands_sep)
+     internal_function;
 
 
 int
@@ -1016,6 +1017,7 @@ __guess_grouping (unsigned int intdig_max, const char *grouping,
    Return the new end of buffer.  */
 
 static char *
+internal_function
 group_number (char *buf, char *bufend, unsigned int intdig_no,
              const char *grouping, wchar_t thousands_sep)
 {
index 5f8635cfb8bf448b7eed61fcb117e2c01a18233a..987fbbbabe9105dbc455a3a460ddc31fdc9c956b 100644 (file)
@@ -37,7 +37,7 @@ tempnam (const char *dir, const char *pfx)
   size_t len;
   char *s;
   char *t = __stdio_gen_tempname (buf, sizeof (buf), dir, pfx, 1,
-                                 &len, (FILE **) NULL);
+                                 &len, (FILE **) NULL, 0);
 
   if (t == NULL)
     return NULL;
index 2cc03d6b89e42eeea79b09144d45af313938f8ed..c3afd3f78b6c5e14a62a2e8d23b67bc9aeb91fda 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1993, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1993, 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 @@ tmpfile ()
   FILE *f;
 
   filename = __stdio_gen_tempname (buf, sizeof (buf), (char *) NULL, "tmpf", 0,
-                                  (size_t *) NULL, &f);
+                                  (size_t *) NULL, &f, 0);
   if (filename == NULL)
     return NULL;
 
diff --git a/stdio-common/tmpfile64.c b/stdio-common/tmpfile64.c
new file mode 100644 (file)
index 0000000..67d4bd8
--- /dev/null
@@ -0,0 +1,48 @@
+/* Copyright (C) 1991, 1993, 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.  */
+
+#include <stdio.h>
+
+
+/* This returns a new stream opened on a temporary file (generated
+   by tmpnam) The file is opened with mode "w+b" (binary read/write).
+   If we couldn't generate a unique filename or the file couldn't
+   be opened, NULL is returned.  */
+FILE *
+tmpfile64 ()
+{
+#ifdef _G_OPEN64
+  char buf[FILENAME_MAX];
+  char *filename;
+  FILE *f;
+
+  filename = __stdio_gen_tempname (buf, sizeof (buf), (char *) NULL, "tmpf", 0,
+                                  (size_t *) NULL, &f, 1);
+  if (filename == NULL)
+    return NULL;
+
+  /* Note that this relies on the Unix semantics that
+     a file is not really removed until it is closed.  */
+  (void) remove (filename);
+
+  return f;
+#else
+  __set_errno (ENOSYS);
+  return NULL;
+#endif
+}
index 6e6dd510eaea8e7ffee1ea1c9752c5940c864bb0..3389ff57b49bf4ed518bca373454b2e30c856f62 100644 (file)
@@ -37,7 +37,7 @@ tmpnam (char *s)
      to FILENAME_MAX characters in any case.  */
   result = __stdio_gen_tempname (s ?: tmpbuf, L_tmpnam, (const char *) NULL,
                                 (const char *) NULL, 0,
-                                (size_t *) NULL, (FILE **) NULL);
+                                (size_t *) NULL, (FILE **) NULL, 0);
 
   if (result != NULL && s == NULL)
     {
index a509a071d658b25adb7e322ed56cd02d8da338a0..5e67cc68456ba3ada3116fd7354f6b25d567c0ab 100644 (file)
@@ -33,5 +33,5 @@ tmpnam_r (char *s)
      to L_tmpnam characters in any case.  */
   return __stdio_gen_tempname (s, L_tmpnam, (const char *) NULL,
                               (const char *) NULL, 0,
-                              (size_t *) NULL, (FILE **) NULL);
+                              (size_t *) NULL, (FILE **) NULL, 0);
 }
index 1cd8d2178a5bef44d5c1cfc7c0ce4fb0c150b428..ef9e62ffcccd866543d1475f093bfb4a53b0bcae 100644 (file)
@@ -176,14 +176,16 @@ static const char null[] = "(null)";
 
 
 /* Helper function to provide temporary buffering for unbuffered streams.  */
-static int buffered_vfprintf __P ((FILE *stream, const CHAR_T *fmt, va_list));
+static int buffered_vfprintf __P ((FILE *stream, const CHAR_T *fmt, va_list))
+     internal_function;
 
 /* Handle unknown format specifier.  */
 static int printf_unknown __P ((FILE *, const struct printf_info *,
                                const void *const *));
 
 /* Group digits of number string.  */
-static char *group_number __P ((CHAR_T *, CHAR_T *, const CHAR_T *, wchar_t));
+static char *group_number __P ((CHAR_T *, CHAR_T *, const CHAR_T *, wchar_t))
+     internal_function;
 
 
 /* The function itself.  */
@@ -1480,6 +1482,7 @@ printf_unknown (FILE *s, const struct printf_info *info,
 /* Group the digits according to the grouping rules of the current locale.
    The interpretation of GROUPING is as in `struct lconv' from <locale.h>.  */
 static char *
+internal_function
 group_number (CHAR_T *w, CHAR_T *rear_ptr, const CHAR_T *grouping,
              wchar_t thousands_sep)
 {
@@ -1579,6 +1582,7 @@ static const struct _IO_jump_t _IO_helper_jumps =
 };
 
 static int
+internal_function
 buffered_vfprintf (register _IO_FILE *s, const CHAR_T *format,
                   _IO_va_list args)
 {
@@ -1615,6 +1619,7 @@ buffered_vfprintf (register _IO_FILE *s, const CHAR_T *format,
 #else /* !USE_IN_LIBIO */
 
 static int
+internal_function
 buffered_vfprintf (register FILE *s, const CHAR_T *format, va_list args)
 {
   char buf[BUFSIZ];
index e7aab90046f96a97faeb4aa29e8c5f33bc2d979e..69ed9034a9864599558c48e86a46ce8e85a7da93 100644 (file)
@@ -92,7 +92,8 @@ static int print;
 
 /* Prototypes for local functions.  */
 static void init (void);
-static int internal_addseverity (int severity, const char *string);
+static int internal_addseverity (int severity, const char *string)
+     internal_function;
 
 
 int
@@ -273,6 +274,7 @@ init (void)
 
 /* Add the new entry to the list.  */
 static int
+internal_function
 internal_addseverity (int severity, const char *string)
 {
   struct severity_info *runp, *lastp;
index 8bb6995cd062c57cc255db57abbdd84c37556e64..40ccc89cc3cff7c197a8dba7517143a38ba9e75d 100644 (file)
@@ -1139,7 +1139,7 @@ extern USItype __udiv_qrnnd ();
     (q) = __udiv_qrnnd (&__r, (n1), (n0), (d));                                \
     (r) = __r;                                                         \
   } while (0)
-extern USItype __udiv_qrnnd ();
+extern USItype __udiv_qrnnd __P ((USItype *, USItype, USItype, USItype));
 #define UDIV_TIME 140
 #endif /* LONGLONG_STANDALONE */
 #endif /* udiv_qrnnd */
index a92df4bc9edc1360698bba796026378990e7e4d7..2adefb508f813ceea58d4b1e77c6fa46c291f73e 100644 (file)
@@ -188,23 +188,35 @@ extern __long_double_t __strtold_internal __P ((__const char *
                                                __restrict __nptr,
                                                char **__restrict __endptr,
                                                int __group));
+#ifndef __strtol_internal_defined
 extern long int __strtol_internal __P ((__const char *__restrict __nptr,
                                        char **__restrict __endptr,
                                        int __base, int __group));
+# define __strtol_internal_defined     1
+#endif
+#ifndef __strtoul_internal_defined
 extern unsigned long int __strtoul_internal __P ((__const char *
                                                  __restrict __nptr,
                                                  char **__restrict __endptr,
                                                  int __base, int __group));
-#ifdef __GNUC__
+# define __strtoul_internal_defined    1
+#endif
+#if defined __GNUC__ || defined __USE_ISOC9X
+# ifndef __strtoll_internal_defined
 extern long long int __strtoll_internal __P ((__const char *__restrict __nptr,
                                              char **__restrict __endptr,
                                              int __base, int __group));
+#  define __strtoll_internal_defined   1
+# endif
+# ifndef __strtoull_internal_defined
 extern unsigned long long int __strtoull_internal __P ((__const char *
                                                        __restrict __nptr,
                                                        char **
                                                        __restrict __endptr,
                                                        int __base,
                                                        int __group));
+#  define __strtoull_internal_defined  1
+# endif
 #endif /* GCC */
 
 #if defined __OPTIMIZE__ && __GNUC__ >= 2
@@ -307,7 +319,7 @@ extern char *l64a __P ((long int __n));
 extern long int a64l __P ((__const char *__s));
 
 
-#include <sys/types.h> /* we need int32_t... */
+# include <sys/types.h>        /* we need int32_t... */
 
 /* These are the functions that actually do things.  The `random', `srandom',
    `initstate' and `setstate' functions are those from BSD Unices.
@@ -411,7 +423,7 @@ struct drand48_data
     int init;                  /* Flag for initializing.  */
   };
 
-#ifdef __USE_MISC
+# ifdef __USE_MISC
 /* Return non-negative, double-precision floating-point value in [0.0,1.0).  */
 extern int drand48_r __P ((struct drand48_data *__buffer, double *__result));
 extern int __erand48_r __P ((unsigned short int __xsubi[3],
@@ -449,7 +461,7 @@ extern int __lcong48_r __P ((unsigned short int __param[7],
                             struct drand48_data *__buffer));
 extern int lcong48_r __P ((unsigned short int __param[7],
                           struct drand48_data *__buffer));
-#endif /* Use misc.  */
+# endif        /* Use misc.  */
 
 /* Internal function to compute next state of the generator.  */
 extern int __drand48_iterate __P ((unsigned short int __xsubi[3],
@@ -647,7 +659,7 @@ extern char *qfcvt __P ((__long_double_t __value, int __ndigit, int *__decpt,
 extern char *qgcvt __P ((__long_double_t __value, int __ndigit, char *__buf));
 
 
-#ifdef __USE_MISC
+# ifdef __USE_MISC
 /* Reentrant version of the functions above which provide their own
    buffers.  */
 extern int ecvt_r __P ((double __value, int __ndigit, int *__decpt,
@@ -659,7 +671,7 @@ extern int qecvt_r __P ((__long_double_t __value, int __ndigit, int *__decpt,
                         int *__sign, char *__buf, size_t __len));
 extern int qfcvt_r __P ((__long_double_t __value, int __ndigit, int *__decpt,
                         int *__sign, char *__buf, size_t __len));
-#endif /* misc */
+# endif        /* misc */
 #endif /* use MISC || use X/Open Unix */
 
 
diff --git a/stdlib/ucontext.h b/stdlib/ucontext.h
new file mode 100644 (file)
index 0000000..2fd6576
--- /dev/null
@@ -0,0 +1,52 @@
+/* Copyright (C) 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.  */
+
+/* System V ABI compliant user-level context switching support.  */
+
+#ifndef _UCONTEXT_H
+#define _UCONTEXT_H    1
+
+#include <features.h>
+
+/* Get machine dependent definition of data structures.  */
+#include <sys/ucontext.h>
+
+__BEGIN_DECLS
+
+/* Get user context and store it in variable pointed to by UCP.  */
+extern int getcontext __P ((ucontext_t *__ucp));
+
+/* Set user context from information of variable pointed to by UCP.  */
+extern int setcontext __P ((ucontext_t *__ucp));
+
+/* Save current context in context variable pointed to by OUCP and set
+   context from variable pointed to by UCP.  */
+extern int swapcontext __P ((ucontext_t *__oucp, ucontext_t *__ucp));
+
+/* Manipulate user context UCP to continue with calling functions FUNC
+   and the ARGC-1 parameters following ARGC when the context is used
+   the next time in `setcontext' or `swapcontext'.
+
+   We cannot say anything about the parameters FUNC takes; `void'
+   is as good as any other choice.  */
+extern void makecontext __P ((ucontext_t *__ucp, void (*__func) __P ((void)),
+                             int __argc, ...));
+
+__END_DECLS
+
+#endif /* ucontext.h */
index e0a8e75311b0995f91f4d6ce653f8438c028fcfe..c2e63b6ebccbb3c845f1ef963a2d13f6d4419885 100644 (file)
@@ -79,6 +79,10 @@ __STRING2_COPY_TYPE (8);
 # undef __STRING2_COPY_TYPE
 #endif
 
+/* Dereferencing a pointer arg to run sizeof on it fails for the
+   void pointer case, so we use this instead.  */
+#define __string2_1bptr_p(x) (((size_t) ((x) + 1) - (size_t) (x)) == 1)
+
 
 /* Set N bytes of S to C.  */
 #ifndef _HAVE_STRING_ARCH_memset
@@ -93,7 +97,7 @@ __STRING2_COPY_TYPE (8);
 #ifndef _HAVE_STRING_ARCH_strcpy
 # define strcpy(dest, src) \
   (__extension__ (__builtin_constant_p (src)                                 \
-                 ? (sizeof ((src)[0]) == 1 && strlen (src) + 1 <= 8          \
+                 ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8         \
                     ? __strcpy_small (dest, src, strlen (src) + 1)           \
                     : (char *) memcpy (dest, src, strlen (src) + 1))         \
                  : strcpy (dest, src)))
@@ -204,7 +208,7 @@ __STRING2_COPY_TYPE (8);
 # ifndef _HAVE_STRING_ARCH_stpcpy
 #  define __stpcpy(dest, src) \
   (__extension__ (__builtin_constant_p (src)                                 \
-                 ? (sizeof ((src)[0]) == 1 && strlen (src) + 1 <= 8          \
+                 ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8         \
                     ? __stpcpy_small (dest, src, strlen (src) + 1)           \
                     : ((char *) __mempcpy (dest, src, strlen (src) + 1) - 1))\
                  : __stpcpy (dest, src)))
@@ -369,17 +373,17 @@ __STRING2_COPY_TYPE (8);
 #ifndef _HAVE_STRING_ARCH_strcmp
 # define strcmp(s1, s2) \
   (__extension__ (__builtin_constant_p (s1) && __builtin_constant_p (s2)      \
-                 && (sizeof ((s1)[0]) != 1 || strlen (s1) >= 4)              \
-                 && (sizeof ((s2)[0]) != 1 || strlen (s2) >= 4)              \
+                 && (!__string2_1bptr_p (s1) || strlen (s1) >= 4)            \
+                 && (!__string2_1bptr_p (s2) || strlen (s2) >= 4)            \
                  ? memcmp (s1, s2, (strlen (s1) < strlen (s2)                \
                                     ? strlen (s1) : strlen (s2)) + 1)        \
-                 : (__builtin_constant_p (s1) && sizeof ((s1)[0]) == 1       \
-                    && sizeof ((s2)[0]) == 1 && strlen (s1) < 4              \
+                 : (__builtin_constant_p (s1) && __string2_1bptr_p (s1)      \
+                    && __string2_1bptr_p (s2) && strlen (s1) < 4             \
                     ? (__builtin_constant_p (s2)                             \
                        ? __strcmp_cc (s1, s2, strlen (s1))                   \
                        : __strcmp_cg (s1, s2, strlen (s1)))                  \
-                    : (__builtin_constant_p (s2) && sizeof ((s1)[0]) == 1    \
-                       && sizeof ((s2)[0]) == 1 && strlen (s2) < 4           \
+                    : (__builtin_constant_p (s2) && __string2_1bptr_p (s1)   \
+                       && __string2_1bptr_p (s2) && strlen (s2) < 4          \
                        ? (__builtin_constant_p (s1)                          \
                           ? __strcmp_cc (s1, s2, strlen (s2))                \
                           : __strcmp_gc (s1, s2, strlen (s2)))               \
@@ -450,7 +454,7 @@ __STRING2_COPY_TYPE (8);
    consists entirely of characters not in REJECT.  */
 #ifndef _HAVE_STRING_ARCH_strcspn
 # define strcspn(s, reject) \
-  (__extension__ (__builtin_constant_p (reject) && sizeof ((reject)[0]) == 1  \
+  (__extension__ (__builtin_constant_p (reject) && __string2_1bptr_p (reject) \
                  ? ((reject)[0] == '\0'                                      \
                     ? strlen (s)                                             \
                     : ((reject)[1] == '\0'                                   \
@@ -474,7 +478,7 @@ __strcspn_c1 (__const char *__s, char __reject)
    consists entirely of characters in ACCEPT.  */
 #ifndef _HAVE_STRING_ARCH_strspn
 # define strspn(s, accept) \
-  (__extension__ (__builtin_constant_p (accept) && sizeof ((accept)[0]) == 1  \
+  (__extension__ (__builtin_constant_p (accept) && __string2_1bptr_p (accept) \
                  ? ((accept)[0] == '\0'                                      \
                     ? 0                                                      \
                     : ((accept)[1] == '\0'                                   \
@@ -498,7 +502,7 @@ __strspn_c1 (__const char *__s, char __accept)
 /* Find the first occurrence in S of any character in ACCEPT.  */
 #ifndef _HAVE_STRING_ARCH_strpbrk
 # define strpbrk(s, accept) \
-  (__extension__ (__builtin_constant_p (accept) && sizeof ((accept)[0]) == 1  \
+  (__extension__ (__builtin_constant_p (accept) && __string2_1bptr_p (accept) \
                  ? ((accept)[0] == '\0'                                      \
                     ? NULL                                                   \
                     : ((accept)[1] == '\0'                                   \
@@ -511,7 +515,7 @@ __strspn_c1 (__const char *__s, char __accept)
 /* Find the first occurrence of NEEDLE in HAYSTACK.  */
 #ifndef _HAVE_STRING_ARCH_strstr
 # define strstr(haystack, needle) \
-  (__extension__ (__builtin_constant_p (needle) && sizeof ((needle)[0]) == 1  \
+  (__extension__ (__builtin_constant_p (needle) && __string2_1bptr_p (needle) \
                  ? ((needle)[0] == '\0'                                      \
                     ? haystack                                               \
                     : ((needle)[1] == '\0'                                   \
@@ -538,7 +542,7 @@ strnlen (__const char *__string, size_t __maxlen)
 # ifndef _HAVE_STRING_ARCH_strsep
 
 #  define strsep(s, reject) \
-  (__extension__ (__builtin_constant_p (reject) && sizeof ((reject)[0]) == 1  \
+  (__extension__ (__builtin_constant_p (reject) && __string2_1bptr_p (reject) \
                  ? ((reject)[0] != '\0' && (reject)[1] == '\0'               \
                     ? __strsep_1c (s, (reject)[0])                           \
                     : __strsep_g (s, reject))                                \
index 338c42ec35aea81dee6f1019b9bf6ad2e3aeaa71..03e802f6cb908e9f200a4c77e6ac91356649f108 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 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
 #include <bits/endian.h>
 
 #ifdef __USE_BSD
-#define        LITTLE_ENDIAN   __LITTLE_ENDIAN
-#define        BIG_ENDIAN      __BIG_ENDIAN
-#define        PDP_ENDIAN      __PDP_ENDIAN
-#define        BYTE_ORDER      __BYTE_ORDER
+# define LITTLE_ENDIAN __LITTLE_ENDIAN
+# define BIG_ENDIAN    __BIG_ENDIAN
+# define PDP_ENDIAN    __PDP_ENDIAN
+# define BYTE_ORDER    __BYTE_ORDER
 #endif
 
 #endif /* endian.h */
index 952060d431b9dfe00c8061c035895cef684f8c6e..d6aaa5994bb09f7cc7b7a8603d1e500716566819 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 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
@@ -27,7 +27,7 @@
 
 
 #ifndef        _STRING_H
-#include <string.h>
+# include <string.h>
 #endif /* string.h  */
 
 
index 5b7b2f97f9f351a47876fb7e651c623fff2c18f1..d74ab72852b69a957fe62f0807eafae7e88d1659 100644 (file)
@@ -695,13 +695,12 @@ test_strsep (void)
 
   {
     char text[] = "This,is,a,test";
-    char *list = text;
-    it = "strsep";
-    check (!strcmp ("This", strsep (&list, ",")), 1);
-    check (!strcmp ("is", strsep (&list, ",")), 2);
-    check (!strcmp ("a", strsep (&list, ",")), 3);
-    check (!strcmp ("test", strsep (&list, ",")), 4);
-    check (strsep (&list, ",") == NULL, 5);
+    char *list = strdupa (text);
+    equal (strsep (&list, ","), "This", 47);
+    equal (strsep (&list, ","), "is", 48);
+    equal (strsep (&list, ","), "a", 49);
+    equal (strsep (&list, ","), "test", 50);
+    check (strsep (&list, ",") == NULL, 51);
   }
 }
 
index 9b030567d3b4c337f57e2d9736230db29a226f9a..bd29abd3bc36fee8ae4e94fd900a9e28f27fa6c7 100644 (file)
@@ -71,7 +71,8 @@ static bool_t authdes_marshal (AUTH *, XDR *);
 static bool_t authdes_validate (AUTH *, struct opaque_auth *);
 static bool_t authdes_refresh (AUTH *);
 static void authdes_destroy (AUTH *);
-static bool_t synchronize (struct sockaddr *, struct timeval *);
+static bool_t synchronize (struct sockaddr *, struct timeval *)
+     internal_function;
 
 static struct auth_ops authdes_ops =
 {
@@ -140,6 +141,7 @@ authdes_pk_create (const char *servername, netobj * pkey, u_int window,
    */
   auth = ALLOC (AUTH);
   ad = ALLOC (struct ad_private);
+  memset (ad, 0, sizeof (struct ad_private));
   memcpy (ad->ad_pkey, pkey->n_bytes, pkey->n_len);
   if (!getnetname (namebuf))
     goto failed;
@@ -200,11 +202,11 @@ failed:
     FREE (auth, sizeof (AUTH));
   if (ad != NULL)
     {
-      FREE (ad, sizeof (struct ad_private));
       if (ad->ad_fullname != NULL)
        FREE (ad->ad_fullname, ad->ad_fullnamelen + 1);
       if (ad->ad_servername != NULL)
        FREE (ad->ad_servername, ad->ad_servernamelen + 1);
+      FREE (ad, sizeof (struct ad_private));
     }
   return (NULL);
 }
@@ -440,6 +442,7 @@ authdes_destroy (AUTH * auth)
  * adjust timep to reflect the delta between our clocks
  */
 static bool_t
+internal_function
 synchronize (struct sockaddr *syncaddr, struct timeval *timep)
 {
   struct timeval mytime;
index ac9b53a3e331cea5a1f2ff6e6b2e575bf9c248b6..091735e5191baa8ef5bd909eedef99188bf68932 100644 (file)
@@ -85,7 +85,7 @@ struct audata
   };
 #define        AUTH_PRIVATE(auth)      ((struct audata *)auth->ah_private)
 
-static bool_t marshal_new_auth (AUTH *);
+static bool_t marshal_new_auth (AUTH *) internal_function;
 
 
 /*
@@ -307,6 +307,7 @@ authunix_destroy (AUTH *auth)
  * sets private data, au_marshed and au_mpos
  */
 static bool_t
+internal_function
 marshal_new_auth (AUTH *auth)
 {
   XDR xdr_stream;
index 73ec6a12e9d78c832cc99a3b710dad5a0f200bff..89f61f0d648a931cea869010c837d1d1014bbf8c 100644 (file)
@@ -43,7 +43,7 @@ static char sccsid[] = "@(#)clnt_perror.c 1.15 87/10/07 Copyr 1984 Sun Micro";
 #include <rpc/auth.h>
 #include <rpc/clnt.h>
 
-static char *auth_errmsg (enum auth_stat stat);
+static char *auth_errmsg (enum auth_stat stat) internal_function;
 
 static char *buf;
 
@@ -288,6 +288,7 @@ static const struct auth_errtab auth_errlist[] =
 };
 
 static char *
+internal_function
 auth_errmsg (enum auth_stat stat)
 {
   size_t i;
index dff7da6a7a6342519b816aa191f8920abce603dd..a497bc7cad34609d607323e1fcb9f4abd2990f9a 100644 (file)
@@ -57,7 +57,7 @@ extern int _openchild (char *command, FILE **fto, FILE **ffrom);
 
 
 static int key_call (u_long, xdrproc_t xdr_arg, char *,
-                    xdrproc_t xdr_rslt, char *);
+                    xdrproc_t xdr_rslt, char *) internal_function;
 
 static struct timeval trytimeout = {KEY_TIMEOUT, 0};
 static struct timeval tottimeout = {KEY_TIMEOUT *KEY_NRETRY, 0};
@@ -267,6 +267,7 @@ cryptkeyres *(*__key_decryptsession_pk_LOCAL) (uid_t, char *) = 0;
 des_block *(*__key_gendes_LOCAL) (uid_t, char *) = 0;
 
 static int
+internal_function
 key_call (u_long proc, xdrproc_t xdr_arg, char *arg,
          xdrproc_t xdr_rslt, char *rslt)
 {
index 6117c365d5d3612e9ae20394d52f120b5c30535e..9115491028ca691eff279c1029d02f85b700b58e 100644 (file)
@@ -167,6 +167,7 @@ xdr_rmtcallres (xdrs, crp)
  */
 
 static int
+internal_function
 getbroadcastnets (struct in_addr *addrs, int sock, char *buf)
   /* int sock:  any valid socket will do */
   /* char *buf:        why allocate more when we can use existing... */
index ec7de3b80a5659b11fa3d8b3cdf6063f4aff70ce..e14a9ad7704a6889ba31d027ea39ddebe67f17e3 100644 (file)
@@ -87,7 +87,7 @@ static const struct xp_ops svctcp_rendezvous_op =
 
 static int readtcp (char*, char *, int);
 static int writetcp (char *, char *, int);
-static SVCXPRT *makefd_xprt (int, u_int, u_int);
+static SVCXPRT *makefd_xprt (int, u_int, u_int) internal_function;
 
 struct tcp_rendezvous
   {                            /* kept in xprt->xp_p1 */
@@ -191,6 +191,7 @@ svcfd_create (int fd, u_int sendsize, u_int recvsize)
 }
 
 static SVCXPRT *
+internal_function
 makefd_xprt (int fd, u_int sendsize, u_int recvsize)
 {
   SVCXPRT *xprt;
index 3547830267b4d6e65fe404e31ae584c1b830e520..c2dde692f4fa29a2154282b704ef40b803bd2866 100644 (file)
@@ -80,12 +80,14 @@ struct cache_entry
 static struct cache_entry *authdes_cache /* [AUTHDES_CACHESZ] */ ;
 static short *authdes_lru /* [AUTHDES_CACHESZ] */ ;
 
-static void cache_init (void); /* initialize the cache */
-static short cache_spot (des_block *, char *, struct timeval *);
-                                       /* find an entry in the cache */
-static void cache_ref (short sid);     /* note that sid was ref'd */
+static void cache_init (void) internal_function; /* initialize the cache */
+static short cache_spot (des_block *, char *, struct timeval *)
+     internal_function;                /* find an entry in the cache */
+static void cache_ref (short sid) internal_function;
+                               /* note that sid was ref'd */
 
-static void invalidate (char *cred);   /* invalidate entry in cache */
+static void invalidate (char *cred) internal_function;
+                               /* invalidate entry in cache */
 
 /*
  * cache statistics
@@ -364,6 +366,7 @@ _svcauth_des (register struct svc_req *rqst, register struct rpc_msg *msg)
  * Initialize the cache
  */
 static void
+internal_function
 cache_init (void)
 {
   register int i;
@@ -397,6 +400,7 @@ cache_victim (void)
  * Note that sid was referenced
  */
 static void
+internal_function
 cache_ref (register short sid)
 {
   register int i;
@@ -420,6 +424,7 @@ cache_ref (register short sid)
  * return the spot in the cache.
  */
 static short
+internal_function
 cache_spot (register des_block * key, char *name, struct timeval *timestamp)
 {
   register struct cache_entry *cp;
@@ -538,6 +543,7 @@ authdes_getucred (const struct authdes_cred *adc, uid_t * uid, gid_t * gid,
 }
 
 static void
+internal_function
 invalidate (char *cred)
 {
   if (cred == NULL)
index 97c30d149f01d3b4c3a5881764785d1a6763e79a..df191f5ad29460cae63e27dae6785a5c804dfe12 100644 (file)
@@ -5,23 +5,23 @@
  * may copy or modify Sun RPC without charge, but are not authorized
  * to license or distribute it to anyone else except as part of a product or
  * program developed by the user.
- * 
+ *
  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- * 
+ *
  * Sun RPC is provided with no support and without any obligation on the
  * part of Sun Microsystems, Inc. to assist in its use, correction,
  * modification or enhancement.
- * 
+ *
  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
  * OR ANY PART THEREOF.
- * 
+ *
  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  * or profits or other special, indirect and consequential damages, even if
  * Sun has been advised of the possibility of such damages.
- * 
+ *
  * Sun Microsystems, Inc.
  * 2550 Garcia Avenue
  * Mountain View, California  94043
@@ -41,6 +41,7 @@ static char sccsid[] = "@(#)xcrypt.c 1.3 89/03/24 Copyr 1986 Sun Micro";
  * xcrypt.c: Hex encryption/decryption and utility routines
  */
 
+#include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -53,9 +54,19 @@ static char hex[16] =
   '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
 };
 
-static char hexval (char);
-static void hex2bin (int, char *, char *);
-static void bin2hex (int, unsigned char *, char *);
+
+#ifdef _LIBC
+# define hexval(c) \
+  (c >= '0' && c <= '9'                                                              \
+   ? c - '0'                                                                 \
+   : ({        int upp = toupper (c);                                                \
+       upp >= 'a' && upp <= 'z' ? upp - 'a' + 10 : -1; }))
+#else
+static char hexval (char) internal_function;
+#endif
+
+static void hex2bin (int, char *, char *) internal_function;
+static void bin2hex (int, unsigned char *, char *) internal_function;
 void passwd2des (char *pw, char *key);
 
 /*
@@ -140,6 +151,7 @@ passwd2des (char *pw, char *key)
  * Hex to binary conversion
  */
 static void
+internal_function
 hex2bin (int len, char *hexnum, char *binnum)
 {
   int i;
@@ -152,6 +164,7 @@ hex2bin (int len, char *hexnum, char *binnum)
  * Binary to hex conversion
  */
 static void
+internal_function
 bin2hex (int len, unsigned char *binnum, char *hexnum)
 {
   int i;
@@ -166,6 +179,7 @@ bin2hex (int len, unsigned char *binnum, char *hexnum)
   hexnum[len * 2] = 0;
 }
 
+#ifndef _LIBC
 static char
 hexval (char c)
 {
@@ -178,3 +192,4 @@ hexval (char c)
   else
     return -1;
 }
+#endif
index b8a4f511a7ef27da7f37d09868ef275228d76562..db5684bcab26be2b51507d5cd4bc7ec805272022 100644 (file)
@@ -117,11 +117,11 @@ typedef struct rec_strm
   }
 RECSTREAM;
 
-static u_int fix_buf_size (u_int);
-static bool_t skip_input_bytes (RECSTREAM *, long);
-static bool_t flush_out (RECSTREAM *, bool_t);
-static bool_t set_input_fragment (RECSTREAM *);
-static bool_t get_input_bytes (RECSTREAM *, caddr_t, int);
+static u_int fix_buf_size (u_int) internal_function;
+static bool_t skip_input_bytes (RECSTREAM *, long) internal_function;
+static bool_t flush_out (RECSTREAM *, bool_t) internal_function;
+static bool_t set_input_fragment (RECSTREAM *) internal_function;
+static bool_t get_input_bytes (RECSTREAM *, caddr_t, int) internal_function;
 
 /*
  * Create an xdr handle for xdrrec
@@ -497,6 +497,7 @@ xdrrec_endofrecord (xdrs, sendnow)
  * Internal useful routines
  */
 static bool_t
+internal_function
 flush_out (RECSTREAM *rstrm, bool_t eor)
 {
   u_long eormask = (eor == TRUE) ? LAST_FRAG : 0;
@@ -533,6 +534,7 @@ fill_input_buf (RECSTREAM *rstrm)
 }
 
 static bool_t  /* knows nothing about records!  Only about input buffers */
+internal_function
 get_input_bytes (RECSTREAM *rstrm, caddr_t addr, int len)
 {
   int current;
@@ -556,6 +558,7 @@ get_input_bytes (RECSTREAM *rstrm, caddr_t addr, int len)
 }
 
 static bool_t /* next two bytes of the input stream are treated as a header */
+internal_function
 set_input_fragment (RECSTREAM *rstrm)
 {
   u_long header;
@@ -569,6 +572,7 @@ set_input_fragment (RECSTREAM *rstrm)
 }
 
 static bool_t  /* consumes input bytes; knows nothing about records! */
+internal_function
 skip_input_bytes (RECSTREAM *rstrm, long cnt)
 {
   int current;
@@ -590,6 +594,7 @@ skip_input_bytes (RECSTREAM *rstrm, long cnt)
 }
 
 static u_int
+internal_function
 fix_buf_size (u_int s)
 {
   if (s < 100)
index d3eb242c0407b8a8463a8ec37122ccfd69d32c78..3f65ae99a33ef49fb5dc66c45ae99cb32cb89729 100644 (file)
@@ -353,6 +353,14 @@ elf_machine_fixup_plt(struct link_map *l, const Elf64_Rela *reloc,
      hasn't made it into Icache yet, so there's nothing to clean up.  */
 }
 
+/* Return the final value of a plt relocation.  */
+static inline Elf64_Addr
+elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc,
+                      Elf64_Addr value)
+{
+  return value + reloc->r_addend;
+}
+
 #endif /* !dl_machine_h */
 
 #ifdef RESOLVE
index 48fe33b3ec39ad958060820c7dffa329258b16ca..ae3ceb517d41a87a26678a1a0e49ac7d01977cb3 100644 (file)
@@ -70,11 +70,11 @@ END(__sigsetjmp)
 /* Put these traditional entry points in the same file so that we can
    elide much of the nonsense in trying to jmp to the real function.  */
 
-ENTRY(_setjmp)
+ENTRY(__setjmp)
        ldgp    gp, 0(pv)
        mov     0, a1
        br      $sigsetjmp_local
-END(_setjmp)
+END(__setjmp)
 
 ENTRY(setjmp)
        ldgp    gp, 0(pv)
@@ -82,5 +82,5 @@ ENTRY(setjmp)
        br      $sigsetjmp_local
 END(setjmp)
 
-weak_extern(_setjmp)
+weak_alias(__setjmp, _setjmp)
 weak_extern(setjmp)
index 84a552b41e9867a9b84b3dc324418c016d46b227..a9a182169bbefed18f48afc74a10a1d75c6af191 100644 (file)
    hold any value corresponding to members of the extended character
    set, as well as at least one value that does not correspond to any
    member of the extended character set.  */
-#define _WINT_T
+# define _WINT_T
 typedef unsigned int wint_t;
 #endif
 #define _G_size_t      size_t
 #define _G_fpos_t      __off_t
+#define _G_fpos64_t    __off_t
 #define _G_ssize_t     __ssize_t
 #define _G_off_t       __off_t
+#define _G_off64_t     __off_t
 #define        _G_pid_t        __pid_t
 #define        _G_uid_t        __uid_t
 #define _G_wint_t      wint_t
+#define _G_stat64      stat
 
 typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
 typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
@@ -57,9 +60,9 @@ typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
 
 
 #if defined (__cplusplus) || defined (__STDC__)
-#define _G_ARGS(ARGLIST) ARGLIST
+# define _G_ARGS(ARGLIST) ARGLIST
 #else
-#define _G_ARGS(ARGLIST) ()
+# define _G_ARGS(ARGLIST) ()
 #endif
 
 #endif /* _G_config.h */
index 5b5cf742b615aae32923141a02a72197afeb85fc..6926cad0adb4a2083108a90bed8d869cb75b2840 100644 (file)
@@ -1,5 +1,5 @@
 /* `sysconf', `pathconf', and `confstr' NAME values.  Generic version.
-   Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1993, 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
@@ -97,7 +97,7 @@ enum
     _SC_SHARED_MEMORY_OBJECTS,
 #define        _SC_SHARED_MEMORY_OBJECTS       _SC_SHARED_MEMORY_OBJECTS
     _SC_AIO_LISTIO_MAX,
-#define        _SC_AIO_LIST_MAX                _SC_AIO_LIST_MAX
+#define        _SC_AIO_LISTIO_MAX              _SC_AIO_LISTIO_MAX
     _SC_AIO_MAX,
 #define        _SC_AIO_MAX                     _SC_AIO_MAX
     _SC_AIO_PRIO_DELTA_MAX,
@@ -316,10 +316,32 @@ enum
 #define        _SC_NL_TEXTMAX                  _SC_NL_TEXTMAX
   };
 
-#ifdef __USE_POSIX2
+#if (defined __USE_POSIX2 || defined __USE_FILE_OFFSET64 \
+     || defined __USE_LARGEFILE64 || defined __USE_LARGEFILE)
 /* Values for the NAME argument to `confstr'.  */
 enum
   {
-    _CS_PATH                   /* The default search path.  */
+    _CS_PATH,                  /* The default search path.  */
+#define _CS_PATH               _CS_PATH
+
+#if (defined __USE_FILE_OFFSET64 || defined __USE_LARGEFILE64 \
+     || defined __USE_LARGEFILE)
+    _CS_LFS_CFLAGS = 1000,
+# define _CS_LFS_CFLAGS                _CS_LFS_CFLAGS
+    _CS_LFS_LDFLAGS,
+# define _CS_LFS_LDFLAGS       _CS_LFS_LDFLAGS
+    _CS_LFS_LIBS,
+# define _CS_LFS_LIBS          _CS_LFS_LIBS
+    _CS_LFS_LINTFLAGS,
+# define _CS_LFS_LINTFLAGS     _CS_LFS_LINTFLAGS
+    _CS_LFS64_CFLAGS,
+# define _CS_LFS64_CFLAGS      _CS_LFS64_CFLAGS
+    _CS_LFS64_LDFLAGS,
+# define _CS_LFS64_LDFLAGS     _CS_LFS64_LDFLAGS
+    _CS_LFS64_LIBS,
+# define _CS_LFS64_LIBS                _CS_LFS64_LIBS
+    _CS_LFS64_LINTFLAGS
+# define _CS_LFS64_LINTFLAGS   _CS_LFS64_LINTFLAGS
+#endif
   };
 #endif
index 2c35c12a47b6de608e6d0302d157cea21e8c0a0d..46cf9a7af59e6973fcf7d140cf28b3a072dd0683 100644 (file)
@@ -1,5 +1,5 @@
 /* Bit values & structures for resource limits.  4.4 BSD/generic GNU version.
-   Copyright (C) 1994, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1994, 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
@@ -65,14 +65,34 @@ enum __rlimit_resource
 #define RLIM_INFINITY RLIM_INFINITY
   };
 
+/* Type for resource quantity measurement.  */
+#ifndef __USE_FILE_OFFSET64
+typedef __rlim_t rlim_t;
+#else
+typedef __rlim64_t rlim_t;
+#endif
+#ifdef __USE_LARGEFILE64
+typedef __rlim64_t rlim64_t;
+#endif
+
 struct rlimit
   {
     /* The current (soft) limit.  */
-    int rlim_cur;
+    rlim_t rlim_cur;
     /* The hard limit.  */
-    int rlim_max;
+    rlim_t rlim_max;
   };
 
+#ifdef __USE_LARGEFILE64
+struct rlimit64
+  {
+    /* The current (soft) limit.  */
+    rlim64_t rlim_cur;
+    /* The hard limit.  */
+    rlim64_t rlim_max;
+ };
+#endif
+
 /* Whose usage statistics do you want?  */
 enum __rusage_who
 /* The macro definitions are necessary because some programs want
index 10bc0728b23f41dad37f2295f3080f29a0b0710a..9fa3388801816f8539975fce023e174ff674afb6 100644 (file)
@@ -38,11 +38,11 @@ struct statfs
   {
     unsigned int f_type;
     unsigned int f_bsize;
-    unsigned int f_blocks;
-    unsigned int f_bfree;
-    unsigned int f_bavail;
-    unsigned int f_files;
-    unsigned int f_ffree;
+    __fsblkcnt_t f_blocks;
+    __fsblkcnt_t f_bfree;
+    __fsblkcnt_t f_bavail;
+    __fsblkcnt_t f_files;
+    __fsblkcnt_t f_ffree;
     __fsid_t f_fsid;
     unsigned int f_namelen;
     unsigned int f_spare[6];
index c264adc917a6b6d5d38b12a7b1c811735cb35530..fdb36f0b546d121c1bdcbaea3b418571e17364c7 100644 (file)
@@ -65,6 +65,8 @@ typedef int __pid_t;          /* Type of process identifications.  */
 typedef int __ssize_t;         /* Type of a byte count, or error.  */
 typedef __u_quad_t __fsid_t;   /* Type of file system IDs.  */
 typedef long int __clock_t;    /* Type of CPU usage counts.  */
+typedef long int __rlim_t;     /* Type for resource measurement.  */
+typedef __quad_t __rlim64_t;   /* Type for resource measurement (LFS).  */
 
 /* Everythin' else.  */
 typedef long int __daddr_t;    /* The type of a disk address.  */
@@ -91,4 +93,19 @@ typedef struct
 
 typedef unsigned long int __fd_mask;
 
+
+/* Types from the Large File Support interface.  */
+
+/* Type to count number os disk blocks.  */
+typedef long int __blkcnt_t;
+typedef __quad_t __blkcnt64_t;
+
+/* Type to count file system blocks.  */
+typedef unsigned int __fsblkcnt_t;
+typedef __u_quad_t __fsblkcnt64_t;
+
+/* Type to count file system inodes.  */
+typedef unsigned long int __fsfilcnt_t;
+typedef __u_quad_t __fsfilcnt64_t;
+
 #endif /* bits/types.h */
index 8fa371192cec561182c2c8fee799193cf061fb8e..844cdc6afb06168fb759928e9fd97e2fe1e172a1 100644 (file)
@@ -132,6 +132,7 @@ memcmp_common_alignment (srcp1, srcp2, len)
 
   switch (len % 4)
     {
+    default: /* Avoid warning about uninitialized local variables.  */
     case 2:
       a0 = ((op_t *) srcp1)[0];
       b0 = ((op_t *) srcp2)[0];
@@ -233,6 +234,7 @@ memcmp_not_common_alignment (srcp1, srcp2, len)
 
   switch (len % 4)
     {
+    default: /* Avoid warning about uninitialized local variables.  */
     case 2:
       a1 = ((op_t *) srcp1)[0];
       a2 = ((op_t *) srcp1)[1];
index 13696986525b2708d54ed2e58dc65dcb96aee8a2..239dc21e3cd19019633d097cdbd48f6348af30cf 100644 (file)
@@ -38,7 +38,8 @@ memset (dstpp, c, len)
       cccc |= cccc << 8;
       cccc |= cccc << 16;
       if (OPSIZ > 4)
-       cccc |= cccc << 32;
+       /* Do the shift in two steps to avoid warning if long has 32 bits.  */
+       cccc |= (cccc << 16) << 16;
 
       /* There are at least some bytes to set.
         No need to test for LEN == 0 in this alignment loop.  */
index 3663382556cad8ab5666cbade8f22939f693c6d6..7c1eb9578ac1e526fe720527ee0123d2bed0dae0 100644 (file)
@@ -63,7 +63,7 @@ strchr (s, c)
   switch (sizeof (longword))
     {
     case 4: magic_bits = 0x7efefeffL; break;
-    case 8: magic_bits = (0x7efefefeL << 32) | 0xfefefeffL; break;
+    case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
     default:
       abort ();
     }
@@ -72,7 +72,8 @@ strchr (s, c)
   charmask = c | (c << 8);
   charmask |= charmask << 16;
   if (sizeof (longword) > 4)
-    charmask |= charmask << 32;
+    /* Do the shift in two steps to avoid a warning if long has 32 bits.  */
+    charmask |= (charmask << 16) << 16;
   if (sizeof (longword) > 8)
     abort ();
 
index 1fb8b1c97caf549a18680c492eaed55672e56d81..b031df810361aeb18329e1f47c42a2a37559de7b 100644 (file)
@@ -60,9 +60,10 @@ strlen (str)
   if (sizeof (longword) > 4)
     {
       /* 64-bit version of the magic.  */
-      magic_bits = (0x7efefefeL << 32) | 0xfefefeffL;
-      himagic = (himagic << 32) | himagic;
-      lomagic = (lomagic << 32) | lomagic;
+      /* Do the shift in two steps to avoid a warning if long has 32 bits.  */
+      magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL;
+      himagic = ((himagic << 16) << 16) | himagic;
+      lomagic = ((lomagic << 16) << 16) | lomagic;
     }
   if (sizeof (longword) > 8)
     abort ();
index 6484e028c92775bdc9f3493d556dc48b44b52c95..6e41a923d5279308f48fd07c3490d3ae0685479d 100644 (file)
@@ -91,8 +91,18 @@ __BEGIN_DECLS
 
 extern __caddr_t __mmap __P ((__caddr_t __addr, size_t __len, int __prot,
                              int __flags, int __fd, __off_t __offset));
+#ifndef __USE_FILE_OFFSET64
 extern __caddr_t mmap __P ((__caddr_t __addr, size_t __len, int __prot,
                            int __flags, int __fd, __off_t __offset));
+#else
+extern __caddr_t mmap __P ((__caddr_t __addr, size_t __len, int __prot,
+                           int __flags, int __fd, __off_t __offset))
+     __asm__ ("mmap64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern __caddr_t mmap64 __P ((__caddr_t __addr, size_t __len, int __prot,
+                             int __flags, int __fd, __off64_t __offset));
+#endif
 
 /* Deallocate any mapping for the region starting at ADDR and extending LEN
    bytes.  Returns 0 if successful, -1 for errors (and sets errno).  */
index 0ac67c05d9b3c5f84fd41eb296694fc6448450a4..c347a515a4768f76c56d84b220d3d2f37d5d557e 100644 (file)
@@ -290,6 +290,14 @@ elf_machine_fixup_plt (struct link_map *map, const Elf32_Rel *reloc,
   *reloc_addr = value;
 }
 
+/* Return the final value of a plt relocation.  */
+static inline Elf32_Addr
+elf_machine_plt_value (struct link_map *map, const Elf32_Rel *reloc,
+                      Elf32_Addr value)
+{
+  return value;
+}
+
 #endif /* !dl_machine_h */
 
 #ifdef RESOLVE
index 706e5c963f51e898c63ab014295222d320acac4a..7416c0ace9cb6f05a06ab92bca23468132fff28a 100644 (file)
@@ -94,6 +94,13 @@ _start:
        call exit
        hlt                     /* Crash if somehow `exit' does return.  */
 
+/* To fulfill the System V/i386 ABI we need this symbol.  Yuck, it's so
+   meaningless since we don't support machines < 80386.  */
+       .section .rodata
+       .globl _fp_hw
+       .long 3
+       .size _fp_hw, 4
+
 /* Define a symbol for the first piece of initialized data.  */
        .data
        .globl __data_start
index 1ba3fc5a7584e0f9f5cf2f64e19955311318f57a..598eef78e79e21ee789fbb42fc169dea40f84993 100644 (file)
@@ -20,6 +20,7 @@
 #include <sysdep.h>
 #define _ASM
 #include <bits/setjmp.h>
+#include <asm-syntax.h>
 
        /* Binary compatibility entry point.  */
 ENTRY (__setjmp)
@@ -47,9 +48,10 @@ ENTRY (__sigsetjmp)
            we can't save and restore our caller's value.  Instead, we do an
            indirect jump through the GOT, using for the temporary register
            %ecx, which is call-clobbered.  */
-       call here
-here:  popl %ecx
-       addl $_GLOBAL_OFFSET_TABLE_+[.-here], %ecx
+       call L(here)
+L(here):
+       popl %ecx
+       addl $_GLOBAL_OFFSET_TABLE_+[.-L(here)], %ecx
        movl C_SYMBOL_NAME(__sigjmp_save@GOT)(%ecx), %ecx
        jmp *%ecx
 #else
diff --git a/sysdeps/i386/sys/ucontext.h b/sysdeps/i386/sys/ucontext.h
new file mode 100644 (file)
index 0000000..17b6b6c
--- /dev/null
@@ -0,0 +1,120 @@
+/* Copyright (C) 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.  */
+
+/* System V/i386 ABI compliant context switching support.  */
+
+#ifndef _SYS_UCONTEXT_H
+#define _SYS_UCONTEXT_H        1
+
+#include <features.h>
+#include <signal.h>
+
+/* Type for general register.  */
+typedef int greg_t;
+
+/* Number of general registers.  */
+#define NGREG  19
+
+/* Container for all general registers.  */
+typedef greg_t gregset_t[NGREG];
+
+/* Number of each register is the `gregset_t' array.  */
+enum
+{
+  GS = 0,
+#define GS     GS
+  FS,
+#define FS     FS
+  ES,
+#define ES     ES
+  DS,
+#define DS     DS
+  EDI
+#define EDI    EDI
+  ESI
+#define ESI    ESI
+  EBP,
+#define EBP    EBP
+  ESP,
+#define ESP    ESP
+  EBX,
+#define EBX    EBX
+  EDX,
+#define EDX    EDX
+  ECX,
+#define ECX    ECX
+  EAX,
+#define EAX    EAX
+  TRAPNO,
+#define TRAPNO TRAPNO
+  ERR,
+#define ERR    ERR
+  EIP,
+#define EIP    EIP
+  CS,
+#define CS     CS
+  EFL,
+#define EFL    EFL
+  UESP,
+#define UESP   UESP
+  SS
+#define SS     SS
+};
+
+/* Structure to describe FPU registers.  */
+typedef struct fpregset
+  {
+    union
+      {
+       struct fpchip_state
+         {
+           int state[27];
+           int status;
+         } fpchip_state;
+
+       struct fp_emul_space
+         {
+           char fp_emul[246];
+           char fp_epad[2];
+         } fp_emul_space;
+
+       int f_fpregs[62];
+      } fp_reg_set;
+
+    long int f_wregs[33];
+  } fpregset_t;
+
+/* Context to describe whole processor state.  */
+typedef struct
+  {
+    gregset_t gregs;
+    fpregset_t fpregs;
+  } mcontext_t;
+
+/* Userlevel context.  */
+typedef struct ucontext
+  {
+    unsigned long int uc_flags;
+    struct ucontext *uc_links;
+    __sigset_t uc_sigmask;
+    stack_t uc_stack;
+    mcontext_t uc_mcontext;
+    long int uc_filler[5];
+  } ucontext_t;
+
+#endif /* sys/ucontext.h */
diff --git a/sysdeps/libm-i387/s_fma.S b/sysdeps/libm-i387/s_fma.S
new file mode 100644 (file)
index 0000000..deeac57
--- /dev/null
@@ -0,0 +1,32 @@
+/* Compute (X * Y) + Z as ternary operation.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+       .text
+ENTRY(__fma)
+       fldl    4(%esp)         // x
+       fldl    12(%esp)        // x : y
+       fmulp                   // x * y
+       fldl    20(%esp)        // z : x * y
+       fmulp                   // (x * y) + z
+       ret
+END(__fma)
+weak_alias (__fma, fma)
diff --git a/sysdeps/libm-i387/s_fmaf.S b/sysdeps/libm-i387/s_fmaf.S
new file mode 100644 (file)
index 0000000..726c49d
--- /dev/null
@@ -0,0 +1,32 @@
+/* Compute (X * Y) + Z as ternary operation.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+       .text
+ENTRY(__fmaf)
+       flds    4(%esp)         // x
+       flds    8(%esp)         // x : y
+       fmulp                   // x * y
+       flds    12(%esp)        // z : x * y
+       fmulp                   // (x * y) + z
+       ret
+END(__fmaf)
+weak_alias (__fmaf, fmaf)
diff --git a/sysdeps/libm-i387/s_fmal.S b/sysdeps/libm-i387/s_fmal.S
new file mode 100644 (file)
index 0000000..be8b557
--- /dev/null
@@ -0,0 +1,32 @@
+/* Compute (X * Y) + Z as ternary operation.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+       .text
+ENTRY(__fmal)
+       fldt    4(%esp)         // x
+       fldt    16(%esp)        // x : y
+       fmulp                   // x * y
+       fldt    28(%esp)        // z : x * y
+       fmulp                   // (x * y) + z
+       ret
+END(__fmal)
+weak_alias (__fmal, fmal)
index 49bfebc9932220db38e60095fb7fccea928c94ee..6109ec45c3b3656f2003bb0cd3c5c338e0c2f16a 100644 (file)
@@ -23,7 +23,7 @@
 
        .text
 ENTRY(__llrint)
-       fldt    4(%esp)
+       fldl    4(%esp)
        subl    $8, %esp
        fistpll (%esp)
        fwait
diff --git a/sysdeps/libm-i387/s_llrintf.S b/sysdeps/libm-i387/s_llrintf.S
new file mode 100644 (file)
index 0000000..c1e1c22
--- /dev/null
@@ -0,0 +1,34 @@
+/* Round argument to nearest integral value according to current rounding
+   direction.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+       .text
+ENTRY(__llrintf)
+       flds    4(%esp)
+       subl    $8, %esp
+       fistpll (%esp)
+       fwait
+       popl    %eax
+       popl    %edx
+       ret
+END(__llrintf)
+weak_alias (__llrintf, llrintf)
diff --git a/sysdeps/libm-i387/s_llrintl.S b/sysdeps/libm-i387/s_llrintl.S
new file mode 100644 (file)
index 0000000..d894897
--- /dev/null
@@ -0,0 +1,34 @@
+/* Round argument to nearest integral value according to current rounding
+   direction.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+       .text
+ENTRY(__llrintl)
+       fldt    4(%esp)
+       subl    $8, %esp
+       fistpll (%esp)
+       fwait
+       popl    %eax
+       popl    %edx
+       ret
+END(__llrintl)
+weak_alias (__llrintl, llrintl)
index 3be4ca79033f97b5a3d65d66a6347fbd4aea03b0..40956ab0d0a8d8e13d828d034115060fde9e5f1b 100644 (file)
@@ -23,7 +23,7 @@
 
        .text
 ENTRY(__lrint)
-       fldt    4(%esp)
+       fldl    4(%esp)
        subl    $4, %esp
        fistpl  (%esp)
        fwait
diff --git a/sysdeps/libm-i387/s_lrintf.S b/sysdeps/libm-i387/s_lrintf.S
new file mode 100644 (file)
index 0000000..2f49bdb
--- /dev/null
@@ -0,0 +1,33 @@
+/* Round argument to nearest integral value according to current rounding
+   direction.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+       .text
+ENTRY(__lrintf)
+       flds    4(%esp)
+       subl    $4, %esp
+       fistpl  (%esp)
+       fwait
+       popl    %eax
+       ret
+END(__lrintf)
+weak_alias (__lrintf, lrintf)
diff --git a/sysdeps/libm-i387/s_lrintl.S b/sysdeps/libm-i387/s_lrintl.S
new file mode 100644 (file)
index 0000000..3a06c91
--- /dev/null
@@ -0,0 +1,33 @@
+/* Round argument to nearest integral value according to current rounding
+   direction.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+       .text
+ENTRY(__lrintl)
+       fldt    4(%esp)
+       subl    $4, %esp
+       fistpl  (%esp)
+       fwait
+       popl    %eax
+       ret
+END(__lrintl)
+weak_alias (__lrintl, lrintl)
diff --git a/sysdeps/libm-i387/s_scalbln.c b/sysdeps/libm-i387/s_scalbln.c
new file mode 100644 (file)
index 0000000..1009713
--- /dev/null
@@ -0,0 +1,2 @@
+/* Nothing to do.  This function is the same as scalbn.  So we define an
+   alias.  */
diff --git a/sysdeps/libm-i387/s_scalblnf.c b/sysdeps/libm-i387/s_scalblnf.c
new file mode 100644 (file)
index 0000000..5e558c3
--- /dev/null
@@ -0,0 +1,2 @@
+/* Nothing to do.  This function is the same as scalbnf.  So we define an
+   alias.  */
diff --git a/sysdeps/libm-i387/s_scalblnl.c b/sysdeps/libm-i387/s_scalblnl.c
new file mode 100644 (file)
index 0000000..cda2ec1
--- /dev/null
@@ -0,0 +1,2 @@
+/* Nothing to do.  This function is the same as scalbnl.  So we define an
+   alias.  */
index 709b7a47f5400a5d49dc5305ad9e390187cc0c2a..ea9e25f0946c649a5f2ee909d637d25ad2d45719 100644 (file)
@@ -15,3 +15,5 @@ ENTRY(__scalbn)
        ret
 END (__scalbn)
 weak_alias (__scalbn, scalbn)
+strong_alias (__scalbn, __scalbln)
+weak_alias (__scalbn, scalbln)
index ce921138449e5a39a2ccfce011a5b15a12e70c9c..dc8cfb4296d1365782f8f9d91b1cfa1ac48eb8e9 100644 (file)
@@ -15,3 +15,5 @@ ENTRY(__scalbnf)
        ret
 END (__scalbnf)
 weak_alias (__scalbnf, scalbnf)
+strong_alias (__scalbnf, __scalblnf)
+weak_alias (__scalbnf, scalblnf)
index 09e06457b8167ffbbfb5365882339ddd4acdb018..295494b3d22540377debd1b6299c58e9c7a60235 100644 (file)
@@ -16,3 +16,5 @@ ENTRY(__scalbnl)
        ret
 END (__scalbnl)
 weak_alias (__scalbnl, scalbnl)
+strong_alias (__scalbnl, __scalblnl)
+weak_alias (__scalbnl, scalblnl)
diff --git a/sysdeps/libm-ieee754/s_clog10.c b/sysdeps/libm-ieee754/s_clog10.c
new file mode 100644 (file)
index 0000000..5a9de75
--- /dev/null
@@ -0,0 +1,65 @@
+/* Compute complex base 10 logarithm.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <complex.h>
+#include <math.h>
+
+#include "math_private.h"
+
+
+__complex__ double
+__clog10 (__complex__ double x)
+{
+  __complex__ double result;
+  int rcls = fpclassify (__real__ x);
+  int icls = fpclassify (__imag__ x);
+
+  if (rcls == FP_ZERO && icls == FP_ZERO)
+    {
+      /* Real and imaginary part are 0.0.  */
+      __imag__ result = signbit (__real__ x) ? M_PI : 0.0;
+      __imag__ result = __copysign (__imag__ result, __imag__ x);
+      /* Yes, the following line raises an exception.  */
+      __real__ result = -1.0 / fabs (__real__ x);
+    }
+  else if (rcls != FP_NAN && icls != FP_NAN)
+    {
+      /* Neither real nor imaginary part is NaN.  */
+      __real__ result = __ieee754_log10 (__ieee754_hypot (__real__ x,
+                                                         __imag__ x));
+      __imag__ result = __ieee754_atan2 (__imag__ x, __real__ x);
+    }
+  else
+    {
+      __imag__ result = __nan ("");
+      if (rcls == FP_INFINITE || icls == FP_INFINITE)
+       /* Real or imaginary part is infinite.  */
+       __real__ result = HUGE_VAL;
+      else
+       __real__ result = __nan ("");
+    }
+
+  return result;
+}
+weak_alias (__clog10, clog10)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__clog10, __clog10l)
+weak_alias (__clog10, clog10l)
+#endif
diff --git a/sysdeps/libm-ieee754/s_clog10f.c b/sysdeps/libm-ieee754/s_clog10f.c
new file mode 100644 (file)
index 0000000..4e2fa83
--- /dev/null
@@ -0,0 +1,61 @@
+/* Compute complex base 10 logarithm.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <complex.h>
+#include <math.h>
+
+#include "math_private.h"
+
+
+__complex__ float
+__clog10f (__complex__ float x)
+{
+  __complex__ float result;
+  int rcls = fpclassify (__real__ x);
+  int icls = fpclassify (__imag__ x);
+
+  if (rcls == FP_ZERO && icls == FP_ZERO)
+    {
+      /* Real and imaginary part are 0.0.  */
+      __imag__ result = signbit (__real__ x) ? M_PI : 0.0;
+      __imag__ result = __copysignf (__imag__ result, __imag__ x);
+      /* Yes, the following line raises an exception.  */
+      __real__ result = -1.0 / fabsf (__real__ x);
+    }
+  else if (rcls != FP_NAN && icls != FP_NAN)
+    {
+      /* Neither real nor imaginary part is NaN.  */
+      __real__ result = __ieee754_log10f (__ieee754_hypotf (__real__ x,
+                                                           __imag__ x));
+      __imag__ result = __ieee754_atan2f (__imag__ x, __real__ x);
+    }
+  else
+    {
+      __imag__ result = __nanf ("");
+      if (rcls == FP_INFINITE || icls == FP_INFINITE)
+       /* Real or imaginary part is infinite.  */
+       __real__ result = HUGE_VALF;
+      else
+       __real__ result = __nanf ("");
+    }
+
+  return result;
+}
+weak_alias (__clog10f, clog10f)
diff --git a/sysdeps/libm-ieee754/s_clog10l.c b/sysdeps/libm-ieee754/s_clog10l.c
new file mode 100644 (file)
index 0000000..bf7d394
--- /dev/null
@@ -0,0 +1,61 @@
+/* Compute complex natural logarithm.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <complex.h>
+#include <math.h>
+
+#include "math_private.h"
+
+
+__complex__ long double
+__clog10l (__complex__ long double x)
+{
+  __complex__ long double result;
+  int rcls = fpclassify (__real__ x);
+  int icls = fpclassify (__imag__ x);
+
+  if (rcls == FP_ZERO && icls == FP_ZERO)
+    {
+      /* Real and imaginary part are 0.0.  */
+      __imag__ result = signbit (__real__ x) ? M_PI : 0.0;
+      __imag__ result = __copysignl (__imag__ result, __imag__ x);
+      /* Yes, the following line raises an exception.  */
+      __real__ result = -1.0 / fabsl (__real__ x);
+    }
+  else if (rcls != FP_NAN && icls != FP_NAN)
+    {
+      /* Neither real nor imaginary part is NaN.  */
+      __real__ result = __ieee754_log10l (__ieee754_hypotl (__real__ x,
+                                                           __imag__ x));
+      __imag__ result = __ieee754_atan2l (__imag__ x, __real__ x);
+    }
+  else
+    {
+      __imag__ result = __nanl ("");
+      if (rcls == FP_INFINITE || icls == FP_INFINITE)
+       /* Real or imaginary part is infinite.  */
+       __real__ result = HUGE_VALL;
+      else
+       __real__ result = __nanl ("");
+    }
+
+  return result;
+}
+weak_alias (__clog10l, clog10l)
diff --git a/sysdeps/libm-ieee754/s_fma.c b/sysdeps/libm-ieee754/s_fma.c
new file mode 100644 (file)
index 0000000..53974dc
--- /dev/null
@@ -0,0 +1,28 @@
+/* Compute x * y + z as ternary operation.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <math.h>
+
+double
+__fma (double x, double y, double z)
+{
+  return (x * y) + z;
+}
+weak_alias (__fma, fma)
diff --git a/sysdeps/libm-ieee754/s_fmaf.c b/sysdeps/libm-ieee754/s_fmaf.c
new file mode 100644 (file)
index 0000000..44e5e15
--- /dev/null
@@ -0,0 +1,28 @@
+/* Compute x * y + z as ternary operation.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <math.h>
+
+float
+__fmaf (float x, float y, float z)
+{
+  return (x * y) + z;
+}
+weak_alias (__fmaf, fmaf)
diff --git a/sysdeps/libm-ieee754/s_fmal.c b/sysdeps/libm-ieee754/s_fmal.c
new file mode 100644 (file)
index 0000000..f73751f
--- /dev/null
@@ -0,0 +1,28 @@
+/* Compute x * y + z as ternary operation.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <math.h>
+
+long double
+__fmal (long double x, long double y, long double z)
+{
+  return (x * y) + z;
+}
+weak_alias (__fmal, fmal)
index faae106ece07d1e583cfe5c5589d5b78ba4a26e7..a50ba96952a2f6b73316bade524ec86bd8c902c8 100644 (file)
@@ -23,9 +23,7 @@
 
 #include "math_private.h"
 
-#ifdef NO_LONG_DOUBLE
-/* The `long double' is in fact the IEEE `double' type.  */
-static long double two52[2] =
+static const long double two52[2] =
 {
   4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */
  -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */
@@ -33,210 +31,65 @@ static long double two52[2] =
 
 
 long long int
-__llrint (long double x)
+__llrint (double x)
 {
-  int32_t j0,sx;
-  u_int32_t i0, i1, i;
-  long double t, w;
+  int32_t j0;
+  u_int32_t i1, i0;
   long long int result;
+  volatile double w;
+  double t;
+  int sx;
 
   EXTRACT_WORDS (i0, i1, x);
-
-  sx = i0 >> 31;
   j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+  sx = i0 >> 31;
+  i0 &= 0xfffff;
+  i0 |= 0x100000;
 
   if (j0 < 20)
     {
-      if (j0 < 0)
-       {
-         if (((i0 & 0x7fffffff) | i1) == 0)
-           /* The number is 0.  */
-           result = 0;
-         else
-           {
-             i1 |= i0;
-             i0 &= 0xfffe0000;
-             i0 |= ((i1 | -i1) >> 12) & 0x80000;
-             SET_HIGH_WORD (x, i0);
-             w = two52[sx] + x;
-             t = w - two52[sx];
-             GET_HIGH_WORD (i0, t);
-             if ((i0 & 0x7fffffff) >= 0x3fff0000)
-               result = sx ? -1 : 1;
-             else
-               result = 0;
-           }
-       }
+      if (j0 < -1)
+       return 0;
       else
        {
-         u_int32_t i = 0x000fffff >> j0;
-         if (((i0 & i) | i1) == 0)
-           {
-             /* X is not integral.  */
-             i >>= 1;
-             if (((i0 & i) | i1) != 0)
-               {
-                 if (j0 == 19)
-                   i1 = 0x40000000;
-                 else
-                   i0 = (i0 & (~i)) | (0x20000 >> j0);
-
-                 INSERT_WORDS (x, i0, i1);
-                 w = two52[sx] + x;
-                 x = w - two52[sx];
-                 EXTRACT_WORDS (i0, i1, x);
-
-                 j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
-               }
-           }
-
-         result = ((i0 >> (20 - j0)) & 0xfffff) | (0x00100000 >> (20 - j0));
-         if (sx)
-           result = -result;
+         w = two52[sx] + x;
+         t = w - two52[sx];
+         EXTRACT_WORDS (i0, i1, t);
+         i0 = i & 0xfffff;
+         i0 |= 0x100000;
+         j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+
+         result = i0 >> (20 - j0);
        }
     }
-  else if ((unsigned int) j0 < sizeof (long long int) * 8 && j0 < 53)
-    {
-      i = ((u_int32_t) (0xffffffff)) >> (j0 - 20);
-      if ((i1 & i) != 0)
-       {
-         /* x is not integral.  */
-         i >>= 1;
-         if ((i1 & i) != 0)
-           i1 = (i1 & (~i)) | (0x40000000 >> (j0 - 20));
-       }
-
-      INSERT_WORDS (x, i0, i1);
-      w = two52[sx] + x;
-      x = w - two52[sx];
-      EXTRACT_WORDS (i0, i1, x);
-
-      j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
-
-      result = i0 | 0x00100000;
-      if (j0 > 20)
-       {
-         result <<= j0 - 20;
-         result |= i1 >> (52 - j0);
-       }
-      if (sx)
-       result = -result;
-    }
-  else
-    /* Too large.  The number is either +-inf or NaN or it is too
-       large to be effected by rounding.  The standard leaves it
-       undefined what to return when the number is too large to fit in
-       a `long int'.  */
-    result = (long long int) x;
-
-  return result;
-}
-
-#else
-static long double two63[2] =
-{
-  9.223372036854775808000000e+18, /* 0x403E, 0x00000000, 0x00000000 */
- -9.223372036854775808000000e+18  /* 0xC03E, 0x00000000, 0x00000000 */
-};
-
-
-long long int
-__llrint (long double x)
-{
-  int32_t se,j0,sx;
-  u_int32_t i0, i1, i;
-  long long int result;
-  long double w, t;
-
-  GET_LDOUBLE_WORDS (se, i0, i1, x);
-
-  sx = (se >> 15) & 1;
-  j0 = (se & 0x7fff) - 0x3fff;
-
-  if (j0 < 31)
+  else if (j0 < (int32_t) (8 * sizeof (long long int)))
     {
-      if (j0 < 0)
-       {
-         if (((se & 0x7fff) | i0 | i1) == 0)
-           /* The number is 0.  */
-           result = 0;
-         else
-           {
-             i1 |= i0;
-             i0 &= 0xe0000000;
-             i0 |= (i1 | -i1) & 0x80000000;
-             SET_LDOUBLE_MSW (x, i0);
-             w = two63[sx] + x;
-             t = w - two63[sx];
-             GET_LDOUBLE_EXP (i0, t);
-             if ((i0 & 0x7fff) >= 0x3fff)
-               result = sx ? -1 : 1;
-             else
-               result = 0;
-           }
-       }
+      if (j0 >= 52)
+       result = ((long long int) i0 << (j0 - 20)) | (i1 << (j0 - 52));
       else
        {
-         u_int32_t i = 0x7fffffff >> j0;
-         if (((i0 & i) | i1) == 0)
-           {
-             /* X is not integral.  */
-             i >>= 1;
-             if (((i0 & i) | i1) != 0)
-               {
-                 if (j0 == 31)
-                   i1 = 0x40000000;
-                 else
-                   i0 = (i0 & (~i)) | (0x20000000 >> j0);
-
-                 SET_LDOUBLE_WORDS (x, se, i0, i1);
-                 w = two63[sx] + x;
-                 x = w - two63[sx];
-                 GET_LDOUBLE_WORDS (se, i0, i1, x);
-
-                 sx = (se >> 15) & 1;
-                 j0 = (se & 0x7fff) - 0x3fff;
-               }
-           }
-
-
-         result = i0 >> (31 - j0);
+         w = two52[sx] + x;
+         t = w - two52[sx];
+         EXTRACT_WORDS (i0, i1, t);
+         i0 = i & 0xfffff;
+         i0 |= 0x100000;
+         j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+
+         result = ((long long int) i0 << (j0 - 20)) | (j >> (52 - j0));
        }
     }
-  else if ((unsigned int) j0 < sizeof (long long int) * 8 && j0 < 64)
+  else
     {
-      i = ((u_int32_t) (0xffffffff)) >> (j0 - 31);
-      if ((i1 & i) != 0)
-       {
-         /* x is not integral.  */
-         i >>= 1;
-         if ((i1 & i) != 0)
-           i1 = (i1 & (~i)) | (0x40000000 >> (j0 - 31));
-       }
-
-      SET_LDOUBLE_WORDS (x, se, i0, i1);
-      w = two63[sx] + x;
-      x = w - two63[sx];
-      GET_LDOUBLE_WORDS (se, i0, i1, x);
-
-      j0 = (se & 0x7fff) - 0x3fff;
-
-      result = i0;
-      if (j0 > 31)
-       {
-         result <<= j0 - 31;
-         result |= i1 >> (63 - j0);
-       }
+      /* The number is too large.  It is left implementation defined
+        what happens.  */
+      return (long long int) x;
     }
-  else
-    /* Too large.  The number is either +-inf or NaN or it is too
-       large to be effected by rounding.  The standard leaves it
-       undefined what to return when the number is too large to fit in
-       a `long int'.  */
-    result = (long long int) x;
 
-  return result;
+  return sx ? -result : result;
 }
-#endif
 
 weak_alias (__llrint, llrint)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__llrint, __llrintl)
+weak_alias (__llrint, llrintl)
+#endif
diff --git a/sysdeps/libm-ieee754/s_llrintf.c b/sysdeps/libm-ieee754/s_llrintf.c
new file mode 100644 (file)
index 0000000..f73afd0
--- /dev/null
@@ -0,0 +1,78 @@
+/* Round argument to nearest integral value according to current rounding
+   direction.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <math.h>
+
+#include "math_private.h"
+
+static const double two23[2] =
+{
+  8.3886080000e+06, /* 0x4B000000 */
+ -8.3886080000e+06, /* 0xCB000000 */
+};
+
+
+long long int
+__llrintf (float x)
+{
+  int32_t j0;
+  u_int32_t i, i0;
+  volatile float w;
+  float t;
+  long long int result;
+  int sx;
+
+  GET_FLOAT_WORD (i, x);
+
+  sx = i0 >> 31;
+  j0 = ((i0 >> 23) & 0xff) - 0x7f;
+  i0 = i & 0x7fffff;
+  i0 |= 0x800000;
+
+  if (j0 < (int32_t) (sizeof (long long int) * 8))
+    {
+      if (j0 < -1)
+       return 0;
+      else if (j0 >= 23)
+       result = (long long int) i0 << (j0 - 23);
+      else
+       {
+         w = two23[sx] + x;
+         t = w - two23[sx];
+         GET_FLOAT_WORD (i, t);
+         i0 = i & 0x7fffff;
+         i0 |= 0x800000;
+         j0 = ((i0 >> 23) & 0xff) - 0x7f;
+
+         result = i0 >> (23 - j0);
+       }
+    }
+  else
+    {
+      /* The number is too large.  It is left implementation defined
+        what happens.  */
+      return (long long int) x;
+    }
+
+  return sx ? -result : result;
+}
+
+weak_alias (__llrintf, llrintf)
diff --git a/sysdeps/libm-ieee754/s_llrintl.c b/sysdeps/libm-ieee754/s_llrintl.c
new file mode 100644 (file)
index 0000000..29fc3a3
--- /dev/null
@@ -0,0 +1,86 @@
+/* Round argument to nearest integral value according to current rounding
+   direction.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <math.h>
+
+#include "math_private.h"
+
+static const long double two63[2] =
+{
+  9.223372036854775808000000e+18, /* 0x403E, 0x00000000, 0x00000000 */
+ -9.223372036854775808000000e+18  /* 0xC03E, 0x00000000, 0x00000000 */
+};
+
+
+long long int
+__llrintl (long double x)
+{
+  int32_t se,j0;
+  u_int32_t i0, i1, i;
+  long long int result;
+  volatile long double w;
+  long double t;
+  int sx;
+
+  GET_LDOUBLE_WORDS (se, i0, i1, x);
+
+  sx = (se >> 15) & 1;
+  j0 = (se & 0x7fff) - 0x3fff;
+
+  if (j0 < 31)
+    {
+      if (j0 < -1)
+       return 0;
+      else
+       {
+         w = two63[sx] + x;
+         t = w - two63[sx];
+         GET_LDOUBLE_WORDS (se, i0, i1, t);
+         j0 = (se & 0x7fff) - 0x3fff;
+
+         result = i0 >> (31 - j0);
+       }
+    }
+  else if (j0 < (int32_t) (8 * sizeof (long long int)))
+    {
+      if (j0 >= 63)
+       result = ((long long int) i0 << (j0 - 31)) | (i1 << (j0 - 63));
+      else
+       {
+         w = two63[sx] + x;
+         t = w - two63[sx];
+         GET_LDOUBLE_WORDS (se, i0, i1, t);
+         j0 = (se & 0x7fff) - 0x3fff;
+
+         result = ((long long int) i0 << (j0 - 31)) | (j >> (63 - j0));
+       }
+    }
+  else
+    {
+      /* The number is too large.  It is left implementation defined
+        what happens.  */
+      return (long long int) x;
+    }
+
+  return sx ? -result : result;
+}
+
+weak_alias (__llrintl, llrintl)
index aee0e31fc0fa442ab87ec8c88115f2c58b0a2b56..1deb630e9630b3b6763663060d29b2416b2765d1 100644 (file)
@@ -1,4 +1,4 @@
-/* Round long double value to long long int.
+/* Round double value to long long int.
    Copyright (C) 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 #include "math_private.h"
 
 
-#ifdef NO_LONG_DOUBLE
-/* The `long double' is in fact the IEEE `double' type.  */
-
 long long int
-__llround (long double x)
+__llround (double x)
 {
   int32_t j0;
   u_int32_t i1, i0;
   long long int result;
+  int sign;
 
   EXTRACT_WORDS (i0, i1, x);
   j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+  sign = (i0 & 0x80000000) != 0 ? -1 : 1;
+  i0 &= 0xfffff;
+  i0 |= 0x100000;
+
   if (j0 < 20)
     {
       if (j0 < 0)
-       result = j0 < -1 ? 0 : ((i0 & 0x80000000) ? -1 : 1);
+       return j0 < -1 ? 0 : sign;
       else
        {
-         u_int32_t i = 0xfffff >> j0;
-         if (((i0 & i) | i1) == 0)
-           result = (long long int) ((i0 & 0xfffff) | 0x100000) >> j0;
-         else
-           {
-             /* X is not integral.  */
-             u_int32_t j = i0 + (0x80000 >> j0);
-              if (j < i0)
-               result = (long long int) 0x80000 >> (20 - j0);
-             else
-               result = (j | 0x100000) >> (20 - j0);
-           }
+         i0 += 0x80000 >> j0;
+
+         result = i0 >> (20 - j0);
        }
     }
-  else if (j0 >= 8 * sizeof (long long int) || j0 > 51)
-    {
-      /* The number is too large.  It is left implementation defined
-        what happens.  */
-      result = (long long int) x;
-    }
-  else
+  else if (j0 < (int32_t) (8 * sizeof (long long int)))
     {
-      u_int32_t i = ((u_int32_t) (0xffffffff)) >> (j0 - 20);
-      if ((i1 & i) != 0)
+      if (j0 >= 52)
+       result = ((long long int) i0 << (j0 - 20)) | (i1 << (j0 - 52));
+      else
        {
-         /* x is not integral.  */
          u_int32_t j = i1 + (0x80000000 >> (j0 - 20));
          if (j < i1)
-           {
-             j = i0 + 1;
-             if ((j & 0xfffff) == 0)
-               {
-                 if (sizeof (long long int) <= 4)
-                   /* Overflow.  */
-                   result = (long long int) x;
-                 else
-                   result = 1ll << (j0 + 1);
-               }
-             else
-               result = ((long long int) ((i0 & 0xfffff) | 0x100000)
-                         << (j0 - 31));
-           }
-         else
-           {
-             result = ((long long int) ((i0 & 0xfffff) | 0x100000)
-                       << (j0 - 31));
-             if (sizeof (long long int) > 4 && j0 > 31)
-               result |= j >> (63 - j0);
-           }
-       }
-      else
-       {
-         result = (long long int) ((i0 & 0xfffff) | 0x100000) << (j0 - 31);
-         if (sizeof (long long int) > 4 && j0 > 31)
-           result |= i1 >> (63 - j0);
-       }
-    }
+           ++i0;
 
-  return i0 & 0x80000000 ? -result : result;
-}
-#else
-long long int
-__llround (long double x)
-{
-  int32_t j0;
-  u_int32_t se, i1, i0;
-  long long int result;
-
-  GET_LDOUBLE_WORDS (se, i0, i1, x);
-  j0 = (se & 0x7fff) - 0x3fff;
-  if (j0 < 31)
-    {
-      if (j0 < 0)
-       result = j0 < -1 ? 0 : 1;
-      else
-       {
-         u_int32_t i = 0x7fffffff >> j0;
-         if (((i0 & i) | i1) == 0)
-           result = (long long int) i0 >> j0;
-         else
-           {
-             /* X is not integral.  */
-             u_int32_t j = i0 + (0x40000000 >> j0);
-              if (j < i0)
-               result = 0x80000000l >> (30 - j0);
-             else
-               result = j >> (31 - j0);
-           }
+         result = ((long long int) i0 << (j0 - 20)) | (j >> (52 - j0));
        }
     }
-  else if ((unsigned int) j0 >= 8 * sizeof (long long int) || j0 > 62)
+  else
     {
       /* The number is too large.  It is left implementation defined
         what happens.  */
-      result = (long long int) x;
-    }
-  else
-    {
-      u_int32_t i = ((u_int32_t) (0xffffffff)) >> (j0 - 31);
-      if ((i1 & i) != 0)
-       {
-         /* x is not integral.  */
-         u_int32_t j = i1 + (0x80000000 >> (j0 - 31));
-         if (j < i1)
-           {
-             j = i0 + 1;
-             if (j == 0)
-               {
-                 if (sizeof (long long int) <= 4)
-                   /* Overflow.  */
-                   result = (long long int) x;
-                 else
-                   result = 1ll << (j0 + 1);
-               }
-             else
-               result = (long long int) i0 << (j0 - 31);
-           }
-         else
-           {
-             result = (long long int) i0 << (j0 - 31);
-             if (sizeof (long long int) > 4 && j0 > 31)
-               result |= j >> (63 - j0);
-           }
-       }
-      else
-       {
-         result = (long long int) i0 << (j0 - 31);
-         if (sizeof (long long int) > 4 && j0 > 31)
-           result |= i1 >> (63 - j0);
-       }
+      return (long long int) x;
     }
 
-  return se & 0x8000 ? -result : result;
+  return sign * result;
 }
-#endif
+
 weak_alias (__llround, llround)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__llround, __llroundl)
+weak_alias (__llround, llroundl)
+#endif
diff --git a/sysdeps/libm-ieee754/s_llroundf.c b/sysdeps/libm-ieee754/s_llroundf.c
new file mode 100644 (file)
index 0000000..87ed1a3
--- /dev/null
@@ -0,0 +1,63 @@
+/* Round float value to long long int.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <math.h>
+
+#include "math_private.h"
+
+
+long long int
+__llroundf (float x)
+{
+  int32_t j0;
+  u_int32_t i;
+  long long int result;
+  int sign;
+
+  GET_FLOAT_WORD (i, x);
+  j0 = ((i >> 23) & 0xff) - 0x7f;
+  sign = (i & 0x80000000) != 0 ? -1 : 1;
+  i &= 0x7fffff;
+  i |= 0x800000;
+
+  if (j0 < (int32_t) (8 * sizeof (long long int)))
+    {
+      if (j0 < 0)
+       return j0 < -1 ? 0 : sign;
+      else if (j0 >= 23)
+       result = (long int) i << (j0 - 23);
+      else
+       {
+         i += 0x400000 >> j0;
+
+         result = i >> (23 - j0);
+       }
+    }
+  else
+    {
+      /* The number is too large.  It is left implementation defined
+        what happens.  */
+      return (long long int) x;
+    }
+
+  return sign * result;
+}
+
+weak_alias (__llroundf, llroundf)
diff --git a/sysdeps/libm-ieee754/s_llroundl.c b/sysdeps/libm-ieee754/s_llroundl.c
new file mode 100644 (file)
index 0000000..959b1e3
--- /dev/null
@@ -0,0 +1,78 @@
+/* Round long double value to long long int.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <math.h>
+
+#include "math_private.h"
+
+
+long long int
+__llroundl (long double x)
+{
+  int32_t j0;
+  u_int32_t se, i1, i0;
+  long long int result;
+  int sign;
+
+  GET_LDOUBLE_WORDS (se, i0, i1, x);
+  j0 = (se & 0x7fff) - 0x3fff;
+  sign = (se & 0x8000) != 0 ? -1 : 1;
+
+  if (j0 < 31)
+    {
+      if (j0 < 0)
+       return j0 < -1 ? 0 : sign;
+      else
+       {
+         u_int32_t j = i0 + (0x40000000 >> j0);
+         if (j < i0)
+           {
+             j >>= 1;
+             j |= 0x80000000;
+             ++j0;
+           }
+
+         result = j >> (31 - j0);
+       }
+    }
+  else if (j0 < (int32_t) (8 * sizeof (long long int)))
+    {
+      if (j0 >= 63)
+       result = ((long long int) i0 << (j0 - 31)) | (i1 << (j0 - 63));
+      else
+       {
+         u_int32_t j = i1 + (0x80000000 >> (j0 - 31));
+         if (j < i1)
+           ++i0;
+
+         result = ((long long int) i0 << (j0 - 31)) | (j >> (63 - j0));
+       }
+    }
+  else
+    {
+      /* The number is too large.  It is left implementation defined
+        what happens.  */
+      return (long long int) x;
+    }
+
+  return sign * result;
+}
+
+weak_alias (__llroundl, llroundl)
index 6779f974bde32aaf186dedf78f73958b7311e9f4..0ccd06a061e5d007c63b21fc80a7b953c17574e7 100644 (file)
@@ -23,9 +23,7 @@
 
 #include "math_private.h"
 
-#ifdef NO_LONG_DOUBLE
-/* The `long double' is in fact the IEEE `double' type.  */
-static long double two52[2] =
+static const double two52[2] =
 {
   4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */
  -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */
@@ -33,210 +31,65 @@ static long double two52[2] =
 
 
 long int
-__lrint (long double x)
+__lrint (double x)
 {
-  int32_t j0,sx;
+  int32_t j0;
   u_int32_t i0,i1,i;
-  long double t, w;
+  volatile double w;
+  double t;
   long int result;
+  int sx;
 
   EXTRACT_WORDS (i0, i1, x);
-
-  sx = i0 >> 31;
   j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+  sx = i0 >> 31;
+  i0 &= 0xfffff;
+  i0 |= 0x100000;
 
   if (j0 < 20)
     {
-      if (j0 < 0)
-       {
-         if (((i0 & 0x7fffffff) | i1) == 0)
-           /* The number is 0.  */
-           result = 0;
-         else
-           {
-             i1 |= i0;
-             i0 &= 0xfffe0000;
-             i0 |= ((i1 | -i1) >> 12) & 0x80000;
-             SET_HIGH_WORD (x, i0);
-             w = two52[sx] + x;
-             t = w - two52[sx];
-             GET_HIGH_WORD (i0, t);
-             if ((i0 & 0x7fffffff) >= 0x3fff0000)
-               result = sx ? -1 : 1;
-             else
-               result = 0;
-           }
-       }
+      if (j0 < -1)
+       return 0;
       else
        {
-         u_int32_t i = 0x000fffff >> j0;
-         if (((i0 & i) | i1) == 0)
-           {
-             /* X is not integral.  */
-             i >>= 1;
-             if (((i0 & i) | i1) != 0)
-               {
-                 if (j0 == 19)
-                   i1 = 0x40000000;
-                 else
-                   i0 = (i0 & (~i)) | (0x20000 >> j0);
-
-                 INSERT_WORDS (x, i0, i1);
-                 w = two52[sx] + x;
-                 x = w - two52[sx];
-                 EXTRACT_WORDS (i0, i1, x);
-
-                 j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
-               }
-           }
-
-         result = ((i0 >> (20 - j0)) & 0xfffff) | (0x00100000 >> (20 - j0));
-         if (sx)
-           result = -result;
+         w = two52[sx] + x;
+         t = w - two52[sx];
+         EXTRACT_WORDS (i0, i1, t);
+         i0 = i & 0xfffff;
+         i0 |= 0x100000;
+         j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+
+         result = i0 >> (20 - j0);
        }
     }
-  else if ((unsigned int) j0 < sizeof (long int) * 8 && j0 < 53)
+  else if (j0 < (int32_t) (8 * sizeof (long int)))
     {
-      i = ((u_int32_t) (0xffffffff)) >> (j0 - 20);
-      if ((i1 & i) != 0)
-       {
-         /* x is not integral.  */
-         i >>= 1;
-         if ((i1 & i) != 0)
-           i1 = (i1 & (~i)) | (0x40000000 >> (j0 - 20));
-       }
-
-      INSERT_WORDS (x, i0, i1);
-      w = two52[sx] + x;
-      x = w - two52[sx];
-      EXTRACT_WORDS (i0, i1, x);
-
-      j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
-
-      result = i0 | 0x00100000;
-      if (j0 > 20)
-       {
-         result <<= j0 - 20;
-         result |= i1 >> (52 - j0);
-       }
-      if (sx)
-       result = -result;
-    }
-  else
-    /* Too large.  The number is either +-inf or NaN or it is too
-       large to be effected by rounding.  The standard leaves it
-       undefined what to return when the number is too large to fit in
-       a `long int'.  */
-    result = (long int) x;
-
-  return result;
-}
-
-#else
-static long double two63[2] =
-{
-  9.223372036854775808000000e+18, /* 0x403E, 0x00000000, 0x00000000 */
- -9.223372036854775808000000e+18  /* 0xC03E, 0x00000000, 0x00000000 */
-};
-
-
-long int
-__lrint (long double x)
-{
-  int32_t se,j0,sx;
-  u_int32_t i0,i1,i;
-  long int result;
-  long double w, t;
-
-  GET_LDOUBLE_WORDS (se, i0, i1, x);
-
-  sx = (se >> 15) & 1;
-  j0 = (se & 0x7fff) - 0x3fff;
-
-  if (j0 < 31)
-    {
-      if (j0 < 0)
-       {
-         if (((se & 0x7fff) | i0 | i1) == 0)
-           /* The number is 0.  */
-           result = 0;
-         else
-           {
-             i1 |= i0;
-             i0 &= 0xe0000000;
-             i0 |= (i1 | -i1) & 0x80000000;
-             SET_LDOUBLE_MSW (x, i0);
-             w = two63[sx] + x;
-             t = w - two63[sx];
-             GET_LDOUBLE_EXP (i0, t);
-             if ((i0 & 0x7fff) >= 0x3fff)
-               result = sx ? -1 : 1;
-             else
-               result = 0;
-           }
-       }
+      if (j0 >= 52)
+       result = ((long int) i0 << (j0 - 20)) | (i1 << (j0 - 52));
       else
        {
-         u_int32_t i = 0x7fffffff >> j0;
-         if (((i0 & i) | i1) == 0)
-           {
-             /* X is not integral.  */
-             i >>= 1;
-             if (((i0 & i) | i1) != 0)
-               {
-                 if (j0 == 31)
-                   i1 = 0x40000000;
-                 else
-                   i0 = (i0 & (~i)) | (0x20000000 >> j0);
-
-                 SET_LDOUBLE_WORDS (x, se, i0, i1);
-                 w = two63[sx] + x;
-                 x = w - two63[sx];
-                 GET_LDOUBLE_WORDS (se, i0, i1, x);
-
-                 sx = (se >> 15) & 1;
-                 j0 = (se & 0x7fff) - 0x3fff;
-               }
-           }
-
-
-         result = i0 >> (31 - j0);
+         w = two52[sx] + x;
+         t = w - two52[sx];
+         EXTRACT_WORDS (i0, i1, t);
+         i0 = i & 0xfffff;
+         i0 |= 0x100000;
+         j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
+
+         result = ((long int) i0 << (j0 - 20)) | (j >> (52 - j0));
        }
     }
-  else if ((unsigned int) j0 < sizeof (long int) * 8 && j0 < 64)
+  else
     {
-      i = ((u_int32_t) (0xffffffff)) >> (j0 - 31);
-      if ((i1 & i) != 0)
-       {
-         /* x is not integral.  */
-         i >>= 1;
-         if ((i1 & i) != 0)
-           i1 = (i1 & (~i)) | (0x40000000 >> (j0 - 31));
-       }
-
-      SET_LDOUBLE_WORDS (x, se, i0, i1);
-      w = two63[sx] + x;
-      x = w - two63[sx];
-      GET_LDOUBLE_WORDS (se, i0, i1, x);
-
-      j0 = (se & 0x7fff) - 0x3fff;
-
-      result = i0;
-      if (j0 > 31)
-       {
-         result <<= j0 - 31;
-         result |= i1 >> (63 - j0);
-       }
+      /* The number is too large.  It is left implementation defined
+        what happens.  */
+      return (long int) x;
     }
-  else
-    /* Too large.  The number is either +-inf or NaN or it is too
-       large to be effected by rounding.  The standard leaves it
-       undefined what to return when the number is too large to fit in
-       a `long int'.  */
-    result = (long int) x;
 
-  return result;
+  return sx ? -result : result;
 }
-#endif
 
 weak_alias (__lrint, lrint)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__lrint, __lrintl)
+weak_alias (__lrint, lrintl)
+#endif
diff --git a/sysdeps/libm-ieee754/s_lrintf.c b/sysdeps/libm-ieee754/s_lrintf.c
new file mode 100644 (file)
index 0000000..6d74b36
--- /dev/null
@@ -0,0 +1,78 @@
+/* Round argument to nearest integral value according to current rounding
+   direction.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <math.h>
+
+#include "math_private.h"
+
+static const double two23[2] =
+{
+  8.3886080000e+06, /* 0x4B000000 */
+ -8.3886080000e+06, /* 0xCB000000 */
+};
+
+
+long int
+__lrintf (float x)
+{
+  int32_t j0;
+  u_int32_t i, i0;
+  volatile float w;
+  float t;
+  long int result;
+  int sx;
+
+  GET_FLOAT_WORD (i, x);
+
+  sx = i0 >> 31;
+  j0 = ((i0 >> 23) & 0xff) - 0x7f;
+  i0 = i & 0x7fffff;
+  i0 |= 0x800000;
+
+  if (j0 < (int32_t) (sizeof (long int) * 8))
+    {
+      if (j0 < -1)
+       return 0;
+      else if (j0 >= 23)
+       result = (long int) i0 << (j0 - 23);
+      else
+       {
+         w = two23[sx] + x;
+         t = w - two23[sx];
+         GET_FLOAT_WORD (i, t);
+         i0 = i & 0x7fffff;
+         i0 |= 0x800000;
+         j0 = ((i0 >> 23) & 0xff) - 0x7f;
+
+         result = i0 >> (23 - j0);
+       }
+    }
+  else
+    {
+      /* The number is too large.  It is left implementation defined
+        what happens.  */
+      return (long int) x;
+    }
+
+  return sx ? -result : result;
+}
+
+weak_alias (__lrintf, lrintf)
diff --git a/sysdeps/libm-ieee754/s_lrintl.c b/sysdeps/libm-ieee754/s_lrintl.c
new file mode 100644 (file)
index 0000000..8607851
--- /dev/null
@@ -0,0 +1,86 @@
+/* Round argument to nearest integral value according to current rounding
+   direction.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <math.h>
+
+#include "math_private.h"
+
+static const long double two63[2] =
+{
+  9.223372036854775808000000e+18, /* 0x403E, 0x00000000, 0x00000000 */
+ -9.223372036854775808000000e+18  /* 0xC03E, 0x00000000, 0x00000000 */
+};
+
+
+long int
+__lrintl (long double x)
+{
+  int32_t se,j0;
+  u_int32_t i0,i1,i;
+  long int result;
+  volatile long double w;
+  long double t;
+  int sx;
+
+  GET_LDOUBLE_WORDS (se, i0, i1, x);
+
+  sx = (se >> 15) & 1;
+  j0 = (se & 0x7fff) - 0x3fff;
+
+  if (j0 < 31)
+    {
+      if (j0 < -1)
+       return 0;
+      else
+       {
+         w = two63[sx] + x;
+         t = w - two63[sx];
+         GET_LDOUBLE_WORDS (se, i0, i1, t);
+         j0 = (se & 0x7fff) - 0x3fff;
+
+         result = i0 >> (31 - j0);
+       }
+    }
+  else if (j0 < (int32_t) (8 * sizeof (long int)))
+    {
+      if (j0 >= 63)
+       result = ((long int) i0 << (j0 - 31)) | (i1 << (j0 - 63));
+      else
+       {
+         w = two63[sx] + x;
+         t = w - two63[sx];
+         GET_LDOUBLE_WORDS (se, i0, i1, t);
+         j0 = (se & 0x7fff) - 0x3fff;
+
+         result = ((long int) i0 << (j0 - 31)) | (j >> (63 - j0));
+       }
+    }
+  else
+    {
+      /* The number is too large.  It is left implementation defined
+        what happens.  */
+      return (long int) x;
+    }
+
+  return sx ? -result : result;
+}
+
+weak_alias (__lrintl, lrintl)
index 974dbde050b8271f6f7a49be98bff48a025d9b3b..a6468ba78a9ef42478c1fa943cae45f82421d9a0 100644 (file)
@@ -1,4 +1,4 @@
-/* Round long double value to long int.
+/* Round double value to long int.
    Copyright (C) 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 #include "math_private.h"
 
 
-#ifdef NO_LONG_DOUBLE
-/* The `long double' is in fact the IEEE `double' type.  */
-
-/* This code does not presently work.  */
-
 long int
-__lround (long double x)
+__lround (double x)
 {
   int32_t j0;
   u_int32_t i1, i0;
@@ -40,138 +35,44 @@ __lround (long double x)
   j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
   sign = (i0 & 0x80000000) != 0 ? -1 : 1;
   i0 &= 0xfffff;
+  i0 |= 0x100000;
+
   if (j0 < 20)
     {
       if (j0 < 0)
-       result = j0 < -1 ? 0 : sign;
+       return j0 < -1 ? 0 : sign;
       else
        {
-         u_int32_t i = 0xfffff >> j0;
-         i0 |= 0x100000;
-         if (((i0 & i) | i1) == 0)
-           result = i0 >> j0;
-         else
-           /* X is not integral.  */
-           result = (i0 + (0x80000 >> j0)) >> (20 - j0);
+         i0 += 0x80000 >> j0;
+
+         result = i0 >> (20 - j0);
        }
     }
-  else if (j0 >= 8 * sizeof (long int) || j0 > 51)
-    {
-      /* The number is too large.  It is left implementation defined
-        what happens.  */
-      return (long int) x;
-    }
-  else
+  else if (j0 < (int32_t) (8 * sizeof (long int)))
     {
-      u_int32_t i = ((u_int32_t) (0xffffffff)) >> (j0 - 20);
-      if ((i1 & i) != 0)
+      if (j0 >= 52)
+       result = ((long int) i0 << (j0 - 20)) | (i1 << (j0 - 52));
+      else
        {
-         /* x is not integral.  */
          u_int32_t j = i1 + (0x80000000 >> (j0 - 20));
          if (j < i1)
-           {
-             j = i0 + 1;
-             if ((j & 0xfffff) == 0)
-               {
-                 if (sizeof (long int) <= 4)
-                   /* Overflow.  */
-                   result = (long int) x;
-                 else
-                   result = 1l << (j0 + 1);
-               }
-             else
-               result = (long int) ((i0 & 0xfffff) | 0x100000) << (j0 - 31);
-           }
-         else
-           {
-             result = (long int) ((i0 & 0xfffff) | 0x100000) << (j0 - 31);
-             if (sizeof (long int) > 4 && j0 > 31)
-               result |= j >> (63 - j0);
-           }
-       }
-      else
-       {
-         result = (long int) ((i0 & 0xfffff) | 0x100000) << (j0 - 31);
-         if (sizeof (long int) > 4 && j0 > 31)
-           result |= i1 >> (63 - j0);
-       }
-    }
-
-  return sign * result;
-}
-#else
-long int
-__lround (long double x)
-{
-  int32_t j0;
-  u_int32_t se, i1, i0;
-  long int result;
+           ++i0;
 
-  GET_LDOUBLE_WORDS (se, i0, i1, x);
-  j0 = (se & 0x7fff) - 0x3fff;
-  if (j0 < 31)
-    {
-      if (j0 < 0)
-       result = j0 < -1 ? 0 : 1;
-      else
-       {
-         u_int32_t i = 0x7fffffff >> j0;
-         if (((i0 & i) | i1) == 0)
-           result = (long int) i0 >> j0;
-         else
-           {
-             /* X is not integral.  */
-             u_int32_t j = i0 + (0x40000000 >> j0);
-              if (j < i0)
-               result = 0x80000000l >> (30 - j0);
-             else
-               result = j >> (31 - j0);
-           }
+         result = ((long int) i0 << (j0 - 20)) | (j >> (52 - j0));
        }
     }
-  else if ((unsigned int) j0 >= 8 * sizeof (long int) || j0 > 62)
+  else
     {
       /* The number is too large.  It is left implementation defined
         what happens.  */
-      result = (long int) x;
-    }
-  else
-    {
-      u_int32_t i = ((u_int32_t) (0xffffffff)) >> (j0 - 31);
-      if ((i1 & i) != 0)
-       {
-         /* x is not integral.  */
-         u_int32_t j = i1 + (0x80000000 >> (j0 - 31));
-         if (j < i1)
-           {
-             j = i0 + 1;
-             if (j == 0)
-               {
-                 if (sizeof (long int) <= 4)
-                   /* Overflow.  */
-                   result = (long int) x;
-                 else
-                   result = 1l << (j0 + 1);
-               }
-             else
-               result = (long int) i0 << (j0 - 31);
-           }
-         else
-           {
-             result = (long int) i0 << (j0 - 31);
-             if (sizeof (long int) > 4 && j0 > 31)
-               result |= j >> (63 - j0);
-           }
-       }
-      else
-       {
-         result = (long int) i0 << (j0 - 31);
-         if (sizeof (long int) > 4 && j0 > 31)
-           result |= i1 >> (63 - j0);
-       }
+      return (long int) x;
     }
 
-  return se & 0x8000 ? -result : result;
+  return sign * result;
 }
-#endif
+
 weak_alias (__lround, lround)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__lround, __lroundl)
+weak_alias (__lround, lroundl)
+#endif
diff --git a/sysdeps/libm-ieee754/s_lroundf.c b/sysdeps/libm-ieee754/s_lroundf.c
new file mode 100644 (file)
index 0000000..0d3889c
--- /dev/null
@@ -0,0 +1,63 @@
+/* Round float value to long int.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <math.h>
+
+#include "math_private.h"
+
+
+long int
+__lroundf (float x)
+{
+  int32_t j0;
+  u_int32_t i;
+  long int result;
+  int sign;
+
+  GET_FLOAT_WORD (i, x);
+  j0 = ((i >> 23) & 0xff) - 0x7f;
+  sign = (i & 0x80000000) != 0 ? -1 : 1;
+  i &= 0x7fffff;
+  i |= 0x800000;
+
+  if (j0 < (int32_t) (8 * sizeof (long int)))
+    {
+      if (j0 < 0)
+       return j0 < -1 ? 0 : sign;
+      else if (j0 >= 23)
+       result = (long int) i << (j0 - 23);
+      else
+       {
+         i += 0x400000 >> j0;
+
+         result = i >> (23 - j0);
+       }
+    }
+  else
+    {
+      /* The number is too large.  It is left implementation defined
+        what happens.  */
+      return (long int) x;
+    }
+
+  return sign * result;
+}
+
+weak_alias (__lroundf, lroundf)
diff --git a/sysdeps/libm-ieee754/s_lroundl.c b/sysdeps/libm-ieee754/s_lroundl.c
new file mode 100644 (file)
index 0000000..d8b7db4
--- /dev/null
@@ -0,0 +1,78 @@
+/* Round long double value to long int.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <math.h>
+
+#include "math_private.h"
+
+
+long int
+__lroundl (long double x)
+{
+  int32_t j0;
+  u_int32_t se, i1, i0;
+  long int result;
+  int sign;
+
+  GET_LDOUBLE_WORDS (se, i0, i1, x);
+  j0 = (se & 0x7fff) - 0x3fff;
+  sign = (se & 0x8000) != 0 ? -1 : 1;
+
+  if (j0 < 31)
+    {
+      if (j0 < 0)
+       return j0 < -1 ? 0 : sign;
+      else
+       {
+         u_int32_t j = i0 + (0x40000000 >> j0);
+         if (j < i0)
+           {
+             j >>= 1;
+             j |= 0x80000000;
+             ++j0;
+           }
+
+         result = j >> (31 - j0);
+       }
+    }
+  else if (j0 < (int32_t) (8 * sizeof (long int)))
+    {
+      if (j0 >= 63)
+       result = ((long int) i0 << (j0 - 31)) | (i1 << (j0 - 63));
+      else
+       {
+         u_int32_t j = i1 + (0x80000000 >> (j0 - 31));
+         if (j < i1)
+           ++i0;
+
+         result = ((long int) i0 << (j0 - 31)) | (j >> (63 - j0));
+       }
+    }
+  else
+    {
+      /* The number is too large.  It is left implementation defined
+        what happens.  */
+      return (long int) x;
+    }
+
+  return sign * result;
+}
+
+weak_alias (__lroundl, lroundl)
index 1d3fc86c44b6ab4d407a2e68cf218ad91ac9d2fc..d7bdf026e7a3eeaf0533a352a4928f2665eaaaec 100644 (file)
@@ -97,3 +97,5 @@ static char rcsid[] = "$NetBSD: $";
        return x;
 }
 weak_alias (__nextafterl, nextafterl)
+strong_alias (__nextafterl, __nextafterxl)
+weak_alias (__nextafterl, nextafterxl)
diff --git a/sysdeps/libm-ieee754/s_nextafterx.c b/sysdeps/libm-ieee754/s_nextafterx.c
new file mode 100644 (file)
index 0000000..745ceaf
--- /dev/null
@@ -0,0 +1,98 @@
+/* s_nextafterx.c
+ * Conversion freom s_nextafter.c by Ulrich Drepper, Cygnus Support,
+ * drepper@cygnus.com.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+#if defined(LIBM_SCCS) && !defined(lint)
+static char rcsid[] = "$NetBSD: $";
+#endif
+
+/* IEEE functions
+ *     nextafterx(x,y)
+ *     return the next machine floating-point number of x in the
+ *     direction toward y.
+ *   Special cases:
+ */
+
+#include "math.h"
+#include "math_private.h"
+
+#ifdef __STDC__
+       double __nextafterx(double x, long double y)
+#else
+       double __nextafterx(x,y)
+       double x;
+       long double y;
+#endif
+{
+       int32_t hx,ix,iy;
+       u_int32_t lx,hy,ly,esy;
+
+       EXTRACT_WORDS(hx,lx,x);
+       GET_LDOUBLE_WORDS(esy,hy,ly,y);
+       ix = hx&0x7fffffff;             /* |x| */
+       iy = esy&0x7fff;                /* |y| */
+
+       if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) ||   /* x is nan */
+          ((iy>=0x7fff)&&((hy|ly)|-(hy|ly))!=0))           /* y is nan */
+          return x+y;
+       if((long double) x==y) return x;        /* x=y, return x */
+       if((ix|lx)==0) {                        /* x == 0 */
+           double x2;
+           INSERT_WORDS(x,esy&0x8000?0x80000000:0,1);/* return +-minsub */
+           x2 = x*x;
+           if(x2==x) return x2; else return x; /* raise underflow flag */
+       }
+       if(hx>=0) {                             /* x > 0 */
+           if (esy>=0x8000||((ix>>20)&0x7ff)>iy
+               || (((ix>>20)&0x7ff)==iy
+                   && (((hx<<11)|(lx>>21))>(hy&0x7fffffff)
+                       || (((hx<<11)|(lx>>21))==(hy&0x7fffffff)
+                           && (lx<<11)>ly)))) {        /* x > y, x -= ulp */
+               if(lx==0) hx -= 1;
+               lx -= 1;
+           } else {                            /* x < y, x += ulp */
+               lx += 1;
+               if(lx==0) hx += 1;
+           }
+       } else {                                /* x < 0 */
+           if (esy<0x8000||((ix>>20)&0x7ff)>iy
+               || (((ix>>20)&0x7ff)==iy
+                   && (((hx<<11)|(lx>>21))>(hy&0x7fffffff)
+                       || (((hx<<11)|(lx>>21))==(hy&0x7fffffff)
+                           && (lx<<11)>ly))))  {/* x < y, x -= ulp */
+               if(lx==0) hx -= 1;
+               lx -= 1;
+           } else {                            /* x > y, x += ulp */
+               lx += 1;
+               if(lx==0) hx += 1;
+           }
+       }
+       hy = hx&0x7ff00000;
+       if(hy>=0x7ff00000) return x+x;  /* overflow  */
+       if(hy<0x00100000) {             /* underflow */
+           double x2 = x*x;
+           if(x2!=x) {         /* raise underflow flag */
+               INSERT_WORDS(x2,hx,lx);
+               return x2;
+           }
+       }
+       INSERT_WORDS(x,hx,lx);
+       return x;
+}
+weak_alias (__nextafterx, nextafterx)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__nextafterx, __nextafterxl)
+weak_alias (__nextafterx, nextafterxl)
+#endif
diff --git a/sysdeps/libm-ieee754/s_nextafterxf.c b/sysdeps/libm-ieee754/s_nextafterxf.c
new file mode 100644 (file)
index 0000000..7e87080
--- /dev/null
@@ -0,0 +1,78 @@
+/* s_nextafterxf.c -- float version of s_nextafter.c.
+ * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+#if defined(LIBM_SCCS) && !defined(lint)
+static char rcsid[] = "$NetBSD: $";
+#endif
+
+#include "math.h"
+#include "math_private.h"
+
+#ifdef __STDC__
+       float __nextafterxf(float x, long double y)
+#else
+       float __nextafterxf(x,y)
+       float x;
+       log double y;
+#endif
+{
+       int32_t hx,ix,iy;
+       u_int32_t hy,ly,esy;
+
+       GET_FLOAT_WORD(hx,x);
+       GET_LDOUBLE_WORDS(esy,hy,ly,y);
+       ix = hx&0x7fffffff;             /* |x| */
+       iy = esy&0x7fff;                /* |y| */
+
+       if((ix>0x7f800000) ||   /* x is nan */
+          (iy>=0x7fff&&((hy|ly)|-(hy|ly))!=0))     /* y is nan */
+          return x+y;
+       if((long double) x==y) return y;        /* x=y, return y */
+       if(ix==0) {                             /* x == 0 */
+           float x2;
+           SET_FLOAT_WORD(x,(esy&0x8000?0x80000000:0)|1);/* return +-minsub*/
+           x2 = x*x;
+           if(x2==x) return x2; else return x; /* raise underflow flag */
+       }
+       if(hx>=0) {                             /* x > 0 */
+           if(esy>=0x8000||((ix>>23)&0xff)>iy
+              || (((ix>>23)&0xff)==iy
+                  && ((ix&0x7fffff)<<8)>(hy&0x7fffffff))) {/* x > y, x -= ulp */
+               hx -= 1;
+           } else {                            /* x < y, x += ulp */
+               hx += 1;
+           }
+       } else {                                /* x < 0 */
+           if(esy<0x8000||((ix>>23)&0xff)>iy
+              || (((ix>>23)&0xff)==iy
+                  && ((ix&0x7fffff)<<8)>(hy&0x7fffffff))) {/* x < y, x -= ulp */
+               hx -= 1;
+           } else {                            /* x > y, x += ulp */
+               hx += 1;
+           }
+       }
+       hy = hx&0x7f800000;
+       if(hy>=0x7f800000) return x+x;  /* overflow  */
+       if(hy<0x00800000) {             /* underflow */
+           float x2 = x*x;
+           if(x2!=x) {         /* raise underflow flag */
+               SET_FLOAT_WORD(x2,hx);
+               return x2;
+           }
+       }
+       SET_FLOAT_WORD(x,hx);
+       return x;
+}
+weak_alias (__nextafterxf, nextafterxf)
diff --git a/sysdeps/libm-ieee754/s_nextafterxl.c b/sysdeps/libm-ieee754/s_nextafterxl.c
new file mode 100644 (file)
index 0000000..73c3610
--- /dev/null
@@ -0,0 +1 @@
+/* This function is the same as nextafterl so we use an alias there.  */
diff --git a/sysdeps/libm-ieee754/s_scalbln.c b/sysdeps/libm-ieee754/s_scalbln.c
new file mode 100644 (file)
index 0000000..aa6134f
--- /dev/null
@@ -0,0 +1,70 @@
+/* @(#)s_scalbn.c 5.1 93/09/24 */
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+#if defined(LIBM_SCCS) && !defined(lint)
+static char rcsid[] = "$NetBSD: s_scalbn.c,v 1.8 1995/05/10 20:48:08 jtc Exp $";
+#endif
+
+/*
+ * scalbn (double x, int n)
+ * scalbn(x,n) returns x* 2**n  computed by  exponent
+ * manipulation rather than by actually performing an
+ * exponentiation or a multiplication.
+ */
+
+#include "math.h"
+#include "math_private.h"
+
+#ifdef __STDC__
+static const double
+#else
+static double
+#endif
+two54   =  1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
+twom54  =  5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
+huge   = 1.0e+300,
+tiny   = 1.0e-300;
+
+#ifdef __STDC__
+       double __scalbln (double x, long int n)
+#else
+       double __scalbln (x,n)
+       double x; long int n;
+#endif
+{
+       int32_t k,hx,lx;
+       EXTRACT_WORDS(hx,lx,x);
+        k = (hx&0x7ff00000)>>20;               /* extract exponent */
+        if (k==0) {                            /* 0 or subnormal x */
+            if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
+           x *= two54;
+           GET_HIGH_WORD(hx,x);
+           k = ((hx&0x7ff00000)>>20) - 54;
+           }
+        if (k==0x7ff) return x+x;              /* NaN or Inf */
+        k = k+n;
+        if (n> 50000 || k >  0x7fe)
+         return huge*__copysign(huge,x); /* overflow  */
+       if (n< -50000) return tiny*__copysign(tiny,x); /*underflow*/
+        if (k > 0)                             /* normal result */
+           {SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20)); return x;}
+        if (k <= -54)
+         return tiny*__copysign(tiny,x);       /*underflow*/
+        k += 54;                               /* subnormal result */
+       SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20));
+        return x*twom54;
+}
+weak_alias (__scalbln, scalbln)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__scalbln, __scalblnl)
+weak_alias (__scalbln, scalblnl)
+#endif
diff --git a/sysdeps/libm-ieee754/s_scalblnf.c b/sysdeps/libm-ieee754/s_scalblnf.c
new file mode 100644 (file)
index 0000000..4ed4873
--- /dev/null
@@ -0,0 +1,63 @@
+/* s_scalbnf.c -- float version of s_scalbn.c.
+ * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+#if defined(LIBM_SCCS) && !defined(lint)
+static char rcsid[] = "$NetBSD: s_scalbnf.c,v 1.4 1995/05/10 20:48:10 jtc Exp $";
+#endif
+
+#include "math.h"
+#include "math_private.h"
+
+#ifdef __STDC__
+static const float
+#else
+static float
+#endif
+two25   =  3.355443200e+07,    /* 0x4c000000 */
+twom25  =  2.9802322388e-08,   /* 0x33000000 */
+huge   = 1.0e+30,
+tiny   = 1.0e-30;
+
+#ifdef __STDC__
+       float __scalblnf (float x, long int n)
+#else
+       float __scalblnf (x,n)
+       float x; long int n;
+#endif
+{
+       int32_t k,ix;
+       GET_FLOAT_WORD(ix,x);
+        k = (ix&0x7f800000)>>23;               /* extract exponent */
+        if (k==0) {                            /* 0 or subnormal x */
+            if ((ix&0x7fffffff)==0) return x; /* +-0 */
+           x *= two25;
+           GET_FLOAT_WORD(ix,x);
+           k = ((ix&0x7f800000)>>23) - 25;
+           }
+        if (k==0xff) return x+x;               /* NaN or Inf */
+        k = k+n;
+        if (n> 50000 || k >  0xfe)
+         return huge*copysignf(huge,x); /* overflow  */
+       if (n< -50000)
+         return tiny*copysignf(tiny,x);        /*underflow*/
+        if (k > 0)                             /* normal result */
+           {SET_FLOAT_WORD(x,(ix&0x807fffff)|(k<<23)); return x;}
+        if (k <= -25)
+           return tiny*copysignf(tiny,x);      /*underflow*/
+        k += 25;                               /* subnormal result */
+       SET_FLOAT_WORD(x,(ix&0x807fffff)|(k<<23));
+        return x*twom25;
+}
+weak_alias (__scalblnf, scalblnf)
diff --git a/sysdeps/libm-ieee754/s_scalblnl.c b/sysdeps/libm-ieee754/s_scalblnl.c
new file mode 100644 (file)
index 0000000..aafb73e
--- /dev/null
@@ -0,0 +1,71 @@
+/* s_scalbnl.c -- long double version of s_scalbn.c.
+ * Conversion to long double by Ulrich Drepper,
+ * Cygnus Support, drepper@cygnus.com.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+#if defined(LIBM_SCCS) && !defined(lint)
+static char rcsid[] = "$NetBSD: $";
+#endif
+
+/*
+ * scalbnl (long double x, int n)
+ * scalbnl(x,n) returns x* 2**n  computed by  exponent
+ * manipulation rather than by actually performing an
+ * exponentiation or a multiplication.
+ */
+
+#include "math.h"
+#include "math_private.h"
+
+#ifdef __STDC__
+static const long double
+#else
+static long double
+#endif
+two63   =  4.50359962737049600000e+15,
+twom63  =  1.08420217248550443400e-19;
+huge   = 1.0e+4900L,
+tiny   = 1.0e-4900L;
+
+#ifdef __STDC__
+       long double __scalblnl (long double x, long int n)
+#else
+       long double __scalblnl (x,n)
+       long double x; long int n;
+#endif
+{
+       int32_t k,es,hx,lx;
+       GET_LDOUBLE_WORDS(es,hx,lx,x);
+        k = es&0x7fff;                         /* extract exponent */
+        if (k==0) {                            /* 0 or subnormal x */
+            if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
+           x *= two63;
+           GET_LDOUBLE_EXP(es,x);
+           k = (hx&0x7fff) - 63;
+           }
+        if (k==0x7fff) return x+x;             /* NaN or Inf */
+        k = k+n;
+        if (n> 50000 || k > 0x7ffe)
+         return huge*__copysignl(huge,x); /* overflow  */
+       if (n< -50000)
+         return tiny*__copysignl(tiny,x);
+        if (k > 0)                             /* normal result */
+           {SET_LDOUBLE_EXP(x,(es&0x8000)|k); return x;}
+        if (k <= -63)
+           return tiny*__copysignl(tiny,x);    /*underflow*/
+        k += 54;                               /* subnormal result */
+       SET_LDOUBLE_EXP(x,(es&0x8000)|k);
+        return x*twom63;
+}
+weak_alias (__scalblnl, scalblnl)
index 0ce0ffdf2f848d433e17b1b02cf12a136bfd464e..3dbfe8fef063765d909259b7ce10717355e12318 100644 (file)
@@ -35,10 +35,10 @@ huge   = 1.0e+300,
 tiny   = 1.0e-300;
 
 #ifdef __STDC__
-       double __scalbn (double x, long int n)
+       double __scalbn (double x, int n)
 #else
        double __scalbn (x,n)
-       double x; long int n;
+       double x; int n;
 #endif
 {
        int32_t k,hx,lx;
index 4799c825c97b2ac403b725c86d05377c2000bd09..11b77bd6c238111b5c47755674c5471d2eb4f1ab 100644 (file)
@@ -31,10 +31,10 @@ huge   = 1.0e+30,
 tiny   = 1.0e-30;
 
 #ifdef __STDC__
-       float __scalbnf (float x, long int n)
+       float __scalbnf (float x, int n)
 #else
        float __scalbnf (x,n)
-       float x; long int n;
+       float x; int n;
 #endif
 {
        int32_t k,ix;
index 3e80d85136b78e207d5f3ca0b3c89686db1e8b31..4e1d08ef90f7cfd4bb8cccdfe6e49202d240b2df 100644 (file)
@@ -39,10 +39,10 @@ huge   = 1.0e+4900L,
 tiny   = 1.0e-4900L;
 
 #ifdef __STDC__
-       long double __scalbnl (long double x, long int n)
+       long double __scalbnl (long double x, int n)
 #else
        long double __scalbnl (x,n)
-       long double x; long int n;
+       long double x; int n;
 #endif
 {
        int32_t k,es,hx,lx;
index cc0fb56189f50110dfb1b16c935650c7cf1eb35b..1d2045dd87495640edbfec8fa5949b5577778a31 100644 (file)
@@ -223,7 +223,16 @@ static inline void
 elf_machine_fixup_plt (struct link_map *map, const Elf32_Rela *reloc,
                       Elf32_Addr *reloc_addr, Elf32_Addr value)
 {
-  *reloc_addr = value + reloc->r_addend;
+  *reloc_addr = value;
+}
+
+/* Return the final value of a plt relocation.  On the m68k the JMP_SLOT
+   relocation ignores the addend.  */
+static inline Elf32_Addr
+elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc,
+                      Elf32_Addr value)
+{
+  return value;
 }
 
 #endif /* !dl_machine_h */
@@ -272,7 +281,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
          break;
        case R_68K_GLOB_DAT:
        case R_68K_JMP_SLOT:
-         *reloc_addr = value + reloc->r_addend;
+         *reloc_addr = value;
          break;
        case R_68K_8:
          *(char *) reloc_addr = value + reloc->r_addend;
diff --git a/sysdeps/m68k/m68020/bits/string.h b/sysdeps/m68k/m68020/bits/string.h
new file mode 100644 (file)
index 0000000..6462ef0
--- /dev/null
@@ -0,0 +1,26 @@
+/* Optimized, inlined string functions.  m680x0 version, x >= 2.
+   Copyright (C) 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.  */
+
+#ifndef _STRING_H
+# error "Never use <bits/string.h> directly; include <string.h> instead."
+#endif
+
+/* Currently the only purpose of this file is to tell the generic inline
+   macros that unaligned memory access is possible.  */
+#define _STRING_ARCH_unaligned 1
index c3d187ae0e07ac495a1567b39df180c91f4e9eaf..102c2a574f657756addd0c82e1b134b1092aa626 100644 (file)
@@ -18,7 +18,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #ifndef _FCNTL_H
-#error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
 #endif
 
 /* File access modes.  These are understood by io servers; they can be
 
 /* In GNU, read and write are bits (unlike BSD).  */
 #ifdef __USE_GNU
-#define        O_READ          O_RDONLY /* Open for reading.  */
-#define O_WRITE                O_WRONLY /* Open for writing.  */
-#define        O_EXEC          0x0004  /* Open for execution.  */
-#define O_NORW         0       /* Open without R/W access.  */
+# define O_READ                O_RDONLY /* Open for reading.  */
+# define O_WRITE       O_WRONLY /* Open for writing.  */
+# define O_EXEC                0x0004  /* Open for execution.  */
+# define O_NORW                0       /* Open without R/W access.  */
 #endif
 /* POSIX.1 standard names.  */
 #define        O_RDONLY        0x0001  /* Open read-only.  */
@@ -49,8 +49,8 @@
 #define        O_CREAT         0x0010  /* Create file if it doesn't exist.  */
 #define        O_EXCL          0x0020  /* Fail if file already exists.  */
 #ifdef __USE_GNU
-#define        O_NOLINK        0x0040  /* No name mappings on final component.  */
-#define        O_NOTRANS       0x0080  /* No translator on final component. */
+# define O_NOLINK      0x0040  /* No name mappings on final component.  */
+# define O_NOTRANS     0x0080  /* No translator on final component. */
 #endif
 
 
 
 #define        O_APPEND        0x0100  /* Writes always append to the file.  */
 #ifdef __USE_BSD
-#define        O_ASYNC         0x0200  /* Send SIGIO to owner when data is ready.  */
-#define        O_FSYNC         0x0400  /* Synchronous writes.  */
-#define        O_SYNC          O_FSYNC
+# define O_ASYNC       0x0200  /* Send SIGIO to owner when data is ready.  */
+# define O_FSYNC       0x0400  /* Synchronous writes.  */
+# define O_SYNC                O_FSYNC
 #endif
 #ifdef __USE_GNU
-#define        O_NOATIME       0x0800  /* Don't set access time on read (owner).  */
+# define O_NOATIME     0x0800  /* Don't set access time on read (owner).  */
 #endif
 #ifdef __USE_MISC
-#define        O_SHLOCK        0x00020000 /* Open with shared file lock.  */
-#define        O_EXLOCK        0x00040000 /* Open with exclusive file lock.  */
+# define O_SHLOCK      0x00020000 /* Open with shared file lock.  */
+# define O_EXLOCK      0x00040000 /* Open with exclusive file lock.  */
 #endif
 
 
 
 #define        O_NONBLOCK      0x0008  /* Non-blocking open or non-blocking I/O.  */
 #ifdef __USE_BSD
-#define        O_NDELAY        O_NONBLOCK /* Deprecated.  */
+# define O_NDELAY      O_NONBLOCK /* Deprecated.  */
 #endif
 
 
 #ifdef __USE_GNU
 /* Mask of bits which are understood by io servers.  */
-#define O_HURD         (0xffff | O_EXLOCK | O_SHLOCK)
+# define O_HURD                (0xffff | O_EXLOCK | O_SHLOCK)
 #endif
 
 
    and are not preserved once the file has been opened.  */
 
 #ifdef __USE_GNU
-#define        O_IGNORE_CTTY   0x00080000 /* Don't do any ctty magic at all.  */
+# define O_IGNORE_CTTY 0x00080000 /* Don't do any ctty magic at all.  */
 #endif
 /* `open' never assigns a controlling terminal in GNU.  */
 #define        O_NOCTTY        0       /* Don't assign a controlling terminal.  */
 
 #ifdef __USE_BSD
 /* Bits in the file status flags returned by F_GETFL.  */
-#define FREAD          O_RDONLY
-#define        FWRITE          O_WRONLY
+# define FREAD         O_RDONLY
+# define FWRITE                O_WRONLY
 
 /* Traditional BSD names the O_* bits.  */
-#define FASYNC         O_ASYNC
-#define FCREAT         O_CREAT
-#define FEXCL          O_EXCL
-#define FTRUNC         O_TRUNC
-#define FNOCTTY                O_NOCTTY
-#define FFSYNC         O_FSYNC
-#define FSYNC          O_SYNC
-#define FAPPEND                O_APPEND
-#define FNONBLOCK      O_NONBLOCK
-#define FNDELAY                O_NDELAY
+# define FASYNC                O_ASYNC
+# define FCREAT                O_CREAT
+# define FEXCL         O_EXCL
+# define FTRUNC                O_TRUNC
+# define FNOCTTY       O_NOCTTY
+# define FFSYNC                O_FSYNC
+# define FSYNC         O_SYNC
+# define FAPPEND       O_APPEND
+# define FNONBLOCK     O_NONBLOCK
+# define FNDELAY       O_NDELAY
 #endif
 
 
 #define        F_GETFL         3       /* Get file status flags.  */
 #define        F_SETFL         4       /* Set file status flags.  */
 #ifdef __USE_BSD
-#define        F_GETOWN        5       /* Get owner (receiver of SIGIO).  */
-#define        F_SETOWN        6       /* Set owner (receiver of SIGIO).  */
+# define F_GETOWN      5       /* Get owner (receiver of SIGIO).  */
+# define F_SETOWN      6       /* Set owner (receiver of SIGIO).  */
 #endif
 #define        F_GETLK         7       /* Get record locking info.  */
 #define        F_SETLK         8       /* Set record locking info (non-blocking).  */
@@ -164,10 +164,26 @@ struct flock
   {
     int l_type;                /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
     int l_whence;      /* Where `l_start' is relative to (like `lseek').  */
+#ifndef __USE_FILE_OFFSET64
     __off_t l_start;   /* Offset where the lock begins.  */
     __off_t l_len;     /* Size of the locked area; zero means until EOF.  */
+#else
+    __off64_t l_start; /* Offset where the lock begins.  */
+    __off64_t l_len;   /* Size of the locked area; zero means until EOF.  */
+#endif
+    __pid_t l_pid;     /* Process holding the lock.  */
+  };
+
+#ifdef __USE_LARGEFILE64
+struct flock64
+  {
+    int l_type;                /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    int l_whence;      /* Where `l_start' is relative to (like `lseek').  */
+    __off64_t l_start; /* Offset where the lock begins.  */
+    __off64_t l_len;   /* Size of the locked area; zero means until EOF.  */
     __pid_t l_pid;     /* Process holding the lock.  */
   };
+#endif
 
 /* Values for the `l_type' field of a `struct flock'.  */
 #define        F_RDLCK 1       /* Read lock.  */
index 2110a73aaea6c088aedb11f55a689831c73cb181..4679c589eeacba71f31de8b9a28d022ef4e00801 100644 (file)
@@ -39,7 +39,11 @@ struct stat
     __fsid_t st_fsid;          /* File system ID.  */
 #define        st_dev  st_fsid
 
+#ifndef __USE_FILE_OFFSET64
     __ino_t st_ino;            /* File number.  */
+#else
+    __ino64_t st_ino;          /* File number.  */
+#endif
     unsigned int st_gen;       /* To detect reuse of file numbers.  */
     __dev_t st_rdev;           /* Device if special file.  */
     __mode_t st_mode;          /* File mode.  */
@@ -48,7 +52,11 @@ struct stat
     __uid_t st_uid;            /* Owner.  */
     __gid_t st_gid;            /* Owning group.  */
 
+#ifndef __USE_FILE_OFFSET64
     __off_t st_size;           /* Size in bytes.  */
+#else
+    __off64_t st_size;         /* Size in bytes.  */
+#endif
 
     __time_t st_atime;         /* Access time, seconds */
     unsigned long int st_atime_usec; /* and microseconds.  */
@@ -59,9 +67,56 @@ struct stat
 
     unsigned int st_blksize;   /* Optimal size for I/O.  */
 
-#define        _STATBUF_ST_BLKSIZE     /* Tell code we have this member.  */
+#ifndef __USE_FILE_OFFSET64
+    __blkcnt_t st_blocks;      /* Number of 512-byte blocks allocated.
+                                  Not related to `st_blksize'.  */
+#else
+    __blkcnt64_t st_blocks;    /* Number of 512-byte blocks allocated.
+                                  Not related to `st_blksize'.  */
+#endif
+
+    __uid_t st_author;         /* File author.  */
+
+    unsigned int st_flags;     /* User-defined flags.
+                                  High 16 bits can be set only by root.  */
 
-    unsigned int st_blocks;    /* Number of 512-byte blocks allocated.
+#ifndef __USE_FILE_OFFSET64
+# define _SPARE_SIZE   ((sizeof (__fsid_t) == sizeof (int)) ? 12 : 11)
+#else
+# define _SPARE_SIZE   ((sizeof (__fsid_t) == sizeof (int)) ? 9 : 8)
+#endif
+    int st_spare[_SPARE_SIZE]; /* Room for future expansion.  */
+#undef _SPARE_SIZE
+  };
+
+#ifdef __USE_LARGEFILE64
+struct stat64
+  {
+    int st_fstype;             /* File system type.  */
+    __fsid_t st_fsid;          /* File system ID.  */
+# define st_dev        st_fsid
+
+    __ino64_t st_ino;          /* File number.  */
+    unsigned int st_gen;       /* To detect reuse of file numbers.  */
+    __dev_t st_rdev;           /* Device if special file.  */
+    __mode_t st_mode;          /* File mode.  */
+    __nlink_t st_nlink;                /* Number of links.  */
+
+    __uid_t st_uid;            /* Owner.  */
+    __gid_t st_gid;            /* Owning group.  */
+
+    __off64_t st_size;         /* Size in bytes.  */
+
+    __time_t st_atime;         /* Access time, seconds */
+    unsigned long int st_atime_usec; /* and microseconds.  */
+    __time_t st_mtime;         /* Modification time, seconds */
+    unsigned long int st_mtime_usec; /* and microseconds.  */
+    __time_t st_ctime;         /* Status change time, seconds */
+    unsigned long int st_ctime_usec; /* and microseconds.  */
+
+    unsigned int st_blksize;   /* Optimal size for I/O.  */
+
+    __blkcnt64_t st_blocks;    /* Number of 512-byte blocks allocated.
                                   Not related to `st_blksize'.  */
 
     __uid_t st_author;         /* File author.  */
@@ -69,10 +124,13 @@ struct stat
     unsigned int st_flags;     /* User-defined flags.
                                   High 16 bits can be set only by root.  */
 
-#define _SPARE_SIZE    ((sizeof (__fsid_t) == sizeof (int)) ? 12 : 11)
+#define _SPARE_SIZE    ((sizeof (__fsid_t) == sizeof (int)) ? 9 : 8)
     int st_spare[_SPARE_SIZE]; /* Room for future expansion.  */
 #undef _SPARE_SIZE
   };
+#endif
+
+#define        _STATBUF_ST_BLKSIZE     /* Tell code we have this member.  */
 
 /* Encoding of the file mode.  */
 
index 55d47f74de32246d47e3de8246b225926cb7b609..bd9ca412ba78108b35a7f1b1b232d59625eb69a9 100644 (file)
@@ -71,7 +71,7 @@
 #include <endian.h>
 #include <limits.h>
 #ifdef notyet
-#include <ufs/param.h>
+# include <ufs/param.h>
 #endif
 
 
 
 /* Macros for counting and rounding.  */
 #ifndef howmany
-#define        howmany(x, y)   (((x)+((y)-1))/(y))
+# define howmany(x, y) (((x)+((y)-1))/(y))
 #endif
 #define        roundup(x, y)   ((((x)+((y)-1))/(y))*(y))
 #define powerof2(x)    ((((x)-1)&(x))==0)
diff --git a/sysdeps/posix/open64.c b/sysdeps/posix/open64.c
new file mode 100644 (file)
index 0000000..e409891
--- /dev/null
@@ -0,0 +1,43 @@
+/* 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 distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <fcntl.h>
+#include <stdarg.h>
+
+/* Open FILE with access OFLAG.  If OFLAG includes O_CREAT,
+   a third argument is the file protection.  */
+int
+__open64 (file, oflag)
+     const char *file;
+     int oflag;
+{
+  int mode;
+
+  if (oflag & O_CREAT)
+    {
+      va_list arg;
+      va_start (arg, oflag);
+      mode = va_arg (arg, int);
+      va_end (arg);
+    }
+  else
+    mode = 0;
+
+  return __open (file, oflag | O_LARGEFILE, mode);
+}
+weak_alias (__open64, open64)
index 3b82d3d3668c1c85d31a90b0e42619f010239aa7..291817c9ef37507ddc19a7dc8218b9ba7f58398d 100644 (file)
@@ -83,7 +83,7 @@ static const char letters[] =
 char *
 __stdio_gen_tempname (char *buf, size_t bufsize, const char *dir,
                      const char *pfx, int dir_search, size_t *lenptr,
-                     FILE **streamptr)
+                     FILE **streamptr, int large_file)
 {
   int saverrno = errno;
   static const char tmpdir[] = P_tmpdir;
@@ -186,7 +186,13 @@ __stdio_gen_tempname (char *buf, size_t bufsize, const char *dir,
       if (streamptr != NULL)
        {
          /* Try to create the file atomically.  */
+#ifdef _G_OPEN64
+         int fd = (large_file
+                   ? __open (buf, O_RDWR|O_CREAT|O_EXCL, 0666)
+                   : _G_OPEN64 (buf, O_RDWR|O_CREAT|O_EXCL, 0666));
+#else
          int fd = __open (buf, O_RDWR|O_CREAT|O_EXCL, 0666);
+#endif
          if (fd >= 0)
            {
              /* We got a new file that did not previously exist.
index beabc1d4ff1519ec433c6f21812d4f42a985ed3a..6ab79e79ac9bb0b47bcff6f5780cf0c4494b94f2 100644 (file)
@@ -613,6 +613,14 @@ elf_machine_fixup_plt(struct link_map *map, const Elf32_Rela *reloc,
   MODIFIED_CODE (reloc_addr);
 }
 
+/* Return the final value of a plt relocation.  */
+static inline Elf32_Addr
+elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc,
+                      Elf32_Addr value)
+{
+  return value + reloc->r_addend;
+}
+
 #endif /* dl_machine_h */
 
 #ifdef RESOLVE
index 288a140245b2897148966e7d71fb7c3cba3754c3..224c6bafff8f9c7495e246370ee13e31b12eb81a 100644 (file)
@@ -240,6 +240,8 @@ static inline void
 elf_machine_fixup_plt (struct link_map *map, const Elf32_Rela *reloc,
                       Elf32_Addr *reloc_addr, Elf32_Addr value)
 {
+  extern unsigned long _dl_hwcap;
+
   /* For thread safety, write the instructions from the bottom and
      flush before we overwrite the critical "b,a".  This of course
      need not be done during bootstrapping, since there are no threads.
@@ -258,6 +260,14 @@ elf_machine_fixup_plt (struct link_map *map, const Elf32_Rela *reloc,
 #endif
 }
 
+/* Return the final value of a plt relocation.  */
+static inline Elf32_Addr
+elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc,
+                      Elf32_Addr value)
+{
+  return value + reloc->r_addend;
+}
+
 #ifdef RESOLVE
 
 /* Perform the relocation specified by RELOC and SYM (which is fully resolved).
@@ -268,8 +278,6 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
                  const Elf32_Sym *sym, const struct r_found_version *version,
                  Elf32_Addr *const reloc_addr)
 {
-  extern unsigned long _dl_hwcap;
-
   if (ELF32_R_TYPE (reloc->r_info) == R_SPARC_RELATIVE)
     {
 #ifndef RTLD_BOOTSTRAP
index 58d94119ef0b5ff54ba29fa50533c5c87709b4bd..44dcadb66e38d535d55f14b673c8928d460cc073 100644 (file)
 #define _ASM 1
 #include <bits/setjmp.h>
 
-ENTRY(_setjmp)
+ENTRY(__setjmp)
        b       1f
         set    0, %o1
-END(_setjmp)
+END(__setjmp)
 
 ENTRY(setjmp)
        set     1, %o1
@@ -46,5 +46,5 @@ ENTRY (__sigsetjmp)
         mov    %g1, %o7
 END(__sigsetjmp)
 
-weak_extern(_setjmp)
+weak_alias(__setjmp, _setjmp)
 weak_extern(setjmp)
index 226623152d1c5ada1b880a021fc44a55952e2fa4..354fea6ce519fee4327c7c30eb481015e1f61755 100644 (file)
@@ -85,6 +85,14 @@ elf_machine_fixup_plt(struct link_map *map, const Elf64_Rela *reloc,
     }
 }
 
+/* Return the final value of a plt relocation.  */
+static inline Elf64_Addr
+elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc,
+                      Elf64_Addr value)
+{
+  return value + reloc->r_addend;
+}
+
 #ifdef RESOLVE
 
 /* Perform the relocation specified by RELOC and SYM (which is fully resolved).
index 93f8a8235dc40f72c1214a8c6a0ab466919f8fe4..403d50c704b0786dcbaa2e703b6563155a134130 100644 (file)
@@ -1,7 +1,7 @@
 /* SPARC v9 __mpn_sub_n -- Subtract two limb vectors of the same length > 0
    and store difference in a third limb vector.
 
-   Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
 
    This file is part of the GNU MP Library.
 
@@ -43,7 +43,7 @@ ENTRY(__mpn_sub_n)
        ldx [%o1+%o5],%g2               ! load s1 limb
        addcc %g1,%o4,%g1               ! add s2 limb and carry variable
        movcc %xcc,0,%o4                ! if carry-out, o4 was 1; clear it
-       subcc %g1,%g2,%g1               ! subtract s1 limb from sum
+       subcc %g2,%g1,%g1               ! subtract s1 limb from sum
        stx %g1,[%o0+%o5]               ! store result
        add %o5,8,%o5                   ! increment address index
        brnz,pt %g3,1b
index 71502c5e9f0b7fbae5f9251cdcc10d1cf468696a..e7c40d800664db311cfe5868ed71b8841812f84c 100644 (file)
@@ -1,4 +1,4 @@
-/* fstatfs -- Return information about the filesystem on which FD resides.
+/* Return information about the filesystem on which FD resides.
    Copyright (C) 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -28,6 +28,6 @@ __fstatfs (int fd, struct statfs *buf)
   __set_errno (ENOSYS);
   return -1;
 }
-stub_warning (statfs)
+stub_warning (fstatfs)
 
 weak_alias (__fstatfs, fstatfs)
similarity index 69%
rename from sysdeps/stub/setenv.c
rename to sysdeps/stub/fstatfs64.c
index 15ba9bd524ea0aee48941fcfa91f3efbb31d9500..b2dba0f38b6a048e4dd483b51bc0011e42773c91 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 1992, 1995, 1996 Free Software Foundation, Inc.
+/* Return information about the filesystem on which FD resides.
+   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
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
-#include <stdlib.h>
 #include <errno.h>
+#include <sys/statfs.h>
+#include <stddef.h>
 
+/* Return information about the filesystem on which FD resides.  */
 int
-setenv (name, value, replace)
-     const char *name;
-     const char *value;
-     int replace;
+fstatfs64 (int fd, struct statfs64 *buf)
 {
   __set_errno (ENOSYS);
   return -1;
 }
-
-stub_warning (setenv)
-
-void
-unsetenv (name)
-     const char *name;
-{
-  __set_errno (ENOSYS);
-}
-
-stub_warning (unsetenv)
-
-
-int
-clearenv (void)
-{
-  __set_errno (ENOSYS);
-  return -1;
-}
-
-stub_warning (clearenv)
+stub_warning (fstatfs64)
index 21c9098d173e038617d4243ac2df9a8d8750be7a..0110c5fda0b9c1cbafa75efaa795548ed05789f1 100644 (file)
@@ -44,6 +44,6 @@ __fxstat (int vers, int fd, struct stat *buf)
   __set_errno (ENOSYS);
   return -1;
 }
-stub_warning (__fxstat)
+stub_warning (fstat)
 
 weak_alias (__fxstat, _fxstat)
similarity index 65%
rename from sysdeps/stub/morecore.c
rename to sysdeps/stub/fxstat64.c
index c2b1cb19853d22e112bbfadac2c8cd6dc666a486..93ec312d3e6953dc63ab8df687d39a0744f81dae 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1995, 1996, 1997 Free Software Foundation, Inc.
+/* 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
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
-#include <stddef.h>
 #include <errno.h>
+#include <stddef.h>
+#include <sys/stat.h>
 
-#define        _MALLOC_INTERNAL
-#include <malloc.h>
-
-/* Allocate INCREMENT more bytes of data space,
-   and return the start of data space, or NULL on errors.
-   If INCREMENT is negative, shrink data space.  */
-__ptr_t
-__default_morecore (increment)
-     ptrdiff_t increment;
+/* Get information about the file descriptor FD in BUF.  */
+int
+__fxstat64 (int vers, int fd, struct stat64 *buf)
 {
+  if (vers != _STAT_VER)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  if (fd < 0)
+    {
+      __set_errno (EBADF);
+      return -1;
+    }
+  else if (buf == NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
   __set_errno (ENOSYS);
-  return NULL;
+  return -1;
 }
-
-
-stub_warning (__default_morecore)
+stub_warning (fstat64)
similarity index 79%
rename from sysdeps/stub/putenv.c
rename to sysdeps/stub/getrlimit64.c
index 68a4a4552f5f6148fd34d7fba0b68fd7fff77ef6..6f12cad84bfe3ec0f157731e7bae919f0bb78d61 100644 (file)
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+#include <sys/resource.h>
 #include <errno.h>
-#include <stdlib.h>
 
-/* Put STRING, which is of the form "NAME=VALUE", in the environment.
-   If there is no `=', remove NAME from the environment.  */
+/* Put the soft and hard limits for RESOURCE in *RLIMITS.
+   Returns 0 if successful, -1 if not (and sets errno).  */
 int
-putenv (string)
-     const char *string;
+getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits)
 {
   __set_errno (ENOSYS);
   return -1;
 }
 
-
-stub_warning (putenv)
+stub_warning (getrlimit64)
diff --git a/sysdeps/stub/lseek64.c b/sysdeps/stub/lseek64.c
new file mode 100644 (file)
index 0000000..71d58ba
--- /dev/null
@@ -0,0 +1,49 @@
+/* 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 distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <errno.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+/* Seek to OFFSET on FD, starting from WHENCE.  */
+off64_t
+lseek64 (fd, offset, whence)
+     int fd;
+     off64_t offset;
+     int whence;
+{
+  if (fd < 0)
+    {
+      __set_errno (EBADF);
+      return -1;
+    }
+  switch (whence)
+    {
+    case SEEK_SET:
+    case SEEK_CUR:
+    case SEEK_END:
+      break;
+    default:
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+stub_warning (lseek64)
similarity index 91%
rename from sysdeps/stub/lxstat.c
rename to sysdeps/stub/lxstat64.c
index 3a7d64bedbadd249d873890fa5dcf0f49d231257..78e0b82bde201b40e355ffd71c3237b238e47a73 100644 (file)
@@ -23,7 +23,7 @@
 /* Get file information about FILE in BUF.
    If FILE is a symbolic link, do not follow it.  */
 int
-__lxstat (int vers, const char *file, struct stat *buf)
+__lxstat64 (int vers, const char *file, struct stat64 *buf)
 {
   if (vers != _STAT_VER || file == NULL || buf == NULL)
     {
@@ -34,6 +34,4 @@ __lxstat (int vers, const char *file, struct stat *buf)
   __set_errno (ENOSYS);
   return -1;
 }
-stub_warning (__lxstat)
-
-weak_alias (__lxstat, _lxstat)
+stub_warning (lstat64)
diff --git a/sysdeps/stub/open64.c b/sysdeps/stub/open64.c
new file mode 100644 (file)
index 0000000..c020d88
--- /dev/null
@@ -0,0 +1,52 @@
+/* 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 distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdarg.h>
+#include <stddef.h>
+
+/* Open FILE with access OFLAG.  If OFLAG includes O_CREAT,
+   a third argument is the file protection.  */
+int
+__open64 (file, oflag)
+     const char *file;
+     int oflag;
+{
+  int mode;
+
+  if (file == NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  if (oflag & O_CREAT)
+    {
+      va_list arg;
+      va_start (arg, oflag);
+      mode = va_arg (arg, int);
+      va_end (arg);
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+weak_alias (__open64, open64)
+
+stub_warning (open64)
diff --git a/sysdeps/stub/pread64.c b/sysdeps/stub/pread64.c
new file mode 100644 (file)
index 0000000..4223646
--- /dev/null
@@ -0,0 +1,43 @@
+/* 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 distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <errno.h>
+#include <unistd.h>
+
+/* Read NBYTES into BUF from FD at the given position OFFSET without
+   changing the file pointer.  Return the number read or -1.  */
+ssize_t
+pread64 (int fd, void *buf, size_t nbytes, off64_t offset)
+{
+  if (nbytes == 0)
+    return 0;
+  if (fd < 0)
+    {
+      __set_errno (EBADF);
+      return -1;
+    }
+  if (buf == NULL || offset < 0)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+stub_warning (pread64)
diff --git a/sysdeps/stub/pwrite64.c b/sysdeps/stub/pwrite64.c
new file mode 100644 (file)
index 0000000..c8c77a1
--- /dev/null
@@ -0,0 +1,43 @@
+/* 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 distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <errno.h>
+#include <unistd.h>
+
+/* Write NBYTES of BUF to FD at given position OFFSET without changing
+   the file position.  Return the number written, or -1.  */
+ssize_t
+pwrite64 (int fd, const void *buf, size_t nbytes, off64_t offset)
+{
+  if (nbytes == 0)
+    return 0;
+  if (fd < 0)
+    {
+      __set_errno (EBADF);
+      return -1;
+    }
+  if (buf == NULL || offset < 0)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+stub_warning (pwrite64)
similarity index 80%
rename from sysdeps/stub/getenv.c
rename to sysdeps/stub/readdir64.c
index ec378f63cc4773b60d81fa64bbc57e9a14e4a088..fbf4bf4d540fad0c3fba192f81fa074f1cd84d0e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1995, 1996 Free Software Foundation, Inc.
+/* 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
    Boston, MA 02111-1307, USA.  */
 
 #include <errno.h>
-#include <stdlib.h>
+#include <stddef.h>
+#include <dirent.h>
 
-/* Return the value of the environment variable NAME.  */
-char *
-getenv (name)
-     const char *name;
+/* Read a directory entry from DIRP.  */
+struct dirent64 *
+readdir64 (DIR *dirp)
 {
   __set_errno (ENOSYS);
   return NULL;
 }
-
-
-stub_warning (getenv)
+stub_warning (readdir64)
similarity index 76%
rename from sysdeps/stub/sbrk.c
rename to sysdeps/stub/readdir64_r.c
index a85b1bdb3e6cee5882ac85d262f835ecd8b46461..cb143cb40c5120c986b76de8cb789ecf6dc6c6ff 100644 (file)
    Boston, MA 02111-1307, USA.  */
 
 #include <errno.h>
+#include <stddef.h>
+#include <dirent.h>
 
-/* Extend the process's data space by INCREMENT.
-   If INCREMENT is negative, shrink data space by - INCREMENT.
-   Return the address of the start of data space, or -1 for errors.  */
-void *
-__sbrk (increment)
-     int increment;
+/* Read a directory entry from DIRP, store result in ENTRY and return
+   pointer to result in *RESULT.  */
+int
+readdir64_r (DIR *dirp, struct dirent64 *entry, struct dirent64 **result)
 {
   __set_errno (ENOSYS);
-  return (void *) -1;
+  *result = NULL;
+  return -1;
 }
-stub_warning (sbrk)
-
-weak_alias (__sbrk, sbrk)
+stub_warning (readdir64_r)
diff --git a/sysdeps/stub/setrlimit64.c b/sysdeps/stub/setrlimit64.c
new file mode 100644 (file)
index 0000000..0f223f2
--- /dev/null
@@ -0,0 +1,34 @@
+/* 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 distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sys/resource.h>
+#include <errno.h>
+
+/* Set the soft and hard limits for RESOURCE to *RLIMITS.
+   Only the super-user can increase hard limits.
+   Return 0 if successful, -1 if not (and sets errno).  */
+int
+setrlimit64 (resource, rlimits)
+     enum __rlimit_resource resource;
+     struct rlimit64 *rlimits;
+{
+  __set_errno (ENOSYS);
+  return -1;
+}
+
+stub_warning (setrlimit64)
diff --git a/sysdeps/stub/statfs64.c b/sysdeps/stub/statfs64.c
new file mode 100644 (file)
index 0000000..51cde7d
--- /dev/null
@@ -0,0 +1,31 @@
+/* Return information about the filesystem on which FILE resides.
+   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.  */
+
+#include <errno.h>
+#include <sys/statfs.h>
+#include <stddef.h>
+
+/* Return information about the filesystem on which FILE resides.  */
+int
+statfs64 (const char *file, struct statfs64 *buf)
+{
+  __set_errno (ENOSYS);
+  return -1;
+}
+stub_warning (statfs64)
diff --git a/sysdeps/stub/sysd-stdio.c b/sysdeps/stub/sysd-stdio.c
deleted file mode 100644 (file)
index 2c2dc3c..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/* 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
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-#include <errno.h>
-#include <stdio.h>
-
-
-/* Read up to N chars into BUF from COOKIE.
-   Return how many chars were read, 0 for EOF or -1 for error.  */
-int
-__stdio_read (cookie, buf, n)
-     void *cookie;
-     register char *buf;
-     register size_t n;
-{
-  __set_errno (ENOSYS);
-  return -1;
-}
-
-/* Write up to N chars from BUF to COOKIE.
-   Return how many chars were written or -1 for error.  */
-int
-__stdio_write (cookie, buf, n)
-     void *cookie;
-     register const char *buf;
-     register size_t n;
-{
-  __set_errno (ENOSYS);
-  return -1;
-}
-
-/* Move COOKIE's file position *POS bytes, according to WHENCE.
-   The new file position is stored in *POS.
-   Returns zero if successful, nonzero if not.  */
-int
-__stdio_seek (cookie, pos, whence)
-     void *cookie;
-     fpos_t *pos;
-     int whence;
-{
-  __set_errno (ENOSYS);
-  return -1;
-}
-
-/* Close the file associated with COOKIE.
-   Return 0 for success or -1 for failure.  */
-int
-__stdio_close (cookie)
-      void *cookie;
-{
-  __set_errno (ENOSYS);
-  return -1;
-}
-
-/* Return the POSIX.1 file descriptor associated with COOKIE,
-   or -1 for errors.  If COOKIE does not relate to any POSIX.1 file
-   descriptor, this should return -1 with errno set to EOPNOTSUPP.  */
-int
-__stdio_fileno (cookie)
-     void *cookie;
-{
-  __set_errno (ENOSYS);
-  return -1;
-}
-
-
-/* Open FILENAME with the mode in M.
-   Store the magic cookie associated with the opened file in *COOKIEPTR.
-   Return zero on success and nonzero on failure.  */
-int
-__stdio_open (filename, m, cookieptr)
-     const char *filename;
-     __io_mode m;
-     void **cookieptr;
-{
-  __set_errno (ENOSYS);
-  return -1;
-}
-
-
-/* Open FILENAME with the mode in M.  Use the same magic cookie
-   already in *COOKIEPTR if possible, closing the old cookie with CLOSEFN.  */
-int
-__stdio_reopen (filename, m, cookieptr)
-     const char *filename;
-     __io_mode m;
-     void **cookieptr;
-     __io_close_fn closefn;
-{
-  __set_errno (ENOSYS);
-  return -1;
-}
-
-
-stub_warning (__stdio_read)
-stub_warning (__stdio_write)
-stub_warning (__stdio_seek)
-stub_warning (__stdio_close)
-stub_warning (__stdio_fileno)
-stub_warning (__stdio_open)
-stub_warning (__stdio_reopen)
diff --git a/sysdeps/stub/sysdep.h b/sysdeps/stub/sysdep.h
deleted file mode 100644 (file)
index 8c3184b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/* This file should contain any system-dependent types and macros
-   that will be used by many parts of the library.  It should also
-   contain declarations for any functions defined in sysdep.c.  */
index b93b948ca606001aa4578ebeb36fe09f73bbff82..d87c54f86a320c224b58e4e133fef3726568dcc8 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 92, 93, 95, 96 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 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
@@ -26,7 +26,8 @@
    Return the generated filename or NULL if one could not
    be generated, putting the length of the string in *LENPTR.  */
 char *
-__stdio_gen_tempname (buf, bufsize, dir, pfx, dir_search, lenptr, streamptr)
+__stdio_gen_tempname (buf, bufsize, dir, pfx, dir_search, lenptr, streamptr,
+                     large_file)
      char *buf;
      size_t bufsize;
      const char *dir;
@@ -34,11 +35,11 @@ __stdio_gen_tempname (buf, bufsize, dir, pfx, dir_search, lenptr, streamptr)
      int dir_search;
      size_t *lenptr;
      FILE **streamptr;
+     int large_file;
 {
   *lenptr = 0;
   __set_errno (ENOSYS);
   return NULL;
 }
 
-
 stub_warning (__stdio_gen_tempname)
diff --git a/sysdeps/stub/xstat64.c b/sysdeps/stub/xstat64.c
new file mode 100644 (file)
index 0000000..8eb1d17
--- /dev/null
@@ -0,0 +1,36 @@
+/* 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 distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <errno.h>
+#include <sys/stat.h>
+#include <stddef.h>
+
+/* Get file information about FILE in BUF.  */
+int
+__xstat64 (int vers, const char *file, struct stat64 *buf)
+{
+  if (vers != _STAT_VER || file == NULL || buf == NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+stub_warning (stat64)
index 3d9bcb5c60ee7d4580ed053b9992ce54b90bf464..8565170fa50e4204501d798c5af46dbba2fd3c13 100644 (file)
@@ -18,7 +18,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #ifndef        _FCNTL_H
-#error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
 #endif
 
 
 /* Apparently not assigning a controlling terminal is the default
    behavior in BSD, so no bit is required to request that behavior.  */
 #define        O_NOCTTY        0       /* Don't assign a controlling terminal.  */
-#if    defined (__USE_BSD) || defined (__USE_SVID)
-#define        O_ASYNC         0x0040  /* Send SIGIO to owner when data is ready.  */
-#define        O_FSYNC         0x2000  /* Synchronous writes.  */
-#define        O_SYNC          O_FSYNC
+#if defined __USE_BSD || defined __USE_SVID
+# define O_ASYNC               0x0040  /* Send SIGIO to owner when data is ready.  */
+# define O_FSYNC               0x2000  /* Synchronous writes.  */
+# define O_SYNC                O_FSYNC
 #endif
 
 /* File status flags for `open' and `fcntl'.  */
@@ -48,7 +48,7 @@
 #ifdef __USE_BSD
 /* BSD before 4.4 doesn't support POSIX.1 O_NONBLOCK,
    but O_NDELAY is close.  */
-#define        O_NDELAY        O_NONBLOCK
+# define O_NDELAY      O_NONBLOCK
 #endif
 
 #ifdef __USE_BSD
    These are all the O_* flags, plus FREAD and FWRITE, which are
    independent bits set by which of O_RDONLY, O_WRONLY, and O_RDWR, was
    given to `open'.  */
-#define FREAD          1
-#define        FWRITE          2
+# define FREAD         1
+# define FWRITE                2
 
 /* Traditional BSD names the O_* bits.  */
-#define FASYNC         O_ASYNC
-#define FCREAT         O_CREAT
-#define FEXCL          O_EXCL
-#define FTRUNC         O_TRUNC
-#define FNOCTTY                O_NOCTTY
-#define FFSYNC         O_FSYNC
-#define FSYNC          O_SYNC
-#define FAPPEND                O_APPEND
-#define FNONBLOCK      O_NONBLOCK
-#define FNDELAY                O_NDELAY
+# define FASYNC                O_ASYNC
+# define FCREAT                O_CREAT
+# define FEXCL         O_EXCL
+# define FTRUNC                O_TRUNC
+# define FNOCTTY       O_NOCTTY
+# define FFSYNC                O_FSYNC
+# define FSYNC         O_SYNC
+# define FAPPEND       O_APPEND
+# define FNONBLOCK     O_NONBLOCK
+# define FNDELAY       O_NDELAY
 #endif
 
 /* Mask for file access modes.  This is system-dependent in case
    some system ever wants to define some other flavor of access.  */
 #define        O_ACCMODE       (O_RDONLY|O_WRONLY|O_RDWR)
 
+/* XXX missing */
+#define O_LARGEFILE    0
+
 /* Values for the second argument to `fcntl'.  */
 #define        F_DUPFD         0       /* Duplicate file descriptor.  */
 #define        F_GETFD         1       /* Get file descriptor flags.  */
 #define        F_GETFL         3       /* Get file status flags.  */
 #define        F_SETFL         4       /* Set file status flags.  */
 #ifdef __USE_BSD
-#define        F_GETOWN        5       /* Get owner (receiver of SIGIO).  */
-#define        F_SETOWN        6       /* Set owner (receiver of SIGIO).  */
+# define F_GETOWN      5       /* Get owner (receiver of SIGIO).  */
+# define F_SETOWN      6       /* Set owner (receiver of SIGIO).  */
 #endif
 #define        F_GETLK         7       /* Get record locking info.  */
 #define        F_SETLK         8       /* Set record locking info (non-blocking).  */
 #define        F_SETLKW        9       /* Set record locking info (blocking).  */
 
+/* XXX missing */
+#define F_GETLK64      7       /* Get record locking info.  */
+#define F_SETLK64      8       /* Set record locking info (non-blocking).  */
+#define F_SETLKW64     9       /* Set record locking info (blocking).  */
+
 /* File descriptor flags used with F_GETFD and F_SETFD.  */
 #define        FD_CLOEXEC      1       /* Close on exec.  */
 
@@ -102,12 +110,29 @@ struct flock
   {
     short int l_type;  /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
     short int l_whence;        /* Where `l_start' is relative to (like `lseek').  */
+#ifndef __USE_FILE_OFFSET64
     __off_t l_start;   /* Offset where the lock begins.  */
     __off_t l_len;     /* Size of the locked area; zero means until EOF.  */
+#else
+    __off64_t l_start; /* Offset where the lock begins.  */
+    __off64_t l_len;   /* Size of the locked area; zero means until EOF.  */
+#endif
     short int l_pid;   /* Process holding the lock.  */
     short int l_xxx;   /* Reserved for future use.  */
   };
 
+#ifdef __USE_LARGEFILE64
+struct flock64
+  {
+    short int l_type;  /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;        /* Where `l_start' is relative to (like `lseek').  */
+    __off64_t l_start; /* Offset where the lock begins.  */
+    __off64_t l_len;   /* Size of the locked area; zero means until EOF.  */
+    short int l_pid;   /* Process holding the lock.  */
+    short int l_xxx;   /* Reserved for future use.  */
+  };
+#endif
+
 /* Values for the `l_type' field of a `struct flock'.  */
 #define        F_RDLCK 1       /* Read lock.  */
 #define        F_WRLCK 2       /* Write lock.  */
index 037433f388e45c9388b8345356a88e7589ef34d9..71130f3fcbc96d9be7a9ae9825e963c471e5fe15 100644 (file)
@@ -56,7 +56,7 @@ struct stat
     unsigned long int st_blksize; /* Optimal block size for I/O.  */
 #define        _STATBUF_ST_BLKSIZE     /* Tell code we have this member.  */
 
-    unsigned long int st_blocks; /* Number of 512-byte blocks allocated.  */
+    __blkcnt_t st_blocks;      /* Number of 512-byte blocks allocated.  */
 
     long int st_spare[2];
   };
index 5caee579b78f6ddd138c86d70c09fd9103b97f53..b3802aee698d8a3bb445d0370677c27cd14d0da2 100644 (file)
@@ -27,7 +27,7 @@
    children; otherwise don't.  */
 pid_t
 __wait3 (stat_loc, options, usage)
-     __WAIT_STATUS_DEFN stat_loc;
+     __WAIT_STATUS stat_loc;
      int options;
      struct rusage *usage;
 {
index 752d4eede1d7a1394d26fffe4daa1b6afd40665c..ab0fa48f68ae408e36d4b8a9d621dab8fc6721c1 100644 (file)
@@ -49,7 +49,7 @@ struct stat
     unsigned int st_blksize;   /* Optimal block size for I/O.  */
 #define        _STATBUF_ST_BLKSIZE     /* Tell code we have this member.  */
 
-    int st_blocks;             /* Number of 512-byte blocks allocated.  */
+    __blkcnt_t st_blocks;      /* Number of 512-byte blocks allocated.  */
     unsigned int st_flags;
     unsigned int st_gen;
   };
index ff55773e6931a2a85223b463f3a3e7419dc7feb7..f51262d92d1cae1eacd9cdc3acacb1c0fd00204d 100644 (file)
@@ -22,6 +22,8 @@
    and `setrlimit' are not system calls, these are the values used by the C
    library to emulate them.  */
 
+#include <bits/types.h>
+
 /* Kinds of resource limit.  */
 enum __rlimit_resource
   {
@@ -52,19 +54,47 @@ enum __rlimit_resource
 #define        RLIMIT_NOFILE   RLIMIT_NOFILE
 #define        RLIMIT_OFILE    RLIMIT_OFILE
 
-    RLIM_NLIMITS,
-
-    RLIM_INFINITY = 0x7fffffff /* Value to indicate that there is no limit.  */
-#define RLIM_INFINITY RLIM_INFINITY
+    RLIM_NLIMITS
   };
 
+/* Value to indicate that there is no limit.  */
+#ifndef __USE_FILE_OFFSET64
+# define RLIM_INFINITY 0x7fffffff
+#else
+# define RLIM_INFINITY 0x7fffffffffffffffL
+#endif
+
+#ifdef __USE_LARGEFILE64
+# define RLIM64_INFINITY 0x7fffffffffffffffL
+#endif
+
+
+/* Type to represent quantities in resource limits.  */
+#ifndef __USE_FILE_OFFSET64
+typedef __rlim_t rlim_t;
+#else
+typedef __rlim64_t rlim_t;
+#endif
+
 struct rlimit
   {
     /* The current (soft) limit.  */
-    int rlim_cur;
+    rlim_t rlim_cur;
+    /* The hard limit.  */
+    rlim_t rlim_max;
+  };
+
+#ifdef __USE_LARGEFILE64
+typedef __rlim64_t rlim64_t;
+
+struct rlimit64
+  {
+    /* The current (soft) limit.  */
+    rlim64_t rlim_cur;
     /* The hard limit.  */
-    int rlim_max;
+    rlim64_t rlim_max;
   };
+#endif
 
 /* Whose usage statistics do you want?  */
 enum __rusage_who
diff --git a/sysdeps/unix/sysv/i386/i686/time.S b/sysdeps/unix/sysv/i386/i686/time.S
new file mode 100644 (file)
index 0000000..c5d2763
--- /dev/null
@@ -0,0 +1,27 @@
+/* Copyright (C) 1991, 1992, 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.  */
+
+#include <sysdep.h>
+#include <asm-syntax.h>
+
+SYSCALL (time, 1)
+       movl 4(%esp), %edx      /* Put passed pointer in %edx.  */
+       testl %edx, %edx        /* Is it non-nil?  */
+       cmovnel %eax, (%edx)    /* Yes; store the time there.  */
+       ret
+PSEUDO_END (time)
index 3a7069c848c9c5a9ee5561b5d4b8f0f6aace407b..158ae6c31ee83c894fe76ede29a22826984cfb5e 100644 (file)
    Boston, MA 02111-1307, USA.  */
 
 #include <sysdep.h>
+#include <asm-syntax.h>
 
 SYSCALL (time, 1)
        movl 4(%esp), %edx      /* Put passed pointer in %edx.  */
        testl %edx, %edx        /* Is it non-nil?  */
-       je null
+       je L(null)
        movl %eax, (%edx)       /* Yes; store the time there.  */
-null:  ret
+L(null):
+       ret
 PSEUDO_END (time)
index 8dc9221519df2aaf75edea5bbe0dd81a76fd9845..ccb84ad8f70b75b3f4819164bd273d3273379b1e 100644 (file)
    hold any value corresponding to members of the extended character
    set, as well as at least one value that does not correspond to any
    member of the extended character set.  */
-#define _WINT_T
+# define _WINT_T
 typedef unsigned int wint_t;
 #endif
 #define _G_size_t      size_t
 #define _G_fpos_t      __off_t
+#define _G_fpos64_t    __off64_t
 #define _G_ssize_t     __ssize_t
 #define _G_off_t       __off_t
+#define _G_off64_t     __off64_t
 #define        _G_pid_t        __pid_t
 #define        _G_uid_t        __uid_t
 #define _G_wint_t      wint_t
+#define _G_stat64      stat
 
 typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
 typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
@@ -45,6 +48,10 @@ typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
 #define _G_HAVE_MMAP 1
 #define _G_HAVE_LONG_DOUBLE_IO 1
 
+#define _G_OPEN64      open64
+#define _G_LSEEK64     lseek64
+#define _G_FSTAT64     fstat64
+
 /* This is defined by <bits/stat.h> if `st_blksize' exists.  */
 #define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)
 
@@ -53,15 +60,15 @@ typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
 /* These are the vtbl details for ELF.  */
 #define _G_NAMES_HAVE_UNDERSCORE 0
 #define _G_VTABLE_LABEL_HAS_LENGTH 1
-#define _G_USING_THUNKS
+#define _G_USING_THUNKS        1
 #define _G_VTABLE_LABEL_PREFIX "__vt_"
 #define _G_VTABLE_LABEL_PREFIX_ID __vt_
 
 
 #if defined (__cplusplus) || defined (__STDC__)
-#define _G_ARGS(ARGLIST) ARGLIST
+# define _G_ARGS(ARGLIST) ARGLIST
 #else
-#define _G_ARGS(ARGLIST) ()
+# define _G_ARGS(ARGLIST) ()
 #endif
 
 #endif /* _G_config.h */
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/dirent.h b/sysdeps/unix/sysv/linux/alpha/bits/dirent.h
new file mode 100644 (file)
index 0000000..4d717e4
--- /dev/null
@@ -0,0 +1,50 @@
+/* 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.  */
+
+#ifndef _BITS_DIRENT_H
+#define _BITS_DIRENT_H 1
+
+/* We don't have to make a difference for __USE_FILE_OFFSET64.  */
+struct dirent
+  {
+    long int d_ino;
+    __off_t d_off;
+    unsigned short int d_reclen;
+    unsigned char d_type;
+    char d_name[256];          /* We must not include limits.h! */
+  };
+
+#ifdef __USE_LARGEFILE64
+struct dirent64
+  {
+    __ino64_t d_ino;
+    __off64_t d_off;
+    unsigned short int d_reclen;
+    unsigned char d_type;
+    char d_name[256];          /* We must not include limits.h! */
+  };
+#endif
+
+#define d_fileno       d_ino   /* Backwards compatibility.  */
+
+#undef  _DIRENT_HAVE_D_NAMLEN
+#define _DIRENT_HAVE_D_RECLEN
+#define _DIRENT_HAVE_D_OFF
+#define _DIRENT_HAVE_D_TYPE
+
+#endif /* bits/dirent.h */
index b70502f21afd32f1588edfef38261b4b9d56e6e1..14840649ea77e2c8a734c961cbe9180916c78e28 100644 (file)
@@ -18,7 +18,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #ifndef        _FCNTL_H
-#error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
 #endif
 
 
@@ -27,8 +27,8 @@
 
 /* In GNU, read and write are bits (unlike BSD).  */
 #ifdef __USE_GNU
-#define        O_READ          O_RDONLY /* Open for reading.  */
-#define O_WRITE                O_WRONLY /* Open for writing.  */
+# define O_READ                O_RDONLY /* Open for reading.  */
+# define O_WRITE       O_WRONLY /* Open for writing.  */
 #endif
 /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
    located on an ext2 file system */
 #define O_FSYNC                O_SYNC
 #define O_ASYNC                020000  /* fcntl, for BSD compatibility */
 
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get f_flags */
-#define F_SETFD                2       /* set f_flags */
-#define F_GETFL                3       /* more flags (cloexec) */
-#define F_SETFL                4
-#define F_GETLK                7
-#define F_SETLK                8
-#define F_SETLKW       9
-
-#define F_SETOWN       5       /*  for sockets. */
-#define F_GETOWN       6       /*  for sockets. */
+/* XXX missing */
+#define O_LARGEFILE    0
+
+/* Values for the second argument to `fcntl'.  */
+#define F_DUPFD                0       /* Duplicate file descriptor.  */
+#define F_GETFD                1       /* Get file descriptor flags.  */
+#define F_SETFD                2       /* Set file descriptor flags.  */
+#define F_GETFL                3       /* Get file status flags.  */
+#define F_SETFL                4       /* Set file status flags.  */
+#define F_GETLK                7       /* Get record locking info.  */
+#define F_SETLK                8       /* Set record locking info (non-blocking).  */
+#define F_SETLKW       9       /* Set record locking info (blocking).  */
+
+/* XXX missing */
+#define F_GETLK64      7       /* Get record locking info.  */
+#define F_SETLK64      8       /* Set record locking info (non-blocking).  */
+#define F_SETLKW64     9       /* Set record locking info (blocking).  */
+
+#ifdef __USE_BSD
+# define F_SETOWN      5       /* Get owner of socket (receiver of SIGIO).  */
+# define F_GETOWN      6       /* Set owner of socket (receiver of SIGIO).  */
+#endif
 
 /* for F_[GET|SET]FL */
 #define FD_CLOEXEC     1       /* actually anything with low bit set goes */
 
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                1
-#define F_WRLCK                2
-#define F_UNLCK                8
+/* For posix fcntl() and `l_type' field of a `struct flock' for lockf() */
+#define F_RDLCK                1       /* Read lock.  */
+#define F_WRLCK                2       /* Write lock.  */
+#define F_UNLCK                8       /* Remove lock.  */
 
 /* for old implementation of bsd flock () */
 #define F_EXLCK                16      /* or 3 */
                                   blocking */
 #define LOCK_UN                8       /* remove lock */
 
+/* We don't need to support __USE_FILE_OFFSET64.  */
 struct flock
   {
-    short int l_type;
-    short int l_whence;
-    __off_t l_start;
-    __off_t l_len;
-    __pid_t l_pid;
+    short int l_type;  /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;        /* Where `l_start' is relative to (like `lseek').  */
+    __off_t l_start;   /* Offset where the lock begins.  */
+    __off_t l_len;     /* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;     /* Process holding the lock.  */
+  };
+
+#ifdef __USE_LARGEFILE64
+struct flock64
+  {
+    short int l_type;  /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;        /* Where `l_start' is relative to (like `lseek').  */
+    __off64_t l_start; /* Offset where the lock begins.  */
+    __off64_t l_len;   /* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;     /* Process holding the lock.  */
   };
+#endif
 
 
 /* Define some more compatibility macros to be backward compatible with
    BSD systems which did not managed to hide these kernel macros.  */
 #ifdef __USE_BSD
-#define        FAPPEND         O_APPEND
-#define        FFSYNC          O_FSYNC
-#define        FASYNC          O_ASYNC
-#define        FNONBLOCK       O_NONBLOCK
-#define        FNDELAY         O_NDELAY
+# define FAPPEND               O_APPEND
+# define FFSYNC                O_FSYNC
+# define FASYNC                O_ASYNC
+# define FNONBLOCK     O_NONBLOCK
+# define FNDELAY               O_NDELAY
 #endif /* Use BSD.  */
index 768b8192ff1bc00fc938cf55a9b611884bda3b0a..cc2a2eac9098cf2ed466bec85331b9bec153fb77 100644 (file)
@@ -46,7 +46,7 @@ struct stat
     __time_t st_ctime;         /* Time of last status change.  */
     unsigned int st_blksize;   /* Optimal block size for I/O.  */
 #define        _STATBUF_ST_BLKSIZE     /* Tell code we have this member.  */
-    int st_blocks;             /* Nr. of 512-byte blocks allocated.  */
+    __blkcnt_t st_blocks;      /* Nr. of 512-byte blocks allocated.  */
     unsigned int st_flags;
     unsigned int st_gen;
   };
index 9a4666a508778e03fbe0e61b661a3259283d8a9b..cf2668a0e68e34e4568575be3512cf72dfc62728 100644 (file)
@@ -27,9 +27,9 @@
 
 /* Convenience types.  */
 typedef unsigned char __u_char;
-typedef unsigned short __u_short;
+typedef unsigned short int __u_short;
 typedef unsigned int __u_int;
-typedef unsigned long __u_long;
+typedef unsigned long int __u_long;
 typedef unsigned long int __u_quad_t;
 typedef long int __quad_t;
 typedef signed char __int8_t;
@@ -52,6 +52,8 @@ typedef long int __off_t;             /* Type of file sizes and offsets.  */
 typedef __quad_t __loff_t;             /* Type of file sizes and offsets.  */
 typedef int __pid_t;                   /* Type of process identifications.  */
 typedef long int __ssize_t;            /* Type of a byte count, or error.  */
+typedef long int __rlim_t;             /* Type of resource counts.  */
+typedef long int __rlim64_t;           /* Type of resource counts (LFS).  */
 
 typedef struct
   {
@@ -92,4 +94,19 @@ typedef struct
 
 typedef int __key_t;
 
+
+/* Types from the Large File Support interface.  */
+
+/* Type to count number os disk blocks.  */
+typedef int __blkcnt_t;
+typedef __quad_t __blkcnt64_t;
+
+/* Type to count file system blocks.  */
+typedef unsigned int __fsblkcnt_t;
+typedef __u_quad_t __fsblkcnt64_t;
+
+/* Type to count file system inodes.  */
+typedef unsigned long int __fsfilcnt_t;
+typedef __u_quad_t __fsfilcnt64_t;
+
 #endif /* bits/types.h */
index ccf508015100ae14b62a8e4116ead06d120b65b9..1f8ff1e3d0d7d30eeddadcc7295bbe209350abaf 100644 (file)
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
-#ifndef _DIRENTRY_H
-#define _DIRENTRY_H    1
+#ifndef _BITS_DIRENT_H
+#define _BITS_DIRENT_H 1
 
 struct dirent
   {
-    long int d_ino;
+#ifndef __USE_FILE_OFFSET64
+    __ino_t d_ino;
     __off_t d_off;
+#else
+    __ino64_t d_ino;
+    __off64_t d_off;
+#endif
     unsigned short int d_reclen;
     unsigned char d_type;
     char d_name[256];          /* We must not include limits.h! */
   };
+
+#ifdef __USE_LARGEFILE64
+struct dirent64
+  {
+    __ino64_t d_ino;
+    __off64_t d_off;
+    unsigned short int d_reclen;
+    unsigned char d_type;
+    char d_name[256];          /* We must not include limits.h! */
+  };
+#endif
+
 #define d_fileno       d_ino   /* Backwards compatibility.  */
 
 #undef  _DIRENT_HAVE_D_NAMLEN
@@ -34,4 +51,4 @@ struct dirent
 #define _DIRENT_HAVE_D_OFF
 #define _DIRENT_HAVE_D_TYPE
 
-#endif /* _DIRENTRY_H */
+#endif /* bits/dirent.h */
index 62c3052d8c0a1dae45ba9f236fe275e36bbefea8..302fa00498b30d04b3094de77ff231577e5cd6a4 100644 (file)
@@ -18,7 +18,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #ifndef        _FCNTL_H
-#error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
 #endif
 
 
@@ -27,8 +27,8 @@
 
 /* In GNU, read and write are bits (unlike BSD).  */
 #ifdef __USE_GNU
-#define        O_READ          O_RDONLY /* Open for reading.  */
-#define O_WRITE                O_WRONLY /* Open for writing.  */
+# define O_READ                O_RDONLY /* Open for reading.  */
+# define O_WRITE       O_WRONLY /* Open for writing.  */
 #endif
 /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
    located on an ext2 file system */
 #define O_FSYNC                O_SYNC
 #define O_ASYNC                020000
 
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get f_flags */
-#define F_SETFD                2       /* set f_flags */
-#define F_GETFL                3       /* more flags (cloexec) */
-#define F_SETFL                4
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
-
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
+/* XXX missing */
+#define O_LARGEFILE    0
+
+/* Values for the second argument to `fcntl'.  */
+#define F_DUPFD                0       /* Duplicate file descriptor.  */
+#define F_GETFD                1       /* Get file descriptor flags.  */
+#define F_SETFD                2       /* Set file descriptor flags.  */
+#define F_GETFL                3       /* Get file status flags.  */
+#define F_SETFL                4       /* Set file status flags.  */
+#define F_GETLK                5       /* Get record locking info.  */
+#define F_SETLK                6       /* Set record locking info (non-blocking).  */
+#define F_SETLKW       7       /* Set record locking info (blocking).  */
+
+/* XXX missing */
+#define F_GETLK64      5       /* Get record locking info.  */
+#define F_SETLK64      6       /* Set record locking info (non-blocking).  */
+#define F_SETLKW64     7       /* Set record locking info (blocking).  */
+
+#ifdef __USE_BSD
+# define F_SETOWN      8       /* Get owner of socket (receiver of SIGIO).  */
+# define F_GETOWN      9       /* Set owner of socket (receiver of SIGIO).  */
+#endif
 
-/* for F_[GET|SET]FL */
+/* For F_[GET|SET]FL.  */
 #define FD_CLOEXEC     1       /* actually anything with low bit set goes */
 
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
+/* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
+#define F_RDLCK                0       /* Read lock.  */
+#define F_WRLCK                1       /* Write lock.  */
+#define F_UNLCK                2       /* Remove lock.  */
 
 /* for old implementation of bsd flock () */
 #define F_EXLCK                4       /* or 3 */
 
 struct flock
   {
-    short int l_type;
-    short int l_whence;
-    __off_t l_start;
-    __off_t l_len;
-    __pid_t l_pid;
+    short int l_type;  /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;        /* Where `l_start' is relative to (like `lseek').  */
+#ifndef __USE_FILE_OFFSET64
+    __off_t l_start;   /* Offset where the lock begins.  */
+    __off_t l_len;     /* Size of the locked area; zero means until EOF.  */
+#else
+    __off64_t l_start; /* Offset where the lock begins.  */
+    __off64_t l_len;   /* Size of the locked area; zero means until EOF.  */
+#endif
+    __pid_t l_pid;     /* Process holding the lock.  */
   };
 
+#ifdef __USE_LARGEFILE64
+struct flock64
+  {
+    short int l_type;  /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;        /* Where `l_start' is relative to (like `lseek').  */
+    __off64_t l_start; /* Offset where the lock begins.  */
+    __off64_t l_len;   /* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;     /* Process holding the lock.  */
+  };
+#endif
 
 /* Define some more compatibility macros to be backward compatible with
    BSD systems which did not managed to hide these kernel macros.  */
 #ifdef __USE_BSD
-#define        FAPPEND         O_APPEND
-#define        FFSYNC          O_FSYNC
-#define        FASYNC          O_ASYNC
-#define        FNONBLOCK       O_NONBLOCK
-#define        FNDELAY         O_NDELAY
+# define FAPPEND       O_APPEND
+# define FFSYNC                O_FSYNC
+# define FASYNC                O_ASYNC
+# define FNONBLOCK     O_NONBLOCK
+# define FNDELAY       O_NDELAY
 #endif /* Use BSD.  */
index 05cae8324457b4dd62d7874c2b24fbc10797e77f..9ee6ea5b27c3a5673842bbde862ea9467dbcda92 100644 (file)
@@ -1,5 +1,5 @@
 /* Bit values & structures for resource limits.  Linux version.
-   Copyright (C) 1994, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1994, 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
@@ -18,6 +18,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <asm/resource.h>
+#include <bits/types.h>
 
 /* Transmute defines to enumerations.  The macro re-definitions are
    necessary because some programs want to test for operating system
@@ -103,13 +104,33 @@ enum __rlimit_resource
 #define RLIM_INFINITY RLIM_INFINITY
 };
 
+/* Type for resource quantity measurement.  */
+#ifndef __USE_FILE_OFFSET64
+typedef __rlim_t rlim_t;
+#else
+typedef __rlim64_t rlim_t;
+#endif
+#ifdef __USE_LARGEFILE64
+typedef __rlim64_t rlim64_t;
+#endif
+
 struct rlimit
-{
-  /* The current (soft) limit.  */
-  long int rlim_cur;
-  /* The hard limit.  */
-  long int rlim_max;
-};
+  {
+    /* The current (soft) limit.  */
+    rlim_t rlim_cur;
+    /* The hard limit.  */
+    rlim_t rlim_max;
+  };
+
+#ifdef __USE_LARGEFILE64
+struct rlimit64
+  {
+    /* The current (soft) limit.  */
+    rlim64_t rlim_cur;
+    /* The hard limit.  */
+    rlim64_t rlim_max;
+ };
+#endif
 
 /* Whose usage statistics do you want?  */
 enum __rusage_who
@@ -131,46 +152,46 @@ enum __rusage_who
 
 /* Structure which says how much of each resource has been used.  */
 struct rusage
-{
-  /* Total amount of user time used.  */
-  struct timeval ru_utime;
-  /* Total amount of system time used.  */
-  struct timeval ru_stime;
-  /* Maximum resident set size (in kilobytes).  */
-  long int ru_maxrss;
-  /* Amount of sharing of text segment memory
-     with other processes (kilobyte-seconds).  */
-  long int ru_ixrss;
-  /* Amount of data segment memory used (kilobyte-seconds).  */
-  long int ru_idrss;
-  /* Amount of stack memory used (kilobyte-seconds).  */
-  long int ru_isrss;
-  /* Number of soft page faults (i.e. those serviced by reclaiming
-     a page from the list of pages awaiting reallocation.  */
-  long int ru_minflt;
-  /* Number of hard page faults (i.e. those that required I/O).  */
-  long int ru_majflt;
-  /* Number of times a process was swapped out of physical memory.  */
-  long int ru_nswap;
-  /* Number of input operations via the file system.  Note: This
-     and `ru_oublock' do not include operations with the cache.  */
-  long int ru_inblock;
-  /* Number of output operations via the file system.  */
-  long int ru_oublock;
-  /* Number of IPC messages sent.  */
-  long int ru_msgsnd;
-  /* Number of IPC messages received.  */
-  long int ru_msgrcv;
-  /* Number of signals delivered.  */
-  long int ru_nsignals;
-  /* Number of voluntary context switches, i.e. because the process
-     gave up the process before it had to (usually to wait for some
-     resource to be available).  */
-  long int ru_nvcsw;
-  /* Number of involuntary context switches, i.e. a higher priority process
-     became runnable or the current process used up its time slice.  */
-  long int ru_nivcsw;
-};
+  {
+    /* Total amount of user time used.  */
+    struct timeval ru_utime;
+    /* Total amount of system time used.  */
+    struct timeval ru_stime;
+    /* Maximum resident set size (in kilobytes).  */
+    long int ru_maxrss;
+    /* Amount of sharing of text segment memory
+       with other processes (kilobyte-seconds).  */
+    long int ru_ixrss;
+    /* Amount of data segment memory used (kilobyte-seconds).  */
+    long int ru_idrss;
+    /* Amount of stack memory used (kilobyte-seconds).  */
+    long int ru_isrss;
+    /* Number of soft page faults (i.e. those serviced by reclaiming
+       a page from the list of pages awaiting reallocation.  */
+    long int ru_minflt;
+    /* Number of hard page faults (i.e. those that required I/O).  */
+    long int ru_majflt;
+    /* Number of times a process was swapped out of physical memory.  */
+    long int ru_nswap;
+    /* Number of input operations via the file system.  Note: This
+       and `ru_oublock' do not include operations with the cache.  */
+    long int ru_inblock;
+    /* Number of output operations via the file system.  */
+    long int ru_oublock;
+    /* Number of IPC messages sent.  */
+    long int ru_msgsnd;
+    /* Number of IPC messages received.  */
+    long int ru_msgrcv;
+    /* Number of signals delivered.  */
+    long int ru_nsignals;
+    /* Number of voluntary context switches, i.e. because the process
+       gave up the process before it had to (usually to wait for some
+       resource to be available).  */
+    long int ru_nvcsw;
+    /* Number of involuntary context switches, i.e. a higher priority process
+       became runnable or the current process used up its time slice.  */
+    long int ru_nivcsw;
+  };
 
 /* Priority limits.  */
 #define PRIO_MIN       -20     /* Minimum priority a process can have.  */
index 1c6e5f84ca585dde6d4897fcbc58206a5b09541e..aab025890c179a5a743aaa4925fb5ce3e0ec0146 100644 (file)
@@ -39,18 +39,29 @@ struct stat
   {
     __dev_t st_dev;                    /* Device.  */
     unsigned short int __pad1;
+#ifndef __USE_FILE_OFFSET64
     __ino_t st_ino;                    /* File serial number.  */
+#else
+    __ino64_t st_ino;                  /* File serial number.  */
+#endif
     __mode_t st_mode;                  /* File mode.  */
     __nlink_t st_nlink;                        /* Link count.  */
     __uid_t st_uid;                    /* User ID of the file's owner. */
     __gid_t st_gid;                    /* Group ID of the file's group.*/
     __dev_t st_rdev;                   /* Device number, if device.  */
     unsigned short int __pad2;
+#ifndef __USE_FILE_OFFSET64
     __off_t st_size;                   /* Size of file, in bytes.  */
+#else
+    __off64_t st_size;                 /* Size of file, in bytes.  */
+#endif
     unsigned long int st_blksize;      /* Optimal block size for I/O.  */
-#define        _STATBUF_ST_BLKSIZE             /* Tell code we have this member.  */
 
-    unsigned long int st_blocks;       /* Number of 512-byte blocks allocated.  */
+#ifndef __USE_FILE_OFFSET64
+    __blkcnt_t st_blocks;              /* Number 512-byte blocks allocated. */
+#else
+    __blkcnt64_t st_blocks;            /* Number 512-byte blocks allocated. */
+#endif
     __time_t st_atime;                 /* Time of last access.  */
     unsigned long int __unused1;
     __time_t st_mtime;                 /* Time of last modification.  */
@@ -61,6 +72,36 @@ struct stat
     unsigned long int __unused5;
   };
 
+#ifdef __USE_LARGEFILE64
+struct stat64
+  {
+    __dev_t st_dev;                    /* Device.  */
+    unsigned short int __pad1;
+
+    __ino64_t st_ino;                  /* File serial number.  */
+    __mode_t st_mode;                  /* File mode.  */
+    __nlink_t st_nlink;                        /* Link count.  */
+    __uid_t st_uid;                    /* User ID of the file's owner. */
+    __gid_t st_gid;                    /* Group ID of the file's group.*/
+    __dev_t st_rdev;                   /* Device number, if device.  */
+    unsigned short int __pad2;
+    __off64_t st_size;                 /* Size of file, in bytes.  */
+    unsigned long int st_blksize;      /* Optimal block size for I/O.  */
+
+    __blkcnt64_t st_blocks;            /* Number 512-byte blocks allocated. */
+    __time_t st_atime;                 /* Time of last access.  */
+    unsigned long int __unused1;
+    __time_t st_mtime;                 /* Time of last modification.  */
+    unsigned long int __unused2;
+    __time_t st_ctime;                 /* Time of last status change.  */
+    unsigned long int __unused3;
+    unsigned long int __unused4;
+    unsigned long int __unused5;
+  };
+#endif
+
+#define        _STATBUF_ST_BLKSIZE             /* Tell code we have this member.  */
+
 /* Encoding of the file mode.  */
 
 #define        __S_IFMT        0170000 /* These bits determine file type.  */
index 8b9501423c0d2e91aa79fa6887a43185a77b8276..c79c80e84cd055d2dc27f9587326494686dd25f9 100644 (file)
 #ifndef _BITS_STATFS_H
 #define _BITS_STATFS_H
 
-#include <bits/types.h>  /* for __fsid_t */
+#include <bits/types.h>  /* for __fsid_t and __fsblkcnt_t*/
 
 struct statfs
   {
     int f_type;
     int f_bsize;
-    int f_blocks;
-    int f_bfree;
-    int f_bavail;
-    int f_files;
-    int f_ffree;
+#ifndef __USE_FILE_OFFSET64
+    __fsblkcnt_t f_blocks;
+    __fsblkcnt_t f_bfree;
+    __fsblkcnt_t f_bavail;
+    __fsblkcnt_t f_files;
+    __fsblkcnt_t f_ffree;
+#else
+    __fsblkcnt64_t f_blocks;
+    __fsblkcnt64_t f_bfree;
+    __fsblkcnt64_t f_bavail;
+    __fsblkcnt64_t f_files;
+    __fsblkcnt64_t f_ffree;
+#endif
     __fsid_t f_fsid;
     int f_namelen;
     int f_spare[6];
   };
 
+#ifdef __USE_LARGEFILE64
+struct statfs64
+  {
+    int f_type;
+    int f_bsize;
+    __fsblkcnt64_t f_blocks;
+    __fsblkcnt64_t f_bfree;
+    __fsblkcnt64_t f_bavail;
+    __fsblkcnt64_t f_files;
+    __fsblkcnt64_t f_ffree;
+    __fsid_t f_fsid;
+    int f_namelen;
+    int f_spare[6];
+  };
+#endif
+
 #endif /* bits/statfs.h */
index 34f4682b3ceeba30b4a81a0d8dd14a321ba178f0..daa94336de166434c811aa0e12eb4aea48105816 100644 (file)
@@ -65,6 +65,8 @@ typedef long int __off_t;             /* Type of file sizes and offsets.  */
 typedef __quad_t __loff_t;             /* Type of file sizes and offsets.  */
 typedef int __pid_t;                   /* Type of process identifications.  */
 typedef int __ssize_t;                 /* Type of a byte count, or error.  */
+typedef long int __rlim_t;             /* Type of resource counts.  */
+typedef __quad_t __rlim64_t;           /* Type of resource counts (LFS).  */
 
 typedef struct
   {
@@ -100,4 +102,25 @@ typedef struct
 
 typedef int __key_t;
 
+
+/* Types from the Large File Support interface.  */
+
+/* Type to count number os disk blocks.  */
+typedef __u_long __blkcnt_t;
+typedef __u_quad_t __blkcnt64_t;
+
+/* Type to count file system blocks.  */
+typedef long int __fsblkcnt_t;
+typedef __quad_t __fsblkcnt64_t;
+
+/* Type to count file system inodes.  */
+typedef __u_long __fsfilcnt_t;
+typedef __u_quad_t __fsfilcnt64_t;
+
+/* Type of file serial numbers.  */
+typedef __u_long __ino64_t;
+
+/* Type of file sizes and offsets.  */
+typedef __loff_t __off64_t;
+
 #endif /* bits/types.h */
index 2b855c7a8465df58f35a91c16c531fa7a02141e4..dd1c77a99ec2231dda1a4f95bcd310c9ba19edf4 100644 (file)
@@ -1,5 +1,5 @@
-/* getsysstats - Determine various system internal values, Linux version.
-   Copyright (C) 1996 Free Software Foundation, Inc.
+/* Determine various system internal values, Linux version.
+   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -30,6 +30,7 @@
 
 /* Determine the path to the /proc filesystem if available.  */
 static char *
+internal_function
 get_proc_path (char *buffer, size_t bufsize)
 {
   FILE *fp;
@@ -115,6 +116,7 @@ weak_alias (__get_nprocs, get_nprocs_conf)
 /* General function to get information about memory status from proc
    filesystem.  */
 static int
+internal_function
 phys_pages_info (const char *format)
 {
   FILE *fp;
index 36863db486debe635b558d2abc4cc35fb23fe7df..2e0bc5bf8f60ea2a07140e7ad0c59791454b1865 100644 (file)
@@ -28,6 +28,7 @@
 /* Try to get a socket to talk to the kernel.  */
 #if defined SIOGIFINDEX || defined SIOGIFNAME
 static int
+internal_function
 opensock (void)
 {
   /* Cache the last AF that worked, to avoid many redundant calls to
index a1284db6be5ac727a585be48e6b2c3e8830bdc12..31dd86f232a5d8e628bd1913999d299a652e8da9 100644 (file)
@@ -1,5 +1,5 @@
 /* Long-long seek operation.
-   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
@@ -25,7 +25,7 @@ extern int __sys_llseek (int fd, off_t offset_hi, off_t offset_lo,
 
 /* Seek to OFFSET on FD, starting from WHENCE.  */
 loff_t
-llseek (int fd, loff_t offset, int whence)
+__llseek (int fd, loff_t offset, int whence)
 {
   loff_t result;
 
@@ -33,3 +33,5 @@ llseek (int fd, loff_t offset, int whence)
                                 (off_t) (offset & 0xffffffff),
                                 &result, whence) ?: result);
 }
+weak_alias (__llseek, llseek)
+weak_alias (__llseek, lseek64)
diff --git a/sysdeps/unix/sysv/linux/lseek64.c b/sysdeps/unix/sysv/linux/lseek64.c
new file mode 100644 (file)
index 0000000..d81e98f
--- /dev/null
@@ -0,0 +1 @@
+/* We don't need a definition since the llseek function is what we need.  */
index 2586140fdc29e29a3e62270ac3b18dd791f7f631..09d6fb6d4cece6f4c041ea79488979916a91741d 100644 (file)
@@ -18,7 +18,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #ifndef _FCNTL_H
-#error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
 #endif
 
 #include <sys/types.h>
@@ -26,8 +26,8 @@
 
 /* In GNU, read and write are bits (unlike BSD).  */
 #ifdef __USE_GNU
-#define O_READ         O_RDONLY        /* Open for reading.  */
-#define O_WRITE                O_WRONLY        /* Open for writing.  */
+# define O_READ                O_RDONLY        /* Open for reading.  */
+# define O_WRITE       O_WRONLY        /* Open for writing.  */
 #endif
 /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
    located on an ext2 file system */
 
 #define O_NDELAY       O_NONBLOCK
 
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get f_flags */
-#define F_SETFD                2       /* set f_flags */
-#define F_GETFL                3       /* more flags (cloexec) */
-#define F_SETFL                4
-#define F_GETLK                14
-#define F_SETLK                6
-#define F_SETLKW       7
-
-#define F_SETOWN       24      /*  for sockets. */
-#define F_GETOWN       23      /*  for sockets. */
+/* XXX missing */
+#define O_LARGEFILE    0
+
+/* Values for the second argument to `fcntl'.  */
+#define F_DUPFD                0       /* Duplicate file descriptor.  */
+#define F_GETFD                1       /* Get file descriptor flags.  */
+#define F_SETFD                2       /* Set file descriptor flags.  */
+#define F_GETFL                3       /* Get file status flags.  */
+#define F_SETFL                4       /* Set file status flags.  */
+#define F_GETLK                14      /* Get record locking info.  */
+#define F_SETLK                6       /* Set record locking info (non-blocking).  */
+#define F_SETLKW       7       /* Set record locking info (blocking).  */
+
+/* XXX missing */
+#define F_GETLK64      14      /* Get record locking info.  */
+#define F_SETLK64      6       /* Set record locking info (non-blocking).  */
+#define F_SETLKW64     7       /* Set record locking info (blocking).  */
+
+#ifdef __USE_BSD
+# define F_SETOWN      5       /* Get owner of socket (receiver of SIGIO).  */
+# define F_GETOWN      6       /* Set owner of socket (receiver of SIGIO).  */
+#endif
 
 /* for F_[GET|SET]FL */
 #define FD_CLOEXEC     1       /* actually anything with low bit set goes */
 
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
+/* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
+#define F_RDLCK                0       /* Read lock.  */
+#define F_WRLCK                1       /* Write lock.  */
+#define F_UNLCK                2       /* Remove lock.  */
 
 /* for old implementation of bsd flock () */
 #define F_EXLCK                4       /* or 3 */
                                   blocking */
 #define LOCK_UN                8       /* remove lock */
 
-typedef struct flock {
-       short l_type;
-       short l_whence;
-       __off_t l_start;
-       __off_t l_len;
-       long  l_sysid;                  /* XXX */
-       __pid_t l_pid;
-       long  pad[4];                   /* XXX */
-} flock_t;
+typedef struct flock
+  {
+    short int l_type;  /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;        /* Where `l_start' is relative to (like `lseek').  */
+#ifndef __USE_FILE_OFFSET64
+    __off_t l_start;   /* Offset where the lock begins.  */
+    __off_t l_len;     /* Size of the locked area; zero means until EOF.  */
+#else
+    __off64_t l_start; /* Offset where the lock begins.  */
+    __off64_t l_len;   /* Size of the locked area; zero means until EOF.  */
+#endif
+    long int l_sysid;  /* XXX */
+    __pid_t l_pid;     /* Process holding the lock.  */
+    long int pad[4];   /* XXX */
+  } flock_t;
+
+#ifdef __USE_LARGEFILE64
+struct flock64
+  {
+    short int l_type;  /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;        /* Where `l_start' is relative to (like `lseek').  */
+    __off64_t l_start; /* Offset where the lock begins.  */
+    __off64_t l_len;   /* Size of the locked area; zero means until EOF.  */
+    long int l_sysid;  /* XXX */
+    __pid_t l_pid;     /* Process holding the lock.  */
+    long int pad[4];   /* XXX */
+  };
+#endif
 
 
 /* Define some more compatibility macros to be backward compatible with
    BSD systems which did not managed to hide these kernel macros.  */
 #ifdef __USE_BSD
-#define        FAPPEND         O_APPEND
-#define        FFSYNC          O_FSYNC
-#define FASYNC         O_ASYNC
-#define        FNONBLOCK       O_NONBLOCK
-#define        FNDELAY         O_NDELAY
+# define FAPPEND       O_APPEND
+# define FFSYNC                O_FSYNC
+# define FASYNC                O_ASYNC
+# define FNONBLOCK     O_NONBLOCK
+# define FNDELAY       O_NDELAY
 #endif /* Use BSD.  */
index a797b34c387703e2b6963e8c90cf2e14cd70a3d1..f27a75eb9a810d5b9cde4e1ad75a719b1e6149b6 100644 (file)
@@ -39,14 +39,22 @@ struct stat
   {
     unsigned long int st_dev;
     long int st_pad1[3];
+#ifndef __USE_FILE_OFFSET64
     __ino_t st_ino;            /* File serial number.          */
+#else
+    __ino64_t st_ino;          /* File serial number.          */
+#endif
     __mode_t st_mode;          /* File mode.  */
     __nlink_t st_nlink;                /* Link count.  */
     __uid_t st_uid;            /* User ID of the file's owner. */
     __gid_t st_gid;            /* Group ID of the file's group.*/
     unsigned long int st_rdev; /* Device number, if device.  */
     long int st_pad2[2];
+#ifndef __USE_FILE_OFFSET64
     __off_t st_size;           /* Size of file, in bytes.  */
+#else
+    __off64_t st_size;         /* Size of file, in bytes.  */
+#endif
     /* SVR4 added this extra long to allow for expansion of off_t.  */
     long int st_pad3;
     /*
@@ -60,8 +68,11 @@ struct stat
     __time_t st_ctime;         /* Time of last status change.  */
     long int __reserved2;
     long int st_blksize;       /* Optimal block size for I/O.  */
-#define        _STATBUF_ST_BLKSIZE     /* Tell code we have this member.  */
-    long int st_blocks;                /* Number of 512-byte blocks allocated.  */
+#ifndef __USE_FILE_OFFSET64
+    __blkcnt_t st_blocks;      /* Number of 512-byte blocks allocated.  */
+#else
+    __blkcnt64_t st_blocks;    /* Number of 512-byte blocks allocated.  */
+#endif
     char st_fstype[16];                /* Filesystem type name */
     long int st_pad4[8];
     /* Linux specific fields */
@@ -69,6 +80,42 @@ struct stat
     unsigned int st_gen;
   };
 
+#ifdef __USE_LARGEFILE64
+struct stat64
+  {
+    unsigned long int st_dev;
+    long int st_pad1[3];
+    __ino64_t st_ino;          /* File serial number.          */
+    __mode_t st_mode;          /* File mode.  */
+    __nlink_t st_nlink;                /* Link count.  */
+    __uid_t st_uid;            /* User ID of the file's owner. */
+    __gid_t st_gid;            /* Group ID of the file's group.*/
+    unsigned long int st_rdev; /* Device number, if device.  */
+    long int st_pad2[2];
+    __off64_t st_size;         /* Size of file, in bytes.  */
+    /* SVR4 added this extra long to allow for expansion of off_t.  */
+    long int st_pad3;
+    /*
+     * Actually this should be timestruc_t st_atime, st_mtime and
+     * st_ctime but we don't have it under Linux.
+     */
+    __time_t st_atime;         /* Time of last access.  */
+    long int __reserved0;
+    __time_t st_mtime;         /* Time of last modification.  */
+    long int __reserved1;
+    __time_t st_ctime;         /* Time of last status change.  */
+    long int __reserved2;
+    long int st_blksize;       /* Optimal block size for I/O.  */
+    __blkcnt64_t st_blocks;    /* Number of 512-byte blocks allocated.  */
+    char st_fstype[16];                /* Filesystem type name */
+    long int st_pad4[8];
+    /* Linux specific fields */
+    unsigned int st_flags;
+    unsigned int st_gen;
+  };
+#endif
+
+#define        _STATBUF_ST_BLKSIZE     /* Tell code we have this member.  */
 
 /* Encoding of the file mode.  */
 
index 3b2306147c024414809f07004687fbda0be46264..2727b272579124de24934c5404e0c0d0a179a16a 100644 (file)
 #ifndef _BITS_STATFS_H
 #define _BITS_STATFS_H
 
+#include <bits/types.h>  /* for __fsid_t and __fsblkcnt_t*/
+
 struct statfs
   {
     long int f_type;
 #define f_fstyp f_type
     long int f_bsize;
     long int f_frsize; /* Fragment size - unsupported */
-    long int f_blocks;
-    long int f_bfree;
-    long int f_files;
-    long int f_ffree;
+#ifndef __USE_FILE_OFFSET64
+    __fsblkcnt_t f_blocks;
+    __fsblkcnt_t f_bfree;
+    __fsblkcnt_t f_files;
+    __fsblkcnt_t f_ffree;
+    __fsblkcnt_t f_bavail;
+#else
+    __fsblkcnt64_t f_blocks;
+    __fsblkcnt64_t f_bfree;
+    __fsblkcnt64_t f_files;
+    __fsblkcnt64_t f_ffree;
+    __fsblkcnt64_t f_bavail;
+#endif
+
+       /* Linux specials */
+    __fsid_t f_fsid;
+    long int f_namelen;
+    long int f_spare[6];
+  };
+
+#ifdef __USE_LARGEFILE64
+struct statfs64
+  {
+    long int f_type;
+#define f_fstyp f_type
+    long int f_bsize;
+    long int f_frsize; /* Fragment size - unsupported */
+    __fsblkcnt64_t f_blocks;
+    __fsblkcnt64_t f_bfree;
+    __fsblkcnt64_t f_files;
+    __fsblkcnt64_t f_ffree;
+    __fsblkcnt64_t f_bavail;
 
        /* Linux specials */
-    long int f_bavail;
     __fsid_t f_fsid;
     long int f_namelen;
     long int f_spare[6];
   };
+#endif
 
 #endif /* bits/statfs.h */
index b92139aab4540c5952cf7945fc64b37c4dab57b7..f6e71b79b677f8eea85f70e5876769509148be7c 100644 (file)
@@ -25,7 +25,7 @@ extern int __syscall_poll __P ((struct pollfd *fds, unsigned int nfds,
 weak_extern (__syscall_poll)
 
 static int __emulate_poll __P ((struct pollfd *fds, unsigned long int nfds,
-                               int timeout));
+                               int timeout)) internal_function;
 
 /* The real implementation.  */
 int
@@ -58,5 +58,6 @@ poll (fds, nfds, timeout)
 
 
 /* Get the emulation code.  */
-#define poll(fds, nfds, timeout) static __emulate_poll (fds, nfds, timeout)
+#define poll(fds, nfds, timeout) \
+  static internal_function __emulate_poll (fds, nfds, timeout)
 #include <sysdeps/unix/bsd/poll.c>
index 2c215ce920bf7578118453befa754e40da789d24..10cd5196097bbfd75c3d9709547b5b00911dc5ad 100644 (file)
@@ -24,7 +24,7 @@
 
 extern ssize_t __syscall_readv __P ((int, __const struct iovec *, int));
 static ssize_t __atomic_readv_replacement __P ((int, __const struct iovec *,
-                                               int));
+                                               int)) internal_function;
 
 
 /* Not all versions of the kernel support the large number of records.  */
@@ -56,5 +56,5 @@ __readv (fd, vector, count)
 }
 weak_alias (__readv, readv)
 
-#define __readv static __atomic_readv_replacement
+#define __readv static internal_function __atomic_readv_replacement
 #include <sysdeps/posix/readv.c>
index ca4d34c14e641c10180e50f20ca70c37cb5b46f7..9e8c589b9a07d4243c78f9f6f5d80a601fa80fda 100644 (file)
@@ -24,8 +24,8 @@
 
 /* In GNU, read and write are bits (unlike BSD). */
 #ifdef __USE_GNU
-#define O_READ          O_RDONLY /* Open for reading. */
-#define O_WRITE         O_WRONLY /* Open for writing. */
+# define O_READ                O_RDONLY /* Open for reading. */
+# define O_WRITE       O_WRONLY /* Open for writing. */
 #endif
 
 /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
 #define O_NDELAY       (0x0004 | O_NONBLOCK)
 #define O_NOCTTY       0x8000  /* not fcntl */
 
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get f_flags */
-#define F_SETFD                2       /* set f_flags */
-#define F_GETFL                3       /* more flags (cloexec) */
-#define F_SETFL                4
-#define F_GETOWN       5       /*  for sockets. */
-#define F_SETOWN       6       /*  for sockets. */
-#define F_GETLK                7
-#define F_SETLK                8
-#define F_SETLKW       9
+/* XXX missing */
+#define O_LARGEFILE    0
+
+/* Values for the second argument to `fcntl'.  */
+#define F_DUPFD                0       /* Duplicate file descriptor.  */
+#define F_GETFD                1       /* Get file descriptor flags.  */
+#define F_SETFD                2       /* Set file descriptor flags.  */
+#define F_GETFL                3       /* Get file status flags.  */
+#define F_SETFL                4       /* Set file status flags.  */
+#ifdef __USE_BSD
+# define F_GETOWN      5       /* Get owner of socket (receiver of SIGIO).  */
+# define F_SETOWN      6       /* Set owner of socket (receiver of SIGIO).  */
+#endif
+#define F_GETLK                7       /* Get record locking info.  */
+#define F_SETLK                8       /* Set record locking info (non-blocking).  */
+#define F_SETLKW       9       /* Set record locking info (blocking).  */
+
+/* XXX missing */
+#define F_GETLK64      7       /* Get record locking info.  */
+#define F_SETLK64      8       /* Set record locking info (non-blocking).  */
+#define F_SETLKW64     9       /* Set record locking info (blocking).  */
 
 /* for F_[GET|SET]FL */
 #define FD_CLOEXEC     1       /* actually anything with low bit set goes */
 
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                1
-#define F_WRLCK                2
-#define F_UNLCK                3
+/* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
+#define F_RDLCK                1       /* Read lock.  */
+#define F_WRLCK                2       /* Write lock.  */
+#define F_UNLCK                3       /* Remove lock.  */
 
 /* for old implementation of bsd flock () */
 #define F_EXLCK                4       /* or 3 */
 
 struct flock
   {
-    short int l_type;
-    short int l_whence;
-    __off_t l_start;
-    __off_t l_len;
-    __pid_t l_pid;
+    short int l_type;  /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;        /* Where `l_start' is relative to (like `lseek').  */
+#ifndef __USE_FILE_OFFSET64
+    __off_t l_start;   /* Offset where the lock begins.  */
+    __off_t l_len;     /* Size of the locked area; zero means until EOF.  */
+#else
+    __off64_t l_start; /* Offset where the lock begins.  */
+    __off64_t l_len;   /* Size of the locked area; zero means until EOF.  */
+#endif
+    __pid_t l_pid;     /* Process holding the lock.  */
     short int __unused;
   };
 
+#ifdef __USE_LARGEFILE64
+struct flock64
+  {
+    short int l_type;  /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;        /* Where `l_start' is relative to (like `lseek').  */
+    __off64_t l_start; /* Offset where the lock begins.  */
+    __off64_t l_len;   /* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;     /* Process holding the lock.  */
+    short int __unused;
+  };
+#endif
+
 /* Define some more compatibility macros to be backward compatible with
    BSD systems which did not managed to hide these kernel macros.  */
 #ifdef __USE_BSD
-#define        FAPPEND         O_APPEND
-#define        FFSYNC          O_FSYNC
-#define        FASYNC          O_ASYNC
-#define        FNONBLOCK       O_NONBLOCK
-#define        FNDELAY         O_NDELAY
+# define FAPPEND       O_APPEND
+# define FFSYNC                O_FSYNC
+# define FASYNC                O_ASYNC
+# define FNONBLOCK     O_NONBLOCK
+# define FNDELAY       O_NDELAY
 #endif /* Use BSD.  */
 
 #endif
index 46867d8e41fea3a502d1cf78db32ef12f8b2a748..b33493ee46a47642b2838ce13468835494b2a5ed 100644 (file)
 #undef  TCSETS
 #undef  TCSETSW
 #undef  TCSETSF
-#define TCGETS _IOR ('T', 8, struct __kernel_termios)
-#define TCSETS _IOW ('T', 9, struct __kernel_termios)
-#define TCSETSW        _IOW ('T', 10, struct __kernel_termios)
-#define TCSETSF        _IOW ('T', 11, struct __kernel_termios)
+#define TCGETS _IOR ('T', 8, char[36])
+#define TCSETS _IOW ('T', 9, char[36])
+#define TCSETSW        _IOW ('T', 10, char[36])
+#define TCSETSF        _IOW ('T', 11, char[36])
 
 #include <linux/sockios.h>
 
index 462f7c299832cb3a92499e0b44aa4c3bbe7dbbe0..a417928863273e46c83d93cb3debf0e4c3c2278c 100644 (file)
@@ -27,9 +27,9 @@
 
 /* Convenience types.  */
 typedef unsigned char __u_char;
-typedef unsigned short __u_short;
+typedef unsigned short int __u_short;
 typedef unsigned int __u_int;
-typedef unsigned long __u_long;
+typedef unsigned long int __u_long;
 typedef unsigned long int __u_quad_t;
 typedef long int __quad_t;
 typedef signed char __int8_t;
@@ -45,13 +45,15 @@ typedef __quad_t *__qaddr_t;
 typedef __u_long __dev_t;              /* Type of device numbers.  */
 typedef __u_int __uid_t;               /* Type of user identifications.  */
 typedef __u_int __gid_t;               /* Type of group identifications.  */
-typedef __u_int __ino_t;               /* Type of file serial numbers.  */
+typedef __u_long __ino_t;              /* Type of file serial numbers.  */
 typedef __u_int __mode_t;              /* Type of file attribute bitmasks.  */
 typedef __u_int __nlink_t;             /* Type of file link counts.  */
 typedef long int __off_t;              /* Type of file sizes and offsets.  */
 typedef __quad_t __loff_t;             /* Type of file sizes and offsets.  */
 typedef int __pid_t;                   /* Type of process identifications.  */
 typedef long long int __ssize_t;       /* Type of a byte count, or error.  */
+typedef long int __rlim_t;             /* Type of resource counts.  */
+typedef long int __rlim64_t;           /* Type of resource counts (LFS).  */
 
 typedef struct
   {
@@ -92,4 +94,19 @@ typedef struct
 
 typedef int __key_t;
 
+
+/* Types from the Large File Support interface.  */
+
+/* Type to count number os disk blocks.  */
+typedef long int __blkcnt_t;
+typedef __quad_t __blkcnt64_t;
+
+/* Type to count file system blocks.  */
+typedef unsigned int __fsblkcnt_t;
+typedef __u_quad_t __fsblkcnt64_t;
+
+/* Type to count file system inodes.  */
+typedef unsigned long int __fsfilcnt_t;
+typedef __u_quad_t __fsfilcnt64_t;
+
 #endif /* bits/types.h */
index fcb752e3ec87ff559b68f0c80d1189e2de1441c6..dd509a7e8af6408b800103f35d14d148ad5a9298 100644 (file)
@@ -2,7 +2,7 @@
 struct kernel_stat
   {
     unsigned int st_dev;
-    unsigned int st_ino;
+    unsigned long int st_ino;
     unsigned int st_mode;
     short int st_nlink;
     unsigned int st_uid;
@@ -18,5 +18,5 @@ struct kernel_stat
     unsigned long int __unused2;
   };
 
-#define _HAVE___UNUSED1 
-#define _HAVE___UNUSED2 
+#define _HAVE___UNUSED1
+#define _HAVE___UNUSED2
index fcc5cb5a48a22a12fd8398a1aec77b2cd1a3ae3c..65a1d348364c149c0aef8c8b77ab1f42ace06bef 100644 (file)
 
 /* int _setjmp(jmp_buf) */
 
-.weak _setjmp
-ENTRY(_setjmp)
-
+ENTRY(__setjmp)
        ba      __sigsetjmp_local
         set    0, %o1
-
-END(setjmp)
+END(__setjmp)
 
 /* int setjmp(jmp_buf) */
 
-.weak setjmp
 ENTRY(setjmp)
-
        set     1, %o1
-
 END(setjmp)
 
 /* int __sigsetjmp(jmp_buf, savemask)  */
@@ -65,3 +59,6 @@ __sigsetjmp_local:
         mov    %g1, %o0
 
 END(__sigsetjmp)
+
+weak_alias(__setjmp, _setjmp)
+weak_extern(setjmp)
index c8f512c00ca3fec4e22b435967fd0412349899fa..129702e33c7cb7ae9d0a1547d45095374133c52f 100644 (file)
@@ -44,8 +44,18 @@ __BEGIN_DECLS
 
 extern __caddr_t __mmap __P ((__caddr_t __addr, size_t __len, int __prot,
                              int __flags, int __fd, __off_t __offset));
+#ifndef __USE_FILE_OFFSET64
 extern __caddr_t mmap __P ((__caddr_t __addr, size_t __len, int __prot,
                            int __flags, int __fd, __off_t __offset));
+#else
+extern __caddr_t mmap __P ((__caddr_t __addr, size_t __len, int __prot,
+                           int __flags, int __fd, __off_t __offset))
+     __asm__ ("mmap64");
+#endif
+#ifdef __USE_LARGEFILE64
+extern __caddr_t mmap64 __P ((__caddr_t __addr, size_t __len, int __prot,
+                             int __flags, int __fd, __off64_t __offset));
+#endif
 
 /* Deallocate any mapping for the region starting at ADDR and extending LEN
    bytes.  Returns 0 if successful, -1 for errors (and sets errno).  */
index d5f6239cd23d8cbcf54924424ce080f23a1d3c50..c2a56a2c29a75435bb4d4afd6e9a797541746135 100644 (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,7 @@
 
 #define        NBBY            CHAR_BIT
 #ifndef        NGROUPS
-#define        NGROUPS         NGROUPS_MAX
+# define NGROUPS               NGROUPS_MAX
 #endif
 #define        MAXSYMLINKS     5
 #define        CANBSIZ         MAX_CANON
@@ -47,7 +47,7 @@
 
 /* Macros for counting and rounding.  */
 #ifndef howmany
-#define        howmany(x, y)   (((x)+((y)-1))/(y))
+# define howmany(x, y) (((x)+((y)-1))/(y))
 #endif
 #define        roundup(x, y)   ((((x)+((y)-1))/(y))*(y))
 #define powerof2(x)    ((((x)-1)&(x))==0)
index 31e794fb049267f3c756f66f43c7cd7ed9c482e1..3b3c5b65fcdf531a7e983872736a9a2a4ce310c4 100644 (file)
@@ -24,7 +24,7 @@
 
 extern ssize_t __syscall_writev __P ((int, const struct iovec *, int));
 static ssize_t __atomic_writev_replacement __P ((int, const struct iovec *,
-                                                int));
+                                                int)) internal_function;
 
 
 /* Not all versions of the kernel support the large number of records.  */
@@ -56,5 +56,5 @@ __writev (fd, vector, count)
 }
 weak_alias (__writev, writev)
 
-#define __writev static __atomic_writev_replacement
+#define __writev static internal_function __atomic_writev_replacement
 #include <sysdeps/posix/writev.c>
index 9b6fed083d97c732a4fe05f8ea539207f77c9555..f3f447303224c8c99299d5fd9125f6b88da144ed 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Brendan Kehoe (brendan@zen.org).
 
@@ -58,7 +58,7 @@ struct stat
     long st_blksize;           /* Optimal block size for I/O.  */
 #define        _STATBUF_ST_BLKSIZE     /* Tell code we have this member.  */
 
-    long st_blocks;            /* Number of 512-byte blocks allocated.  */
+    __blkcnt_t st_blocks;      /* Number of 512-byte blocks allocated.  */
     char st_fstype[16];                /* The type of this filesystem.  */
     int st_aclcnt;
     unsigned long st_level;
index ea5f1f4279759313d65c05e54ef10230318d3519..82ab37fd93152fd338c17f89ca1706a49a84f6d8 100644 (file)
@@ -52,7 +52,7 @@ struct stat
     __time_t st_ctime;         /* Time of last status change.  */
     unsigned long int st_ctime_usec;
 
-    long st_blksize;           /* Optimal block size for I/O.  */
+    __blkcnt_t st_blksize;     /* Optimal block size for I/O.  */
 #define        _STATBUF_ST_BLKSIZE     /* Tell code we have this member.  */
 
     long st_blocks;            /* Number of 512-byte blocks allocated.  */
index a5ff12e663ba09473f1ba7e831d71d51399e1d7a..c0582c18766137209286e4e5db937a46e841e4cb 100644 (file)
@@ -341,4 +341,33 @@ typedef unsigned long long int uint_fast64_t;
 #define SCNoPTR                "o"
 #define SCNxPTR                "x"
 
+
+/* Macros for string conversion.  */
+
+/* Like `strtol' but convert to `intmax_t'.  */
+#define strtoimax(nptr, endptr, base) \
+    __strtoll_internal (nptr, endptr, base, 0)
+
+#ifndef __strtoll_internal_defined
+extern long long int __strtoll_internal __P ((__const char *__restrict __nptr,
+                                             char **__restrict __endptr,
+                                             int __base, int __group));
+# define __strtoll_internal_defined    1
+#endif
+
+
+/* Like `strtoul' but convert to `uintmax_t'.  */
+#define strtoumax(nptr, endptr, base) \
+    __strtoull_internal (nptr, endptr, base, 0)
+
+#ifndef __strtoull_internal_defined
+extern unsigned long long int __strtoull_internal __P ((__const char *
+                                                       __restrict __nptr,
+                                                       char **
+                                                       __restrict __endptr,
+                                                       int __base,
+                                                       int __group));
+# define __strtoull_internal_defined   1
+#endif
+
 #endif /* inttypes.h */
index f1dd2ffee0bb8dacf3c2ab4c24d809a4237602a0..2a2628428d6d292c131869a438cee68d16320b7e 100644 (file)
@@ -341,4 +341,31 @@ typedef unsigned long int uint_fast64_t;
 #define SCNoPTR                "lo"
 #define SCNxPTR                "lx"
 
+
+/* Macros for string conversion.  */
+
+/* Like `strtol' but convert to `intmax_t'.  */
+#define strtoimax(nptr, endptr, base) \
+    __strtol_internal (nptr, endptr, base, 0)
+
+#ifndef __strtol_internal_defined
+extern long int __strtol_internal __P ((__const char *__restrict __nptr,
+                                       char **__restrict __endptr,
+                                       int __base, int __group));
+# define __strtol_internal_defined     1
+#endif
+
+
+/* Like `strtoul' but convert to `uintmax_t'.  */
+#define strtoumax(nptr, endptr, base) \
+    __strtoul_internal (nptr, endptr, base, 0)
+
+#ifndef __strtoul_internal_defined
+extern unsigned long int __strtoul_internal __P ((__const char *
+                                                 __restrict __nptr,
+                                                 char **__restrict __endptr,
+                                                 int __base, int __group));
+# define __strtoul_internal_defined    1
+#endif
+
 #endif /* inttypes.h */
index a55ddbc7a25894b14e817ee4b1fc8df5493dc414..3c8d16eed815d7af168b764f2fbf76b66ffa8512 100644 (file)
@@ -34,7 +34,7 @@ __BEGIN_DECLS
 #ifdef __USE_BSD
 /* Compare a character C to a value VAL from the `c_cc' array in a
    `struct termios'.  If VAL is _POSIX_VDISABLE, no character can match it.  */
-#define        CCEQ(val, c)    ((c) == (val) && (val) != _POSIX_VDISABLE)
+# define CCEQ(val, c)  ((c) == (val) && (val) != _POSIX_VDISABLE)
 #endif
 
 /* Return the output baud rate stored in *TERMIOS_P.  */
@@ -86,7 +86,7 @@ extern int tcflow __P ((int __fd, int __action));
 
 
 #ifdef __USE_BSD
-#include <sys/ttydefaults.h>
+# include <sys/ttydefaults.h>
 #endif
 
 __END_DECLS
index c189555c40f6530b138ee8bb20bbd5fee09d7c68..1c3160106e008e162c54f92c8c50a824d1eeedff 100644 (file)
@@ -1,28 +1,14 @@
-The source files
-       `zic.c'
-       `zdump.c'
-       `tzselect.ksh'
-       `checktab.awk'
-come from the tzcode1997g package by Arthur David Olsen et.al.
+The files
+       zic.c zdump.c ialloc.c scheck.c tzfile.h
+       private.h tzselect.ksh checktab.awk
+come from the tzcode1997g package by Arthur David Olson et.al.
 
 The files
-       `africa'
-       `antarctica'
-       `asia'
-       `australasia'
-       `europe'
-       `northamerica'
-       `southamerica'
-       `pacificnew'
-       `etcetera'
-       `factory'
-       `backward'
-       `systemv'
-       `solar87'
-       `solar88'
-       `solar89'
-       `iso3166.tab'
-       `zone.tab'
-       `leapseconds'
-       `yearistype'
-come from the tzdata1997h package by Arthur David Olsen et.al.
+       africa antarctica asia australasia europe
+       northamerica southamerica pacificnew etcetera factory
+       backward systemv solar87 solar88 solar89
+       iso3166.tab zone.tab leapseconds yearistype
+come from the tzdata1997i package by Arthur David Olson et.al.
+
+These packages may be found at ftp://elsie.nci.nih.gov/pub/.  Commentary
+should be addressed to tz@elsie.nci.nih.gov.
index 5c9608ceaa030ac244eb7c375a216bd57c33d58e..f58719da5b8fe0d395b1080979459bdf0b70f237 100644 (file)
@@ -1,14 +1,14 @@
-# @(#)africa   7.19
+# @(#)africa   7.20
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert <eggert@twinsun.com> (1996-11-22):
+# From Paul Eggert <eggert@twinsun.com> (1997-10-05):
 #
 # A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks, The International Atlas (3rd edition),
-# San Diego: ACS Publications, Inc. (1991).
+# Thomas G. Shanks, The International Atlas (4th edition),
+# San Diego: ACS Publications, Inc. (1995).
 #
 # Gwillim Law <LAW@encmail.encompass.com> writes that a good source
 # for recent time zone data is the International Air Transport
 # Derek Howse, Greenwich time and the discovery of the longitude,
 # Oxford University Press (1980).
 #
-# For Africa I invented the following time zone abbreviations.
-#              LMT     Local Mean Time
-#      -1:00   AAT     Atlantic Africa Time (no longer used)
-#       0:00   WAT     West Africa Time
-#       1:00   CAT     Central Africa Time
-#       2:00   SAT     South Africa Time
+# Previous editions of this database used WAT, CAT, SAT, and EAT
+# for +0:00 through +3:00, respectively,
+# but Mark R V Murray <markm@iafrica.com> reports that
+# `SAST' is the official abbreviation for +2:00 in the country of South Africa,
+# `CAT' is commonly used for +2:00 in countries north of South Africa, and
+# `WAT' is probably the best name for +1:00, as the common phrase for
+# the area that includes Nigeria is ``West Africa''.
+# He has heard of ``Western Sahara Time'' for +0:00 but can find no reference.
+#
+# To make things confusing, `WAT' seems to have been used for -1:00 long ago;
+# I'd guess that this was because people needed _some_ name for -1:00,
+# and at the time, far west Africa was the only major land area in -1:00.
+# This usage is now obsolete, as the last use of -1:00 on the African
+# mainland seems to have been 1976 in Western Sahara.
+#
+# To summarize, the following abbreviations seem to have some currency:
+#      -1:00   WAT     West Africa Time (no longer used)
+#       0:00   GMT     Greenwich Mean Time
+#       2:00   CAT     Central Africa Time
+#       2:00   SAST    South Africa Standard Time
+# and Murray suggests the following abbreviation:
+#       1:00   WAT     West Africa Time
+# I realize that this leads to `WAT' being used for both -1:00 and 1:00
+# for times before 1976, but this is the best I can think of
+# until we get more information.
+#
+# I invented the following abbreviations; corrections are welcome!
+#       2:00   WAST    West Africa Summer Time
+#       2:30   BEAT    British East Africa Time (no longer used)
+#       2:45   BEAUT   British East Africa Unified Time (no longer used)
+#       3:00   CAST    Central Africa Summer Time (no longer used)
+#       3:00   SAST    South Africa Summer Time (no longer used)
 #       3:00   EAT     East Africa Time
-# The final `T' is replaced by `ST' for summer time, e.g. `SAST'.
-# BEAT is British East Africa Time, which was 2:30 before 1948 and 2:45 after.
-
+#       4:00   EAST    East Africa Summer Time (no longer used)
 
 # Algeria
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
@@ -79,7 +103,7 @@ Zone Africa/Algiers  0:12:12 -       LMT     1891 Mar 15 0:01
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Luanda   0:52:56 -       LMT     1892
                        0:52:04 -       LMT     1911 May 26 # Luanda Mean Time?
-                       1:00    -       CAT
+                       1:00    -       WAT
 
 # Bassas da India
 # uninhabited
@@ -88,31 +112,31 @@ Zone       Africa/Luanda   0:52:56 -       LMT     1892
 # Whitman says they switched to 1:00 in 1946, not 1934; go with Shanks.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Africa/Porto-Novo 0:10:28 -       LMT     1912
-                       0:00    -       WAT     1934 Feb 26
-                       1:00    -       CAT
+                       0:00    -       GMT     1934 Feb 26
+                       1:00    -       WAT
 
 # Botswana
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Gaborone 1:43:40 -       LMT     1885
-                       2:00    -       SAT     1943 Sep 19 2:00
-                       2:00    1:00    SAST    1944 Mar 19 2:00
-                       2:00    -       SAT
+                       2:00    -       CAT     1943 Sep 19 2:00
+                       2:00    1:00    CAST    1944 Mar 19 2:00
+                       2:00    -       CAT
 
 # Burkina Faso
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Africa/Ouagadougou        -0:06:04 -      LMT     1912
-                        0:00   -       WAT
+                        0:00   -       GMT
 
 # Burundi
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Africa/Bujumbura  1:57:28 -       LMT     1890
-                       2:00    -       SAT
+                       2:00    -       CAT
 
 # Cameroon
 # Whitman says they switched to 1:00 in 1920; go with Shanks.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Douala   0:38:48 -       LMT     1912
-                       1:00    -       CAT
+                       1:00    -       WAT
 
 # Cape Verde
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -125,14 +149,14 @@ Zone Atlantic/Cape_Verde -1:34:04 -       LMT     1907                    # Praia
 # Central African Republic
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Bangui   1:14:20 -       LMT     1912
-                       1:00    -       CAT
+                       1:00    -       WAT
 
 # Chad
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Ndjamena 1:00:12 -       LMT     1912
-                       1:00    -       CAT     1979 Oct 14
-                       1:00    1:00    CAST    1980 Mar  8
-                       1:00    -       CAT
+                       1:00    -       WAT     1979 Oct 14
+                       1:00    1:00    WAST    1980 Mar  8
+                       1:00    -       WAT
 
 # Comoros
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -142,19 +166,19 @@ Zone      Indian/Comoro   2:53:04 -       LMT     1911 Jul   # Moroni, Gran Comoro
 # Democratic Republic of Congo
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Africa/Kinshasa   1:01:12 -       LMT     1897 Nov 9
-                       1:00    -       CAT
+                       1:00    -       WAT
 Zone Africa/Lubumbashi 1:49:52 -       LMT     1897 Nov 9
-                       2:00    -       SAT
+                       2:00    -       CAT
 
 # Republic of the Congo
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Africa/Brazzaville        1:01:08 -       LMT     1912
-                       1:00    -       CAT
+                       1:00    -       WAT
 
 # Cote D'Ivoire
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Abidjan  -0:16:08 -      LMT     1912
-                        0:00   -       WAT
+                        0:00   -       GMT
 
 # Djibouti
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -165,18 +189,6 @@ Zone       Africa/Djibouti 2:52:36 -       LMT     1911 Jul
 
 # Egypt
 
-# From Bob Devine (1988-01-28):
-# Egypt: DST from first day of May to first of October (ending may
-# also be on Sept 30th not 31st -- you might want to ask one of the
-# soc.* groups, you might hit someone who could ask an embassy).
-# DST since 1960 except for 1981-82.
-
-# From U. S. Naval Observatory (1989-01-19):
-# EGYPT               2 H  AHEAD OF UTC
-# EGYPT               3 H  AHEAD OF UTC  MAY 17 - SEP 30 (AFTER
-# EGYPT                                  RAMADAN)
-
-# From Shanks (1991):
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Egypt   1940    only    -       Jul     15      0:00    1:00    S
 Rule   Egypt   1940    only    -       Oct      1      0:00    0       -
@@ -191,16 +203,15 @@ Rule      Egypt   1957    1958    -       Oct      1      0:00    0       -
 Rule   Egypt   1958    only    -       May      1      0:00    1:00    S
 Rule   Egypt   1959    1981    -       May      1      1:00    1:00    S
 Rule   Egypt   1959    1965    -       Sep     30      3:00    0       -
-Rule   Egypt   1966    1990    -       Oct      1      3:00    0       -
+Rule   Egypt   1966    1994    -       Oct      1      3:00    0       -
 Rule   Egypt   1982    only    -       Jul     25      1:00    1:00    S
 Rule   Egypt   1983    only    -       Jul     12      1:00    1:00    S
 Rule   Egypt   1984    1988    -       May      1      1:00    1:00    S
 Rule   Egypt   1989    only    -       May      6      1:00    1:00    S
-Rule   Egypt   1990    only    -       May      1      1:00    1:00    S
-Rule   Egypt   1991    1994    -       May      1      0:00    1:00    S
-Rule   Egypt   1991    1994    -       Oct      1      0:00    0       -
-Rule   Egypt   1995    max     -       Apr     lastFri 0:00    1:00    S
-Rule   Egypt   1995    max     -       Sep     lastFri 0:00    0       -
+Rule   Egypt   1990    1994    -       May      1      1:00    1:00    S
+# IATA (after 1990) says transitions are at 0:00; go with Shanks.
+Rule   Egypt   1995    max     -       Apr     lastFri 1:00    1:00    S
+Rule   Egypt   1995    max     -       Sep     lastFri 3:00    0       -
 
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Cairo    2:05:00 -       LMT     1900 Oct
@@ -209,20 +220,24 @@ Zone      Africa/Cairo    2:05:00 -       LMT     1900 Oct
 # Equatorial Guinea
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Malabo   0:35:08 -       LMT     1912
-                       0:00    -       WAT     1963 Dec 15
-                       1:00    -       CAT
+                       0:00    -       GMT     1963 Dec 15
+                       1:00    -       WAT
 
 # Eritrea
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Asmera   2:35:32 -       LMT     1870
                        2:35:32 -       AMT     1890          # Asmera Mean Time
-                       2:35:20 -       AAMT    1936 May 5    # Addis Ababa MT?
+                       2:35:20 -       ADMT    1936 May 5    # Adis Dera MT
                        3:00    -       EAT
 
 # Ethiopia
+# From Paul Eggert (1997-10-05):
+# Shanks writes that Ethiopia had six narrowly-spaced time zones between
+# 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.
+# We'll guess that 38E50 is for Adis Dera.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Africa/Addis_Ababa        2:34:48 -       LMT     1870
-                       2:35:20 -       AAMT    1936 May 5    # Addis Ababa MT?
+                       2:35:20 -       ADMT    1936 May 5    # Adis Dera MT
                        3:00    -       EAT
 
 # Europa Island
@@ -231,23 +246,20 @@ Zone Africa/Addis_Ababa   2:34:48 -       LMT     1870
 # Gabon
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Africa/Libreville 0:37:48 -       LMT     1912
-                       1:00    -       CAT
+                       1:00    -       WAT
 
 # Gambia
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Banjul   -1:06:36 -      LMT     1912
                        -1:06:36 -      BMT     1935    # Banjul Mean Time
-                       -1:00   -       AAT     1964
-                        0:00   -       WAT
+                       -1:00   -       WAT     1964
+                        0:00   -       GMT
 
 # Ghana
-# From Paul Eggert <eggert@twinsun.com> (1996-09-03):
-# WATST is my invention for ``West Africa one-Third Summer Time''.
-# From Shanks (1991):
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 # Whitman says DST was observed from 1931 to ``the present''; go with Shanks.
-Rule   Ghana   1936    1942    -       Sep      1      0:00    0:20    WATST
-Rule   Ghana   1936    1942    -       Dec     31      0:00    0       WAT
+Rule   Ghana   1936    1942    -       Sep      1      0:00    0:20    GHST
+Rule   Ghana   1936    1942    -       Dec     31      0:00    0       GMT
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Accra    -0:00:52 -      LMT     1918
                         0:00   Ghana   %s
@@ -258,35 +270,33 @@ Zone      Africa/Accra    -0:00:52 -      LMT     1918
 # Guinea
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Conakry  -0:54:52 -      LMT     1912
-                        0:00   -       WAT     1934 Feb 26
-                        1:00   -       CAT     1960
-                        0:00   -       WAT
+                        0:00   -       GMT     1934 Feb 26
+                       -1:00   -       WAT     1960
+                        0:00   -       GMT
 
 # Guinea-Bissau
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Bissau   -1:02:20 -      LMT     1911 May 26
-                        1:00   -       CAT     1975
-                        0:00   -       WAT
+                       -1:00   -       WAT     1975
+                        0:00   -       GMT
 
 # Juan de Nova
 # uninhabited
 
 # Kenya
-# From Paul Eggert <eggert@twinsun.com> (1993-11-18):
-# Shanks says the transition to 2:45 was in 1940, but it must have been 1948.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Nairobi  2:27:16 -       LMT     1928 Jul
                        3:00    -       EAT     1930
-                       2:30    -       BEAT    1948
-                       2:45    -       BEA   1960
+                       2:30    -       BEAT    1940
+                       2:45    -       BEAUT   1960
                        3:00    -       EAT
 
 # Lesotho
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Maseru   1:50:00 -       LMT     1903 Mar
-                       2:00    -       SA    1943 Sep 19 2:00
+                       2:00    -       SAST    1943 Sep 19 2:00
                        2:00    1:00    SAST    1944 Mar 19 2:00
-                       2:00    -       SAT
+                       2:00    -       SAST
 
 # Liberia
 # From Paul Eggert <eggert@twinsun.com> (1993-11-18):
@@ -297,25 +307,17 @@ Zone      Africa/Maseru   1:50:00 -       LMT     1903 Mar
 # For Liberia before 1972, Shanks reports -0:44, whereas Howse and Whitman
 # each report -0:44:30; go with the more precise figure.
 #
-# From Shanks (1991), as corrected by Whitman:
+# From Shanks, as corrected by Whitman:
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Monrovia -0:43:08 -      LMT     1882
                        -0:43:08 -      MMT     1919 Mar # Monrovia Mean Time
                        -0:44:30 -      LRT     1972 May # Liberia Time
-                        0:00   -       WAT
+                        0:00   -       GMT
 
 ###############################################################################
 
 # Libya
 
-# From Bob Devine (January 28 1988):
-# Libya: Since 1982 April 1st to September 30th (?)
-
-# From U. S. Naval Observatory (1989-01-19):
-# LIBYAN ARAB         1 H  AHEAD OF UTC  JAMAHIRIYA/LIBYA
-# LIBYAN ARAB         2 H  AHEAD OF UTC  APR 1 - SEP 30 JAMAHIRIYA/LIBYA
-
-# From Shanks (1991):
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Libya   1951    only    -       Oct     14      2:00    1:00    S
 Rule   Libya   1952    only    -       Jan      1      0:00    0       -
@@ -353,24 +355,24 @@ Zone Indian/Antananarivo 3:10:04 -        LMT     1911 Jul
 # Malawi
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Blantyre 2:20:00 -       LMT     1903 Mar
-                       2:00    -       SAT
+                       2:00    -       CAT
 
 # Mali
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Bamako   -0:32:00 -      LMT     1912
-                        0:00   -       WAT     1934 Feb 26
-                       -1:00   -       AAT     1960 Jun 20
-                        0:00   -       WAT
+                        0:00   -       GMT     1934 Feb 26
+                       -1:00   -       WAT     1960 Jun 20
+                        0:00   -       GMT
 # no longer different from Bamako, but too famous to omit
 Zone   Africa/Timbuktu -0:12:04 -      LMT     1912
-                        0:00   -       WAT
+                        0:00   -       GMT
 
 # Mauritania
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Africa/Nouakchott -1:03:48 -      LMT     1912
-                        0:00   -       WAT     1934 Feb 26
-                       -1:00   -       AAT     1960 Jun 20
-                        0:00   -       WAT
+                        0:00   -       GMT     1934 Feb 26
+                       -1:00   -       WAT     1960 Nov 28
+                        0:00   -       GMT
 
 # Mauritius
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -385,6 +387,7 @@ Zone        Indian/Mayotte  3:00:56 -       LMT     1911 Jul        # Mamoutzou
                        3:00    -       EAT
 
 # Morocco
+# See the `europe' file for Spanish Morocco (Africa/Ceuta).
 # RULE NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Morocco 1939    only    -       Sep     12       0:00   1:00    S
 Rule   Morocco 1939    only    -       Nov     19       0:00   0       -
@@ -408,36 +411,40 @@ Zone Africa/Casablanca    -0:30:20 -      LMT     1913 Oct 26
                         0:00   -       WET
 # Western Sahara
 Zone Africa/El_Aaiun   -0:52:48 -      LMT     1934 Jan
-                       -1:00   -       AAT     1976 Apr 14
+                       -1:00   -       WAT     1976 Apr 14
                         0:00   -       WET
 
 # Mozambique
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Maputo   2:10:20 -       LMT     1903 Mar
-                       2:00    -       SAT
+                       2:00    -       CAT
 
 # Namibia
+# Shanks says DST transitions are at 0:00; go with IATA.
+# The 1994-04-03 transition is from Shanks.
 # RULE NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Namibia 1994    max     -       Sep     Sun>=1  2:00    1:00    S
 Rule   Namibia 1995    max     -       Apr     Sun>=1  2:00    0       -
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Windhoek 1:08:24 -       LMT     1892 Feb 8
                        1:30    -       SWAT    1903 Mar        # SW Africa Time
-                       2:00    -       SA    1942 Sep 20 2:00
+                       2:00    -       SAST    1942 Sep 20 2:00
                        2:00    1:00    SAST    1943 Mar 21 2:00
-                       2:00    Namibia SA%sT
+                       2:00    -       SAST    1990 Mar 21 # independence
+                       2:00    -       CAT     1994 Apr  3
+                       1:00    Namibia WA%sT
 
 # Niger
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
-Zone   Africa/Niamey   0:08:28 -       LMT     1912
-                       1:00    -       CAT     1934 Feb 26
-                       0:00    -       WAT     1960
-                       1:00    -       CAT
+Zone   Africa/Niamey    0:08:28 -      LMT     1912
+                       -1:00   -       WAT     1934 Feb 26
+                        0:00   -       GMT     1960
+                        1:00   -       WAT
 
 # Nigeria
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Lagos    0:13:36 -       LMT     1919 Sep
-                       1:00    -       CAT
+                       1:00    -       WAT
 
 # Reunion
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -447,12 +454,15 @@ Zone      Indian/Reunion  3:41:52 -       LMT     1911 Jun        # Saint-Denis
 # Rwanda
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Kigali   2:00:16 -       LMT     1935 Jun
-                       2:00    -       SAT
+                       2:00    -       CAT
 
 # St Helena
+# From Paul Eggert (1997-10-05):
+# Shanks says St Helena was 1W26 (-0:05:44) from 1890 to 1951,
+# but this is most likely a typo for 5W42, the longitude of Jamestown.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Atlantic/St_Helena        -0:22:48 -      LMT     1890            # Jamestown
-                       -0:06   -       SHT     1951    # St Helena Time (?)
+                       -0:22:48 -      JMT     1951    # Jamestown Mean Time
                         0:00   -       GMT
 # The other parts of the St Helena territory are similar:
 #      Tristan da Cunha: on GMT, say Whitman and the CIA
@@ -464,13 +474,13 @@ Zone Atlantic/St_Helena   -0:22:48 -      LMT     1890            # Jamestown
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Sao_Tome  0:26:56 -      LMT     1884
                        -0:36:32 -      LMT     1912    # Lisbon Mean Time
-                        0:00   -       WAT
+                        0:00   -       GMT
 
 # Senegal
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Dakar    -1:09:44 -      LMT     1912
-                       -1:00   -       AAT     1941 Jun
-                        0:00   -       WAT
+                       -1:00   -       WAT     1941 Jun
+                        0:00   -       GMT
 
 # Seychelles
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -480,34 +490,34 @@ Zone      Indian/Mahe     3:41:48 -       LMT     1906 Jun        # Victoria
 # Sierra Leone
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 # Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks.
-Rule   SL      1935    1942    -       Jun      1      0:00    1:00    S
-Rule   SL      1935    1942    -       Oct      1      0:00    0       -
-Rule   SL      1957    1962    -       Jun      1      0:00    1:00    S
-Rule   SL      1957    1962    -       Sep      1      0:00    0       -
+Rule   SL      1935    1942    -       Jun      1      0:00    0:40    SLST
+Rule   SL      1935    1942    -       Oct      1      0:00    0       WAT
+Rule   SL      1957    1962    -       Jun      1      0:00    1:00    SLST
+Rule   SL      1957    1962    -       Sep      1      0:00    0       GMT
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Freetown -0:53:00 -      LMT     1882
                        -0:53:00 -      FMT     1913 Jun # Freetown Mean Time
-                       -1:00   SL      AA%sT   1957
-                        0:00   SL      WA%sT
+                       -1:00   SL      %s      1957
+                        0:00   SL      %s
 
 # Somalia
-# From Paul Eggert <eggert@twinsun.com> (1993-11-18):
-# Shanks omits the 1948 transition to 2:45; this is probably a typo.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Africa/Mogadishu  3:01:28 -       LMT     1893 Nov
                        3:00    -       EAT     1931
-                       2:30    -       BEAT    1948
-                       2:45    -       BEAT    1957    # not in Shanks
+                       2:30    -       BEAT    1957
                        3:00    -       EAT
 
 # South Africa
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
-Rule   SA      1942    1943    -       Sep     Sun>=15 2:00    1:00    S
+Rule   SA      1942    1943    -       Sep     Sun>=15 2:00    1:00    -
 Rule   SA      1943    1944    -       Mar     Sun>=15 2:00    0       -
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Africa/Johannesburg 1:52:00 -     LMT     1892 Feb 8
-                       1:30    -       SAT     1903 Mar
-                       2:00    SA      SA%sT
+                       1:30    -       SAST    1903 Mar
+                       2:00    SA      SAST
+# Shanks erroneously claims that most of South Africa switched to 1:00
+# on 1994-04-03 at 00:00.
+#
 # Marion and Prince Edward Is
 # weather station since 1947
 # no information
@@ -524,24 +534,24 @@ Rule      Sudan   1971    only    -       Apr     30      0:00    1:00    S
 Rule   Sudan   1972    1985    -       Apr     lastSun 0:00    1:00    S
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Khartoum 2:10:08 -       LMT     1931
-                       2:00    Sudan   EE%sT
+                       2:00    Sudan   CA%sT
 
 # Swaziland
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Mbabane  2:04:24 -       LMT     1903 Mar
-                       2:00    -       SAT
+                       2:00    -       SAST
 
 # Tanzania
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Africa/Dar_es_Salaam 2:37:08 -    LMT     1931
                        3:00    -       EAT     1948
-                       2:45    -       BEA   1961
+                       2:45    -       BEAUT   1961
                        3:00    -       EAT
 
 # Togo
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Lome     0:04:52 -       LMT     1893
-                       0:00    -       WAT
+                       0:00    -       GMT
 
 # Tromelin
 # uninhabited
@@ -581,15 +591,15 @@ Zone      Africa/Tunis    0:40:44 -       LMT     1881 May 12
 Zone   Africa/Kampala  2:09:40 -       LMT     1928 Jul
                        3:00    -       EAT     1930
                        2:30    -       BEAT    1948
-                       2:45    -       BEA   1957
+                       2:45    -       BEAUT   1957
                        3:00    -       EAT
 
 # Zambia
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Lusaka   1:53:08 -       LMT     1903 Mar
-                       2:00    -       SAT
+                       2:00    -       CAT
 
 # Zimbabwe
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Harare   2:04:12 -       LMT     1903 Mar
-                       2:00    -       SAT
+                       2:00    -       CAT
index 8d650716fe9f7af3db713ee43a801006dec22a29..4e91a719aca68a4dc8d249df02cbcecc9329b1df 100644 (file)
@@ -180,10 +180,16 @@ static char const ab_month_name[][4] =
 enum locale_status { not, loc, raw };
 
 static char *
+#ifdef _LIBC
+internal_function
+#endif
 strptime_internal __P ((const char *buf, const char *format, struct tm *tm,
                        enum locale_status *decided));
 
 static char *
+#ifdef _LIBC
+internal_function
+#endif
 strptime_internal (buf, format, tm, decided)
      const char *buf;
      const char *format;
index 9289de63a04c2517ac30f1db4396cf20b4747b25..4b891b469ca48c6e12ed54495bfc49833da6bf20 100644 (file)
@@ -45,8 +45,8 @@ struct leap
 
 extern char * __tzstring (const char *); /* Defined in tzset.c.  */
 
-static struct ttinfo *find_transition (time_t timer);
-static void compute_tzname_max (size_t);
+static struct ttinfo *find_transition (time_t timer) internal_function;
+static void compute_tzname_max (size_t) internal_function;
 
 static size_t num_transitions;
 static time_t *transitions = NULL;
@@ -382,6 +382,7 @@ __tzfile_default (const char *std, const char *dst,
 }
 \f
 static struct ttinfo *
+internal_function
 find_transition (time_t timer)
 {
   size_t i;
@@ -460,6 +461,7 @@ __tzfile_compute (time_t timer, int use_localtime,
 }
 \f
 static void
+internal_function
 compute_tzname_max (size_t chars)
 {
   extern size_t __tzname_cur_max; /* Defined in tzset.c. */
index 6c16091ef52e47ab2e5fdcfca23d265edc901cca..dcee9dd66cb58255da56323baed37b03aec95584 100644 (file)
@@ -82,9 +82,10 @@ typedef struct
 static tz_rule tz_rules[2];
 
 
-static int compute_change __P ((tz_rule *rule, int year));
-static int tz_compute __P ((time_t timer, const struct tm *tm));
-static void tzset_internal __P ((int always));
+static int compute_change __P ((tz_rule *rule, int year)) internal_function;
+static int tz_compute __P ((time_t timer, const struct tm *tm))
+     internal_function;
+static void tzset_internal __P ((int always)) internal_function;
 \f
 /* Header for a list of buffers containing time zone strings.  */
 struct tzstring_head
@@ -151,6 +152,7 @@ static char *old_tz = NULL;
 
 /* Interpret the TZ envariable.  */
 static void
+internal_function
 tzset_internal (always)
      int always;
 {
@@ -450,6 +452,7 @@ __tzname_max ()
    put it in RULE->change, saving YEAR in RULE->computed_for.
    Return nonzero if successful, zero on failure.  */
 static int
+internal_function
 compute_change (rule, year)
      tz_rule *rule;
      int year;
@@ -535,6 +538,7 @@ compute_change (rule, year)
    and set `__tzname', `__timezone', and `__daylight' accordingly.
    Return nonzero on success, zero on failure.  */
 static int
+internal_function
 tz_compute (timer, tm)
      time_t timer;
      const struct tm *tm;
index 8d152566fc249fc95af0cd28e1a511d292dff4fd..c7ab5094488ebcbb79cdaa1b583319f455c20540 100644 (file)
@@ -43,7 +43,7 @@ __BEGIN_DECLS
    hold any value corresponding to members of the extended character
    set, as well as at least one value that does not correspond to any
    member of the extended character set.  */
-#define _WINT_T
+# define _WINT_T
 typedef unsigned int wint_t;
 #endif
 
@@ -212,7 +212,7 @@ extern size_t __mbrlen __P ((__const char *__restrict __s, size_t __n,
 extern size_t mbrlen __P ((__const char *__restrict __s, size_t __n,
                           mbstate_t *__restrict __ps));
 
-#if defined (__OPTIMIZE__) \
+#if defined __OPTIMIZE__ \
     && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
 /* Define inline function as optimization.  */
 extern __inline size_t mbrlen (__const char *__restrict __s, size_t __n,
@@ -410,7 +410,7 @@ extern unsigned long long int __wcstoull_internal __P ((__const wchar_t *
 #endif /* GCC and use GNU.  */
 
 
-#if defined (__OPTIMIZE__) && __GNUC__ >= 2
+#if defined __OPTIMIZE__ && __GNUC__ >= 2
 /* Define inline functions which call the internal entry points.  */
 
 extern __inline double wcstod (__const wchar_t *__restrict __nptr,
@@ -424,7 +424,7 @@ extern __inline unsigned long int wcstoul (__const wchar_t *__restrict __nptr,
                                           int __base)
 { return __wcstoul_internal (__nptr, __endptr, __base, 0); }
 
-#ifdef __USE_GNU
+# ifdef __USE_GNU
 extern __inline float wcstof (__const wchar_t *__restrict __nptr,
                              wchar_t **__restrict __endptr)
 { return __wcstof_internal (__nptr, __endptr, 0); }
@@ -442,7 +442,7 @@ extern __inline unsigned long long int wcstouq (__const wchar_t *
                                                wchar_t **__restrict __endptr,
                                                int __base)
 { return __wcstoull_internal (__nptr, __endptr, __base, 0); }
-#endif /* Use GNU.  */
+# endif /* Use GNU.  */
 #endif /* Optimizing GCC >=2.  */
 
 
index 350d02cb0c0e387ed8ef682fd30e267994c26ab4..300b86972d879ea070033d3980b0130ebd3b8883 100644 (file)
@@ -48,7 +48,7 @@ main (int argc, char *argv[])
     {
 #define TEST(test)                                                           \
       do                                                                     \
-       if ((is##test (ch) == 0) != (iswctype (ch, bit_##test)) == 0)         \
+       if ((is##test (ch) == 0) != (iswctype (ch, bit_##test) == 0))         \
          {                                                                   \
            printf ("class `%s' test for character \\%o failed\n",            \
                    #test, ch);                                               \
index 1862c6ca8f0486c66b35bd9de13b7d4d41db0581..91a167819285c1c6ca1a492ca69fca0340771f09 100644 (file)
@@ -38,7 +38,7 @@ __BEGIN_DECLS
    hold any value corresponding to members of the extended character
    set, as well as at least one value that does not correspond to any
    member of the extended character set.  */
-#define _WINT_T
+# define _WINT_T
 typedef unsigned int wint_t;
 #endif
 
@@ -53,7 +53,7 @@ typedef unsigned long int wctype_t;
 /* Constant expression of type `wint_t' whose value does not correspond
    to any member of the extended character set.  */
 #ifndef WEOF
-#define WEOF (0xffffffffu)
+# define WEOF (0xffffffffu)
 #endif
 
 #ifndef _ISbit
@@ -65,12 +65,12 @@ typedef unsigned long int wctype_t;
    endian).  We define the bit value interpretations here dependent on the
    machine's byte order.  */
 
-#include <endian.h>
-#if __BYTE_ORDER == __BIG_ENDIAN
-#define _ISbit(bit)    (1 << bit)
-#else /* __BYTE_ORDER == __LITTLE_ENDIAN */
-#define _ISbit(bit)    (bit < 8 ? ((1 << bit) << 8) : ((1 << bit) >> 8))
-#endif
+# include <endian.h>
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define _ISbit(bit)  (1 << bit)
+# else /* __BYTE_ORDER == __LITTLE_ENDIAN */
+#  define _ISbit(bit)  (bit < 8 ? ((1 << bit) << 8) : ((1 << bit) >> 8))
+# endif
 
 enum
 {
@@ -181,28 +181,28 @@ extern wint_t towctrans __P ((wint_t __wc, wctrans_t __desc));
 
 
 #ifndef        __NO_WCTYPE
-#define        iswalnum(wc)    __iswctype ((wc), _ISalnum)
-#define        iswalpha(wc)    __iswctype ((wc), _ISalpha)
-#define        iswcntrl(wc)    __iswctype ((wc), _IScntrl)
-#define        iswdigit(wc)    __iswctype ((wc), _ISdigit)
-#define        iswlower(wc)    __iswctype ((wc), _ISlower)
-#define        iswgraph(wc)    __iswctype ((wc), _ISgraph)
-#define        iswprint(wc)    __iswctype ((wc), _ISprint)
-#define        iswpunct(wc)    __iswctype ((wc), _ISpunct)
-#define        iswspace(wc)    __iswctype ((wc), _ISspace)
-#define        iswupper(wc)    __iswctype ((wc), _ISupper)
-#define        iswxdigit(wc)   __iswctype ((wc), _ISxdigit)
-
-#ifdef __USE_GNU
-#define        iswblank(wc)    __iswctype ((wc), _ISblank)
-#endif
+# define iswalnum(wc)  __iswctype ((wc), _ISalnum)
+# define iswalpha(wc)  __iswctype ((wc), _ISalpha)
+# define iswcntrl(wc)  __iswctype ((wc), _IScntrl)
+# define iswdigit(wc)  __iswctype ((wc), _ISdigit)
+# define iswlower(wc)  __iswctype ((wc), _ISlower)
+# define iswgraph(wc)  __iswctype ((wc), _ISgraph)
+# define iswprint(wc)  __iswctype ((wc), _ISprint)
+# define iswpunct(wc)  __iswctype ((wc), _ISpunct)
+# define iswspace(wc)  __iswctype ((wc), _ISspace)
+# define iswupper(wc)  __iswctype ((wc), _ISupper)
+# define iswxdigit(wc) __iswctype ((wc), _ISxdigit)
+
+# ifdef        __USE_GNU
+#  define iswblank(wc) __iswctype ((wc), _ISblank)
+# endif
 
 /* Pointer to conversion tables.  */
 extern __const __int32_t *__ctype_tolower; /* Case conversions.  */
 extern __const __int32_t *__ctype_toupper; /* Case conversions.  */
 
-#define        towlower(wc)    towctrans ((wc), __ctype_tolower)
-#define        towupper(wc)    towctrans ((wc), __ctype_toupper)
+# define towlower(wc)  towctrans ((wc), __ctype_tolower)
+# define towupper(wc)  towctrans ((wc), __ctype_toupper)
 
 #endif /* Not __NO_WCTYPE.  */
 
@@ -281,27 +281,27 @@ extern wint_t __towctrans_l __P ((wint_t __wc, wctrans_t __desc,
                                  __locale_t locale));
 
 
-#ifndef        __NO_WCTYPE
-#define        __iswalnum_l(wc, loc)   __iswctype_l ((wc), _ISalnum, (loc))
-#define        __iswalpha_l(wc, loc)   __iswctype_l ((wc), _ISalpha, (loc))
-#define        __iswcntrl_l(wc, loc)   __iswctype_l ((wc), _IScntrl, (loc))
-#define        __iswdigit_l(wc, loc)   __iswctype_l ((wc), _ISdigit, (loc))
-#define        __iswlower_l(wc, loc)   __iswctype_l ((wc), _ISlower, (loc))
-#define        __iswgraph_l(wc, loc)   __iswctype_l ((wc), _ISgraph, (loc))
-#define        __iswprint_l(wc, loc)   __iswctype_l ((wc), _ISprint, (loc))
-#define        __iswpunct_l(wc, loc)   __iswctype_l ((wc), _ISpunct, (loc))
-#define        __iswspace_l(wc, loc)   __iswctype_l ((wc), _ISspace, (loc))
-#define        __iswupper_l(wc, loc)   __iswctype_l ((wc), _ISupper, (loc))
-#define        __iswxdigit_l(wc, loc)  __iswctype_l ((wc), _ISxdigit, (loc))
-
-#define        __iswblank_l(wc, loc)   __iswctype_l ((wc), _ISblank, (loc))
-
-#define        __towlower_l(wc, loc)   __towctrans_l ((wc), (loc)->__ctype_tolower, \
-                                              (loc))
-#define        __towupper_l(wc, loc)   __towctrans_l ((wc), (loc)->__ctype_toupper, \
-                                              (loc))
+# ifndef __NO_WCTYPE
+#  define __iswalnum_l(wc, loc)         __iswctype_l ((wc), _ISalnum, (loc))
+#  define __iswalpha_l(wc, loc)         __iswctype_l ((wc), _ISalpha, (loc))
+#  define __iswcntrl_l(wc, loc)         __iswctype_l ((wc), _IScntrl, (loc))
+#  define __iswdigit_l(wc, loc)         __iswctype_l ((wc), _ISdigit, (loc))
+#  define __iswlower_l(wc, loc)         __iswctype_l ((wc), _ISlower, (loc))
+#  define __iswgraph_l(wc, loc)         __iswctype_l ((wc), _ISgraph, (loc))
+#  define __iswprint_l(wc, loc)         __iswctype_l ((wc), _ISprint, (loc))
+#  define __iswpunct_l(wc, loc)         __iswctype_l ((wc), _ISpunct, (loc))
+#  define __iswspace_l(wc, loc)         __iswctype_l ((wc), _ISspace, (loc))
+#  define __iswupper_l(wc, loc)         __iswctype_l ((wc), _ISupper, (loc))
+#  define __iswxdigit_l(wc, loc) __iswctype_l ((wc), _ISxdigit, (loc))
 
-#endif /* Not __NO_WCTYPE.  */
+#  define __iswblank_l(wc, loc)         __iswctype_l ((wc), _ISblank, (loc))
+
+#  define __towlower_l(wc, loc)         __towctrans_l ((wc), (loc)->__ctype_tolower, \
+                                               (loc))
+#  define __towupper_l(wc, loc)         __towctrans_l ((wc), (loc)->__ctype_toupper, \
+                                               (loc))
+
+# endif /* Not __NO_WCTYPE.  */
 
 #endif /* Use GNU.  */