This file contains unidiffs between from version 1.06 to version of the GNU C library. You will need GNU patch to apply these diffs; you must use `patch -E' to ensure that no empty files are left behind. diff -ruN glibc-1.06/ChangeLog glibc-1.07/ChangeLog --- glibc-1.06/ChangeLog Sun May 23 00:55:50 1993 +++ glibc-1.07/ChangeLog Mon Jan 17 22:55:43 1994 @@ -1,3 +1,1490 @@ +Mon Jan 17 17:31:28 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 1.07 released. + + * Makerules (install-lib rules): Fix typos: missing / after $(libdir). + + * posix/Makefile (lib): Depend on $(objpfx)libposix.a + * malloc/Makefile (lib): Depend on $(objpfx)libmcheck.a. + * math/Makefile (lib): Depend on $(objpfx)libm.a. + * misc/Makefile (lib): Depend on $(objpfx)libbsd-compat.a. + + * sysdeps/unix/sysv/sco3.2.4/__setpgid.c: New file. + + * stdio/internals.c (flushbuf): Don't try aligned-block writing + calculation when FP->__buffer is nil. + +Mon Jan 17 17:27:56 1994 Jim Meyering (meyering@comco.com) + + * sysdeps/generic/memcmp.c [!_LIBC]: Include for + definition of size_t. + +Mon Jan 17 17:13:11 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/sysv/sco3.2.4/syscall.h: Add SYS_[gs]etitimer and + SYS_pgrpsys (from scottb). + + * sysdeps/unix/configure: Check for getitimer and setitimer syscalls. + + * sysdeps/unix/bsd/sequent/i386/syscall.S: New file from jason. + +Sun Jan 16 00:41:03 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * string/strerror.c (strerror): Declare BUF to be array of char. + + * Version 1.06.13. + +Sat Jan 15 17:27:26 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * stdlib/testsort.c (main): Rewrite not to read any input; instead + generate some random alphabetic strings. + + * stdlib/Makefile (testsort.input): Rules removed. + + * sysdeps/unix/sysv/i386/__sigret.S: New file. + + * stdio/Makefile (distribute): Add mpn-copy.mk. + Remove 68k rules; include mpn-copy.mk for dir names needing + translation, and rewrite no-68k rules to be generic for the rest. + (mpn-copy-sysdep): New variable. + (mpn-stuff): Include $(mpn-copy-sysdep). + (clean-mpn): Use rm -f. + + * configure.in (machine): Match m68... and m88..., not mc[68]8.... + + * stdio/printf_fp.c: For length arg to __mpn_extract_double, pass + actual number of limbs allocated for F, not LDBL_MANT_DIG. + +Fri Jan 14 19:09:29 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/i386/sysdep.S: Fixed typo: `movl', not `move'. + + * sysdeps/unix/sysv/sco3.2.4/__sysconf.S: Swap args in cmpl insn. + +Thu Jan 13 17:09:19 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 1.06.12. + + * sysdeps/mips/sqrt.c: File removed. Ian says only the r[46]00 + have `sqrt.d' and GCC open codes it anyway. Perhaps someday + Brendan will be able to explain his rationale for writing this. :( + +Tue Jan 11 18:10:17 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * posix/sys/wait.h (__WAIT_STATUS, __WAIT_STATUS_DEFN): Use snazzy + version only for GCC >= 2.6 (was 2.4); 2.5.7 produces bad code on + sparc when the union arg type is used. + + * Makeconfig (libprefix): New variable. + * Makerules ($(libdir)/libc.a, install): Insert $(libprefix) + between `lib' and `c' in the file name. + [install-lib] (install-lib.a, install-lib-non.a): New variables + separate out $(install-lib) elts which do or don't match lib%.a. + ($(libdir)/...): Split into two rules for above two cases. Put + $(libprefix) on installed files; for lib%.a insert it before % + rather than at beginning of file name. + + * Version 1.06.11. + + * Makerules (compilation rules): Move directoryless rules (for + finding sources in .) before include sysd-rules. Omit rules to + compile from sources in $(objpfx) if not using $(objdir). + + * sysdeps/stub/errlist.c [! HAVE_GNU_LD]: #define _sys_errlist to + sys_errlist and _sys_nerr to sys_nerr. + +Mon Jan 10 15:01:32 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * time/Makefile (z.%): In generated rules, depend on yearistype. + (tzcompile): Pass -y flag with file name of yearistype. + +Sun Jan 9 17:51:43 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * misc/bsd-compat.c (longjmp): Use __NORETURN in type. + + * sysdeps/ieee754/dbl2mpn.c [N == 2]: For denormal, when + RES_PTR[1] is zero, return 1 instead of 2. + +Sun Jan 9 13:10:25 1994 Torbjorn Granlund (tege@adder.cygnus.com) + + * stdio/printf_fp.c: Solve 10+ problems. + * ieee754/dbl2mpn.c: Correctly detect denorms. Get the denom + exponent right. + +Sun Jan 9 00:40:48 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/ieee754/dbl2mpn.c: Test BITS_PER_MP_LIMB and handle + either 32 or 64; #error if not one of those. + + * sysdeps/stub/udiv_qrnnd.c: Renamed from udiv_qrnnd.S. + +Sat Jan 8 00:25:15 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 1.06.10. + + * Makerules ($(libdir)/libc.a): Depend on subdir_install. + +Thu Jan 6 02:17:07 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Makerules ($(bindir)/$(install)): Use $(INSTALL_PROGRAM), not + $(INSTALL). + ($(libdir)/libc.a): Don't depend on lib-noranlib; on libobjs and + ar-it instead. Run ranlib on target after installing. + (installdirs): Target removed; deps on it removed. + (install-{bin,lib,data,headers,others,no-libc.a}): Renamed to + `install-*-nosubdir'. + (install-%): New pattern rule. + (install): Depend only on install-no-libc.a-nosubdir. + * Rules (subdir_install): Depend on lib-noranlib and stubs. + * Makefile (headers): Remove stubs.h. + (install-others): Define to include $(includedir)/stubs.h. + ($(includedir)/stubs.h): New target for $(objpfx)stubs.h rule. + Depend only on subdir_install, and install directly. + + * Makerules (sed-remove-objpfx): Require SPC before $(objpfx) to match. + + * time/zic.c (mkdirs): Duplicate passed string in allocated memory + and free it when done. + + * dirent/dirent.h [__USE_BSD || __USE_MISC]: Get size_t from stddef.h. + + * sysdeps/ieee754/dbl2mpn.c: For zero value, return 1 limb not 0. + + * Makerules (make-dummy-dep): Use filter-out to invert sense of + wildcard match, so we produce a command if $@ does *not* exist.c + + * stdio/Makefile (routines): Add dbl2mpn. + +Wed Jan 5 17:52:43 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/i386/sysdep.S (syscall_error): Reverse args in + `cmpl' insn; non-GNU assembler is feeble-minded. + +Mon Jan 3 18:53:45 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * configure.in (sysnames): Remove / before $mach; it is prepended + already by the loop constructing $mach from $machine. + +Tue Dec 28 07:38:23 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * stdio/Makefile [gmp-srcdir] (clean-mpn): New target. + + * configure.in (machine): Turn i[34]86 into i386/&, sparc* into + sparc/&, m68k into m68k/mc68020, mc680?0 into m68k/&, mips or + r2000 into mips/r3000, r[34]000 into mips/&. + (mach): New variable; processed from $machine as $base from $base_os. + Use that in place of $machine in loop finding sysdep directories. + + * stdio/Makefile (aux): Add mp_clz_tab. + (mpn-copy): Add mp_clz_tab.c. + (mpn-routines): Add udiv_qrnnd. + (mpn-sysdep): Look for .s files too. + * sysdeps/stub/udiv_qrnnd.S: New file. + +Sat Dec 25 00:20:07 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 1.06.9. + + * Makefile (distribute): Add install.sh. + * install.sh: New file. + + * sysdeps/i386/Makefile: New file. + (asm-CPPFLAGS): Add -DGAS_SYNTAX. + + * stdio/printf_fp.c: Major rewrite of sysdeps/generic/printf_fp.c, + working with the fractional parts as multiprecision integers + instead of doubles, using mpn functions from GNU MP. Done with + much help from tege@cygnus.com. + * sysdeps/generic/printf_fp.c, sysdeps/ieee754/printf_fp.c, + sysdeps/m68k/fpu/printf_fp.c: Files removed. + +Fri Dec 24 23:09:44 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/stub/dbl2mpn.c, sysdeps/iee754/dbl2mpn.c: New files. + * sysdeps/stub/asm.h: New file. + * sysdeps/m68k/add_n.S, sysdeps/m68k/addmul_1.S, + sysdeps/m68k/mul_1.S, sysdeps/m68k/sub_n.S, + sysdeps/m68k/submul_1.S, sysdeps/m68k/asm.h, + sysdeps/generic/add_1.c, sysdeps/generic/add_n.c, + sysdeps/generic/addmul_1.c, sysdeps/generic/cmp.c, + sysdeps/generic/divmod.c, sysdeps/generic/divmod_1.c, + sysdeps/generic/lshift.c, sysdeps/generic/rshift.c, + sysdeps/generic/mod_1.c, sysdeps/generic/mul.c, + sysdeps/generic/mul_1.c, sysdeps/generic/mul_n.c, + sysdeps/generic/sub_n.c, sysdeps/generic/submul_1.c, + sysdeps/generic/get_str.c, sysdeps/i386/addmul_1.S, + sysdeps/i386/mul_1.S, sysdeps/i386/submul_1.S, + sysdeps/alpha/gmp-mparam.h, sysdeps/generic/gmp-mparam.h, + sysdeps/i386/asm.h, stdio/longlong.h, stdio/gmp.h, + stdio/gmp-impl.h: New files, taken from GNU MP. + * stdio/Makefile (mpn-headers, mpn-routines): New variables. + (routines): Include $(mpn-routines). + (distribute): Include $(mpn-headers). + [gmp-srcdir]: Much code to copy mpn source from $(gmp-srcdir). + * configure.in: Check for a --with-gmp argument and set gmp-srcdir + in config.make to its value (error if no arg given). Move + config_vars initialization before this (right after arg parsing). + +Thu Dec 23 01:44:12 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/m68k/Makefile (m68k-syntax-flag): New variable. + (compile-command.S): Include $(m68k-syntax-flag) in cpp flags. + + * manual/Makefile (install-data): New target. + (install-%): New pattern rule. + + * Makerules ($(bindir)/...): Do $(make-target-directory) first. + +Thu Dec 23 01:03:19 1993 Brendan Kehoe (brendan@zen.org) + + Port to the DEC Alpha running OSF/1. (75% done) + * sysdeps/unix/bsd/osf1/alpha/start.S: New file. + * sysdeps/unix/bsd/osf1/alpha/sysdep.h: New file. + * sysdeps/unix/bsd/osf1/alpha/sysdep.S: New file. + * sysdeps/unix/bsd/osf1/alpha/__brk.S: New file (incomplete). + * sysdeps/unix/bsd/osf1/alpha/__fork.S: New file. + * sysdeps/unix/bsd/osf1/alpha/__pipe.S: New file. + * sysdeps/unix/bsd/osf1/alpha/__getdents.S: New file. + * sysdeps/unix/bsd/osf1/alpha/__waitpid.c: New file. + * sysdeps/unix/bsd/osf1/alpha/__wait4.S: New file. + * sysdeps/unix/bsd/osf1/dirstream.h: New file. + * sysdeps/unix/bsd/osf1/alpha/statbuf.h: New file. + * sysdeps/unix/bsd/osf1/direct.h: New file. + * sysdeps/unix/bsd/osf1/dirstream.h: New file. + * sysdeps/unix/bsd/osf1/Makefile: New file, defining LDFLAGS. + + * sysdeps/unix/ioctls-tmpl.c [__osf1__ && __alpha__]: Clean up the + ioctls that we get for an Alpha running OSF/1. + + * sysdeps/unix/common/glue-ctype.c: Add code for HAVE__LOCP. + (main): If new macro TABLE_NAME is defined, use that for the name + of the array we're writing out, rather than what's defined in TABLE. + * sysdeps/unix/common/configure.in (AC_HAVE_FUNCS): Add `_locp'. + + * sysdeps/unix/bsd/osf1/sigaction.h: Add SA_ONSTACK, SA_RESTART, + and SA_DISABLE. + * sysdeps/alpha/setjmp.S: Add .end directive. + + * time/sys/time.h (struct timeval): Make members TV_SEC and + TV_USEC be `int', not `long', since it won't hurt other hosts, but + kills the Alpha. + * resource/sys/resource.h (struct rusage): Make all non-timeval + members be `long', not `int'. + + * sysdeps/alpha/strlen.c (strlen): Go from 0 to 7, not 3, since + there are 8 bytes in a long on the Alpha. Check for '\0' after + checking for C in initial byte-by-byte loop. + * sysdeps/alpha/strchr.c (strchr): Likewise. Shift out to 64 when + setting CHARMASK. + * sysdeps/alpha/memchr.c (memchr): Likewise. Return NULL if we + didn't find it in N characters, or N == 0. Declare CP to be an + unsigned char*. + + * sysdeps/alpha/Makefile: Add divrem stuff. + * sysdeps/alpha/DEFS.h: New file. + * sysdeps/alpha/divrem.m4: New file. + * sysdeps/alpha/macros.m4: New file. + * sysdeps/alpha/Dist: Add .S files, divrem.m4, macros.m4, and DEFS.h. + + * sysdeps/unix/bsd/osf1/alpha/vhangup.S: New file. (Only a + temporary workaround, until we figure out how to deal with the + SYS_ult syscalls better.) + * sysdeps/unix/bsd/osf1/alpha/killpg.S: Likewise. + * sysdeps/unix/bsd/osf1/alpha/__sigvec.S: Likewise. + * sysdeps/unix/bsd/osf1/alpha/__sigpause.S: Likewise. + * sysdeps/unix/bsd/osf1/alpha/__sigstmsk.S: Likewise. + * sysdeps/unix/bsd/osf1/alpha/recv.S: Likewise. + * sysdeps/unix/bsd/osf1/alpha/send.S: Likewise. + + * sysdeps/alpha/__math.h (__copysign): Add __CONSTVALUE. + * sysdeps/alpha/__copysign.c: Define __NO_MATH_INLINES. + * sysdeps/alpha/fabs.c: Likewise. + +Wed Dec 22 17:55:49 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * crypt/*: New version from glad. + + * sysdeps/unix/sysv/sysv4/Dist: Add __getpgid.c and __setpgid.c. + + * dirent/Makefile (headers): Define; include dirent.h & dirstream.h. + +Tue Dec 21 14:24:38 1993 Brendan Kehoe (brendan@zen.org) + + * sysdeps/unix/sysv/sysv4/i386/statbuf.h (struct stat): Add + missing member ST_FSTYPE. Fixup types on various members to make + this properly reflect what the system has. + + * misc/ioctl.c (ioctl): Declare 2nd arg to be unsigned long int to + match the change in ioctl.h. + +Tue Dec 21 00:01:01 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 1.06.8. + + * dirent/dirent.h (struct dirent): Add `d_reclen'; make `d_namlen' + an `unsigned short int' instead of `size_t'. + (DIR): Move typedef to sysdep file dirstream.h. + * sysdeps/unix/dirstream.h: New file, broken out of dirent.h. + * sysdeps/stub/dirstream.h: New file. + * sysdeps/unix/bsd/dirstream.h: New file. + * sysdeps/unix/bsd/readdir.c: New file. + +Mon Dec 20 23:29:07 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/start.c: Include . + * sysdeps/unix/sysv/sysv4/i386/start.c: File removed. + +Sat Dec 18 01:37:25 1993 Brendan Kehoe (brendan@zen.org) + + * sysdeps/unix/sysv/sysv4/i386/start.c: New file. Same as + sysdeps/unix/i386/start.c, but defines NO_UNDERSCORES. + + * sysdeps/unix/sysv/sysv4/waitflags.h: New file, with non-standard + WEXITED and WTRAPPED macros defined. + * sysdeps/unix/sysv/sysv4/__waitpid.c: New file. + * sysdeps/unix/sysv/sysv4/siginfo.h: New file. + * sysdeps/unix/sysv/sysv4/__waitid.S: New file. + * sysdeps/unix/sysv/sysv4/Makefile (sysdep_routines): Mention __waitid. + * sysdeps/unix/sysv/sysv4/pipestream.c: New file, to avoid having + NO_WAITPID set. + * sysdeps/unix/sysv/sysv4/Dist: Added __waitid.S and siginfo.h. + + * sysdeps/unix/sysv/sysv4/__getpgid.c: New file. + * sysdeps/unix/sysv/sysv4/__setpgid.c: New file. + * sysdeps/unix/sysv/sysv4/Makefile (sysdep_routines): Add them. + + * sysdeps/unix/sysv/sysv4/__getpgrp.c (__getpgrp): It's the 0th + subcall for getpgrp, not 4th. + * sysdeps/unix/sysv/sysv4/__setpgrp.c (__setpgrp): Likewise, it's + the 1st, not the 5th. + +Fri Dec 17 15:05:58 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * misc/sys/ioctl.h (__ioctl, ioctl): Make second arg `unsigned + long int' instead of `int' (4.4 uses unsigned long). + + * string/string.h (strcat): Parameters names were swapped. + +Fri Dec 17 01:18:27 1993 Michael I Bushnell (mib@geech.gnu.ai.mit.edu) + + * Made the Hurd error system 0x10 again; this undid many + of the changes of Nov 23. Affected all the err_ files in + mach; recreated sysdeps/hurd/err_hurd.sub; changed back + err_kern.sub to have the Unix error codes. + +Thu Dec 16 15:40:25 1993 Brendan Kehoe (brendan@zen.org) + + * stdio/temptest.c (main): Remove the files we created once we're + done. Make return type int, and exit with 0 status. + + * sysdeps/posix/tempname.c (__stdio_gen_tempname): Fix typo of + extra comma in sprintf call. + +Tue Dec 14 13:08:35 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/posix/tempname.c (__stdio_gen_tempname): Rewrote main + logic. Removed INFOS structure array and replaced it with + INDICES, an array of size_t. Removed INFO ptr and replaced it + with IDX, which points to either elt of INDICES. Rewrite main + loop to increment *IDX until it hits 62*62*62. Construct file + name by dividing out two powers of 62 from *IDX and using the + modulus as an index into `letters'. + + * sysdeps/unix/common/Makefile (sysdep_routines): Only add + bsd_getgrp here if the sysdep __getgrps.? chosen is unix/common's. + + * posix/fnmatch.h: #undef FNM_PATHNAME, FNM_NOESCAPE, and + FNM_PERIOD before defining them. + + * time/__tzset.c (compute_change): In M case when tallying time in + months before specified month, count to RULE->m - 1, not ...+1. + + * manual/Makefile (realclean): Remove index, aux, and toc files + created by TeX. + +Mon Dec 13 19:33:33 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/posix/__wait3.c: Use __WAIT_STATUS_DEFN in place of + __WAIT_STATUS in arg type. + +Wed Dec 8 15:59:45 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * malloc/memalign.c: Set L->next and _aligned_blocks only when L + is newly allocated, not when we reuse an old one. + +Tue Dec 7 16:04:22 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * io/fcntl.c: Replace function_alias use with: + [HAVE_GNU_LD]: Use symbol_alias. + [! HAVE_GNU_LD]: Define fcntl to use stdarg and call __fcntl. + +Mon Dec 6 17:50:05 1993 Brendan Kehoe (brendan@zen.org) + + * sysdeps/unix/i386/sysdep.S (syscall_error): Fix labels so + they'll compile. + + Make the Solaris port work dammit. + * sysdeps/unix/sysv/sysv4/solaris2/statbuf.h (struct stat): Make + ST_DEV member be unsigned long, not short. + + * sysdeps/unix/sysv/sysv4/solaris2/direct.h: New file, same as + sysv4/direct.h but uses strlen instead of the offset-based + computation of the name length, since that doesn't reliably work + for Solaris. + + * sysdeps/unix/sysv/sysv4/solaris2/sysdep.h (PSEUDO): Don't move + %g0 into %o0, since that will clobber the real return value. Take + out the retl at the end, why in the world did I put it in there? + +Mon Dec 6 17:27:26 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Makefile ($(objpfx)crt1.o): Add target to $(objpfx)Mcrt1.o + rule; generalize commands. + (install-lib): Add crt1.o. + + * sysdeps/unix/Makefile ($(common-objpfx)ioctls): Use -x flag to + fgrep to match only entire lines. + +Sun Dec 5 01:53:43 1993 Brendan Kehoe (brendan@zen.org) + + * sysdeps/unix/bsd/ultrix4/mips/start.S: New file. + * sysdeps/unix/bsd/ultrix4/mips/start.c: Deleted. + +Thu Dec 2 18:29:01 1993 Brendan Kehoe (brendan@zen.org) + + * sysdeps/unix/bsd/ultrix4/mips/sysdep.S: Don't use dollar signs + with the errnos. + + * sysdeps/stub/{__wait, __wait3, __wait4}.c, + sysdeps/unix/bsd/bsd4.4/{__wait, __wait3}.c, + sysdeps/unix/bsd/sun/sunos4/__wait4.c, + sysdeps/posix/{__wait, __wait3}.c, posix/{wait, wait3, wait4}.c: Use + __WAIT_STATUS_DEFN, not __WAIT_STATUS. + + * sysdeps/posix/killpg.c (killpg): Make arg PGRP __pid_t, not pid_t. + * sysdeps/stub/killpg.c (killpg): Likewise. + + * setjmp/longjmp.c (longjmp): Only use __NORETURN if !HAVE_GNU_LD. + * setjmp/_longjmp.c (_longjmp): Likewise. + +Thu Dec 2 17:31:19 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * posix/sys/wait.h (__WAIT_STATUS_DEFN): Define new macro. + + * Makerules (+install): Variable removed. + (install-bin, install-lib, install-data, install-headers, + install-others): New targets. + (install-no-libc.a): Depend on them instead of $(+install). + + * Makefile (+subdir_targets): Add + install-{no-libc.a,bin,lib,data,headers,others}. + (install-no-libc.a): Don't depend on subdir_install. + +Thu Dec 2 17:14:39 1993 Brendan Kehoe (brendan@zen.org) + + * sysdeps/ieee754/__isnan.c (__isnan): Return __CONSTVALUE, to + match declaration in math/math.h. + +Thu Dec 2 15:48:19 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * time/africa, time/antarctica, time/asia, time/australasia, + time/emkdir.c, time/europe, time/ialloc.c, time/northamerica, + time/pacificnew, time/private.h, time/solar87, time/solar88, + time/southamerica time/systemv, time/tzfile.h, time/zdump.c, + time/zic.c: New data and code from ADO. + * time/Makefile (tzfiles): Added backward. + * time/backward: New file from ADO. + + * locale/C-ctype_ct.c: Remove _ISspace bit from BS (8). + +Wed Dec 1 00:01:30 1993 Michael I Bushnell (mib@geech.gnu.ai.mit.edu) + + * mach/err_kern.sub: Frob around lack of GNU ld. + + * mach/errsystems.awk: The declaration of __mach_error_systems + should not be static, but it should be const. + + * sysdeps/mach/hurd/errlist.awk (BEGIN): Deal with the case + where you don't have GNU ld. + + * sysdeps/mach/hurd/Makefile: Define mib_hacks to make. + +Tue Nov 30 23:24:07 1993 Michael I Bushnell (mib@geech.gnu.ai.mit.edu) + + * Makefile: install-no-libc.a needs to depend on subdir_install. + +Mon Nov 29 16:21:38 1993 Michael I Bushnell (mib@geech.gnu.ai.mit.edu) + + * sysdeps/mach/_strerror.c: Include . + + * hurd/setuids.c: Put entire file inside #ifndef MIB_HACKS; + it uses the old auth_makeauth call. + + * hurd/__setauth.c: Put entire file inside #ifndef MIB_HACKS; + it depends on cthreads to compile, which is not yet integrated. + + * hurd/hurdpath.c (__hurd_path_lookup): cast to avoid GCC warning. + +Wed Nov 24 00:59:15 1993 Michael I Bushnell (mib@geech.gnu.ai.mit.edu) + + * hurd/Makefile: Commented out hurdauth; recent changes to + auth.defs prevent it from working now. + + * mach/mach_error_string.c (do_compat): Change name to + __mach_error_map_compat; make it no longer static. + (mach_error_type, mach_error_string_int): Use + __mach_error_map_compat instead of do_compat. + * sysdeps/mach/_strerror.c: Use __mach_error_map_compat. + + * mach/devstream (output/write_some): Cast fourth argument to + device_write_inband to char * to avoid warning. + (output): Call to write_some mentioned variable `start' from + a previous version of the function; changed this to f->__buffer. + +Tue Nov 23 23:16:13 1993 Michael I Bushnell (mib@geech.gnu.ai.mit.edu) + + [ The net effect of the following change is to eliminate error + systems which are specific to single-server Mach systems, and + to put the Hurd errors where the Unix errors were. ] + * mach/{err_bootstrap.sub,err_ipc.sub,err_server.sub,err_us.sub}: + None of these are used for the Hurd; we shouldn't pretend that + they are meaningful in our environment. The files have been + renamed to equivalent names with an equal sign prepended; this + will inhibit distribution and prevent the Makefile from looking at + them. + * mach/err_kern.sub: Deleted the definitios of err_codes_unix; + get the strings from _sys_errlist. Rename `unix' to `hurd'. + Rename err_os_sub to be err_kern_sub to match what errsystems.awk + expects. + * sysdeps/mach/hurd/err_hurd.sub: Deleted this file. + * sysdeps/mach/hurd/errnos.awk: Changed definition of _HURD_ERRNO + to be correct. + + * sysdeps/mach/hurd/Makefile: use gawk, not awk. + + * mach/errsystems.awk: Generally rewrote the printf. It's now + closer to Roland's original, but without the $i mistake at all, + in any form. + +Tue Nov 23 20:21:06 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/{i386,sysv/sysv4/solaris2,sysv/i386/linux,bsd/m68k, + bsd/ultrix4/mips,bsd/vax}/sysdep.S: Define _ERRNO_H before + including ; otherwise does not define most + macros (importantly, EAGAIN!). + +Tue Nov 23 12:43:38 1993 Michael I. Bushnell (mib at ernst.gnu.ai.mit.edu) + + * mach/errsystems.awk: $i is not an index; make i a variable and + increment it properly. Don't call `err_get_system'; use the + system number as the index in the array directly. + + * mach/errorlib.h: Added `const' in all the right places. + * sysdeps/mach/hurd/err_hurd.sub: Cast _sys_errlist to + the right type. Better to declare it right in stdio/stdio.h, but + I don't dare change that file lest Roland call me a twit. + * mach/err_us.sub: Add more brackets to initializer to shut GCC up. + + * sysdeps/mach/hurd/err_hurd.sub: Delete keyword `const'; this + is taken care of by the `#define static static const' found in + errsystems.c as created by mach/errsystems.awk. + * mach/errsystems.awk: Ditto for declaration of __mach_error_systems. + + * sysdeps/mach/hurd/err_hurd.sub: Change to ; + errnos.h doesn't define most stuff unless it is included from errno.h. + + * mach/mach_error_string.c (mach_error_string_int): Delete unused + variable `err_str'. + + * mach/mach_error_string.c (do_compat): Declare to be void. + (mach_error_string,mach_error_type, mach_error_string_int): + Declare return type as const char *. + * mach/mach_error.h: Change declarations to match. + + * mach/errsystems.awk: The array that split creates is origin 1, + not origin 0; fixed loop to match. + + * sysdeps/mach/hurd/errnos.awk: Ernst's awk doesn't grok + backslash-newline inside strings. + +Sat Nov 20 19:02:25 1993 Brendan Kehoe (brendan@zen.org) + + * math/__finite.c (__finite): Return __CONSTVALUE, to match math.h. + * math/__scalb.c (__scalb): Likewise. + * math/copysign.c (copysign): Likewise. + * math/drem.c (drem): Likewise. + * math/expm1.c (expm1): Likewise. + * math/finite.c (finite): Likewise. + * math/infnan.c (infnan): Likewise. + * math/isinf.c (isinf): Likewise. + * math/isnan.c (isnan): Likewise. + * math/logb.c (logb): Likewise. + * math/rint.c (rint): Likewise. + * math/scalb.c (scalb): Likewise. + * sysdeps/generic/atan.c (atan): Likewise. + * sysdeps/ieee754/__copysign.c (__copysign): Likewise. + * sysdeps/ieee754/__drem.c (__drem): Likewise. + * sysdeps/ieee754/__isinf.c (__isinf): Likewise. + * sysdeps/ieee754/__logb.c (__logb): Likewise. + * sysdeps/ieee754/ldexp.c (ldexp): Likewise. + * sysdeps/ieee754/log10.c (log10): Likewise. + + * setjmp/_longjmp (_longjmp): Add __NORETURN. + * setjmp/longjmp (longjmp): Likewise. + +Thu Nov 18 04:16:34 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * string/strerror.c (strerror): Call _strerror_internal to do the + work, passing it a scratch buffer. + * stdio/perror.c: Likewise. + * string/Makefile (routines): Add _strerror. + * sysdeps/generic/_strerror.c (_strerror_internal): New file. + + * configure.in (config.status): Make it pass its args to configure. + +Thu Nov 18 03:52:32 1993 Michael I Bushnell (mib@geech.gnu.ai.mit.edu) + + * stdio/__vfscanf.c (__vfscanf): Put the floating point cases + (e,E,f,g,G) inside #ifndef MIB_HACKS; roland thikgs strtod crashes + the compiler. Wheee. + +Thu Nov 18 03:21:51 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * errno.h [__USE_GNU__]: Declare program_invocation_name and + program_invocation_short_name. + +Thu Nov 18 00:07:37 1993 Michael I. Bushnell (mib at ernst.gnu.ai.mit.edu) + + * sysdeps/mach/hurd/start.c (start1): Don't add one to + the return value of split_args; it counts them just fine by + itself. Do add one when sizing the arrays. + +Mon Nov 15 00:19:48 1993 Noel Cragg (noel@geech.gnu.ai.mit.edu) + + * time/mktime.c: add TIMES_THROUGH_SEARCH variable to make sure + that we don't get caught in an infinite loop (would be bad, + indeed, for a library routine). + +Sun Nov 14 18:48:28 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * misc/sys/cdefs.h (__NORETURN, __CONSTVALUE): Use + `__attribute__', not `__attributes__'. + Test __GNUC_MINOR__ < 6, not < 5. + +Wed Nov 10 05:39:15 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/morecore.c: Only declare sbrk #ifdef __GNU_LIBRARY__. + Cast its return value. + + * sysdeps/unix/bsd/m68k/syscall.S: Use movel in place of moveal. + + * configure.in (signed size_t check): Don't use AC_DEFINE; do it + by hand and insert -U__SIZE_TYPE__ before -D. + + * posix/unistd.h: Declare syscall. + + * sysdeps/m68k/fpu/__math.h (__isnan, __isinf): Use __CONSTVALUE + in prototypes. + + * configure.in (Makefile): Write ARCH=`pwd`, rather than + substituting in the directory name at configure time. + + * sysdeps/mach/i386/syscall.S: New file. + +Tue Nov 9 06:29:15 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * configure.in (os = netbsd* | 386bsd*): base_os=unix/bsd/bsd4.4. + Set --with-gnu-{ld,as} implicitly when base_os is bsd4.4. + + * Version 1.06.7. + + * misc/Makefile (routines): Add syscall. + * sysdeps/unix/syscall.S, sysdeps/stub/syscall.c, + sysdeps/unix/bsd/sun/m68k/syscall.S, sysdeps/unix/bsd/m68k/syscall.S, + sysdeps/unix/i386/syscall.S: New files. + * sysdeps/unix/bsd/hp/m68k/sysdep.h (DO_CALL): First arg + is syscall number, not name. + (PSEUDO): Pass POUND (SYS_ify (syscall_name)) to DO_CALL. + * sysdeps/unix/bsd/sony/newsos/m68k/sysdep.h (DO_CALL, PSEUDO): + Likewise. Also, do movel into d0 before linkw, so the argument + could conceivably pop the stack. + * sysdeps/unix/bsd/hp/m68k/__brk.S: Pass complete number to DO_CALL. + + * sysdeps/unix/sysv/Dist: sys_getdents.S was renamed s_getdents.S. + +Thu Nov 4 01:23:59 1993 Michael I. Bushnell (mib at ernst.gnu.ai.mit.edu) + + * string/stpncpy: Fix typo; according to gnu-stabs.h the name + inside the DEFUN should be the *non* __ version. + * sysdeps/generic/__stpncpy.c: Missing declaration of s. + +Wed Nov 3 09:35:30 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/Makefile ($(objpfx)errlist.c): Conditionalize these + rules to be used only when errlist.c is otherwise a stub. + +Fri Oct 29 17:29:20 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * string/stpncpy.c: New file. + * sysdeps/generic/__stpncpy.c: New file. + * string/Makefile (routines): Add stpncpy and __stpncpy. + * string/string.h [__USE_GNU__]: Declare them. + +Thu Oct 28 17:13:58 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/errnos-tmpl.c (DO): If NAME is "EWOULDBLOCK", + write "#define EWOULDBLOCK EAGAIN" and change NAME to + "EWOULDBLOCK_sys". + * sysdeps/unix/{i386,sysv/sysv4/solaris2,sysv/i386/linux,bsd/m68k, + bsd/ultrix4/mips,bsd/vax}/sysdep.S [EWOULDBLOCK_sys]: Translate + EWOULDBLOCK_sys into EAGAIN. + * Makefile (distribute): Add move-if-change. + * move-if-change: New file. + +Tue Oct 26 18:19:34 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * misc/sys/cdefs.h: Define __NORETURN and __CONSTVALUE. + For GCC 2.5 and later, use __attributes__ (({volatile,const})). + * stdlib/stdlib.h: Don't define either here. + * math/math.h: Likewise. + * posix/unistd.h: Likewise. + * time/time.h: Likewise. + * stdio/stdio.h: Likewise. + * setjmp/setjmp.h: Likewise. + + * posix/sys/wait.h (__WAIT_STATUS): Use union hack defn for GCC + 2.4 and up (testing __GNUC__ and __GNUC_MINOR__). + + * sysdeps/unix/sysv/sco3.2.4/__sysconf.S: Don't include . + + * Makerules [inhibit-sysdep-asm] + (open-check-inhibit-asm, close-check-inhibit-asm): New variables. + ($(+sysdir_pfx)sysd-rules): Use them around .s and .S rules. + Depend on existing sysdep makefiles. + +Mon Oct 25 15:56:41 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/mach/hurd/killpg.c: Include for pid_t. + + * sysdeps/posix/tempname.c (__stdio_gen_tempname): Take new arg + STREAMPTR. When non-nil, use __open with O_EXCL to test for + existence, and set *STREAMPTR to new stream on returned fd. + * stdio/stdio.h: Update prototype. + * sysdeps/stub/tempname.c: Here too. + * stdio/tmpfile.c: Pass &F to __stdio_gen_tempname instead of + using fopen. + * stdio/tmpnam.c: Pass extra NULL arg. + * stdio/tempnam.c: Likewise. + + * configure.in (switches): Only put --os-{release,version} here. + (config.status): Write $configure_args in place of $config $switches. + + * signal/Makefile (routines): Renamed sigaltstack to sigaltstk. + * sysdeps/stub/sigaltstack.c: Renamed to sigaltstk.c. + * sysdeps/unix/bsd/bsd4.4/sigaltstack.S: Renamed to sigaltstk.S. + * sysdeps/unix/sysv/sys_getdents.S: Renamed to s_getdents.S. + * sysdeps/unix/sysv/Makefile (sysdep_routines): Changed reference. + +Fri Oct 22 03:47:43 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * malloc/realloc.c [MEMMOVE_MISSING]: Test this to use safe_bcopy. + [emacs]: Don't define safe_bcopy. + + * time/zdump.c, time/europe: New versions from ADO. + + * Rules (dont_distribute): Export this variable. + (subdir_echo-distinfo): Echo its value for +nodist+. + +Thu Oct 21 15:58:08 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/posix/__dup2.c: Include . + [OPEN_MAX]: Fail with EBADF if FD2>=OPEN_MAX. + + * sysdeps/unix/Makefile (sys/param.h): Conditionalize all this + code to happen only when there is no sysdep sys/param.h. + +Wed Oct 20 03:35:41 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Makerules (make-dummy-dep): Change to `ln $(objpfx)dummy.dep $@'. + ($(objpfx)dummy.dep): Create new file containing comment. + ($(objpfx)%.dep: $(objpfx)%.s): Depend on $(objpfx)dummy.dep. + ($(+sysdir_pfx)sysd-rules): Likewise in generated rule. + +Mon Oct 18 04:22:42 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * signal/signal.h (killpg): Make PGRP arg pid_t. + * sysdeps/posix/killpg.c (killpg): Likewise. + * sysdeps/stub/killpg.c (killpg): Here too. + + * posix/glob/configure.in: Use AC_HAVE_HEADERS instead of + AC_MEMORY_H and AC_UNISTD_H; omit AC_USG (not needed). + + * Rules (generated): New target. + + * Makefile (subdirs): Use filters to put mach and hurd first in + the list if they are in it at all. + * Makerules (before-compile): Reorder similarly, matching any + generated mach or hurd files. + +Fri Oct 15 17:57:58 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/posix/mk-stdiolim.c [! OPEN_MAX]: Use _POSIX_OPEN_MAX + for FOPEN_MAX value. + [! PATH_MAX]: Use 1024 (twice _POSIX_PATH_MAX) for FILENAME_MAX value. + + * Makerules (in-Makerules): Define this variable before including + sysd-Makefile. + +Sun Oct 10 14:31:35 1993 Jim Meyering (meyering@comco.com) + + * posix/fnmatch.c [CONFIG_BROKETS]: Include only under + this condition, else "config.h". + +Tue Oct 05 16:08:39 1993 Jim Meyering (meyering@comco.com) + + * time/mktime.c [CONFIG_BROKETS]: Include only under + this condition, else "config.h". + +Thu Sep 23 15:14:08 1993 Brendan Kehoe (brendan@zen.org) + + * sysdeps/unix/sysv/sysv4/__dup2.c: New file. + +Wed Sep 22 16:58:29 1993 Brendan Kehoe (brendan@zen.org) + + * sysdeps/unix/sysv/sysv4/solaris2/statbuf.h: New file. + * sysdeps/unix/sysv/sysv4/i386: New directory. + * sysdeps/unix/sysv/sysv4/i386/statbuf.h: New file. + +Fri Sep 17 04:03:26 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Makerules (+make-deps): Put output in temp file and use atomic mv. + + * Makerules ($(+sysdir_pfx)sysd-rules): New target, the rule part + of what was in sysd-Makefile. Include it. + ($(+sysdir_pfx)sysd-Makefile): Do just includes here. Move the + generated implicit rules to sysd-rules. Put the output into a + temp file and use atomic mv to final target. + (before-compile): Filter out existing files from value, after + sysd-Makefile but before sysd-rules. + +Thu Sep 9 22:28:13 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Makefile (%/configure): Copy rule from Make-dist. + +Mon Sep 6 19:57:43 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Makerules (sources, objects): Move override definitions to + before +depfiles calculation. + + * time/{asia,australasia,europe,zdump.c}: New versions from ADO (93e). + +Mon Aug 30 13:40:34 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * string/string.h (memmem): Reverse argument order, to be like strstr. + * sysdeps/generic/memmem.c: Here too. + + * dirent/scandir.c: For error return, save errno around closedir. + Call closedir (DP) before returning successfully. + +Thu Aug 26 19:26:06 1993 Brendan Kehoe (brendan@zen.org) + + * sysdeps/unix/sysv/sysv4/solaris2/sysdep.h: Rewritten to not use + the generic sparc sysdep.h. + (PSEUDO): Use trap 8, not 0. Also just put %g0 in %o0, without + subtracting 1. + (ENTRY): Align on 4, and add a `.type' directive. + * sysdeps/unix/sysv/sysv4/solaris2/sysdep.S: New file. + +Fri Aug 20 19:37:55 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/generic/abort.c: Remove unused variable ABORTING. + +Thu Aug 19 17:45:34 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Makeconfig [!objdir] [!..] (common-objdir): Set to `.'. + +Wed Aug 18 15:10:13 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * stdio/__vfscanf.c (__vfscanf: number): Reverse sense of + NUMBER_SIGNED conditional in assignment code. + +Mon Aug 16 15:49:13 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/Makefile (syscall.h): Add sed + s/SYS_syscall_basenum/syscall_basenum/g. SYSCALL_BASENUM is a + macro both defined and used in ; we must undo our + prependation of `SYS_'. + + * Version 1.06.6. + +Fri Aug 13 16:53:02 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * stdio/__vfscanf.c: New local variable NUMBER_SIGNED. + (%x, %X, %o, %u): Set it to zero. + (%d, %i): Set it to one. + (number): If NUMBER_SIGNED is set, use strtol and store in ...int*. + If clear, use strtoul an store value in unsigned ...int*. + + * malloc/malloc.h: Undo last change (_AIX32). + (memory_warnings): Use const instead of __const in prototype. + +Fri Aug 13 00:22:01 1993 John Grabowski (johng@whiskey.media.mit.edu) + + * configure.in (os = osf1*): base_os=unix/bsd. + +Thu Aug 12 16:37:13 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * malloc/valloc.c [__GNU_LIBRARY__ || _LIBC]: Include + before trying to use size_t to declare __getpagesize. + Include before trying to use __P. + + * posix/{fnmatch,glob}.c, malloc/malloc.h [HAVE_CONFIG_H]: Include + instead of "config.h". This is so that a compilation + using -I. -I$srcdir will use ./config.h rather than + $srcdir/config.h (which it would do when glob.c was found in $srcdir). + + * malloc/malloc.h [_AIX32]: Use !__STDC__ defns of __P, const, __ptr_t. + +Mon Aug 9 16:56:31 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Makerules (-e check): Don't rely on $(findstring e,$(MAKEFLAGS)) + since that also trips for --no-print-directory. + Instead actually see if -e's functionality is taking place. + + * malloc/realloc.c: Call _free_internal instead of free in most places. + + * configure.in (arg parsing): No spaces around = in eval. + + * sysdeps/i386/abort.c: New file. + * stdlib/abort.c: Moved to sysdeps/generic/abort.c. + (abort): Don't try to do stdio cleanup, since we can't guarantee + it anyway. + +Fri Aug 6 17:59:56 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Makerules ($(+install)): Don't depend on installdirs. + (make-target-directory): New define. + (do-install): Do $(make-target-directory) beforehand. + +Tue Aug 3 02:22:41 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/stub/sys/reboot.h: New file. + * sysdeps/unix/bsd/sys/reboot.h: New file, snarfed from 4.4. + * misc/Makefile (headers): Add sys/reboot.h. + + * stdio/stdio.h (__io_{read,write,seek,close,fileno}): Renamed to + __io_*_fn, so as not to conflict with the Hurd mig stubs. + * internals.c: Changed uses. + + * sysdeps/unix/bsd/signum.h (SIGINFO): Define as 29. + + * Makerules (+includes): Don't set this here. + * Makeconfig (+includes): Put $(+sysdep-includes) in the value here. + + * posix/unistd.h [__USE_MISC]: Declare mktemp and mkstemp. + +Mon Aug 2 16:59:12 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * malloc/valloc.c: Move getpagesize goop to before malloc.h. + [_LIBC]: Test this as well as __GNU_LIBRARY__ (either one) to use + __getpagesize instead of "getpagesize.h". + +Sun Aug 1 16:55:18 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * configure.in (arg parsing): For `--with-foo=bar', do + "with_foo='bar'". For `--with-fnord', do "with_fnord=yes". + * sysdeps/mach/configure: New file, groks `--with-mach=DIR'. + +Fri Jul 30 00:01:00 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * configure.in (os = gnu*): Set $base_os, not $os, to mach/hurd. + +Thu Jul 29 17:46:02 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * ctype/ctype.h (__isctype): Don't test !=0, to avoid possible + extra test insn. + +Sun Jul 25 22:19:04 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * setjmp/setjmp.h [! __FAVOR_BSD] (_longjmp): Define as longjmp. + +Thu Jul 22 14:57:15 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/bsd/osf1/sigaction.h: New file. + + * sysdeps/stub/signum.h: Deansideclized. + * sysdeps/stub/pipestream.c (pclose): Test STREAM->__ispipe + instead of __ispipe (STREAM). + * sysdeps/stub/__wait3.c: Fix arg types. + * sysdeps/stub/__ioctl.c: Add missing close paren. + * sysdeps/stub/__getpgsz.c: Include for size_t. + * sysdeps/stub/__get[gu]id.c: Include ; fix return type. + * sysdeps/stub/__set[gu]id.c: Include ; fix arg type. + * sysdeps/stub/__mknod.c: Include ; fix arg types. + + * sysdeps/generic/termbits.h (INLCR, ISTRIP): Fixed typo'd values. + + * stdio/stdio.h (vprintf): Fix last arg type to __gnuc_va_list. + * stdio/vprintf.c (vprintf): Here too. + + * malloc/malloc.c (malloc) [SUNOS_LOCALTIME_BUG]: Put this crap + after hook and initialization. + + * stdio/stdio.h (__validfp): Use a little anonymous struct to find + the real stream ptr from in glue stream. It used to rely on using + `((int *) STREAM)[1]'; but that assumes no struct padding, and + there will be some when int is 32 bits and pointers are 64. + + * malloc/mtrace.c: Use %lx instead of %x for `size_t' formats. + +Wed Jul 21 18:20:41 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * malloc/malloc.c (malloc): Handle SUNOS_LOCALTIME_BUG. + +Wed Jul 21 16:42:14 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * time/Makefile (extra-objs): Remove gratuitous - in `z.%'. + + * Makefile [+gnu-stabs] (generated): Add $(objpfx)munch-init.c. + (distclean): Also remove sysd-Makefile and sysd-dirs in $(objpfx). + (distclean) [objdir]: Also remove $(objpfx)Makefile. + + * sysdeps/posix/Makefile (generated): Add $(common-objpfx)mk-stdiolim. + (generated, before-compile): Take defns out of ifeq ($(subdir),posix). + + * sysdeps/unix/common/Makefile (generated): Include ctype-glue.c, + not glue-ctype.c. + + * sysdeps/unix/configure (unix_generated): New variable; collect + names of created files in it. + (config_vars): Write an assignment for `unix-generated' to that list. + * sysdeps/unix/Makefile (generated): Append $(unix-generated) + (with either $(objpfx) or $(sysdep_dir)/unix/ prepended to each file). + + * Makefile (clean): Pass no_deps=t to subdir_clean make. + +Sun Jul 18 21:42:05 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * malloc/malloc.c (malloc): After getting more core, recompute + BLOCK before adding to _heapinfo[BLOCK].free.size. + +Fri Jul 16 16:32:40 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * stdlib/Makefile (generated): Prepend $(objpfx). + * sysdeps/unix/sysv/Makefile (generated): Likewise. + + * sysdeps/posix/mktemp.c: Return when stat fails with ENOENT, not + when it succeeds. + +Wed Jul 14 14:51:43 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * locale/localeconv.c: Fix copying notice to LGPL. + +Mon Jul 12 21:58:27 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * malloc/mcheck.c (reallochook): Set HDR->magic to MAGICWORD. + +Mon Jul 5 15:55:08 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * malloc/realloc.c (memmove): Swap the args when calling safe_bcopy. + +Thu Jul 1 16:26:56 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * malloc/malloc.c [_LIBC] (_malloc, _free, _realloc): Define these + functions to just call malloc, free, and realloc, respectively. + +Wed Jun 30 16:42:10 1993 Torbjorn Granlund (tege@gnu.ai.mit.edu) + + * sysdeps/generic/memcmp.c (memcmp_bytes): New function for + little endian machines. + (memcmp_common_alignment, memcmp_not_common_alignment): Rework + code computing return values. + +Wed Jun 30 14:42:00 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/Makefile (local_lim.h): Only generate local_lim.h + if the sysdep version would be stub. + + * sysdeps/unix/mk-local_lim.c: #include before all else. + + * configure.in (config_{machine,vendor,os}): Store config.sub's + output in these new variables. + (machine, vendor, os): Set these from those. + (config-name.h, config.make): Write $config_* (the original values + from config.sub). + + * sysdeps/unix/sysv/sysv4/pgrpsys.S: Add arg count (3). + +Tue Jun 29 02:47:46 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 1.06.4. + +Mon Jun 28 00:37:12 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * stdio/internals.c (__stdio_check_funcs): New function, broken out + of init_stream. + (init_stream): Call it. + * sysdeps/posix/pipestream.c (popen): Call __stdio_check_funcs + before frobnicating STREAM's functions. + + * sysdeps/posix/pipestream.c (pclose): Free C, our data structure, + not STREAM->__cookie after it's been restored. + + * sysdeps/generic/strchr.c: Check for '\0' as well as C, in initial + byte-by-byte loop. + + * conf/portability.h: #undef BSD. + +Sun Jun 27 23:46:05 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/bsd/m68k/__wait.S [__motorola__]: Use Motorola syntax. + * sysdeps/unix/bsd/m68k/sysdep.S: Likewise. + * sysdeps/unix/bsd/m68k/__pipe.S: Likewise. + * sysdeps/m68k/__longjmp.c (__longjmp) [__motorola__]: Use + Motorola syntax in jmp insn. + +Fri Jun 25 16:17:07 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/{stub,posix,unix/sysv/sysv4}/__sysconf.c (__sysconf): + For _SC_TZNAME_MAX, just return __tzname_max (). + * sysdeps/unix/sysv/sco3.2.4/__sysconf.S: Define __sysconf, not + sysconf. For _SC_TZNAME_MAX, just jump to __tzname_max. + + Undo June 21 change that made __tzname_max a variable + and expected TZNAME_MAX to sometimes be defined. + POSIX.1 does not require that it be defined; sysconf is enough. + * time/time.h (__tzname_max): Declare as a function. + * posix/posix1_lim.h: Don't include . + * sysdeps/stub/tzname_max.h: File removed. + * time/Makefile (headers): Remove tzname_max.h. + (distribute): Remove make-tzlim.c. + (extra-objs): Remove make-tzlim.o and make-tzlim. + ($(common-objpfx)tzname_max.h): Target removed. + * time/make-tzlim.c: File removed. + * time/__tzset.c (__tzname_cur_max): Define this variable instead + of __tzname_max. + (__tz_compute): Set __tzname_cur_max, not __tzname_max. + (__tzname_max): New function. + * time/tzfile.c (compute_tzname_max): Set __tzname_cur_max, not + __tzname_max. + + * malloc/malloc.h [_MALLOC_INTERNAL] [! (_LIBC || STDC_HEADERS || USG)] + (memmove): Don't define. + * malloc/realloc.c [!_LIBC && !STDC_HEADERS && !USG] (safe_bcopy): + New static function. + (memmove): Define to safe_bcopy. + +Wed Jun 23 15:10:51 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/sysv/sco3.2.4/pgrpsys.S: New file, #include sysv4 file. + * sysdeps/unix/sysv/sco3.2.4/Dist: New file, list pgrpsys.S. + +Tue Jun 22 02:44:16 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/sysv/sco3.2.4/Makefile (sysdep_routines): Use + pgrpsys instead of sco_pgrp. + * sysdeps/unix/sysv/sco3.2.4/{Dist,sco_pgrp.S}: Files removed. + * sysdeps/unix/sysv/sco3.2.4/__{getpgrp,setpgrp,setsid}.c: Just + include the respective unix/sysv/sysv4 files. + + * sysdeps/unix/sysv/sysv4/pgrpsys.S: New file. + * sysdeps/unix/sysv/sysv4/__getpgrp.c: New file. + * sysdeps/unix/sysv/sysv4/__setpgrp.c: New file. + * sysdeps/unix/sysv/sysv4/__setsid.c: New file. + * sysdeps/unix/sysv/sysv4/Dist: Add pgrpsys.S. + * sysdeps/unix/sysv/sysv4/Makefile (sysdep_routines): Add pgrpsys. + + * sysdeps/unix/bsd/bsd4.4/__setsid.S: Moved from unix/sysv/sysv4. + * sysdeps/unix/{bsd/sun/sunos4,bsd/ultrix4,sysv/linux}/__setsid.S: + Include bsd4.4 instead of sysv4 file. + +Mon Jun 21 19:08:04 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * posix/posix1_lim.h: #include . + * sysdeps/stub/tzname_max.h: New file (no-op). + * time/make-tzlim.c: New file. + * time/Makefile (headers): Add tzname_max.h. + (distribute): Add make-tzlim.c. + (extra-objs): Add make-tzlim.o and make-tzlim. + ($(common-objpfx)tzname_max.h): New target. + + * sysdeps/unix/sysv/sco3.2.4/confname.h (_SC_TZNAME_MAX): Define. + * sysdeps/unix/sysv/sco3.2.4/__sysconf.S: Detect arg being + _SC_TZNAME_MAX, and return max of TZNAME_MAX and __tzname_max. + + * sysdeps/stub/__sysconf.c: Include and . + Handle _SC_TZNAME_MAX and return max of TZNAME_MAX and __tzname_max. + * sysdeps/posix/__sysconf.c: Change _SC_TZNAME_MAX code to that. + * sysdeps/unix/sysv/sysv4/__sysconf.c: Likewise. + + * time/time.h (__tzname_max): Declare as variable, not function. + * time/__tzset.c (__tzname_max): Function removed. + (__tz_compute): Set the __tzname_max variable. + * time/tzfile.c (compute_tzname_max): New function. + (__tzfile_{read,default}): Call it. + +Sun Jun 20 18:32:49 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * time/zic.c, time/asia: New versions from ADO. + +Wed Jun 16 17:24:28 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 1.06.3. + +Fri Jun 11 15:44:53 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/bsd/m68k/__pipe.S: Use `movel' instead of `moveal', + which sun3 as does not appear to grok. + * sysdeps/unix/bsd/sun/m68k/__vfork.S: Likewise. + +Thu Jun 10 20:23:43 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/m68k/Makefile (as-pipe-ok): Define if -pipe is used in + compiler invocations, or if using GNU as. + (compile-command.S): Define using a pipe if `as-pipe-ok' is defined, + otherwise with a temporary file. + + * Makeconfig (gnu-as): Define if -DHAVE_GNU_AS appears in $(CPPFLAGS). + +Wed Jun 9 15:14:43 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * configure.in (os frobnication): Turn underscores as well as + lowercase Vs into dots in os name. + + * sysdeps/unix/start.c [__GNUC__] (_start): Use asm name "start" + only if [! NO_UNDERSCORES]. + +Tue Jun 8 14:51:00 1993 Brendan Kehoe (brendan@lisa.cygnus.com) + + * sysdeps/unix/bsd/ultrix4/mips/__handler.S: Don't save the stack + pointer. + +Mon Jun 7 21:01:24 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * time/Makefile (tzcompile): Remove -d switch, since zic-cmd has one. + + * time/{private.h,zic.c}: New versions from ADO. + + * sysdeps/unix/bsd/hp/m68k/__brk.S (error): Renamed label from `1', + (__brk): Use DO_CALL instead of movel and trap. + + * sysdeps/unix/bsd/sony/newsos4: Renamed sysdeps/unix/bsd/sony/newsos. + * sysdeps/unix/bsd/sony/m68k/{Implies,sysdep.h}: Moved there. + + * sysdeps/unix/bsd/hp/m68k/sysdep.h (DO_CALL): New macro, broken + out of PSEUDO. + (PSEUDO): Use it. + * sysdeps/unix/bsd/sony/newsos4/m68k/sysdep.h + (DO_CALL, PSEUDO): Likewise. + + * configure.in: Set --with-gnu-{ld,as} for os=bsd4.4. + +Fri Jun 4 14:11:00 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/i386/{strlen,memchr}.c: Use `repnz' instead of `repne'. + + * time/Makefile (zonenames): Rename zones-* to z.* so they all fit + in 14 chars. + (extra-objs): Here too. + + * sysdeps/unix/sysv/direct.h (D_RECLEN): New macro. + * sysdeps/unix/readdir.c (D_RECLEN): If not defined, define to use + `d_reclen' member. + (readdir): Use D_RECLEN (DP) in place of DP->d_reclen. + +Thu Jun 3 16:54:29 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/m68k/bytesex.h: New file. + + * sysdeps/unix/ioctls-tmpl.c [sony_news]: Define KANJI before + including . + +Wed Jun 2 17:45:38 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * malloc/Makefile (%.gz): Renamed target from %.z; use -v flag. + (malloc/ChangeLog): Use mv -f. + +Mon May 31 21:49:04 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 1.06.2 released. + + * manual/Makefile: Remove all uses of $(objpfx). Since the + generated files are distributed, they reside in the source + directory. + + * malloc/mtrace.c: #include ; malloc.h no longer does. + + * sysdeps/posix/sleep.c: Restore signal mask to OSET before + returning. Save errno on entry and restore it before returning. + + * Makeconfig (zonedir): New variable. + * time/Makefile (localtime-file, posixrules-file, install-others, + $(localtime-file), $(posixrules-file), tz-cc): Use $(zonedir) in + place of $(datadir)/zoneinfo. + (tzcompile): Omit -d switch. + (zic-cmd): Add `-d $(zonedir)'. + +Sun May 30 20:04:50 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/posix/stdio_init.c: (int)cookie is FD, not *(int*)cookie. + + * time/Makefile ($({localtime,posixrules}-file)): Don't pass -d + switch (no need, since directory is compiled into zic). Don't use + $(. + [_MALLOC_INTERNAL]: Move config.h, limits.h, and mem* to front of file. + (NULL): Move after stddef.h. + + * malloc/valloc.c: Don't include config.h; malloc.h already did. + + * malloc/malloc.c: Undo rms's change. + + * malloc/mcheck.c, malloc/malloc.h: Undo rms's change. + +Sat May 29 13:04:38 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * malloc/malloc.c (malloc) [emacs]: If size is 0, make it 1. + + * malloc/malloc.h (CONST): Define this always, + rather than `const' sometimes. + (memory_warnings): Use CONST, not __const, in decl. + * malloc/mcheck.c (checkhdr): Use CONST, not const. + +Fri May 28 18:29:26 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/Makefile (ioctls): Use fgrep instead of egrep to + omit unwanted symbols. Filter the list of them through sort|uniq + to remove duplicates first. + + * sysdeps/unix/Makefile (errlist.c): Use dir and notdir + functions to guarantee qualified path name for make_errlist. + +Thu May 27 17:05:04 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 1.06.1. + + * sysdeps/sparc/Dist: Include sdiv.S, not div.S. + + * sysdeps/unix/common/Dist: Remove make_siglist.c. + + * stdio/internals.c: Declare __stdio_fileno before reference. + + * sysdeps/generic/{memchr,strchr,strlen}.c: Abort if words are + bigger than 64 bits. + +Wed May 26 14:44:19 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Makerules [objects] (install-others): Don't add libc.a to this. + (install): Depend on $(libdir)/libc.a. + (intall-no-libc.a): New target, depends on $(+install). + (install): Don't depend on $(+install), just on install-no-libc.a. + * Rules (subdir_install): Depend on install-no-libc.a, not install. + + * Makefile ($(libc.a)): Don't depend on subdir_lib. + (lib-noranlib): Depend on subdir_lib. + + Make `fileno' a per-FILE io operation. + * stdio/stdio.h (__io_fileno): New typedef. + (__io_functions): Add `__fileno' member. + (struct __stdio_file): Remove `__fileno' member. + [__USE_POSIX] [__OPTIMIZE__]: Remove fileno macro defn. + [__USE_POSIX] (fileno): Remove `const' from arg in prototype. + * stdio/fileno.c (fileno): Rewritten to call STREAM's __fileno fn. + * sysdeps/stub/sysd-stdio.c (__stdio_fileno): New function. + (__stdio_open): Return an int (zero for win, nonzero for lose), + and make third arg PTR * (filled in with cookie). + * stdio/stdio.h (__stdio_open): Changed prototype. + * sysdeps/posix/sysd-stdio.c (__stdio_open): Likewise. + (__stdio_{read,write,seek,close}): Use (int) COOKIE as the fd, rather + than *(int *) COOKIE. + (__stdio_fileno): New function; just returns (int) COOKIE. + * sysdeps/posix/fdopen.c: Set cookie to (PTR) FD; don't set fileno. + * stdio/vdprintf.c: Likewise. + * stdio/fmemopen.c: Set STREAM->__io_funcs.__fileno to NULL. + Set STREAM->__cookie to NULL and don't use STREAM->__fileno. + * stdio/internals.c (__default_io_functions): Add __stdio_fileno. + * sysdeps/posix/defs.c (stdstream): Initialize __cookie to (PTR) FD + Remove __fileno initializer. + Add NULL initializer for __io_funcs.__fileno. + * sysdeps/posix/pipestream.c (struct child): Remove `fd' member. + Add `cookie' and `funcs' members. + (FUNC): Macro to define child io_funcs. + (child_funcs): New variable, __io_functions struct of them. + (popen): Store STREAM's original cookie and io_funcs in CHILD, and + then set STREAM->__cookie to CHILD and stream->__io_funcs to + child_funcs. + (pclose): Restore STREAM's original cookie and io_funcs before + calling fclose. + + * configure.in (autoconf checks): Add new check for a + libc-friendly stddef.h. + + * sysdeps/unix/configure: Remove __getpgrp from list of syscalls. + + * sysdeps/generic/memchr.c: Handle 64-bit longwords. + * sysdeps/generic/strlen.c: Likewise. + * sysdeps/generic/strchr.c: Likewise. + + * sysdeps/unix/sysv/sco3.2.4/Makefile: Remove gratuitous `.c'. + + * Makerules [objects] (install-others): Add $(libdir)/libc.a to + this, instead of adding $(libc.a) to install-lib. + ($(libdir)/libc.a): New target to install from $(libc.a). + + * sysdeps/unix/sysv/sco3.2.4/__setsid.S: New file. + * sysdeps/unix/bsd/bsd4.4/__setsid.S: New file. + +Mon May 24 16:49:54 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * sysdeps/unix/sysv/linux/__setsid.S: Moved to unix/sysv/sysv4, + and replaced with #include of that. + * sysdeps/unix/bsd/sun/sunos4/__setsid.S: New file. + * sysdeps/unix/bsd/ultrix4/__setsid.S: New file. + + * posix/Makefile (install): Define to getconf. + + * crypt: New version from glad. + + * sysdeps/unix/sysv/sysv4/__sysconfig.S: Renamed to sysconfig.S. + * sysdeps/unix/sysv/sysv4/Makefile (sysdep_routines): Change reference. + * sysdeps/unix/sysv/sysv4/Dist: Add sysconfig.S. + + * sysdeps/generic/Makefile (siglist.c): Use dir and notdir + functions to guarantee qualified path name for make_siglist. + + * time/Makefile (tzcompile): Use $(@D) for target directory, not + reference to nonexistent 4th dep. + (localtime-file, posixrules-file): Turn these into absolute names. + (install-others): Simply refer to them. + ($(datadir)/zoneinfo/{localtime,posixrules}): Change targets of + these rules to $(localtime-file) and $(posixrules-file), respectively. + Use $(&2) # Find all the files that have a stub or generic version. try-sysdeps := $(foreach dir,$(..)sysdeps/stub $(..)sysdeps/generic,\ @@ -167,9 +167,9 @@ mv $@.new $@ .PHONY: dist -dist: $(tardir).tar.z $(tardir)-crypt.tar.z +dist: $(tardir).tar.gz $(tardir)-crypt.tar.gz -$(tardir)-crypt.tar.z: crypt/crypt.tar.z +$(tardir)-crypt.tar.gz: crypt/crypt.tar.gz ln $< $@ crypt/%: FORCE $(MAKE) -C $(@D) $(@F) @@ -187,8 +187,8 @@ %.Z: % compress -c $< > $@ -%.z: % - gzip -9 -c $< > $@ +%.gz: % + gzip -9 -v -c $< > $@ foo:=$(shell echo 'subdirs=$(subdirs)' >&2) dist-subdirs := $(addprefix dist-,$(subdirs)) # dist-manual @@ -209,3 +209,8 @@ # Get these things out of the environment because they take up lots of space. unexport distribute generated + +# Fnord. +export inhibit_mach_syscalls=t +export no_deps=t +export inhibit_interface_rules=t diff -ruN glibc-1.06/Makeconfig glibc-1.07/Makeconfig --- glibc-1.06/Makeconfig Sat May 22 17:02:12 1993 +++ glibc-1.07/Makeconfig Tue Jan 11 21:02:41 1994 @@ -1,4 +1,4 @@ -# Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. +# Copyright (C) 1991, 1992, 1993, 1994 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 @@ -70,6 +70,7 @@ else # This is a kludge. make wizards might grok. common-objpfx = sysdeps/../ +common-objdir = . endif endif @@ -117,6 +118,14 @@ libdir = $(exec_prefix)/lib endif +# Prefix to put on files installed in $(libdir). For libraries `libNAME.a', +# the prefix is spliced between `lib' and the name, so the linker switch +# `-l$(libprefix)NAME' finds the library; for other files the prefix is +# just prepended to the whole file name. +ifndef libprefix +libprefix = +endif + # Where to install the header files. ifndef includedir includedir = $(exec_prefix)/include @@ -140,6 +149,11 @@ datadir = $(prefix)/lib endif +# Where to install the timezone data files (which are machine-independent). +ifndef zonedir +zonedir = $(datadir)/zoneinfo +endif + # Where to install programs. ifndef bindir bindir = $(exec_prefix)/bin @@ -159,7 +173,7 @@ # Where to install the "localtime" timezone file; this is the file whose # contents $(localtime) specifies. If this is a relative pathname, it is -# relative to $(datadir)/zoneinfo. It is a good idea to put this somewhere +# relative to $(zonedir). It is a good idea to put this somewhere # other than there, so the zoneinfo directory contains only universal data, # localizing the configuration data elsewhere. ifndef localtime-file @@ -177,7 +191,7 @@ # Where to install the "posixrules" timezone file; this is file # whose contents $(posixrules) specifies. If this is a relative -# pathname, it is relative to $(datadir)/zoneinfo. +# pathname, it is relative to $(zonedir). ifndef posixrules-file posixrules-file = posixrules endif @@ -249,7 +263,7 @@ +cc_version = $(filter gcc,$(notdir $(firstword $(CC)))) # if using gcc # Extra flags to pass to GCC. -+gccwarn := -Wall -Wwrite-strings ++gccwarn := -Wall -Wwrite-strings -Wno-parentheses +gccopt := -fstrength-reduce # This is the program that generates makefile @@ -318,14 +332,14 @@ endif # +cc_version endif # -v -# These are flags given to the C compiler to -# tell it to look for include files (including ones -# given in angle brackets) in the current directory +# These are flags given to the C compiler to tell it to look for include +# files (including ones given in angle brackets) in the current directory # and in the parent library source directory. +# `+sysdep-includes' will be defined by Makerules. ifneq "$(..)" "" -+includes = -I. -I$(patsubst %/,%,$(..)) $(includes) ++includes = -I. -I$(patsubst %/,%,$(..)) $(includes) $(+sysdep-includes) else -+includes = -I. $(includes) ++includes = -I. $(includes) $(+sysdep-includes) endif @@ -342,6 +356,10 @@ ifneq "$(filter -DHAVE_GNU_LD,$(CPPFLAGS))" "" +gnu-stabs := yes +endif + +ifneq "$(filter -DHAVE_GNU_AS,$(CPPFLAGS))" "" +gnu-as := yes endif diff -ruN glibc-1.06/Makefile glibc-1.07/Makefile --- glibc-1.06/Makefile Sat May 22 22:30:09 1993 +++ glibc-1.07/Makefile Thu Jan 6 20:55:16 1994 @@ -1,4 +1,4 @@ -# Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. +# Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -31,6 +31,10 @@ configure: configure.in autoconf $(ACFLAGS) +%/configure: %/configure.in + autoconf $(ACFLAGS) $< > $@.new + mv $@.new $@ + include Makeconfig include $(objpfx)sysd-dirs @@ -49,6 +53,14 @@ $(sysdep-subdirs)) export subdirs := $(subdirs) # Benign, useless in GNU make before 3.63. +# The mach and hurd subdirectories have many generated header files which +# the much of rest of the library depends on, so it is best to build them +# first (and mach before hurd, at that). The before-compile additions in +# sysdeps/{mach,hurd}/Makefile should make it reliably work for these files +# not to exist when making in other directories, but it will be slower that +# way with more somewhat expensive `make' invocations. +subdirs := $(filter mach,$(subdirs)) $(filter hurd,$(subdirs)) \ + $(filter-out mach hurd,$(subdirs)) # All initialization source files. +subdir_inits := $(wildcard $(foreach dir,$(subdirs),$(dir)/init-$(dir).c)) @@ -57,11 +69,14 @@ # These are the targets that are made by making them in each subdirectory. -+subdir_targets := subdir_lib objects objs others mostlyclean subdir_clean\ - tests subdir_lint.out \ - subdir_echo-headers subdir_echo-distinfo subdir_install ++subdir_targets := subdir_lib objects objs others mostlyclean \ + subdir_clean tests subdir_lint.out \ + subdir_echo-headers subdir_echo-distinfo \ + subdir_install $(addprefix install-, \ + no-libc.a bin lib \ + data headers others) -headers := features.h stubs.h errno.h sys/errno.h errnos.h limits.h \ +headers := features.h errno.h sys/errno.h errnos.h limits.h \ $(stddef.h) $(stdarg.h) echo-headers: subdir_echo-headers @@ -76,6 +91,7 @@ $(objpfx)munch-init.c: munch.awk munch-tmpl.c $(+subdir_inits) awk -f $< subdirs='$(+init_subdirs)' $(word 2,$^) > $@-t mv $@-t $@ +generated := $(generated) $(objpfx)munch-init.c endif aux := sysdep $(+init) version start @@ -82,7 +98,10 @@ # What to install. -install-lib = crt0.o Mcrt1.o # libc.a is done by Makerules. +# SCO 3.2v4 uses crt1.o. Some other system uses Mcrt1.o. +# They are created below (containing no data or code). +install-lib = crt0.o crt1.o Mcrt1.o # libc.a is done by Makerules. +install-others = $(includedir)/stubs.h include Makerules @@ -96,12 +115,12 @@ -rm -f $@ ln $< $@ -$(objpfx)Mcrt1.o: - cp /dev/null $(objpfx)Mcrt1.c - $(COMPILE.c) $(objpfx)Mcrt1.c $(OUTPUT_OPTION) - rm -f $(objpfx)Mcrt1.c +$(objpfx)Mcrt1.o $(objpfx)crt1.o: + cp /dev/null $(@:.o=.c) + $(COMPILE.c) $(@:.o=.c) $(OUTPUT_OPTION) + rm -f $(@:.o=.c) -$(libc.a): subdir_lib +lib-noranlib: subdir_lib $(objpfx)sysd-dirs: $(+sysdir_pfx)config.make @@ -121,18 +140,21 @@ subdir-stubs := $(foreach dir,$(subdirs),$(common-objpfx)stub-$(dir)) -# Call the subdirs to make their stub-SUBDIR files. -$(subdir-stubs): $(common-objpfx)stub-%: FORCE - $(MAKE) -C $* stubs -FORCE: - -$(objpfx)stubs.h: $(common-objpfx)stub- $(subdir-stubs) +# Since stubs.h is never needed when building the library, we simplify the +# hairy installation process by producing it in place only as the last part +# of the top-level `make install'. It depends on subdir_install, which +# iterates over all the subdirs; subdir_install in each subdir depends on +# the subdir's stubs file. Having more direct dependencies would result in +# extra iterations over the list for subdirs and many recursive makes. +$(includedir)/stubs.h: subdir_install + @rm -f $(objpfx)stubs.h (echo '/* This file is automatically generated.';\ echo ' It defines a symbol `__stub_FUNCTION'\'' for each function';\ echo ' in the C library which is a stub, meaning it will fail';\ echo ' every time called, usually setting errno to ENOSYS. */';\ - sort $^) > $@.new - mv $@.new $@ + sort $(subdir-stubs)) > $(objpfx)stubs.h + $(INSTALL_DATA) $(objpfx)stubs.h $@ + rm -f $(objpfx)stubs.h # This makes the Info or DVI file of the documentation from the Texinfo source. .PHONY: info dvi @@ -166,10 +188,14 @@ # dependency of this target so that libc.a will be removed before the # subdirectories are dealt with and so they won't try to remove object # files from it when it's going to be removed anyway. - @$(MAKE) subdir_clean + @$(MAKE) subdir_clean no_deps=t distclean: clean - -rm -f $(addprefix $(objpfx),config.status config.make) + -rm -f $(addprefix $(objpfx),config.status config.make \ + sysd-Makefile sysd-dirs) +ifdef objdir + -rm -f $(objpfx)Makefile +endif .PHONY: echo_subdirs echo_subdirs:;@echo '$(subdirs)' @@ -184,9 +210,9 @@ distribute := README INSTALL NOTES COPYING.LIB COPYING ChangeLog NEWS \ Makefile Makeconfig Makerules Rules Make-dist MakeTAGS \ - ansidecl.h mkinstalldirs \ + ansidecl.h mkinstalldirs move-if-change \ configure configure.in aclocal.m4 config.sub config.guess\ - munch-tmpl.c munch.awk gnu-stabs.h sysdep.h + munch-tmpl.c munch.awk gnu-stabs.h sysdep.h install.sh export distribute := $(strip $(distribute)) export generated := $(generated) $(objpfx)stubs.h diff -ruN glibc-1.06/Makerules glibc-1.07/Makerules --- glibc-1.06/Makerules Sat May 22 23:02:01 1993 +++ glibc-1.07/Makerules Mon Jan 17 19:17:25 1994 @@ -1,4 +1,4 @@ -# Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. +# Copyright (C) 1991, 1992, 1993, 1994 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 @@ -17,7 +17,9 @@ # Cambridge, MA 02139, USA. # -# Propagated rules for making the GNU C library. +# Common rules for making the GNU C library. This file is included +# by the top-level Makefile and by all subdirectory makefiles +# (through Rules). # ifneq (,) This makefile requires GNU Make. @@ -40,8 +42,12 @@ export sources := $(sources) export headers := $(headers) -ifneq ($(findstring e,$(MAKEFLAGS)),) +oPATH := $(PATH) +PATH := this definition should take precedence over $(oPATH) +ifeq ($(PATH),$(oPATH)) You must not use the -e flag when building the GNU C library. +else +PATH := $(oPATH) endif ifndef +included-Makeconfig @@ -63,15 +69,10 @@ endif # Add -I switches to get the right sysdep directories. +# `+includes' in Makeconfig references $(+sysdep-includes). +sysdep-includes := $(addprefix -I,$(+sysdep_dirs)) -+includes := $(+includes) $(+sysdep-includes) # Include any system-specific makefiles. -# Also generate an ordered list of implicit rules which find the source -# files in each sysdep directory. The old method was to use vpath to -# search all the sysdep directories. However, that had the problem that a -# .S file in a later directory would be chosen over a .c file in an earlier -# directory, which does not preserve the desired sysdeps ordering behavior. # This is here so things in sysdep Makefiles can easily depend on foo.h as # appropriate and not worry about where foo.h comes from, which may be @@ -85,30 +86,99 @@ no_deps=t endif +# Some sysdep makefiles use this to distinguish being included here from +# being included individually by a subdir makefile (hurd/Makefile needs this). +in-Makerules := yes + +include $(+sysdir_pfx)sysd-Makefile +$(+sysdir_pfx)sysd-Makefile: $(+sysdir_pfx)config.make $(..)Makerules + -@rm -f $@T + (for dir in $(sysdirs); do \ + file=sysdeps/$$dir/Makefile; \ + if [ -f $(..)$$file ]; then \ + echo include "\$$(..)$$file"; \ + else true; fi; \ + done) > $@T + mv $@T $@ + + +# Reorder before-compile so that mach things come first, and hurd things +# second, before all else. The mach and hurd subdirectories have many +# generated header files which the much of rest of the library depends on, +# so it is best to build them first (and mach before hurd, at that). +before-compile := $(filter $(common-objpfx)mach% $(common-objpfx)hurd%,\ + $(before-compile)) \ + $(filter-out $(common-objpfx)mach% $(common-objpfx)hurd%,\ + $(before-compile)) + +# Remove existing files from `before-compile'. Things are added there when +# they must exist for dependency generation to work right, but once they +# exist there is no further need for every single file to depend on them, +# and those gratuitous dependencies result in many gratuitous +# recompilations. +before-compile := $(filter-out $(wildcard $(before-compile)),$(before-compile)) + +# Don't let any before-compile file be an intermediate and get removed. +$(before-compile): + +# Generate an ordered list of implicit rules which find the source files in +# each sysdep directory. The old method was to use vpath to search all the +# sysdep directories. However, that had the problem that a .S file in a +# later directory would be chosen over a .c file in an earlier directory, +# which does not preserve the desired sysdeps ordering behavior. + # When making the list of .dep files to include, we can't know which ones # have source in .s files, and thus do not in fact need a .dep file. # So we must define rules to make .dep files for .s files. -make-dummy-dep = \ - echo '\# $< cannot contain includes, so it needs no deps.' > $@ +define make-dummy-dep +$(addprefix ln $(objpfx)dummy.dep ,$(filter-out $(wildcard $@),$@)) +endef +$(objpfx)dummy.dep: + echo '# .s files cannot contain includes, so they need no deps.' > $@ + +# It matters that this set of rules, for compiling from sources in +# the current directory (the $srcdir/$subdir) come before the +# generated sysdep rules in included from sysd-rules below. When +# compiling in the source tree, generated sources go into the current +# directory, and those should be chosen before any sources in sysdeps. +$(objpfx)%.o: %.S $(before-compile); $(compile-command.S) +$(objpfx)%.dep: %.S $(before-compile); $(+make-deps) +$(objpfx)%.o: %.s $(before-compile); $(compile-command.s) +$(objpfx)%.dep: %.s; $(make-dummy-dep) +$(objpfx)%.o: %.c $(before-compile); $(compile-command.c) +$(objpfx)%.dep: %.c $(before-compile); $(+make-deps) +# Omit the objpfx rules when building in the source tree, because +# objpfx is empty and so these rules just override the ones above. +ifdef objpfx # Define first rules to find the source files in $(objpfx). # Generated source files will end up there. $(objpfx)%.o: $(objpfx)%.S $(before-compile); $(compile-command.S) $(objpfx)%.dep: $(objpfx)%.S $(before-compile); $(+make-deps) $(objpfx)%.o: $(objpfx)%.s $(before-compile); $(compile-command.s) -$(objpfx)%.dep: $(objpfx)%.s; $(make-dummy-dep) +$(objpfx)%.dep: $(objpfx)%.s $(objpfx)dummy.dep; $(make-dummy-dep) $(objpfx)%.o: $(objpfx)%.c $(before-compile); $(compile-command.c) $(objpfx)%.dep: $(objpfx)%.c $(before-compile); $(+make-deps) +endif -include $(+sysdir_pfx)sysd-Makefile -$(+sysdir_pfx)sysd-Makefile: $(+sysdir_pfx)config.make $(..)Makerules - (for dir in $(sysdirs); do \ - file=sysdeps/$$dir/Makefile; \ - if [ -f $(..)$$file ]; then \ - echo include "\$$(..)$$file"; \ - else true; \ - fi; \ - dir="\$$(sysdep_dir)/$$dir"; \ +# System-dependent makefiles can put in `inhibit-sysdep-asm' wildcard +# patterns matching sysdep directories whose assembly source files should +# be suppressed. +ifdef inhibit-sysdep-asm +define open-check-inhibit-asm +case $$sysdir in $(subst $(empty) ,|,$(inhibit-sysdep-asm))) ;; *) +endef +close-check-inhibit-asm = ;; esac +endif + +include $(+sysdir_pfx)sysd-rules +$(+sysdir_pfx)sysd-rules: $(+sysdir_pfx)config.make $(..)Makerules \ + $(wildcard $(foreach dir,$(sysdirs),\ + $(sysdep_dir)/$(dir)/Makefile)) + -@rm -f $@T + (for sysdir in $(sysdirs); do \ + dir="\$$(sysdep_dir)/$$sysdir"; \ + $(open-check-inhibit-asm) \ echo "\$$(objpfx)%.o: $$dir/%.S \$$(before-compile); \ \$$(compile-command.S)"; \ echo "\$$(objpfx)%.dep: $$dir/%.S \$$(before-compile); \ @@ -115,55 +185,14 @@ \$$(+make-deps)"; \ echo "\$$(objpfx)%.o: $$dir/%.s \$$(before-compile); \ \$$(compile-command.s)"; \ - echo "\$$(objpfx)%.dep: $$dir/%.s; \$$(make-dummy-dep)"; \ + echo "\$$(objpfx)%.dep: $$dir/%.s \$$(objpfx)dummy.dep; \ + \$$(make-dummy-dep)" $(close-check-inhibit-asm); \ echo "\$$(objpfx)%.o: $$dir/%.c \$$(before-compile); \ \$$(compile-command.c)"; \ echo "\$$(objpfx)%.dep: $$dir/%.c \$$(before-compile); \ \$$(+make-deps)"; \ - done) > $@ - -# Maximize efficiency by minimizing the number of rules. -.SUFFIXES: # Clear the suffix list. -# Add the suffixes we use. -.SUFFIXES: .a .o .S .s .c .h .dep - -# Generic rule for making directories. -%/: -# mkdir isn't smart enough to strip a trailing /. - mkdir $(@:%/=%) - -# Make sure that object files are not removed -# when they are intermediates between sources and library members. -# This can go away with make v4. -.PRECIOUS: %.o - -# Make sure that the parent library archive is never removed. -.PRECIOUS: $(libc.a) - -# Use the verbose option of ar and tar when not running silently. -ifeq "$(findstring s,$(MAKEFLAGS))" "" # if not -s -verbose := v -else # -s -verbose := -endif # not -s - -ARFLAGS := r$(verbose) - -# Figure out the source filenames in this directory. - -override sources := $(addsuffix .c,$(routines) $(aux) \ - $(sysdep_routines)) -export sysdep_routines := $(sysdep_routines) - -# This is the list of all object files, gotten by -# replacing every ".c" in `sources' with a ".o". -override objects := $(addprefix $(objpfx),$(sources:.c=.o)) - -# The order of these rules is important. - -$(objpfx)%.o: %.S $(before-compile); $(compile-command.S) -$(objpfx)%.o: %.s $(before-compile); $(compile-command.s) -$(objpfx)%.o: %.c $(before-compile); $(compile-command.c) + done) > $@T + mv $@T $@ ifndef compile-command.S compile-command.S = $(compile.S) $(OUTPUT_OPTION) @@ -176,7 +205,7 @@ endif ifeq ($(notdir $(firstword $(CC))),gcc) -# GCC can grok options after the file name. +# GCC can grok options after the file name, and it looks nicer that way. compile.S = $(CC) $< -c $(CPPFLAGS) $(asm-CPPFLAGS) compile.c = $(CC) $< -c $(CFLAGS) $(CPPFLAGS) else @@ -192,6 +221,75 @@ OUTPUT_OPTION = -o $@ endif endif + +S-CPPFLAGS = $(asm-CPPFLAGS) +define +make-deps +-@rm -f $@ +$(+mkdep) $< $(CPPFLAGS) $($(<:$*.%=%)-CPPFLAGS) | \ +sed $(sed-remove-objpfx) -e 's,$*\.o,$(@:.dep=.o) $@,' > $(@:.dep=.dtm) +mv $(@:.dep=.dtm) $@ +endef +ifneq (,$(objpfx)) +sed-remove-objpfx = -e 's@ $(subst @,\@,$(objpfx))@ $$(objpfx)@g' +endif + +# Figure out the source filenames in this directory. + +override sources := $(addsuffix .c,$(routines) $(aux) \ + $(sysdep_routines)) +export sysdep_routines := $(sysdep_routines) + +# This is the list of all object files, gotten by +# replacing every ".c" in `sources' with a ".o". +override objects := $(addprefix $(objpfx),$(sources:.c=.o)) + ++depfiles := $(strip $(sources:.c=.dep) $(addsuffix .dep,$(others) $(tests))) ++depfiles := $(addprefix $(objpfx),$(+depfiles)) + +$(objpfx)depend-$(subdir): Makefile +ifdef +depfiles +# This used to simply use $(+depfiles) on the command line, but that tended +# to overflow the arg limit on USG systems. Since `sources' is in the +# environment anyway, we do some shell processing on it instead. + for file in $(patsubst %,%.dep,$(others) $(tests)) \ + `echo $${sources} | sed 's/\.c/.dep/g'`; do \ + echo "include \$$(objpfx)$$file"; \ + done > $@ +else + cp /dev/null $@ +endif + +ifneq ($(no_deps),t) +# Include the generated dependencies of the sources in this directory. +include $(objpfx)depend-$(subdir) +endif + +# Maximize efficiency by minimizing the number of rules. +.SUFFIXES: # Clear the suffix list. +# Add the suffixes we use. +.SUFFIXES: .a .o .S .s .c .h .dep + +# Generic rule for making directories. +%/: +# mkdir isn't smart enough to strip a trailing /. + mkdir $(@:%/=%) + +# Make sure that object files are not removed +# when they are intermediates between sources and library members. +# This can go away with make v4. +.PRECIOUS: %.o + +# Make sure that the parent library archive is never removed. +.PRECIOUS: $(libc.a) + +# Use the verbose option of ar and tar when not running silently. +ifeq "$(findstring s,$(MAKEFLAGS))" "" # if not -s +verbose := v +else # -s +verbose := +endif # not -s + +ARFLAGS := r$(verbose) # This makes all the object files in the parent library archive. @@ -220,8 +318,8 @@ # Temporary until I get a better solution. .PHONY: ar-it ar-it: $(objects) -# $(+libc_lock_open) ifdef objects +# $(+libc_lock_open) ifdef objdir cd $(objdir); $(AR) cru$(verbose) libc.a $(patsubst $(objpfx)%,%,$^) else @@ -243,82 +341,94 @@ # installed as they are in $(includedir). install-others are absolute path # names of files to install; rules to install them are defined elsewhere. -do-install = $(INSTALL_DATA) $< $@ +define do-install +$(make-target-directory) +$(INSTALL_DATA) $< $@ +endef + +# Make the target directory if it doesn't exist. Because of make's +# directory cache, this will produce the `mkdir' command when the directory +# already exists, if it didn't exist at the start of the `make' run. The +# `-' prefix ignores errors from mkdir, so there will just be some +# gratuitous but harmless `File exists' messages. +define make-target-directory +$(addprefix -mkdir ,$(filter-out $(wildcard $(@D:%/=%)),$(@D:%/=%))) +endef + +# Don't attempt binaries for the Hurd version (yet). +ifdef mib_hacks +install := +ifeq ($(subdir),time) +install-others := +endif +endif + + # Any directory (parent or subdir) that has any object files to build # should install libc.a; this way "make install" in a subdir is guaranteed # to install everything it changes. ifdef objects -install-lib := $(install-lib) libc.a +install: $(libdir)/lib$(libprefix)c.a +# We avoid depending on lib-noranlib because that makes the parent make +# subdir_lib in all the subdirs, when the make install run they do will +# update the library anyway. Running ranlib after installing makes the +# __.SYMDEF time stamp up to date, which avoids messages from some linkers. +# Depending on subdir_install gets all the subdirs to update the library, +# and is optimal for `make install' at top level. +$(libdir)/lib$(libprefix)c.a: libobjs ar-it subdir_install + $(make-target-directory) + $(INSTALL_DATA) $(libc.a) $@ + $(RANLIB) $@ endif ifdef install $(addprefix $(bindir)/,$(install)): $(bindir)/%: $(objpfx)% - $(INSTALL) $< $@ + $(make-target-directory) + $(INSTALL_PROGRAM) $< $@ endif ifdef install-lib -$(addprefix $(libdir)/,$(install-lib)): $(libdir)/%: $(objpfx)%;$(do-install) +install-lib.a := $(filter lib%.a,$(install-lib)) +install-lib-non.a := $(filter-out lib%.a,$(install-lib)) +ifdef install-lib-non.a +$(addprefix $(libdir)/$(libprefix),$(install-lib-non.a)): \ + $(libdir)/$(libprefix)%: $(objpfx)% + $(do-install) +endif +ifdef install-lib.a +$(install-lib.a:lib%.a=$(libdir)/lib$(libprefix)%.a): \ + $(libdir)/lib$(libprefix)%.a: $(objpfx)lib%.a + $(do-install) +endif endif ifdef install-data $(addprefix $(datadir)/,$(install-data)): $(datadir)/%: %;$(do-install) endif -+install := $(addprefix $(libdir)/,$(install-lib)) \ - $(addprefix $(datadir)/,$(install-data)) \ - $(addprefix $(bindir)/,$(install)) \ - $(install-others) headers := $(strip $(headers)) ifdef headers $(addprefix $(includedir)/,$(headers)): \ $(includedir)/%: %;$(do-install) -+install := $(+install) $(addprefix $(includedir)/,$(headers)) endif # headers -+install := $(filter-out $(addprefix %/,$(no-install)),$(+install)) - -.PHONY: install installdirs -install: $(+install) -$(+install): installdirs -installdirs: $(..)mkinstalldirs - $(dir $<)$(notdir $<) $(dir $(+install)) - -S-CPPFLAGS = $(asm-CPPFLAGS) -+make-deps = $(+mkdep) $< $(CPPFLAGS) $($(<:$*.%=%)-CPPFLAGS) | \ - sed $(sed-remove-objpfx) -e 's,$*\.o,$(@:.dep=.o) $@,' > $@ -ifneq (,$(objpfx)) -sed-remove-objpfx = -e 's,$(objpfx),$$(objpfx),g' -endif - -# N.B.: The order of these two rules is important. -$(objpfx)%.dep: %.S $(before-compile) - $(+make-deps) -$(objpfx)%.dep: %.c $(before-compile) - $(+make-deps) -$(objpfx)%.dep: %.s - $(make-dummy-dep) - -+depfiles := $(strip $(sources:.c=.dep) $(addsuffix .dep,$(others) $(tests))) -+depfiles := $(addprefix $(objpfx),$(+depfiles)) - -$(objpfx)depend-$(subdir): Makefile -ifdef +depfiles - (for file in $(patsubst $(objpfx)%,%,$(+depfiles)); do \ - echo "include \$$(objpfx)$$file"; \ - done) > $@ -else - cp /dev/null $@ -endif -ifneq ($(no_deps),t) -# Include the generated dependencies of the sources in this directory. -ifdef have.make.that.groks.multiple.includes -# Avoid the extra file and waiting for it, since we can. -+depfiles := $(strip $(+depfiles)) -ifdef +depfiles -include $(+depfiles) -endif -else -include $(objpfx)depend-$(subdir) -endif -endif +.PHONY: install-bin-nosubdir install-lib-nosubdir \ + install-data-nosubdir install-headers-nosubdir +install-bin-nosubdir: $(addprefix $(bindir)/,$(install)) +install-lib-nosubdir: $(addprefix $(libdir)/,$(install-lib)) +install-data-nosubdir: $(addprefix $(datadir)/,$(install-data)) +install-headers-nosubdir: $(addprefix $(includedir)/,$(headers)) +install-others-nosubdir: $(install-others) + +# We need all the `-nosubdir' targets so that `install' in the parent +# doesn't depend on several things which each iterate over the subdirs. +# This rule makes `install-FOO' always use `install-FOO-nosubdir' as a +# subroutine. Then in the parent `install-FOO' also causes subdir makes. +install-%:: install-%-nosubdir ; + +.PHONY: install install-no-libc.a-nosubdir +install-no-libc.a-nosubdir: install-headers-nosubdir install-data-nosubdir\ + install-bin-nosubdir install-lib-nosubdir \ + install-others-nosubdir +install: install-no-libc.a-nosubdir # Command to compile $< in $(objdir) using the native libraries. native-compile = cwd=`pwd`; cd $(@D); $(CC) $(native-CFLAGS) \ @@ -360,7 +470,7 @@ /dev/null > $@T mv $@T $@ -ifdef gpl2lgpl +ifneq (,$(strip $(gpl2lgpl))) ifneq (,$(wildcard $(..)gpl2lgpl.sed)) # Snarf from the master source and frob the copying notice. $(gpl2lgpl): %: $(..)gpl2lgpl.sed /home/gd/gnu/lib/% diff -ruN glibc-1.06/NEWS glibc-1.07/NEWS --- glibc-1.06/NEWS Sat May 22 22:49:59 1993 +++ glibc-1.07/NEWS Sat Dec 25 02:41:44 1993 @@ -1,9 +1,42 @@ -GNU C Library NEWS -- history of user-visible changes. 8 April 1993 +GNU C Library NEWS -- history of user-visible changes. 23 December 1993 Copyright (C) 1992, 1993 Free Software Foundation, Inc. See the end for copying conditions. Please send GNU C library bug reports to bug-glibc@prep.ai.mit.edu. + +Version 1.07 + +* Brendan Kehoe has contributed most of a port to the DEC Alpha + running OSF/1 (alpha-dec-osf1). He says it is 75% complete. + +* The new `stpncpy' is a cross between `stpcpy' and `strncpy': It + copies a limited number of characters from a string, and returns the + address of the last character written. + +* You no longer need to check for whether the installed `stddef.h' is + compatible with the GNU C library. configure now checks for you. + +* You can now define a per-stream `fileno' function to convert the + stream's cookie into an integral file descriptor. + +* ``malloc (0)'' no longer returns a null pointer. Instead, it + allocates zero bytes of storage, and returns a unique pointer which + you can pass to `realloc' or `free'. The behavior is undefined if + you dereference this pointer. + +* The C library now runs on Sony NEWS m68k machines running either + NewsOS 3 or NewsOS 4. + +* The new `syscall' function is a system-dependent primitive function + for invoking system calls. It has the canonical behavior on Unix + systems, including unreliable return values for some calls (such as + `pipe', `fork' and `getppid'). + +* The error code `EWOULDBLOCK' is now obsolete; it is always defined + to `EAGAIN', which is the preferred name. On systems whose kernels + use two distinct codes, the C library now translates EWOULDBLOCK to + EAGAIN in every system call function. Version 1.06 diff -ruN glibc-1.06/README glibc-1.07/README --- glibc-1.06/README Sun May 23 00:21:38 1993 +++ glibc-1.07/README Mon Jan 17 22:58:34 1994 @@ -1,4 +1,4 @@ -This directory contains the version 1.06 test release of the GNU C Library. +This directory contains the version 1.07 test release of the GNU C Library. Many bugs have been fixed since the last release. Some bugs surely remain. @@ -5,18 +5,20 @@ As of this release, the GNU C library has been ported to the following configurations: - sparc-sun-sunos4 - sparc-sun-solaris2 - m68k-hp-bsd4.3 - m68k-sun-sunos4 - m68k-sony-bsd4.3 - mips-dec-ultrix4 + alpha-dec-osf1 (mostly finished) i386-bsd4.3 - i386-sysv - i386-sysv4 + i386-gnu (for Hurd development only) i386-sco3.2 i386-sco3.2v4 i386-sequent-dynix + i386-sysv + i386-sysv4 + m68k-hp-bsd4.3 + m68k-sony-newsos + m68k-sun-sunos4 + mips-dec-ultrix4 + sparc-sun-solaris2 + sparc-sun-sunos4 Porting the library is not hard. If you are interested in doing a port, please get on the mailing list by sending electronic mail to @@ -23,30 +25,33 @@ bug-glibc-request@prep.ai.mit.edu. The GNU C library now includes Michael Glad's Ultra Fast Crypt, which -provides the Unix `crypt' function, plus some other entry points. Because -of the United States export restriction on DES implementations, we are -distributing this code separately from the rest of the C library. There is -an extra distribution tar file just for crypt; it is called -`glibc-1.06-crypt.tar.z'. You can just unpack the crypt distribution -along with the rest of the C library and build; you can also build the -library without getting crypt. Users outside the USA can get the crypt -distribution via anonymous FTP from ftp.uni-c.dk [129.142.6.74], or another -archive site outside the USA. Archive maintainers are encouraged to copy -this distribution to their archives outside the USA. Please get it from -ftp.uni-c.dk; transferring this distribution from prep.ai.mit.edu (or any -other site in the USA) to a site outside the USA is in violation of US -export laws. +provides the Unix `crypt' function, plus some other entry points. +Because of the United States export restriction on DES implementations, +we are distributing this code separately from the rest of the C +library. There is an extra distribution tar file just for crypt; it is +called `glibc-1.07-crypt.tar.gz'. You can just unpack the crypt +distribution along with the rest of the C library and build; you can +also build the library without getting crypt. Users outside the USA +can get the crypt distribution via anonymous FTP from ftp.uni-c.dk +[129.142.6.74], or another archive site outside the USA. Archive +maintainers are encouraged to copy this distribution to their archives +outside the USA. Please get it from ftp.uni-c.dk; transferring this +distribution from prep.ai.mit.edu (or any other site in the USA) to a +site outside the USA is in violation of US export laws. See the file INSTALL to find out how to configure, build, install, and port the GNU C library. -The GNU C Library is completely documented by the Texinfo manual found in -the `manual/' subdirectory. Please send comments on the manual to -bug-glibc-manual@prep.ai.mit.edu, and not to the library bug-reporting address. - -The file NOTES contains a description of the feature-test macros used in -the GNU C library, explaining how you can tell the library what facilities -you want it to make available. +The GNU C Library is completely documented by the Texinfo manual found +in the `manual/' subdirectory. The manual is still being updated and +contains some known errors and omissions; we regret that we do not have +the resources to work on the manual as much as we would like. Please +send comments on the manual to bug-glibc-manual@prep.ai.mit.edu, and +not to the library bug-reporting address. + +The file NOTES contains a description of the feature-test macros used +in the GNU C library, explaining how you can tell the library what +facilities you want it to make available. Send bug reports to bug-glibc@prep.ai.mit.edu. diff -ruN glibc-1.06/Rules glibc-1.07/Rules --- glibc-1.06/Rules Sat May 22 22:30:12 1993 +++ glibc-1.07/Rules Thu Jan 6 20:41:20 1994 @@ -1,4 +1,4 @@ -# Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. +# Copyright (C) 1991, 1992, 1993, 1994 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 @@ -17,7 +17,8 @@ # Cambridge, MA 02139, USA. # -# Propagated rules for making the GNU C library +# Rules for making a subdirectory in the GNU C library. +# Each subdirectory Makefile defines some variables and includes this. # ifneq (,) This makefile requires GNU Make. @@ -41,6 +42,10 @@ headers := endif +ifneq "$(findstring env,$(origin generated))" "" +generated := +endif + ifeq "$(strip $(headers))" "" ifneq "$(wildcard $(subdir).h)" "" override headers := $(subdir).h @@ -76,6 +81,12 @@ $(dir $<)$(notdir $<) > $@ endif # tests +# Because the link above depends on libc.a, which I don't want built +# automatically, this is necessary. -mib +ifdef mib_hacks +others := +endif + export others := $(others) export tests := $(tests) @@ -100,10 +111,13 @@ .PHONY: subdir_echo-distinfo subdir_echo-distinfo: @echo $(addprefix +header+,$(headers)) \ - $(addprefix +nodist+,$(generated)) - + $(addprefix +nodist+,$(generated) $(dont_distribute)) + +# We want to install everything except the library itself, but update all +# our portions of the library because the parent make will install it later +# (likewise the stubs file). .PHONY: subdir_install -subdir_install: install +subdir_install: install-no-libc.a lib-noranlib stubs .PHONY: subdir_TAGS subdir_TAGS: TAGS @@ -110,8 +124,13 @@ # Make the distribution tarfile for the parent makefile. export distribute := $(distribute) +export dont_distribute := $(dont_distribute) export generated := $(generated) .PHONY: subdir_dist dist subdir_dist: dist dist: ../Make-dist $(MAKE) -f $< $(Make-dist-args) + +# Convenient target to update all the generated source files. +.PHONY: generated +generated: $(generated) diff -ruN glibc-1.06/TAGS glibc-1.07/TAGS --- glibc-1.06/TAGS Sun May 23 00:22:08 1993 +++ glibc-1.07/TAGS Mon Jan 17 22:59:06 1994 @@ -1,24 +1,36 @@ -sysdeps/unix/bsd/m68k/sysdep.S,0 +sysdeps/unix/bsd/m68k/sysdep.S,24 +#define _ERRNO_H19,837 sysdeps/stub/sysdep.c,0 -sysdeps/unix/bsd/vax/sysdep.S,0 +sysdeps/unix/bsd/vax/sysdep.S,24 +#define _ERRNO_H19,837 -sysdeps/unix/bsd/ultrix4/mips/sysdep.S,28 -ENTRY(syscall_error)23,884 +sysdeps/unix/bsd/ultrix4/mips/sysdep.S,52 +#define _ERRNO_H20,862 +ENTRY(syscall_error)25,920 + +sysdeps/unix/bsd/osf1/alpha/sysdep.S,52 +#define _ERRNO_H20,856 +ENTRY(syscall_error)23,894 + +sysdeps/unix/sysv/i386/linux/sysdep.S,24 +#define _ERRNO_H20,851 + +sysdeps/unix/sysv/sysv4/solaris2/sysdep.S,52 +#define _ERRNO_H20,856 +ENTRY(syscall_error)23,894 + +sysdeps/unix/i386/sysdep.S,53 +#define _ERRNO_H20,863 +.globl C_SYMBOL_NAME(23,901 -sysdeps/unix/sysv/i386/linux/sysdep.S,0 - -sysdeps/unix/i386/sysdep.S,63 -.globl C_SYMBOL_NAME(21,858 - movl %eax, C_SYMBOL_NAME(30,996 - set-init.c,26 DEFUN(__libc_init,29,989 version.c,40 -DEFUN_VOID(__libc_print_version)26,961 +DEFUN_VOID(__libc_print_version)26,967 sysdeps/unix/bsd/hp/m68k/start.c,45 #define _start 6,141 @@ -27,21 +39,26 @@ sysdeps/unix/bsd/m68k/start.c,21 #define DUMMIES 1,0 -sysdeps/unix/start.c,205 -#define ARG_DUMMIES 27,946 -#define DECL_DUMMIES 28,975 -#define ARG_DUMMIES30,1015 -#define DECL_DUMMIES31,1035 -#define __environ 38,1120 -void _start 56,1617 -DEFUN_VOID(_start)62,1779 -start1(78,2119 +sysdeps/unix/start.c,207 +#define ARG_DUMMIES 28,1011 +#define DECL_DUMMIES 29,1040 +#define ARG_DUMMIES31,1080 +#define DECL_DUMMIES32,1100 +#define __environ 39,1185 +void _start 57,1718 +DEFUN_VOID(_start)63,1880 +start1(79,2220 sysdeps/stub/start.c,0 -sysdeps/unix/bsd/ultrix4/mips/start.c,55 -#define __environ 35,1134 -DEFUN_VOID(__start)48,1489 +sysdeps/unix/bsd/ultrix4/mips/start.S,48 +#define __environ 22,877 +ENTRY(__start)28,947 + +sysdeps/unix/bsd/osf1/alpha/start.S,115 +#define __environ 22,877 +ENTRY(__start)33,993 + ! We set the GP register by using the address of the ldgp40,1118 sysdeps/unix/sysv/sysv4/solaris2/start.c,52 #define NO_SHLIB1,0 @@ -57,16 +74,15 @@ int syscall 102,2799 DEFUN_VOID(init_shlib)114,3063 -sysdeps/mach/i386/start.c,43 -#define __environ 35,1135 -_start 50,1666 - -sysdeps/mach/hurd/start.c,93 -#define LOSE 56,1715 -_start 67,2131 -count 160,4587 -makevec 182,4907 -_hurd_init 211,5413 +sysdeps/mach/start.c,59 +#define __environ 35,1133 +start1 57,1853 +_start 70,2085 + +sysdeps/mach/hurd/start.c,54 +start1 64,1958 +split_args 138,3879 +_start 182,5254 features.h,479 #define _FEATURES_H 21,858 @@ -87,11 +103,11 @@ #define __extension__136,4229 errno.h,25 -#define _ERRNO_H 25,904 +#define _ERRNO_H 25,910 sys/errno.h,0 -hp300/errnos.h,1960 +hp300/errnos.h,1993 #define EPERM 2,16 #define ENOENT 3,32 #define ESRCH 4,49 @@ -127,49 +143,50 @@ #define EDOM 36,686 #define ERANGE 41,901 #define EWOULDBLOCK 44,1005 -#define EINPROGRESS 45,1028 -#define EALREADY 46,1051 -#define ENOTSOCK 47,1071 -#define EDESTADDRREQ 48,1091 -#define EMSGSIZE 49,1115 -#define EPROTOTYPE 50,1135 -#define ENOPROTOOPT 51,1157 -#define EPROTONOSUPPORT 52,1180 -#define ESOCKTNOSUPPORT 53,1207 -#define EOPNOTSUPP 54,1234 -#define EPFNOSUPPORT 55,1256 -#define EAFNOSUPPORT 56,1280 -#define EADDRINUSE 57,1304 -#define EADDRNOTAVAIL 58,1326 -#define ENETDOWN 59,1351 -#define ENETUNREACH 60,1371 -#define ENETRESET 61,1394 -#define ECONNABORTED 62,1415 -#define ECONNRESET 63,1439 -#define ENOBUFS 64,1461 -#define EISCONN 65,1480 -#define ENOTCONN 66,1499 -#define ESHUTDOWN 67,1519 -#define ETOOMANYREFS 68,1540 -#define ETIMEDOUT 69,1564 -#define ECONNREFUSED 70,1585 -#define ELOOP 71,1609 -#define ENAMETOOLONG 72,1626 -#define EHOSTDOWN 73,1650 -#define EHOSTUNREACH 74,1671 -#define ENOTEMPTY 75,1695 -#define EPROCLIM 76,1716 -#define EUSERS 77,1736 -#define EDQUOT 78,1754 -#define ESTALE 79,1772 -#define EREMOTE 80,1790 -#define ENOMSG 81,1809 -#define EBADMSG 82,1827 -#define EIDRM 83,1846 -#define EDEADLK 84,1863 -#define ENOLCK 85,1882 -#define ENOSYS 86,1900 -#define __Emath_defined 90,1996 +#define EWOULDBLOCK_sys 45,1059 +#define EINPROGRESS 46,1127 +#define EALREADY 47,1150 +#define ENOTSOCK 48,1170 +#define EDESTADDRREQ 49,1190 +#define EMSGSIZE 50,1214 +#define EPROTOTYPE 51,1234 +#define ENOPROTOOPT 52,1256 +#define EPROTONOSUPPORT 53,1279 +#define ESOCKTNOSUPPORT 54,1306 +#define EOPNOTSUPP 55,1333 +#define EPFNOSUPPORT 56,1355 +#define EAFNOSUPPORT 57,1379 +#define EADDRINUSE 58,1403 +#define EADDRNOTAVAIL 59,1425 +#define ENETDOWN 60,1450 +#define ENETUNREACH 61,1470 +#define ENETRESET 62,1493 +#define ECONNABORTED 63,1514 +#define ECONNRESET 64,1538 +#define ENOBUFS 65,1560 +#define EISCONN 66,1579 +#define ENOTCONN 67,1598 +#define ESHUTDOWN 68,1618 +#define ETOOMANYREFS 69,1639 +#define ETIMEDOUT 70,1663 +#define ECONNREFUSED 71,1684 +#define ELOOP 72,1708 +#define ENAMETOOLONG 73,1725 +#define EHOSTDOWN 74,1749 +#define EHOSTUNREACH 75,1770 +#define ENOTEMPTY 76,1794 +#define EPROCLIM 77,1815 +#define EUSERS 78,1835 +#define EDQUOT 79,1853 +#define ESTALE 80,1871 +#define EREMOTE 81,1889 +#define ENOMSG 82,1908 +#define EBADMSG 83,1926 +#define EIDRM 84,1945 +#define EDEADLK 85,1962 +#define ENOLCK 86,1981 +#define ENOSYS 87,1999 +#define __Emath_defined 91,2095 sysdeps/stub/errnos.h,172 #define __Emath_defined 23,972 @@ -262,6 +279,87 @@ #define ENOSYS 152,6606 #define EFTYPE 154,6658 +sysdeps/mach/hurd/errnos.h,2017 +#define _HURD_ERRNO(6,153 +#define EPERM 7,208 +#define ENOENT 8,278 +#define ESRCH 9,350 +#define EINTR 10,412 +#define EIO 11,482 +#define ENXIO 12,547 +#define E2BIG 13,615 +#define ENOEXEC 14,684 +#define EBADF 15,748 +#define ECHILD 16,814 +#define EDEADLK 17,880 +#define ENOMEM 18,953 +#define EACCES 19,1023 +#define EFAULT 20,1088 +#define ENOTBLK 21,1147 +#define EBUSY 22,1216 +#define EEXIST 23,1275 +#define EXDEV 24,1334 +#define ENODEV 25,1407 +#define ENOTDIR 26,1488 +#define EISDIR 27,1551 +#define EINVAL 28,1613 +#define EMFILE 29,1677 +#define ENFILE 30,1744 +#define ENOTTY 31,1821 +#define ETXTBSY 32,1899 +#define EFBIG 33,1961 +#define ENOSPC 34,2023 +#define ESPIPE 35,2094 +#define EROFS 36,2154 +#define EMLINK 37,2223 +#define EPIPE 38,2285 +#define EDOM 41,2461 +#define ERANGE 46,2744 +#define EAGAIN 49,2907 +#define EWOULDBLOCK 50,2987 +#define EINPROGRESS 51,3056 +#define EALREADY 52,3129 +#define ENOTSOCK 53,3206 +#define EDESTADDRREQ 54,3284 +#define EMSGSIZE 55,3360 +#define EPROTOTYPE 56,3424 +#define ENOPROTOOPT 57,3502 +#define EPROTONOSUPPORT 58,3572 +#define ESOCKTNOSUPPORT 59,3642 +#define EOPNOTSUPP 60,3715 +#define EPFNOSUPPORT 61,3786 +#define EAFNOSUPPORT 62,3863 +#define EADDRINUSE 63,3958 +#define EADDRNOTAVAIL 64,4028 +#define ENETDOWN 65,4106 +#define ENETUNREACH 66,4169 +#define ENETRESET 67,4239 +#define ECONNABORTED 68,4322 +#define ECONNRESET 69,4402 +#define ENOBUFS 70,4474 +#define EISCONN 71,4547 +#define ENOTCONN 72,4622 +#define ESHUTDOWN 73,4693 +#define ETIMEDOUT 74,4773 +#define ECONNREFUSED 75,4841 +#define ELOOP 76,4907 +#define ENAMETOOLONG 77,4988 +#define EHOSTDOWN 78,5054 +#define EHOSTUNREACH 79,5114 +#define ENOTEMPTY 80,5178 +#define EUSERS 81,5245 +#define EDQUOT 82,5307 +#define ESTALE 83,5374 +#define EREMOTE 84,5443 +#define ENOLCK 85,5524 +#define ENOSYS 86,5590 +#define EBACKGROUND 87,5662 +#define ED 88,5756 +#define EGREGIOUS 89,5805 +#define EIEIO 90,5881 +#define EGRATUITOUS 91,5953 +#define _HURD_ERRNOS 92,6017 + limits.h,555 #define _LIMITS_H 25,925 #define CHAR_BIT 55,1621 @@ -285,64 +383,68 @@ #define LONG_MAX 101,2793 #define ULONG_MAX 104,2890 -stddef.h,1113 -#define _STDDEF_H10,368 -#define _STDDEF_H_11,386 -#define _ANSI_STDDEF_H13,455 -#define _SIZE_T30,1006 -#define _PTRDIFF_T33,1049 -#define _WCHAR_T36,1093 -#define _PTRDIFF_T74,2304 -#define _T_PTRDIFF_75,2323 -#define _T_PTRDIFF76,2343 -#define __PTRDIFF_T77,2362 -#define _PTRDIFF_T_78,2382 -#define ___int_ptrdiff_t_h79,2402 -#define _GCC_PTRDIFF_T80,2429 -#define __PTRDIFF_TYPE__ 82,2477 -typedef __PTRDIFF_TYPE__ ptrdiff_t;84,2518 -#define _SIZE_T112,3266 -#define _SYS_SIZE_T_H113,3282 -#define _T_SIZE_114,3304 -#define _T_SIZE115,3321 -#define __SIZE_T116,3337 -#define _SIZE_T_117,3354 -#define ___int_size_t_h118,3371 -#define _GCC_SIZE_T119,3395 -#define _SIZET_120,3415 -#define __SIZE_TYPE__ 122,3453 -typedef __SIZE_TYPE__ size_t;124,3500 -#define _WCHAR_T153,4295 -#define _T_WCHAR_154,4312 -#define _T_WCHAR155,4330 -#define __WCHAR_T156,4347 -#define _WCHAR_T_157,4365 -#define ___int_wchar_t_h158,4383 -#define _GCC_WCHAR_T159,4408 -#define __WCHAR_TYPE__ 161,4452 -typedef __wchar_t wchar_t;166,4608 -typedef __WCHAR_TYPE__ wchar_t;169,4700 -#define NULL 201,5297 -#define offsetof(209,5478 +stddef.h,1228 +#define _STDDEF_H11,389 +#define _STDDEF_H_12,407 +#define _ANSI_STDDEF_H14,476 +#define __STDDEF_H__16,527 +#define _SIZE_T33,1076 +#define _PTRDIFF_T36,1119 +#define _WCHAR_T39,1163 +#define _PTRDIFF_T77,2374 +#define _T_PTRDIFF_78,2393 +#define _T_PTRDIFF79,2413 +#define __PTRDIFF_T80,2432 +#define _PTRDIFF_T_81,2452 +#define ___int_ptrdiff_t_h82,2472 +#define _GCC_PTRDIFF_T83,2499 +#define __PTRDIFF_TYPE__ 85,2547 +typedef __PTRDIFF_TYPE__ ptrdiff_t;87,2588 +#define _SIZE_T116,3353 +#define _SYS_SIZE_T_H117,3369 +#define _T_SIZE_118,3391 +#define _T_SIZE119,3408 +#define __SIZE_T120,3424 +#define _SIZE_T_121,3441 +#define ___int_size_t_h122,3458 +#define _GCC_SIZE_T123,3482 +#define _SIZET_124,3502 +#define __size_t125,3518 +#define __SIZE_TYPE__ 127,3557 +typedef __SIZE_TYPE__ size_t;130,3650 +#define _WCHAR_T163,4565 +#define _T_WCHAR_164,4582 +#define _T_WCHAR165,4600 +#define __WCHAR_T166,4617 +#define _WCHAR_T_167,4635 +#define _WCHAR_T_H168,4653 +#define ___int_wchar_t_h169,4672 +#define __INT_WCHAR_T_H170,4697 +#define _GCC_WCHAR_T171,4721 +#define __WCHAR_TYPE__ 173,4765 +typedef __wchar_t wchar_t;178,4921 +typedef __WCHAR_TYPE__ wchar_t;181,5013 +#define NULL 215,5624 +#define offsetof(223,5805 stdarg.h,513 #define _STDARG_H9,243 #define _ANSI_STDARG_H_10,261 -#define __GNUC_VA_LIST47,922 -typedef char *__gnuc_va_list;49,1004 -typedef void *__gnuc_va_list;51,1040 -#define __va_rounded_size(62,1341 -#define va_start(65,1448 -#define va_end(70,1607 -#define va_arg(77,1912 -#define va_arg(82,2176 -#define _VA_LIST_121,3426 -#define _VA_LIST 124,3477 -typedef __gnuc_va_list va_list;127,3531 -#define _VA_LIST_T_H140,4059 -#define _VA_LIST_142,4138 -#define _VA_LIST144,4163 -typedef __gnuc_va_list va_list;145,4180 +#define __GNUC_VA_LIST50,998 +typedef char *__gnuc_va_list;52,1080 +typedef void *__gnuc_va_list;54,1116 +#define __va_rounded_size(65,1417 +#define va_start(68,1524 +#define va_end(73,1683 +#define va_arg(80,2010 +#define va_arg(85,2274 +#define _VA_LIST_125,3547 +#define _VA_LIST 128,3598 +typedef __gnuc_va_list va_list;131,3652 +#define _VA_LIST_T_H144,4202 +#define _VA_LIST_146,4303 +#define _VA_LIST148,4328 +typedef __gnuc_va_list va_list;149,4345 va-alpha.h,331 #define __GNUC_VA_LIST11,365 @@ -359,25 +461,26 @@ #define __va_tsize(85,2008 #define va_arg(88,2115 -va-i860.h,494 +va-i860.h,519 #define __GNUC_VA_LIST10,305 } __f_regs;15,385 -} __va_saved_regs;23,597 -} __gnuc_va_list;37,1253 -#define va_alist 47,1486 -#define va_dcl48,1522 -#define va_start(49,1537 -#define va_start(56,1783 -#define va_end(92,2653 -#define __NUM_PARM_FREGS 94,2675 -#define __NUM_PARM_IREGS 95,2702 -#define __savereg(97,2731 -#define __ireg_used 108,3140 -#define __freg_used 109,3170 -#define __mem_ptr 110,3200 -#define __reg_base 111,3226 -#define __extension__117,3348 -#define va_arg(120,3378 +} __va_saved_regs;23,622 +} __gnuc_va_list;37,1303 +#define va_alist 47,1536 +#define va_dcl 49,1598 +#define va_dcl51,1651 +#define va_start(53,1691 +#define va_start(60,1937 +#define va_end(96,2807 +#define __NUM_PARM_FREGS 98,2829 +#define __NUM_PARM_IREGS 99,2856 +#define __savereg(101,2885 +#define __ireg_used 112,3294 +#define __freg_used 113,3324 +#define __mem_ptr 114,3354 +#define __reg_base 115,3380 +#define __extension__121,3502 +#define va_arg(124,3532 va-i960.h,376 #define __GNUC_VA_LIST6,105 @@ -395,7 +498,7 @@ #define va_arg(52,1610 #define va_end(66,1996 -va-m88k.h,396 +va-m88k.h,422 #define __GNUC_VA_LIST6,107 } __gnuc_va_list;13,295 #define va_start(23,564 @@ -406,25 +509,30 @@ #define va_dcl 42,1224 #define __gnuc_va_list 53,1598 #define _VA_LIST54,1629 -#define __INT_VARARGS_H57,1729 -#define __va_reg_p(60,1761 -#define __va_size(64,1905 -#define va_arg(68,2077 -#define va_end(77,2466 +#define _VA_LIST_55,1646 +#define __INT_VARARGS_H58,1747 +#define __va_reg_p(61,1779 +#define __va_size(65,1923 +#define va_arg(69,2095 +#define va_end(78,2484 -va-mips.h,335 +va-mips.h,443 #define __GNUC_VA_LIST15,463 typedef char * __gnuc_va_list;16,486 #define __va_ellipsis 27,834 #define __va_ellipsis29,866 -#define __va_rounded_size(32,896 -#define va_start(36,1024 -#define va_alist 40,1139 -#define va_dcl 41,1176 -#define va_start(42,1232 -#define va_end(48,1379 -#define va_arg(54,1572 -#define va_arg(62,1879 +#define __va_rounded_size(33,910 +#define __va_rounded_size(36,993 +#define va_start(42,1142 +#define va_start(44,1213 +#define va_alist 49,1335 +#define va_dcl 52,1452 +#define va_dcl 54,1524 +#define va_start(56,1587 +#define va_end(62,1734 +#define va_arg(67,1891 +#define va_arg(73,2144 +#define va_arg(81,2451 va-pa.h,334 #define __GNUC_VA_LIST5,54 diff -ruN glibc-1.06/conf/portability.h glibc-1.07/conf/portability.h --- glibc-1.06/conf/portability.h Wed May 19 16:01:06 1993 +++ glibc-1.07/conf/portability.h Mon Jun 28 00:37:09 1993 @@ -4,3 +4,10 @@ files from future BIND distributions without change. */ #include + +/* Some BIND code decides it can omit the definitions of some functions + if BSD is defined to some value. That might make sense when the BIND + code is augmenting or replacing an existing system library, but we can + never omit a function here, since we are defining the system library. */ + +#undef BSD diff -ruN glibc-1.06/config.guess glibc-1.07/config.guess --- glibc-1.06/config.guess Wed May 19 16:24:48 1993 +++ glibc-1.07/config.guess Thu Jan 6 17:02:08 1994 @@ -17,10 +17,9 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ # -# This script attempts to guess a cononical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it prints an error message on stderr, and -# exits with 1. +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit system type (host/target name). @@ -38,10 +37,24 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in alpha:OSF1:1.*:*) + # 1.2 uses "1.2" for uname -r. echo alpha-dec-osf${UNAME_RELEASE} exit 0 ;; - sun4*:SunOS:[5-9].*:*) - echo sparc-sun-solaris2 + alpha:OSF1:V1.*:*) + # 1.3 uses "V1.3" for uname -r. + echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'` + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + sun4*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) echo sparc-sun-sunos${UNAME_RELEASE} @@ -55,6 +68,9 @@ VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; + mips:*:5*:RISCos) + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; @@ -61,6 +77,19 @@ m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; + AViiON:dgux:*:*) + echo m88k-dg-dgux${UNAME_RELEASE} + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; *:IRIX:*:*) echo mips-sgi-irix${UNAME_RELEASE} exit 0 ;; @@ -76,12 +105,21 @@ *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; 9000/31?:HP-UX:*:*) echo m68000-hp-hpux exit 0 ;; - 9000/3??:HP-UX:*:*) + 9000/[34]??:HP-UX:*:*) echo m68k-hp-hpux exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; 9000/7??:HP-UX:*:* | 9000/8?7:HP-UX:*:* ) echo hppa1.1-hp-hpux exit 0 ;; @@ -88,6 +126,39 @@ 9000/8??:HP-UX:*:*) echo hppa1.0-hp-hpux exit 0 ;; + 3050*:HI-UX:*:*) + sed 's/^ //' << EOF >dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?7:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; C1*:ConvexOS:*:*) echo c1-convex-bsd exit 0 ;; @@ -103,11 +174,21 @@ CRAY-2:UNICOS:*:*) echo cray2-cray-unicos exit 0 ;; + hp3[0-9][05]:NetBSD:*:*) + echo m68k-hp-netbsd${UNAME_RELEASE} + exit 0 ;; + i[34]86:NetBSD:*:*) + echo ${UNAME_MACHINE}-unknown-netbsd${UNAME_RELEASE} + exit 0 ;; i[34]86:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux exit 0 ;; i[34]86:UNIX_SV:4.*:*) - echo i486-unknown-sysv4 + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} + else + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE} + fi exit 0 ;; i[34]86:*:3.2:*) if /bin/uname -X 2>/dev/null >/dev/null ; then @@ -115,7 +196,7 @@ (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL else - echo ${UNAME_MACHINE}-unknown-sysv3.2 + echo ${UNAME_MACHINE}-unknown-sysv32 fi exit 0 ;; mini*:CTIX:SYS*5:*) @@ -122,9 +203,23 @@ # "miniframe" echo m68010-convergent-sysv exit 0 ;; + M680[234]0:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:*) + uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m680[234]0:LynxOS:2.2*:*) + echo m68k-lynx-lynxos${UNAME_RELEASE} + exit 0 ;; + i[34]86:LynxOS:2.2*:*) + echo i386-lynx-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.2*:*) + echo sparc-lynx-lynxos${UNAME_RELEASE} + exit 0 ;; esac -echo '(No uname command or uname output not recognized.)' 1>&2 +#echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 cat >dummy.c <&2 +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +#echo '(Unable to guess system type)' 1>&2 exit 1 diff -ruN glibc-1.06/config.sub glibc-1.07/config.sub --- glibc-1.06/config.sub Thu May 6 14:05:27 1993 +++ glibc-1.07/config.sub Sun Jan 16 14:30:35 1994 @@ -1,6 +1,6 @@ #!/bin/sh # Configuration validation subroutine script, version 1.1. -# Copyright (C) 1991, 1992 Free Software Foundation, Inc. +# Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. @@ -65,12 +65,23 @@ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next* | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp ) os= basic_machine=$1 ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` + ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` @@ -89,15 +100,19 @@ -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` ;; + -lynx) + os=-lynxos + ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in - # Recognize the basic CPU types with without company name. + # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. tahoe | i[34]86 | i860 | m68k | m68000 | m88k | ns32k | arm | pyramid \ | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \ - | alpha | we32k | ns16k | clipper | sparclite | i370 | sh) + | alpha | we32k | ns16k | clipper | sparclite | i370 | sh \ + | powerpc) basic_machine=$basic_machine-unknown ;; # Object if more than one company name word. @@ -105,7 +120,7 @@ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; - # Recognize the basic CPU types with with company name. + # Recognize the basic CPU types with company name. vax-* | tahoe-* | i[34]86-* | i860-* | m68k-* | m68000-* | m88k-* \ | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ @@ -112,45 +127,47 @@ | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \ | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \ | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \ - | sh-*) + | sh-* | powerpc-*) ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - vaxv) - basic_machine=vax-dec - os=-sysv + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att ;; - vms) - basic_machine=vax-dec - os=-vms + 3b*) + basic_machine=we32k-att ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - os=-mvs + alliant | fx80) + basic_machine=fx80-alliant ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i[34]86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-sysv32 + altos | altos3068) + basic_machine=m68k-altos ;; - i[34]86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-sysv4 + am29k) + basic_machine=a29k-none + os=-bsd ;; - i[34]86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` + amdahl) + basic_machine=580-amdahl os=-sysv ;; - i[34]86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-solaris2 + amiga) + basic_machine=m68k-cbm ;; - spur) - basic_machine=spur-unknown + amigados) + basic_machine=m68k-cbm + os=-amigados ;; - alliant | fx80) - basic_machine=fx80-alliant + amigaunix | amix) + basic_machine=m68k-cbm + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; convex-c1) basic_machine=c1-convex os=-bsd @@ -171,16 +188,36 @@ basic_machine=c38-convex os=-bsd ;; - m88k-omron*) - basic_machine=m88k-omron + cray | ymp) + basic_machine=ymp-cray + os=-unicos ;; - merlin) - basic_machine=ns32k-utek - os=-sysv + cray2) + basic_machine=cray2-cray + os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; + decstation | decstation-3100 | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; elxsi) basic_machine=elxsi-elxsi os=-bsd @@ -188,9 +225,71 @@ encore | umax | mmax) basic_machine=ns32k-encore ;; + fx2800) + basic_machine=i860-alliant + ;; genix) basic_machine=ns32k-ns ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + os=-hpux + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + os=-hpux + ;; + hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + os=-mvs + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i[34]86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` + os=-sysv32 + ;; + i[34]86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` + os=-sysv4 + ;; + i[34]86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` + os=-sysv + ;; + i[34]86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` + os=-solaris2 + ;; iris | iris4d) basic_machine=mips-sgi case $os in @@ -201,30 +300,95 @@ ;; esac ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + miniframe) + basic_machine=m68000-convergent + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att + news1000) + basic_machine=m68030-sony + os=-newsos ;; - 3b*) - basic_machine=we32k-att + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola + next) + basic_machine=m68k-next + os=-bsd ;; - balance) - basic_machine=ns32k-sequent - os=-dynix + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + np1) + basic_machine=np1-gould + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; pc532) basic_machine=ns32k-pc532 ;; - symmetry) - basic_machine=i386-sequent - os=-dynix + pn) + basic_machine=pn-gould + ;; + ps2) + basic_machine=i386-ibm + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown ;; sun2) basic_machine=m68000-sun @@ -259,165 +423,30 @@ sun4) basic_machine=sparc-sun ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; - ps2) - basic_machine=i386-ibm - ;; - fx2800) - basic_machine=i860-alliant - ;; - next) - basic_machine=m68k-next - os=-bsd - ;; - amiga) - basic_machine=m68k-cbm - ;; - amigados) - basic_machine=m68k-cbm - os=-amigados - ;; - amigaunix | amix) - basic_machine=m68k-cbm - os=-sysv4 - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k31[0-9] | hp9k2[0-9][0-9]) - basic_machine=m68000-hp - ;; - hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - miniframe) - basic_machine=m68000-convergent + symmetry) + basic_machine=i386-sequent + os=-dynix ;; tower | tower-32) basic_machine=m68k-ncr ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - decstation | decstation-3100 | pmax | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - cray | ymp) - basic_machine=ymp-cray - os=-unicos - ;; - cray2) - basic_machine=cray2-cray - os=-unicos - ;; - xmp) - basic_machine=xmp-cray - os=-unicos - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dpx2) - basic_machine=m68k-bull - os=-sysv - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - os=-hpux - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - os=-hpux - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - pn) - basic_machine=pn-gould - ;; - np1) - basic_machine=np1-gould - ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; vxworks960) basic_machine=i960-wrs os=-vxworks @@ -426,6 +455,10 @@ basic_machine=m68k-wrs os=-vxworks ;; + xmp) + basic_machine=xmp-cray + os=-unicos + ;; xps | xps100) basic_machine=xps100-honeywell ;; @@ -483,7 +516,7 @@ # Decode manufacturer-specific aliases for certain operating systems. -if [ "$os" ] +if [ x"$os" != x"" ] then case $os in # -solaris* is a basic system type, with this one exception. @@ -490,15 +523,20 @@ -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; + -solaris) + os=-solaris2 + ;; # First accept the basic system types. # The portable systems comes first. # Each alternative must end in a *, to match a version number. - -bsd* | -sysv* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]* | -hpux* \ | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigados* | -msdos* | -newsos* | -unicos* | -aos* \ | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \ - | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* ) + | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -riscix* | -lynxos*) ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` @@ -536,6 +574,12 @@ -svr3) os=-sysv3 ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; -xenix) os=-xenix ;; @@ -561,6 +605,9 @@ # system, and we'll never get to this point. case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; *-dec | vax-*) os=-ultrix4.2 ;; @@ -585,6 +632,9 @@ *-hp) os=-hpux ;; + *-hitachi) + os=-hiux + ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; @@ -645,14 +695,23 @@ case $basic_machine in *-unknown) case $os in + -riscix*) + vendor=acorn + ;; -sunos*) vendor=sun ;; + -lynxos*) + vendor=lynx + ;; -aix*) vendor=ibm ;; -hpux*) vendor=hp + ;; + -hiux*) + vendor=hitachi ;; -unos*) vendor=crds diff -ruN glibc-1.06/configure glibc-1.07/configure --- glibc-1.06/configure Sun May 23 00:18:22 1993 +++ glibc-1.07/configure Sun Jan 16 00:42:20 1994 @@ -3,7 +3,7 @@ # Configuration script for the GNU C Library. # DO NOT EDIT! This script is generated from configure.in; edit that instead. -# Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. +# Copyright (C) 1991, 1992, 1993, 1994 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,98 +38,104 @@ exec_prefix= verbose= +next= lose= for arg in $*; do if [ x$next != x ]; then - eval "$next = \$arg" + eval "$next=\$arg" next= else case $arg in - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=* | --s=*) - srcdir=`echo $arg | sed 's/-*s[a-z]*=//'` - ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr | --s) - next=srcdir - ;; - -target | --target | --targe | --targ | --tar | --ta | --t) - next=target - ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target=`echo $arg | sed 's/-*t[a-z]*=//'` - ;; - - -with-gnu-ld | --with-gnu-ld | --with-gnu-l) - gnu_ld=--with-gnu-ld - ;; - - -gas | --gas | --ga | --g | -with-gnu-as | --with-gnu-as | -with-gnu-a) - gnu_as=--with-gnu-as - ;; - - -nfp | --nfp | --nf | --n) - nfp=--nfp - ;; - - -with-* | --with-*) - ;; # ignored - - -x | --x) - ;; # ignored - - -os-release=* | -os-releas=* | -os-relea=* | -os-rele=* | -os-rel=* \ - | -os-re=* | -os-r=* | --os-release=* | --os-releas=* | --os-relea=* \ - | --os-rele=* | --os-rel=* | --os-re=* | --os-r=*) - release=`echo $arg | sed 's/-*os-r[a-z]*=//'` - ;; - -os-release | -os-releas | -os-relea | -os-rele | -os-rel \ - | -os-re | -os-r | --os-release | --os-releas | --os-relea \ - | --os-rele | --os-rel | --os-re | --os-r) - next=release - ;; - - -os-version=* | -os-versio=* | -os-versi=* | -os-vers=* | -os-ver=* \ - | -os-ver=* | -os-ve=* | -os-v=* | --os-version=* | --os-versio=* \ - | --os-versi=* | --os-vers=* | --os-ver=* | --os-ver=* | --os-ve=* \ - | --os-v=*) - version=`echo $arg | sed 's/-*os-v[a-z]*=//'` - ;; - -os-version | -os-versio | -os-versi | -os-vers | -os-ver \ - | -os-ver | -os-ve | -os-v |--os-version | --os-versio \ - | --os-versi | --os-vers | --os-ver | --os-ver | --os-ve | --os-v) - next=version - ;; - - # For backward compatibility, also recognize exact --exec_prefix. - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* | --exe=* | --ex=* | --e=*) - exec_prefix=`echo $arg | sed 's/[-a-z_]*=//'` - ;; - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- | --exec | --exe | --ex | --e) - next=exec_prefix - ;; - - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=`echo $arg | sed 's/[-a-z_]*=//'` - ;; - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - next=prefix - ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb | --ver | --ve | --v) - # Autoconf-generated code below will test this. - verbose=yes - ;; - - -*) - echo "Invalid option \`$arg'" 1>&2 - lose=yes - ;; - *) - if [ ! "$target" ]; then - target=$arg - else - lose=yes - fi - ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=* | --s=*) + srcdir=`echo $arg | sed 's/-*s[a-z]*=//'` + ;; + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr | --s) + next=srcdir + ;; + -target | --target | --targe | --targ | --tar | --ta | --t) + next=target + ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target=`echo $arg | sed 's/-*t[a-z]*=//'` + ;; + + -with-gnu-ld | --with-gnu-ld | --with-gnu-l) + gnu_ld=--with-gnu-ld + ;; + + -gas | --gas | --ga | --g | -with-gnu-as | --with-gnu-as | -with-gnu-a) + gnu_as=--with-gnu-as + ;; + + -nfp | --nfp | --nf | --n) + nfp=--nfp + ;; + + -with-* | --with-*) + # For `--with-foo=bar', do "with_foo='bar'". + # For `--with-fnord', do "with_fnord=yes". + # These variables may be examined by sysdep configure fragments. + eval `echo "$arg" | sed '{s/^-*//;s/-/_/g +s/^\([^=]*\)=\(.*\)$/\1='\''\2'\''/;s/^\([^=]*\)$/\1=yes/;}'` + ;; + + -x | --x) + ;; # ignored + + -os-release=* | -os-releas=* | -os-relea=* | -os-rele=* | -os-rel=* \ + | -os-re=* | -os-r=* | --os-release=* | --os-releas=* | --os-relea=* \ + | --os-rele=* | --os-rel=* | --os-re=* | --os-r=*) + release=`echo $arg | sed 's/-*os-r[a-z]*=//'` + ;; + -os-release | -os-releas | -os-relea | -os-rele | -os-rel \ + | -os-re | -os-r | --os-release | --os-releas | --os-relea \ + | --os-rele | --os-rel | --os-re | --os-r) + next=release + ;; + + -os-version=* | -os-versio=* | -os-versi=* | -os-vers=* | -os-ver=* \ + | -os-ver=* | -os-ve=* | -os-v=* | --os-version=* | --os-versio=* \ + | --os-versi=* | --os-vers=* | --os-ver=* | --os-ver=* | --os-ve=* \ + | --os-v=*) + version=`echo $arg | sed 's/-*os-v[a-z]*=//'` + ;; + -os-version | -os-versio | -os-versi | -os-vers | -os-ver \ + | -os-ver | -os-ve | -os-v |--os-version | --os-versio \ + | --os-versi | --os-vers | --os-ver | --os-ver | --os-ve | --os-v) + next=version + ;; + + # For backward compatibility, also recognize exact --exec_prefix. + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* | --exe=* | --ex=* | --e=*) + exec_prefix=`echo $arg | sed 's/[-a-z_]*=//'` + ;; + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- | --exec | --exe | --ex | --e) + next=exec_prefix + ;; + + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=`echo $arg | sed 's/[-a-z_]*=//'` + ;; + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + next=prefix + ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb | --ver | --ve | --v) + # Autoconf-generated code below will test this. + verbose=yes + ;; + + -*) + echo "Invalid option \`$arg'" 1>&2 + lose=yes + ;; + *) + if [ ! "$target" ]; then + target=$arg + else + lose=yes + fi + ;; esac fi done @@ -141,15 +147,19 @@ fi -trap 'rm -f conftest* core; exit 1' 1 3 15 - -# Needed for some versions of `tr' so that character classes in `[]' work. -if test "${LANG+set}" = "set" ; then - LANG=C -fi +trap 'rm -fr conftest* confdefs* core $ac_clean_files; exit 1' 1 3 15 +trap 'rm -f confdefs* $ac_clean_files' 0 -rm -f conftest* -compile='${CC-cc} $CFLAGS $DEFS conftest.c -o conftest $LIBS >/dev/null 2>&1' +# NLS nuisances. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +if test "${LC_ALL+set}" = 'set' ; then LC_ALL=C; export LC_ALL; fi +if test "${LANG+set}" = 'set' ; then LANG=C; export LANG; fi + +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h +compile='${CC-cc} $CFLAGS conftest.c -o conftest $LIBS >/dev/null 2>&1' # A filename unique to this package, relative to the directory that # configure is in, which we can look for to find out if srcdir is correct. @@ -183,10 +193,19 @@ esac +# Save the original args to write them into config.status later. +configure_args="$*" + + +# Decanonicalize srcdir so we can tell when we are configuring in srcdir. +if [ "`(cd ${srcdir}; pwd)`" = "`pwd`" ]; then + srcdir=. +fi + if [ ! "$target" ]; then - echo 'No target given. Trying to guess target...' target=`$srcdir/config.guess` + test -n "$target" && echo "No target given; guessing target is ${target}." fi if [ "$lose" = yes -o ! "$target" ]; then @@ -199,6 +218,20 @@ exit 1 fi +# Done parsing the arguments. + +# This will get text that should go into config.make. +config_vars= + +# Check for a --with-gmp argument and set gmp-srcdir in config.make. +case "$with_gmp" in +yes) echo "$prog: --with-gmp requires an argument; use --with-gmp=DIRECTORY" + exit 1 ;; +'') ;; +*) config_vars="$config_vars +gmp-srcdir = $with_gmp" ;; +esac + # Canonicalize the configuration name. config=`$srcdir/config.sub $target` if [ ! "$config" ]; then @@ -210,15 +243,44 @@ # machine-vendor-os eval "`echo $config | \ - sed 's/^\(.*\)-\(.*\)-\(.*\)$/machine=\1 vendor=\2 os=\3/'`" + sed 's/^\(.*\)-\(.*\)-\(.*\)$/\ +config_machine=\1 config_vendor=\2 config_os=\3/'`" -# Make sco3.2v4 become sco3.2.4. -os="`echo $os | sed 's/\([0-9]\)v\([0-9]\)/\1.\2/g'`" +# We keep the original values in `$config_*' and never modify them, so we +# can write them unchanged into config.make. Everything else uses +# $machine, $vendor, and $os, and changes them whenever convenient. +machine=$config_machine +vendor=$config_vendor +os=$config_os + +# 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'`" + +case "$machine" in +i[34]86) + machine=i386/$machine ;; +sparc[6789]) + machine=sparc/$machine ;; +m68k) + machine=m68k/m68020 ;; +m680?0) + machine=m68k/$machine ;; +m88k) + machine=m88k/m88100 ;; +m88???) + machine=m88k/$machine ;; +mips|r2000) + machine=mips/r3000 ;; +r[34]000) + machine=mips/$machine ;; +esac case "$os" in gnu*) - os=mach/hurd ;; -sunos* | ultrix* | newsos* | dynix* | bsd*) + base_os=mach/hurd ;; +netbsd* | 386bsd*) + base_os=unix/bsd/bsd4.4 ;; +osf1* | sunos* | ultrix* | newsos* | dynix* | *bsd*) base_os=unix/bsd ;; linux* | sysv* | isc* | esix* | sco* | minix*) base_os=unix/sysv ;; @@ -226,8 +288,8 @@ base_os=unix/sysv/sysv4 ;; esac -case "$os" in -gnu* | linux*) +case "$os:$base_os" in +gnu* | linux* | bsd4.4* | *:bsd4.4) gnu_ld=--with-gnu-ld gnu_as=--with-gnu-as esac @@ -253,12 +315,21 @@ tail="$2" done +# For sparc/sparc9, try sparc/sparc9 and then sparc. +mach= +tail=$machine +while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; [ "$m" ]; do + set $m + mach="$mach /$1" + tail="$2" +done + # Find what sysdep directories exist. sysnames= for b in $base ''; do for v in /$vendor ''; do for o in /$ostry ''; do - for m in /$machine ''; do + for m in $mach ''; do if [ -d $sysdep_dir$b$v$o$m ]; then sysnames="$sysnames $b$v$o$m" [ "$o" -o "$b" ] && os_used=t @@ -345,9 +416,6 @@ echo Using system-dependent files from directories: for dir in $sysnames; do echo " $dir"; done -# This will get text that should go into config.make. -config_vars= - # Make sure to not get the incompatible SysV /etc/install and # /usr/sbin/install, which might be in PATH before a BSD-like install, # or the SunOS /usr/etc/install directory, or the AIX /bin/install, @@ -359,9 +427,9 @@ echo checking for install IFS="${IFS= }"; saveifs="$IFS"; IFS="${IFS}:" for dir in $PATH; do - test -z "$dir" && dir=. - case $dir in - /etc|/usr/sbin|/usr/etc|/usr/afsws/bin|/usr/ucb) ;; + #test -z "$dir" && dir=. + case "$dir" in + ''|.|/etc|/usr/sbin|/usr/etc|/usr/afsws/bin|/usr/ucb) ;; *) if test -f $dir/installbsd; then INSTALL="$dir/installbsd -c" # OSF1 @@ -384,9 +452,22 @@ done IFS="$saveifs" fi -INSTALL=${INSTALL-cp} +if test -z "$INSTALL"; then + if test -f ${srcdir}/install.sh; then + # As a last resort, use the slow shell script. + # We want the top-level source directory, not the subdir's srcdir, + # so expand srcdir now rather than in the Makefile. + INSTALL="${srcdir}/install.sh -c" + else + echo "warning: ${srcdir}/install.sh not found; using cp" + INSTALL=cp + fi +fi +test -n "$verbose" && echo " setting INSTALL to $INSTALL" INSTALL_PROGRAM=${INSTALL_PROGRAM-'$(INSTALL)'} +test -n "$verbose" && echo " setting INSTALL_PROGRAM to $INSTALL_PROGRAM" INSTALL_DATA=${INSTALL_DATA-'$(INSTALL)'} +test -n "$verbose" && echo " setting INSTALL_DATA to $INSTALL_DATA" if test -z "$RANLIB"; then # Extract the first word of `ranlib', so it can be a program name with args. @@ -403,7 +484,7 @@ IFS="$saveifs" fi test -z "$RANLIB" && RANLIB=":" -test -n "$RANLIB" -a -n "$verbose" && echo " setting RANLIB to $RANLIB" +test -n "$RANLIB" && test -n "$verbose" && echo " setting RANLIB to $RANLIB" if test -z "$CC"; then @@ -421,7 +502,7 @@ IFS="$saveifs" fi test -z "$CC" && CC="cc" -test -n "$CC" -a -n "$verbose" && echo " setting CC to $CC" +test -n "$CC" && test -n "$verbose" && echo " setting CC to $CC" # Find out if we are using GNU C, under whatever name. cat > conftest.c < conftest.c < +Syntax Error +EOF +err=`eval "($CPP conftest.c >/dev/null) 2>&1"` +if test -z "$err"; then + : +else + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" cat > conftest.c < +Syntax Error EOF -err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"` +err=`eval "($CPP conftest.c >/dev/null) 2>&1"` if test -z "$err"; then : else + rm -rf conftest* CPP=/lib/cpp fi rm -f conftest* fi +rm -f conftest* +fi +test ".${verbose}" != "." && echo " setting CPP to $CPP" echo checking for signed size_t type @@ -457,18 +558,45 @@ eval "$CPP conftest.c 2>/dev/null" \ | grep '^FOOBAR.*unsigned.*FOOBAR$' >/dev/null \ || { -test -n "$verbose" && \ -echo ' defining' __SIZE_TYPE__ to be 'unsigned' -DEFS="$DEFS -D__SIZE_TYPE__=unsigned" + DEFS="$DEFS -U__SIZE_TYPE__ -D__SIZE_TYPE__=unsigned" + (echo '#undef __SIZE_TYPE__'; + echo '#define __SIZE_TYPE__ unsigned') >> confdefs.h + test -n "$verbose" && echo ' using unsigned int for size_t' } - rm -f conftest* -echo '#include ' > conftest.c -eval "$CPP \$DEFS conftest.c > conftest.out 2>&1" +echo '#include "confdefs.h" +#include ' > conftest.c +eval "$CPP conftest.c > conftest.out 2>&1" if egrep "__gnuc_va_list" conftest.out >/dev/null 2>&1; then + rm -rf conftest* config_vars="$config_vars stdarg.h = # The installed defines __gnuc_va_list." + +fi +rm -f conftest* + + +echo checking for libc-friendly stddef.h +cat > conftest.c < +#define __need_NULL +#include +int main() { exit(0); } +int t() { size_t size; wchar_t wchar; +#ifdef offsetof +#error stddef.h ignored __need_* +#endif +if (&size == NULL || &wchar == NULL) abort (); } +EOF +if eval $compile; then + rm -rf conftest* + config_vars="$config_vars +stddef.h = # The installed seems to be libc-friendly." + fi rm -f conftest* @@ -560,7 +688,7 @@ #define UNAME_SYSNAME "${sysname}" #define UNAME_RELEASE "${release}" #define UNAME_VERSION "${version}" -#define UNAME_MACHINE "${machine}-${vendor}" +#define UNAME_MACHINE "${config_machine}-${config_vendor}" END system_name="$sysname $release version $version on $vendor $machine" @@ -579,9 +707,9 @@ ( echo '# This file was generated automatically by configure. Do not edit.' echo '# Put configuration parameters in configparms instead.' - echo "config-machine = ${machine}" - echo "config-vendor = ${vendor}" - echo "config-os = ${os}" + echo "config-machine = ${config_machine}" + echo "config-vendor = ${config_vendor}" + echo "config-os = ${config_os}" echo "config-sysdirs = ${sysnames}" if [ "$prefix" ]; then echo "prefix = ${prefix}" @@ -598,18 +726,6 @@ echo "Wrote config.make in $PWD." switches= -if [ "$gnu_as" ]; then - switches="$switches --with-gnu-as" -fi -if [ "$gnu_ld" ]; then - switches="$switches --with-gnu-ld" -fi -if [ "$exec_prefix" ]; then - switches="$switches --exec_prefix=$exec_prefix" -fi -if [ "$prefix" ]; then - switches="$switches --prefix=$prefix" -fi if [ "$release" ]; then switches="$switches --os-release='$release'" fi @@ -629,7 +745,7 @@ srcdir = $srcdir all .DEFAULT: - \$(MAKE) -C \$(srcdir) ARCH=$objdir \$@ + \$(MAKE) -C \$(srcdir) ARCH=\`pwd\` \$@ END echo "Wrote Makefile in $PWD." @@ -640,9 +756,21 @@ # This file was generated automatically by configure. Do not edit. # The GNU C library was configured in $PWD for # $system_name as follows: -$0 $config --srcdir=$srcdir $switches +$0 $configure_args $switches \$* END chmod a+x config.status echo "Wrote config.status in $PWD." exit 0 +s%@INSTALL@%$INSTALL%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@RANLIB@%$RANLIB%g +s%@CC@%$CC%g +s%@CPP@%$CPP%g +INSTALL='$INSTALL' +INSTALL_PROGRAM='$INSTALL_PROGRAM' +INSTALL_DATA='$INSTALL_DATA' +RANLIB='$RANLIB' +CC='$CC' +CPP='$CPP' diff -ruN glibc-1.06/configure.in glibc-1.07/configure.in --- glibc-1.06/configure.in Fri May 21 14:33:35 1993 +++ glibc-1.07/configure.in Sat Jan 15 20:27:04 1994 @@ -7,7 +7,7 @@ dnl You can ignore the following line if you are reading this sentence. # DO NOT EDIT! This script is generated from configure.in; edit that instead. -# Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. +# Copyright (C) 1991, 1992, 1993, 1994 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 @@ -42,98 +42,104 @@ exec_prefix= verbose= +next= lose= for arg in $*; do if [ x$next != x ]; then - eval "$next = \$arg" + eval "$next=\$arg" next= else case $arg in - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=* | --s=*) - srcdir=`echo $arg | sed 's/-*s[a-z]*=//'` - ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr | --s) - next=srcdir - ;; - -target | --target | --targe | --targ | --tar | --ta | --t) - next=target - ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target=`echo $arg | sed 's/-*t[a-z]*=//'` - ;; - - -with-gnu-ld | --with-gnu-ld | --with-gnu-l) - gnu_ld=--with-gnu-ld - ;; - - -gas | --gas | --ga | --g | -with-gnu-as | --with-gnu-as | -with-gnu-a) - gnu_as=--with-gnu-as - ;; - - -nfp | --nfp | --nf | --n) - nfp=--nfp - ;; - - -with-* | --with-*) - ;; # ignored - - -x | --x) - ;; # ignored - - -os-release=* | -os-releas=* | -os-relea=* | -os-rele=* | -os-rel=* \ - | -os-re=* | -os-r=* | --os-release=* | --os-releas=* | --os-relea=* \ - | --os-rele=* | --os-rel=* | --os-re=* | --os-r=*) - release=`echo $arg | sed 's/-*os-r[a-z]*=//'` - ;; - -os-release | -os-releas | -os-relea | -os-rele | -os-rel \ - | -os-re | -os-r | --os-release | --os-releas | --os-relea \ - | --os-rele | --os-rel | --os-re | --os-r) - next=release - ;; - - -os-version=* | -os-versio=* | -os-versi=* | -os-vers=* | -os-ver=* \ - | -os-ver=* | -os-ve=* | -os-v=* | --os-version=* | --os-versio=* \ - | --os-versi=* | --os-vers=* | --os-ver=* | --os-ver=* | --os-ve=* \ - | --os-v=*) - version=`echo $arg | sed 's/-*os-v[a-z]*=//'` - ;; - -os-version | -os-versio | -os-versi | -os-vers | -os-ver \ - | -os-ver | -os-ve | -os-v |--os-version | --os-versio \ - | --os-versi | --os-vers | --os-ver | --os-ver | --os-ve | --os-v) - next=version - ;; - - # For backward compatibility, also recognize exact --exec_prefix. - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* | --exe=* | --ex=* | --e=*) - exec_prefix=`echo $arg | sed 's/[-a-z_]*=//'` - ;; - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- | --exec | --exe | --ex | --e) - next=exec_prefix - ;; - - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=`echo $arg | sed 's/[-a-z_]*=//'` - ;; - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - next=prefix - ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb | --ver | --ve | --v) - # Autoconf-generated code below will test this. - verbose=yes - ;; - - -*) - echo "Invalid option \`$arg'" 1>&2 - lose=yes - ;; - *) - if [ ! "$target" ]; then - target=$arg - else - lose=yes - fi - ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=* | --s=*) + srcdir=`echo $arg | sed 's/-*s[a-z]*=//'` + ;; + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr | --s) + next=srcdir + ;; + -target | --target | --targe | --targ | --tar | --ta | --t) + next=target + ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target=`echo $arg | sed 's/-*t[a-z]*=//'` + ;; + + -with-gnu-ld | --with-gnu-ld | --with-gnu-l) + gnu_ld=--with-gnu-ld + ;; + + -gas | --gas | --ga | --g | -with-gnu-as | --with-gnu-as | -with-gnu-a) + gnu_as=--with-gnu-as + ;; + + -nfp | --nfp | --nf | --n) + nfp=--nfp + ;; + + -with-* | --with-*) + # For `--with-foo=bar', do "with_foo='bar'". + # For `--with-fnord', do "with_fnord=yes". + # These variables may be examined by sysdep configure fragments. + eval `echo "$arg" | sed '{s/^-*//;s/-/_/g +s/^\([^=]*\)=\(.*\)$/\1='\''\2'\''/;s/^\([^=]*\)$/\1=yes/;}'` + ;; + + -x | --x) + ;; # ignored + + -os-release=* | -os-releas=* | -os-relea=* | -os-rele=* | -os-rel=* \ + | -os-re=* | -os-r=* | --os-release=* | --os-releas=* | --os-relea=* \ + | --os-rele=* | --os-rel=* | --os-re=* | --os-r=*) + release=`echo $arg | sed 's/-*os-r[a-z]*=//'` + ;; + -os-release | -os-releas | -os-relea | -os-rele | -os-rel \ + | -os-re | -os-r | --os-release | --os-releas | --os-relea \ + | --os-rele | --os-rel | --os-re | --os-r) + next=release + ;; + + -os-version=* | -os-versio=* | -os-versi=* | -os-vers=* | -os-ver=* \ + | -os-ver=* | -os-ve=* | -os-v=* | --os-version=* | --os-versio=* \ + | --os-versi=* | --os-vers=* | --os-ver=* | --os-ver=* | --os-ve=* \ + | --os-v=*) + version=`echo $arg | sed 's/-*os-v[a-z]*=//'` + ;; + -os-version | -os-versio | -os-versi | -os-vers | -os-ver \ + | -os-ver | -os-ve | -os-v |--os-version | --os-versio \ + | --os-versi | --os-vers | --os-ver | --os-ver | --os-ve | --os-v) + next=version + ;; + + # For backward compatibility, also recognize exact --exec_prefix. + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* | --exe=* | --ex=* | --e=*) + exec_prefix=`echo $arg | sed 's/[-a-z_]*=//'` + ;; + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- | --exec | --exe | --ex | --e) + next=exec_prefix + ;; + + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=`echo $arg | sed 's/[-a-z_]*=//'` + ;; + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + next=prefix + ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb | --ver | --ve | --v) + # Autoconf-generated code below will test this. + verbose=yes + ;; + + -*) + echo "Invalid option \`$arg'" 1>&2 + lose=yes + ;; + *) + if [ ! "$target" ]; then + target=$arg + else + lose=yes + fi + ;; esac fi done @@ -149,9 +155,14 @@ AC_PREPARE(features.h) changequote(,) +# Decanonicalize srcdir so we can tell when we are configuring in srcdir. +if [ "`(cd ${srcdir}; pwd)`" = "`pwd`" ]; then + srcdir=. +fi + if [ ! "$target" ]; then - echo 'No target given. Trying to guess target...' target=`$srcdir/config.guess` + test -n "$target" && echo "No target given; guessing target is ${target}." fi if [ "$lose" = yes -o ! "$target" ]; then @@ -164,6 +175,20 @@ exit 1 fi +# Done parsing the arguments. + +# This will get text that should go into config.make. +config_vars= + +# Check for a --with-gmp argument and set gmp-srcdir in config.make. +case "$with_gmp" in +yes) echo "$prog: --with-gmp requires an argument; use --with-gmp=DIRECTORY" + exit 1 ;; +'') ;; +*) config_vars="$config_vars +gmp-srcdir = $with_gmp" ;; +esac + # Canonicalize the configuration name. config=`$srcdir/config.sub $target` if [ ! "$config" ]; then @@ -175,15 +200,44 @@ # machine-vendor-os eval "`echo $config | \ - sed 's/^\(.*\)-\(.*\)-\(.*\)$/machine=\1 vendor=\2 os=\3/'`" + sed 's/^\(.*\)-\(.*\)-\(.*\)$/\ +config_machine=\1 config_vendor=\2 config_os=\3/'`" -# Make sco3.2v4 become sco3.2.4. -os="`echo $os | sed 's/\([0-9]\)v\([0-9]\)/\1.\2/g'`" +# We keep the original values in `$config_*' and never modify them, so we +# can write them unchanged into config.make. Everything else uses +# $machine, $vendor, and $os, and changes them whenever convenient. +machine=$config_machine +vendor=$config_vendor +os=$config_os + +# 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'`" + +case "$machine" in +i[34]86) + machine=i386/$machine ;; +sparc[6789]) + machine=sparc/$machine ;; +m68k) + machine=m68k/m68020 ;; +m680?0) + machine=m68k/$machine ;; +m88k) + machine=m88k/m88100 ;; +m88???) + machine=m88k/$machine ;; +mips|r2000) + machine=mips/r3000 ;; +r[34]000) + machine=mips/$machine ;; +esac case "$os" in gnu*) - os=mach/hurd ;; -sunos* | ultrix* | newsos* | dynix* | bsd*) + base_os=mach/hurd ;; +netbsd* | 386bsd*) + base_os=unix/bsd/bsd4.4 ;; +osf1* | sunos* | ultrix* | newsos* | dynix* | *bsd*) base_os=unix/bsd ;; linux* | sysv* | isc* | esix* | sco* | minix*) base_os=unix/sysv ;; @@ -191,8 +245,8 @@ base_os=unix/sysv/sysv4 ;; esac -case "$os" in -gnu* | linux*) +case "$os:$base_os" in +gnu* | linux* | bsd4.4* | *:bsd4.4) gnu_ld=--with-gnu-ld gnu_as=--with-gnu-as esac @@ -218,12 +272,21 @@ tail="$2" done +# For sparc/sparc9, try sparc/sparc9 and then sparc. +mach= +tail=$machine +while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; [ "$m" ]; do + set $m + mach="$mach /$1" + tail="$2" +done + # Find what sysdep directories exist. sysnames= for b in $base ''; do for v in /$vendor ''; do for o in /$ostry ''; do - for m in /$machine ''; do + for m in $mach ''; do if [ -d $sysdep_dir$b$v$o$m ]; then sysnames="$sysnames $b$v$o$m" [ "$o" -o "$b" ] && os_used=t @@ -310,9 +373,6 @@ echo Using system-dependent files from directories: for dir in $sysnames; do echo " $dir"; done -# This will get text that should go into config.make. -config_vars= - changequote([,])dnl The world is now safe for m4, and unsafe for shell. dnl Be sure to add each macro used here to aclocal.m4 (which see). AC_PROG_INSTALL @@ -326,12 +386,31 @@ FOOBAR __SIZE_TYPE__ FOOBAR' > conftest.c eval "$CPP conftest.c 2>/dev/null" \ | grep '^FOOBAR.*unsigned.*FOOBAR$' >/dev/null \ -|| AC_DEFINE(__SIZE_TYPE__, unsigned) +|| { + dnl Do this by hand instead of AC_DEFINE so we can use -U to avoid warnings. + DEFS="$DEFS -U__SIZE_TYPE__ -D__SIZE_TYPE__=unsigned" + (echo '#undef __SIZE_TYPE__'; + echo '#define __SIZE_TYPE__ unsigned') >> confdefs.h + test -n "$verbose" && echo ' using unsigned int for size_t' +} rm -f conftest* AC_HEADER_EGREP(__gnuc_va_list, stdarg.h, [config_vars="$config_vars stdarg.h = # The installed defines __gnuc_va_list."]) +AC_COMPILE_CHECK([libc-friendly stddef.h], +[#define __need_size_t +#define __need_wchar_t +#include +#define __need_NULL +#include ], [size_t size; wchar_t wchar; +#ifdef offsetof +#error stddef.h ignored __need_* +#endif +if (&size == NULL || &wchar == NULL) abort ();], +[config_vars="$config_vars +stddef.h = # The installed seems to be libc-friendly."]) + changequote(,)dnl The world is again safe for shell scripts. # Iterate over all the sysdep directories we will use, running their @@ -420,7 +499,7 @@ #define UNAME_SYSNAME "${sysname}" #define UNAME_RELEASE "${release}" #define UNAME_VERSION "${version}" -#define UNAME_MACHINE "${machine}-${vendor}" +#define UNAME_MACHINE "${config_machine}-${config_vendor}" END system_name="$sysname $release version $version on $vendor $machine" @@ -439,9 +518,9 @@ ( echo '# This file was generated automatically by configure. Do not edit.' echo '# Put configuration parameters in configparms instead.' - echo "config-machine = ${machine}" - echo "config-vendor = ${vendor}" - echo "config-os = ${os}" + echo "config-machine = ${config_machine}" + echo "config-vendor = ${config_vendor}" + echo "config-os = ${config_os}" echo "config-sysdirs = ${sysnames}" if [ "$prefix" ]; then echo "prefix = ${prefix}" @@ -458,18 +537,6 @@ echo "Wrote config.make in $PWD." switches= -if [ "$gnu_as" ]; then - switches="$switches --with-gnu-as" -fi -if [ "$gnu_ld" ]; then - switches="$switches --with-gnu-ld" -fi -if [ "$exec_prefix" ]; then - switches="$switches --exec_prefix=$exec_prefix" -fi -if [ "$prefix" ]; then - switches="$switches --prefix=$prefix" -fi if [ "$release" ]; then switches="$switches --os-release='$release'" fi @@ -489,7 +556,7 @@ srcdir = $srcdir all .DEFAULT: - \$(MAKE) -C \$(srcdir) ARCH=$objdir \$@ + \$(MAKE) -C \$(srcdir) ARCH=\`pwd\` \$@ END echo "Wrote Makefile in $PWD." @@ -500,7 +567,7 @@ # This file was generated automatically by configure. Do not edit. # The GNU C library was configured in $PWD for # $system_name as follows: -$0 $config --srcdir=$srcdir $switches +$0 $configure_args $switches \$* END chmod a+x config.status echo "Wrote config.status in $PWD." @@ -509,5 +576,5 @@ dnl This gets rid of the random stuff autoconf has stuffed in weird places. divert(-1)dnl AC_This is here so I can search for `AC_' to find the frobs. dnl Local Variables: -dnl compile-command: "m4 /gd/gnu/autoconf/acgeneral.m4 /gd/gnu/autoconf/acspecific.m4 configure.in > configure && chmod a+x configure" +dnl compile-command: "autoconf" dnl End: diff -ruN glibc-1.06/ctype/TAGS glibc-1.07/ctype/TAGS --- glibc-1.06/ctype/TAGS Wed May 19 19:50:03 1993 +++ glibc-1.07/ctype/TAGS Mon Aug 16 15:58:58 1993 @@ -1,28 +1,28 @@ ctype.h,604 -#define _CTYPE_H 25,914 -#define __isctype(66,2694 -#define __isascii(69,2784 -#define __toascii(70,2856 -#define __tolower(72,2917 -#define __toupper(73,2973 -#define __exctype(75,3030 -#define isalnum(124,4207 -#define isalpha(125,4251 -#define iscntrl(126,4295 -#define isdigit(127,4339 -#define islower(128,4383 -#define isgraph(129,4427 -#define isprint(130,4471 -#define ispunct(131,4515 -#define isspace(132,4559 -#define isupper(133,4603 -#define isxdigit(134,4647 -#define isblank(137,4711 -#define tolower(140,4763 -#define toupper(141,4795 -#define isascii(144,4875 -#define toascii(145,4907 +#define _CTYPE_H 25,920 +#define __isctype(66,2700 +#define __isascii(69,2783 +#define __toascii(70,2855 +#define __tolower(72,2916 +#define __toupper(73,2972 +#define __exctype(75,3029 +#define isalnum(124,4206 +#define isalpha(125,4250 +#define iscntrl(126,4294 +#define isdigit(127,4338 +#define islower(128,4382 +#define isgraph(129,4426 +#define isprint(130,4470 +#define ispunct(131,4514 +#define isspace(132,4558 +#define isupper(133,4602 +#define isxdigit(134,4646 +#define isblank(137,4710 +#define tolower(140,4762 +#define toupper(141,4794 +#define isascii(144,4874 +#define toascii(145,4906 ctype.c,247 #define __NO_CTYPE21,854 diff -ruN glibc-1.06/ctype/ctype.h glibc-1.07/ctype/ctype.h --- glibc-1.06/ctype/ctype.h Wed Oct 7 18:31:04 1992 +++ glibc-1.07/ctype/ctype.h Thu Jul 29 17:46:01 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993 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 @@ -64,7 +64,7 @@ extern __const short int *__ctype_toupper; /* Case conversions. */ #define __isctype(c, type) \ - ((__ctype_b[(int) (c)] & (unsigned short int) type) != 0) + (__ctype_b[(int) (c)] & (unsigned short int) type) #define __isascii(c) (((c) & (1 << 7)) == 0) /* If high bit is set. */ #define __toascii(c) ((c) & 0x7f) /* Mask off high bit. */ diff -ruN glibc-1.06/dirent/Makefile glibc-1.07/dirent/Makefile --- glibc-1.06/dirent/Makefile Mon May 3 19:34:03 1993 +++ glibc-1.07/dirent/Makefile Wed Dec 22 17:55:46 1993 @@ -19,11 +19,12 @@ # # Sub-makefile for dirent portion of the library. # -subdir := dirent +subdir := dirent -routines := opendir closedir readdir rewinddir \ - seekdir telldir scandir alphasort \ - getdents __getdents +headers := dirent.h dirstream.h +routines := opendir closedir readdir rewinddir \ + seekdir telldir scandir alphasort \ + getdents __getdents distribute := direct.h tests := list diff -ruN glibc-1.06/dirent/TAGS glibc-1.07/dirent/TAGS --- glibc-1.06/dirent/TAGS Sun May 23 00:25:07 1993 +++ glibc-1.07/dirent/TAGS Sat Jan 8 02:39:36 1994 @@ -5,6 +5,9 @@ ../sysdeps/stub/opendir.c,22 DEFUN(opendir,27,954 +../sysdeps/mach/hurd/opendir.c,23 +DEFUN(opendir,35,1115 + ../sysdeps/unix/closedir.c,24 DEFUN(closedir,29,1035 @@ -11,13 +14,23 @@ ../sysdeps/stub/closedir.c,23 DEFUN(closedir,28,990 -../sysdeps/unix/readdir.c,65 -DEFUN(readdir,33,1124 -DEFUN(readdir, (dirp), DIR *dirp)33,1124 +../sysdeps/mach/hurd/closedir.c,24 +DEFUN(closedir,30,1047 + +../sysdeps/unix/bsd/readdir.c,23 +DEFUN(readdir,31,1060 + +../sysdeps/unix/readdir.c,91 +#define D_RECLEN(32,1142 +DEFUN(readdir,38,1246 +DEFUN(readdir, (dirp), DIR *dirp)38,1246 ../sysdeps/stub/readdir.c,22 DEFUN(readdir,26,964 +../sysdeps/mach/hurd/readdir.c,23 +DEFUN(readdir,32,1066 + ../sysdeps/unix/rewinddir.c,24 DEFUN(rewinddir,28,991 @@ -24,6 +37,9 @@ ../sysdeps/stub/rewinddir.c,24 DEFUN(rewinddir,27,967 +../sysdeps/mach/hurd/rewinddir.c,24 +DEFUN(rewinddir,28,991 + ../sysdeps/unix/seekdir.c,22 DEFUN(seekdir,27,969 @@ -31,6 +47,10 @@ DEFUN(seekdir,27,972 DEFUN(seekdir, (dirp, pos), DIR *dirp AND off_t pos)27,972 +../sysdeps/mach/hurd/seekdir.c,84 +DEFUN(seekdir,27,975 +DEFUN(seekdir, (dirp, pos), DIR *dirp AND __off_t pos)27,975 + ../sysdeps/unix/telldir.c,23 DEFUN(telldir,28,1000 @@ -38,8 +58,12 @@ DEFUN(telldir,27,980 DEFUN(telldir, (dirp), DIR *dirp)27,980 +../sysdeps/mach/hurd/telldir.c,65 +DEFUN(telldir,28,1000 +DEFUN(telldir, (dirp), DIR *dirp)28,1000 + scandir.c,22 -DEFUN(scandir,24,892 +DEFUN(scandir,24,898 alphasort.c,24 DEFUN(alphasort,24,892 @@ -63,18 +87,42 @@ ../sysdeps/unix/bsd/bsd4.4/__getdents.S,0 +../sysdeps/unix/bsd/osf1/alpha/__getdents.S,33 +SYSCALL__ (getdirentries,21,857 + ../sysdeps/unix/sysv/__getdents.c,101 DEFUN(__getdirentries,28,999 int fd AND char *buf AND size_t nbytes AND off_t *basep)29,1048 ../sysdeps/mach/hurd/__getdents.c,30 -DEFUN(__getdirentries,26,936 +DEFUN(__getdirentries,26,942 -dirent.h,172 -#define _DIRENT_H 25,921 -#define __need_size_t32,1003 -struct dirent37,1081 -#define d_ino 47,1367 - } DIR;61,1802 -#define MAXNAMLEN 89,2702 -#define MAXNAMLEN 91,2735 +dirent.h,155 +#define _DIRENT_H 25,933 +struct dirent41,1366 +#define d_ino 52,1740 +#define MAXNAMLEN 84,2815 +#define MAXNAMLEN 86,2848 +#define __need_size_t91,2908 + +../sysdeps/unix/bsd/dirstream.h,75 +#define _DIRSTREAM_H 21,847 +#define __need_size_t23,871 + } DIR;39,1369 + +../sysdeps/unix/dirstream.h,75 +#define _DIRSTREAM_H 21,847 +#define __need_size_t23,871 + } DIR;41,1432 + +../sysdeps/stub/dirstream.h,29 +#define _DIRSTREAM_H 21,847 + +../sysdeps/unix/bsd/osf1/dirstream.h,75 +#define _DIRSTREAM_H 21,858 +#define __need_size_t23,882 + } DIR;42,1426 + +../sysdeps/mach/hurd/dirstream.h,46 +#define _DIRSTREAM_H 21,853 + } DIR;40,1569 diff -ruN glibc-1.06/dirent/dirent.h glibc-1.07/dirent/dirent.h --- glibc-1.06/dirent/dirent.h Thu Aug 20 14:30:32 1992 +++ glibc-1.07/dirent/dirent.h Thu Jan 6 10:32:10 1994 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993, 1994 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,15 +29,20 @@ #include -#define __need_size_t -#include + +/* Directory entry structure. + This structure is laid out identically to the `struct direct' that + represents directory entries in the GNU Hurd and in BSD Unix (and + incidentally, on disk in the Berkeley fast file system). The `readdir' + implementations for GNU and BSD know this; you must change them if you + change this structure. */ -/* Directory entry structure. */ struct dirent { __ino_t d_fileno; /* File serial number. */ - size_t d_namlen; /* Length of the file name. */ + unsigned short int d_reclen; /* Length of the whole `struct dirent'. */ + unsigned short int d_namlen; /* Length of the file name. */ /* Only this member is in the POSIX standard. */ char d_name[1]; /* File name (actually longer). */ @@ -47,20 +52,10 @@ #define d_ino d_fileno /* Backward compatibility. */ #endif -/* Directory stream type. */ -typedef struct - { - int __fd; /* File descriptor. */ - - char *__data; /* Directory block. */ - size_t __allocation; /* Space allocated for the block. */ - size_t __offset; /* Current offset into the block. */ - size_t __size; /* Total valid data in the block. */ +/* Get the system-dependent definition of `DIR', + the data type of directory stream objects. */ +#include - struct dirent __entry; /* Returned by `readdir'. */ - } DIR; - - /* Open a directory stream on NAME. Return a DIR stream on the directory, or NULL if it could not be opened. */ extern DIR *opendir __P ((__const char *__name)); @@ -93,6 +88,8 @@ #endif #include +#define __need_size_t +#include /* Seek to position POS on DIRP. */ extern void seekdir __P ((DIR * __dirp, __off_t __pos)); diff -ruN glibc-1.06/dirent/scandir.c glibc-1.07/dirent/scandir.c --- glibc-1.06/dirent/scandir.c Fri Nov 20 18:20:47 1992 +++ glibc-1.07/dirent/scandir.c Mon Aug 30 13:44:09 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1993 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 @@ -73,10 +73,13 @@ if (errno != 0) { + save = errno; (void) closedir (dp); + errno = save; return -1; } + (void) closedir (dp); errno = save; /* Sort the list if we have a comparison function to sort with. */ diff -ruN glibc-1.06/errno.h glibc-1.07/errno.h --- glibc-1.06/errno.h Fri May 22 03:52:13 1992 +++ glibc-1.07/errno.h Thu Nov 18 03:25:24 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993 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 @@ -32,6 +32,13 @@ /* Declare the `errno' variable. */ extern __volatile int errno; + +#ifdef __USE_GNU +/* The full and simple forms of the name with which the program was + invoked. These variables are set up automatically at startup based on + the value of ARGV[0] (this works only if you use GNU ld). */ +extern char *program_invocation_name, *program_invocation_short_name; +#endif __END_DECLS diff -ruN glibc-1.06/grp/TAGS glibc-1.07/grp/TAGS --- glibc-1.06/grp/TAGS Wed May 12 23:52:20 1993 +++ glibc-1.07/grp/TAGS Tue Dec 21 03:58:36 1993 @@ -30,8 +30,8 @@ ../sysdeps/stub/setgroups.c,24 DEFUN(setgroups,26,980 -../sysdeps/mach/hurd/setgroups.c,25 -DEFUN(setgroups,27,1004 +../sysdeps/mach/hurd/setgroups.c,24 +DEFUN(setgroups,27,998 grp.h,102 #define _GRP_H 25,916 diff -ruN glibc-1.06/hurd/Makefile glibc-1.07/hurd/Makefile --- glibc-1.06/hurd/Makefile Wed Mar 17 19:33:18 1993 +++ glibc-1.07/hurd/Makefile Thu Dec 30 23:11:46 1993 @@ -18,32 +18,59 @@ subdir := hurd -interface-header-prefix = hurd/ -headers = hurd.h # $(interface-headers) +all: -ifneq (,) -user-interfaces := auth process \ - exec core interrupt \ - fs io socket term -server-interfaces := misc -endif +# Some things below (but before including Rules) use configuration variables. +include ../Makeconfig + + +headers = hurd.h $(interface-headers) +distribute := intr_rpc.awk hurdintr.awk -routines = __pid2task __task2pid pid2task task2pid \ - __setauth setauth hurdports \ - fchroot \ - hurdauth hurdid hurdpath hurdpid hurdsig hurdsock hurdfrob \ +user-interfaces := $(addprefix hurd/,\ + auth process startup msg \ + exec core interrupt \ + fs fsys io term socket ) +server-interfaces := hurd/msg + +routines = $(interface-routines) \ + hurdid hurdpath hurdpid hurdports \ + hurdexec fexecve \ + __setauth setauth \ + __pid2task __task2pid pid2task task2pid \ + getuids setuids getumask fchroot \ dtable __getdport getdport openport setdtsz \ +# hurdsig hurdmsg hurdsock hurdauth \ + privports \ msgportdemux startsig \ - getuids getumask \ - dead_recv \ fopenport __fopenport \ - vpprintf \ - $(interface-routines) -aux := hurdinit hurdsyms - -all: + vpprintf +aux := hurdsyms hurdinit + +# Get the proper definition of `hurd-srcdir'. +include ../sysdeps/mach/hurd/Makefile + +# Use and install the Hurd header files directly out of the Hurd source. + +# Find the MiG defs files in the Hurd source. +vpath %.defs $(hurd-srcdir) + +# Install all .h and .defs files we find in the Hurd's hurd/ directory. +hurd-headers := $(patsubst $(hurd-srcdir)/%,%,\ + $(wildcard $(addprefix $(hurd-srcdir)/hurd/,\ + *.defs *.h))) + +# Don't distribute the Hurd headers; they are in the Hurd distribution. +dont_distribute = $(hurd-headers) + +# DO NOT try to remake these in any way!!! +$(addprefix $(hurd-srcdir)/,$(hurd-headers)) : ; +install-others += $(addprefix $(includedir)/,$(hurd-headers)) +$(includedir)/hurd/%: $(hurd-srcdir)/hurd/%; $(do-install) + +# Insert comment here. - +ifdef intrhack # XXX # This rule needs to come before the implicit rules in Machrules. __%.c: intr_rpc.awk %_rpc.c gawk -v call=__$* -v rpc=__$*_rpc -f $^ > $@-new @@ -51,9 +78,11 @@ # __%_rpc.c is made with mig by Machrules. %_rpc.c: __%_rpc.c sed s/MACH_MSG_OPTION_NONE/MACH_SEND_INTERRUPT/ $< > $@ +endif include ../mach/Machrules +ifdef intrhack # XXX ifdef user-interfaces include hurdintr endif @@ -66,8 +95,6 @@ interface-routines := $(filter-out %_rpc,$(interface-routines)) \ $(intr-calls:%=__% %) -generated = $(interface-routines:%=%.c) $(interface-headers) - -distribute := intr_rpc.awk hurdintr.awk - +endif + include ../Rules diff -ruN glibc-1.06/hurd/TAGS glibc-1.07/hurd/TAGS --- glibc-1.06/hurd/TAGS Thu May 13 01:47:17 1993 +++ glibc-1.07/hurd/TAGS Mon Jan 17 23:04:47 1994 @@ -1,77 +1,71 @@ +hurdid.c,41 +init_id 25,911 +_hurd_check_ids 39,1195 + +hurdpath.c,102 +__hurd_path_lookup 25,917 +__hurd_path_split 113,2698 +__path_lookup 162,3783 +__path_split 186,4402 + +hurdpid.c,42 +init_pids 29,995 +_S_proc_newids 47,1318 + +hurdports.c,107 +get 22,882 +#define GET(38,1206 +set 42,1314 +#define SET(54,1571 +#define GETSET(57,1669 +GETSET 60,1750 + +hurdexec.c,20 +_hurd_exec 30,1132 + +fexecve.c,16 +fexecve 25,945 + +__setauth.c,41 +__setauth 38,1195 +init_reauth 108,3256 + +setauth.c,0 + __pid2task.c,19 -__pid2task 22,857 +__pid2task 22,863 __task2pid.c,19 -__task2pid 22,856 +__task2pid 22,862 pid2task.c,0 task2pid.c,0 -__setauth.c,41 -__setauth 36,1170 -init_reauth 101,2987 +getuids.c,18 +__getuids 23,849 -setauth.c,0 +setuids.c,16 +setuids 24,931 -hurdports.c,139 -get 22,882 -#define GET(38,1200 -set 42,1293 -#define SET(54,1544 -#define GETSET(57,1627 -GETSET 60,1693 -GETSET 61,1718 -GETSET 62,1741 +getumask.c,17 +getumask 22,851 fchroot.c,22 -DEFUN(fchroot,27,983 +DEFUN(fchroot,27,989 -hurdauth.c,39 -__add_auth 24,889 -__del_auth 45,1341 - -hurdid.c,16 -init_id 27,952 - -hurdpath.c,101 -__hurd_path_lookup 24,892 -__hurd_path_split 96,2223 -__path_lookup 145,3281 -__path_split 169,3804 - -hurdpid.c,41 -init_pids 25,924 -__proc_newids 39,1230 - -hurdsig.c,298 -_hurd_thread_sigstate 38,1275 -write_corefile 68,2049 -abort_rpcs 150,4070 -abort_all_rpcs 209,6027 -_hurd_internal_post_signal 232,6578 -__sig_post 383,10286 -_hurd_exc_post_signal 428,11281 -_hurd_raise_signal 440,11642 -_hurdsig_init 479,12653 -_hurd_proc_init 538,14662 -reauth_proc 562,15429 - -hurdsock.c,47 -init_sock 27,995 -_hurd_socket_server 48,1676 - -hurdfrob.c,73 -__get_init_port 23,876 -__set_init_port 56,1647 -__get_init_int 89,2440 - -dtable.c,93 -init_dtable 37,1187 -get_dtable_port 108,3305 -fork_dtable 131,3758 -reauth_dtable 166,4708 +dtable.c,233 +init_dtable 42,1276 +_hurd_intern_fd 97,3002 +_hurd_alloc_fd 117,3448 +_hurd_port2fd 146,3944 +get_dtable_port 199,5527 +fork_dtable 222,5980 +reauth_dtable 257,6988 +rectty_dtable 302,8165 +tiocsctty 354,9364 +tiocnoctty 384,10147 __getdport.c,19 __getdport 28,945 @@ -79,76 +73,51 @@ getdport.c,0 openport.c,17 -openport 24,896 +openport 26,993 setdtsz.c,23 -setdtablesize 28,1067 - -msgportdemux.c,75 -struct demux23,891 -msgport_server 36,1170 -_hurd_msgport_receive 50,1469 - -../sysdeps/stub/startsig.c,57 -#define STACK_SIZE 21,844 -_hurd_start_sigthread 25,979 - -../sysdeps/mach/hurd/i386/startsig.c,94 -#define STACK_SIZE 21,850 -_hurd_start_sigthread (thread_t sigthread, void (*function)24,911 - -getuids.c,16 -getuids 23,891 - -getumask.c,17 -getumask 22,851 +setdtablesize 29,1093 -dead_recv.c,24 -_hurd_dead_recv 23,928 - -fopenport.c,0 - -__fopenport.c,20 -__fopenport 27,947 - -vpprintf.c,45 -DEFUN(pwrite,26,940 -DEFUN(vpprintf,39,1302 +hurdsyms.c,0 hurdinit.c,45 -_hurd_init 28,1005 -_hurd_proc_init 94,2895 - -hurdsyms.c,0 +_hurd_init 38,1209 +_hurd_proc_init 99,2935 -hurd.h,849 -#define _HURD_H 21,842 -#define _GNU_SOURCE23,861 -#define __hurd_fail(33,1039 -struct _hurd_port44,1620 -#define _HURD_PORT_USE(52,1874 -_hurd_port_init 62,2265 -_hurd_port_locked_get 72,2552 -_hurd_port_get 87,2870 -_hurd_port_free 96,3107 -_hurd_port_locked_set 109,3468 -_hurd_port_set 127,3888 -struct _hurd_fd155,4815 -struct _hurd_dtable165,5088 -_hurd_dtable_use 185,5805 -struct _hurd_dtable_resizes195,6029 -_hurd_dtable_done 204,6212 -_hurd_dalloc 223,6906 -_hurd_dtable_fd 253,7713 -struct _hurd_fd_user270,8048 -_hurd_fd 278,8221 -_hurd_fd_done 289,8456 -#define _HURD_DPORT_USE(297,8669 -_hurd_dfail 318,9522 -struct _hurd_sigstate369,11002 -#define HURD_EINTR_RPC(430,13091 -#define setauth 478,15041 -#define hurd_path_split 484,15194 -#define hurd_path_lookup 489,15377 -#define path_split 493,15561 -#define path_lookup 497,15741 +hurd.h,1071 +#define _HURD_H 21,848 +#define _GNU_SOURCE26,1016 +#define __hurd_fail(47,1511 +#define __spin_lock(49,1557 +#define __spin_unlock(50,1603 +#define __mutex_lock(52,1652 +#define __mutex_unlock(53,1699 +struct _hurd_port64,2206 +struct _hurd_port_userlink75,2531 +#define _HURD_PORT_USE(81,2692 +_hurd_port_init 91,3100 +_hurd_port_locked_get 103,3400 +_hurd_port_get 122,3842 +_hurd_port_free 131,4077 +_hurd_port_locked_set 154,4888 +_hurd_port_set 175,5473 +#define __USEPORT(187,5833 +struct _hurd_fd209,6578 +struct _hurd_dtable237,7672 +_hurd_dtable_use 260,8460 +struct _hurd_dtable_resizes270,8684 +_hurd_dtable_done 279,8867 +_hurd_dtable_fd 296,9502 +struct _hurd_fd_user313,9837 +_hurd_fd 323,10158 +_hurd_fd_done 334,10395 +#define _HURD_DPORT_USE(342,10607 +__hurd_dfail 363,11462 +struct _hurd_id_data399,12185 +struct _hurd_sigstate440,13265 +#define HURD_EINTR_RPC(507,15460 +#define _SIG_CANT_MASK 549,17119 +#define _HURD_MSGPORT_RPC(572,18426 +struct ioctl_handler668,22216 +#define _HURD_HANDLE_IOCTLS(680,22530 +#define _HURD_HANDLE_IOCTL(686,22853 diff -ruN glibc-1.06/hurd/__fopenport.c glibc-1.07/hurd/__fopenport.c --- glibc-1.06/hurd/__fopenport.c Sat Mar 21 17:36:13 1992 +++ glibc-1.07/hurd/__fopenport.c @@ -1,31 +0,0 @@ -/* Copyright (C) 1992 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include -#include -#include - - -/* Open a stream on PORT. MODE is as for fopen. */ - -FILE * -__fopenport (mach_port_t port, const char *mode) -{ - /* The default io functions in sysd-stdio.c use Hurd io ports as cookies. */ - return __fopencookie ((void *) port, mode, __default_io_functions); -} diff -ruN glibc-1.06/hurd/__pid2task.c glibc-1.07/hurd/__pid2task.c --- glibc-1.06/hurd/__pid2task.c Fri Mar 20 23:13:15 1992 +++ glibc-1.07/hurd/__pid2task.c Wed Jun 23 17:50:25 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993 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 @@ -24,13 +24,8 @@ error_t err; task_t task; - err = _HURD_PORT_USE (&_hurd_proc, + err = _HURD_PORT_USE (&_hurd_ports[INIT_PORT_PROC], __proc_pid2task (port, pid, &task)); - if (err) - { - errno = err; - return MACH_PORT_NULL; - } - else - return task; + + return err ? (__hurd_fail (err), MACH_PORT_NULL) : task; } diff -ruN glibc-1.06/hurd/__setauth.c glibc-1.07/hurd/__setauth.c --- glibc-1.06/hurd/__setauth.c Mon May 4 18:28:33 1992 +++ glibc-1.07/hurd/__setauth.c Mon Nov 29 16:23:41 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,6 +16,8 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#ifndef MIB_HACKS + #include #include @@ -35,8 +37,6 @@ int __setauth (auth_t new) { - error_t err; - auth_t old; int d; mach_port_t newport; void (**fn) (auth_t); @@ -50,15 +50,20 @@ return -1; } - /* We lock against another thread doing setauth. - Anyone who sets _hurd_auth some other way is asking to lose. */ + /* We lock against another thread doing setauth. Anyone who sets + _hurd_ports[INIT_PORT_AUTH] some other way is asking to lose. */ __mutex_lock (&reauth_lock); - /* Install the new port in the _hurd_auth cell. */ - __mutex_lock (&_hurd_idlock); - _hurd_port_set (&_hurd_auth, new); - _hurd_id_valid = 0; - __mutex_unlock (&_hurd_idlock); + /* Install the new port in the cell. */ + __mutex_lock (&_hurd_id.lock); + _hurd_port_set (&_hurd_ports[INIT_PORT_AUTH], new); + _hurd_id.valid = 0; + if (_hurd_id.rid_auth) + { + __mach_port_deallocate (__mach_task_self (), _hurd_id.rid_auth); + _hurd_id.rid_auth = MACH_PORT_NULL; + } + __mutex_unlock (&_hurd_id.lock); if (_hurd_init_dtable != NULL) /* We just have the simple table we got at startup. @@ -67,9 +72,11 @@ if (_hurd_init_dtable[d] != MACH_PORT_NULL) { mach_port_t new; - if (! __io_reauthenticate (_hurd_init_dtable[d]) && - ! _HURD_PORT_USE (&_hurd_auth, - __auth_user_authenticate (_hurd_init_dtable[d], + if (! __io_reauthenticate (_hurd_init_dtable[d], _hurd_pid) && + ! _HURD_PORT_USE (&_hurd_ports[INIT_PORT_AUTH], + __auth_user_authenticate (port, + _hurd_init_dtable[d], + _hurd_pid, &new))) { __mach_port_deallocate (__mach_task_self (), @@ -78,15 +85,15 @@ } } - if (_HURD_PORT_USE (&_hurd_crdir, - ! __io_reauthenticate (port) && - ! __auth_user_authenticate (new, port, &newport))) - _hurd_port_set (&_hurd_crdir, newport); - - if (_HURD_PORT_USE (&_hurd_cwdir, - ! __io_reauthenticate (port) && - ! __auth_user_authenticate (new, port, &newport))) - _hurd_port_set (&_hurd_cwdir, newport); + if (__USEPORT (CRDIR, + ! __io_reauthenticate (port, _hurd_pid) && + ! __auth_user_authenticate (new, port, _hurd_pid, &newport))) + _hurd_port_set (&_hurd_ports[INIT_PORT_CRDIR], newport); + + if (__USEPORT (CWDIR, + ! __io_reauthenticate (port, _hurd_pid) && + ! __auth_user_authenticate (new, port, _hurd_pid, &newport))) + _hurd_port_set (&_hurd_ports[INIT_PORT_CWDIR], newport); /* Run things which want to do reauthorization stuff. */ for (fn = _hurd_reauth_hook.fn; *fn != NULL; ++fn) @@ -104,3 +111,5 @@ } text_set_element (__libc_subinit, init_reauth); + +#endif diff -ruN glibc-1.06/hurd/__task2pid.c glibc-1.07/hurd/__task2pid.c --- glibc-1.06/hurd/__task2pid.c Fri Mar 20 23:11:40 1992 +++ glibc-1.07/hurd/__task2pid.c Tue Dec 21 03:13:28 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993 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 @@ -23,9 +23,6 @@ { error_t err; pid_t pid; - err = _HURD_PORT_USE (&_hurd_proc, - __proc_task2pid (proc, task, &pid)); - if (err) - return __hurd_fail (err); - return pid; + err = __USEPORT (PROC, __proc_task2pid (port, task, &pid)); + return err ? (pid_t) __hurd_fail (err) : pid; } diff -ruN glibc-1.06/hurd/dead_recv.c glibc-1.07/hurd/dead_recv.c --- glibc-1.06/hurd/dead_recv.c Sat Feb 8 03:42:24 1992 +++ glibc-1.07/hurd/dead_recv.c @@ -1,30 +0,0 @@ -/* Copyright (C) 1992 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include - -/* Return a receive right to which there are no send rights in use. */ -mach_port_t -_hurd_dead_recv (void) -{ - static mach_port_t port = MACH_PORT_NULL; - if (port == MACH_PORT_NULL) - __mach_port_allocate (__mach_task_self (), - MACH_PORT_RIGHT_RECEIVE, &port); - return port; -} diff -ruN glibc-1.06/hurd/dtable.c glibc-1.07/hurd/dtable.c --- glibc-1.06/hurd/dtable.c Tue Jun 16 23:29:36 1992 +++ glibc-1.07/hurd/dtable.c Thu Dec 2 17:17:47 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993 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,13 +18,18 @@ #include #include +#include #include #include +#include +#include #include -struct _hurd_dtable _hurd_dtable; +#ifdef noteven struct mutex _hurd_dtable_lock; +#endif +struct _hurd_dtable _hurd_dtable; int _hurd_dtable_rlimit; int *_hurd_dtable_user_dealloc; @@ -38,14 +43,16 @@ { register size_t i; +#ifdef noteven __mutex_init (&_hurd_dtable_lock); +#endif _hurd_dtable_user_dealloc = NULL; /* The initial size of the descriptor table is that of the passed-in - table, rounded up to a multiple of OPEN_MAX descriptors. */ + table, rounded up to a multiple of FOPEN_MAX descriptors. */ _hurd_dtable.size - = (_hurd_init_dtablesize + OPEN_MAX - 1) / OPEN_MAX * OPEN_MAX; + = (_hurd_init_dtablesize + FOPEN_MAX - 1) / FOPEN_MAX * FOPEN_MAX; _hurd_dtable_rlimit = _hurd_dtable.size; _hurd_dtable.d = malloc (_hurd_dtable.size * sizeof (*_hurd_dtable.d)); @@ -55,34 +62,21 @@ for (i = 0; i < _hurd_init_dtablesize; ++i) { struct _hurd_fd *const d = &_hurd_dtable.d[i]; - io_statbuf_t stb; - io_t ctty; - - _hurd_port_init (&d->port, _hurd_init_dtable[i]); - d->flags = 0; - if (_hurd_ctty_fstype != 0 && - /* We have a controlling tty. Is this it? */ - ! __io_stat (d->port.port, &stb) && - stb.stb_fstype == _hurd_ctty_fstype && - stb.stb_fsid == _hurd_ctty_fsid && - stb.stb_fileid == _hurd_ctty_fileid && - /* This is a descriptor to our controlling tty. */ - ! __term_become_ctty (d->port.port, _hurd_pid, _hurd_pgrp, - _hurd_sigport, &ctty)) - { - /* Operations on CTTY return EBACKGROUND when we are not a - foreground user of the tty. */ - d->port.port = ctty; - ctty = _hurd_init_dtable[i]; - } - else - /* No ctty magic happening here. */ - ctty = MACH_PORT_NULL; + _hurd_port_init (&d->port, MACH_PORT_NULL); + _hurd_port_init (&d->ctty, MACH_PORT_NULL); - _hurd_port_init (&d->ctty, ctty); + _hurd_port2fd (d, _hurd_init_dtable[i], 0); } + /* Clear out the initial descriptor table. + Everything must use _hurd_dtable now. */ + __vm_deallocate (__mach_task_self (), + (vm_address_t) _hurd_init_dtable, + _hurd_init_dtablesize * sizeof (_hurd_init_dtable[0])); + _hurd_init_dtable = NULL; + _hurd_init_dtablesize = 0; + /* Initialize the remaining empty slots in the table. */ for (; i < _hurd_dtable.size; ++i) { @@ -90,18 +84,115 @@ _hurd_port_init (&_hurd_dtable.d[i].ctty, MACH_PORT_NULL); _hurd_dtable.d[i].flags = 0; } - - /* Clear out the initial descriptor table. - Everything must use _hurd_dtable now. */ - __vm_deallocate (__mach_task_self (), - _hurd_init_dtable, - _hurd_init_dtablesize * sizeof (_hurd_init_dtable[0])); - _hurd_init_dtable = NULL; - _hurd_init_dtablesize = 0; } text_set_element (__libc_subinit, init_dtable); +/* Allocate a new file descriptor and install PORT in it. FLAGS are as for + `open'; only O_IGNORE_CTTY is meaningful, but all are saved. + + If the descriptor table is full, set errno, and return -1. + If DEALLOC is nonzero, deallocate PORT first. */ +int +_hurd_intern_fd (io_t port, int flags, int dealloc) +{ + int fd; + struct _hurd_fd *d = _hurd_alloc_fd (&fd, 0); + + if (d == NULL) + { + if (dealloc) + __mach_port_deallocate (__mach_task_self (), port); + return -1; + } + + _hurd_port2fd (d, port, flags); + __spin_unlock (&d->port.lock); + return fd; +} + +/* Allocate a new file descriptor and return it, locked. + If the table is full, set errno and return NULL. */ +struct _hurd_fd * +_hurd_alloc_fd (int *fd, const int first_fd) +{ + int i; + + __mutex_lock (&hurd_dtable_lock); + + for (i = first_fd; i < _hurd_dtable.size; ++i) + { + struct _hurd_fd *d = &_hurd_dtable.d[i]; + __spin_lock (&d->port.lock); + if (d->port.port == MACH_PORT_NULL) + { + __mutex_unlock (&hurd_dtable_lock); + if (fd != NULL) + *fd = i; + return d; + } + else + __spin_unlock (&d->port.lock); + } + + __mutex_unlock (&hurd_dtable_lock); + + errno = EMFILE; + return NULL; +} + + +void +_hurd_port2fd (struct _hurd_fd *d, io_t port, int flags) +{ + io_t ctty; + mach_port_t cttyid; + int is_ctty = !(flags & O_IGNORE_CTTY) && ! __term_getctty (port, &cttyid); + + if (is_ctty) + { + /* This port is capable of being a controlling tty. + Is it ours? */ + is_ctty &= __USEPORT (CTTYID, port == cttyid); + __mach_port_deallocate (__mach_task_self (), cttyid); +#if 0 + struct _hurd_port *const id = &_hurd_ports[INIT_PORT_CTTYID]; + __spin_lock (&id->lock); + if (id->port == MACH_PORT_NULL) + /* We have no controlling tty, so make this one it. */ + _hurd_port_locked_set (id, cttyid); + else + { + if (cttyid != id->port) + /* We have a controlling tty and this is not it. */ + is_ctty = 0; + /* Either we don't want CTTYID, or ID->port already is it. + So we don't need to change ID->port, and we + can release the reference to CTTYID. */ + __spin_unlock (&id->lock); + __mach_port_deallocate (__mach_task_self (), cttyid); + } +#endif + } + + if (is_ctty && ! __term_become_ctty (port, _hurd_pid, _hurd_pgrp, + _hurd_msgport, &ctty)) + { + /* Operations on CTTY return EBACKGROUND when we are not a + foreground user of the tty. */ + d->port.port = ctty; + ctty = port; + } + else + /* XXX if IS_CTTY, then this port is our ctty, but we are + not doing ctty style i/o because term_become_ctty barfed. + What to do? */ + /* No ctty magic happening here. */ + ctty = MACH_PORT_NULL; + + _hurd_port_set (&d->ctty, ctty); +} + /* Called by `getdport' to do its work. */ static file_t @@ -138,18 +229,18 @@ for (i = 0; !err && i < _hurd_dtable.size; ++i) { int dealloc, dealloc_ctty; - io_t port = _HURD_PORT_USE (&_hurd_dtable.d[i].port, &dealloc); - io_t ctty = _HURD_PORT_USE (&_hurd_dtable.d[i].ctty, &dealloc_ctty); + io_t port = _hurd_port_get (&_hurd_dtable.d[i].port, &dealloc); + io_t ctty = _hurd_port_get (&_hurd_dtable.d[i].ctty, &dealloc_ctty); if (port != MACH_PORT_NULL) err = __mach_port_insert_right (newtask, port, port, - MACH_PORT_COPY_SEND); + MACH_MSG_TYPE_COPY_SEND); if (!err && ctty != MACH_PORT_NULL) err = __mach_port_insert_right (newtask, ctty, ctty, - MACH_PORT_COPY_SEND); + MACH_MSG_TYPE_COPY_SEND); - _hurd_port_free (port, &dealloc); - _hurd_port_free (ctty, &dealloc_ctty); + _hurd_port_free (&_hurd_dtable.d[i].port, &dealloc, port); + _hurd_port_free (&_hurd_dtable.d[i].ctty, &dealloc_ctty, ctty); /* XXX for each fd with a cntlmap, reauth and re-map_cntl. */ } @@ -165,41 +256,41 @@ static void reauth_dtable (void) { - int d; + int i; __mutex_lock (&_hurd_dtable_lock); - for (d = 0; d < _hurd_dtable.size; ++d) + for (i = 0; i < _hurd_dtable.size; ++i) { - struct _hurd_fd *const d = &hurd_dtable.d[d]; + struct _hurd_fd *const d = &_hurd_dtable.d[i]; mach_port_t new, newctty; /* Take the descriptor cell's lock. */ - __spin_lock (&cell->port.lock); + __spin_lock (&d->port.lock); /* Reauthenticate the descriptor's port. */ - if (cell->port.port != MACH_PORT_NULL && - ! __io_reauthenticate (cell->port.port) && - ! _HURD_PORT_USE (&_hurd_auth, - __auth_user_authenticate (port, - cell->port.port, &new))) + if (d->port.port != MACH_PORT_NULL && + ! __io_reauthenticate (d->port.port, _hurd_pid) && + ! __USEPORT (AUTH, __auth_user_authenticate (port, + d->port.port, _hurd_pid, + &new))) { /* Replace the port in the descriptor cell with the newly reauthenticated port. */ - if (cell->ctty.port != MACH_PORT_NULL && - ! __io_reauthenticate (cell->ctty.port) && - ! _HURD_PORT_USE (&_hurd_auth, - __auth_user_authenticate (port, - cell->ctty.port, - &newctty))) - _hurd_port_set (&cell->ctty, newctty); + if (d->ctty.port != MACH_PORT_NULL && + ! __io_reauthenticate (d->ctty.port, _hurd_pid) && + ! __USEPORT (AUTH, __auth_user_authenticate (port, + d->ctty.port, + _hurd_pid, + &newctty))) + _hurd_port_set (&d->ctty, newctty); - _hurd_port_locked_set (&cell->port, new); + _hurd_port_locked_set (&d->port, new); } else /* Lost. Leave this descriptor cell alone. */ - __spin_unlock (&cell->port.lock); + __spin_unlock (&d->port.lock); } __mutex_unlock (&_hurd_dtable_lock); @@ -206,3 +297,106 @@ } text_set_element (_hurd_reauth_hook, reauth_dtable); + +static void +rectty_dtable (mach_port_t cttyid) +{ + int i; + + __mutex_lock (&_hurd_dtable_lock); + + for (i = 0; i < _hurd_dtable.size; ++i) + { + struct _hurd_fd *const d = &_hurd_dtable.d[i]; + mach_port_t newctty; + + if (cttyid == MACH_PORT_NULL) + /* We now have no controlling tty at all. */ + newctty = MACH_PORT_NULL; + else + _HURD_PORT_USE (&d->port, + ({ mach_port_t id; + /* Get the io object's cttyid port. */ + if (! __term_getctty (port, &id)) + { + if (id == cttyid && /* Is it ours? */ + /* Get the ctty io port. */ + __term_become_ctty (port, _hurd_pid, + _hurd_pgrp, + _hurd_msgport, + &newctty)) + /* XXX it is our ctty but the call failed? */ + newctty = MACH_PORT_NULL; + __mach_port_deallocate + (__mach_task_self (), (mach_port_t) id); + } + else + newctty = MACH_PORT_NULL; + 0; + })); + + /* Install the new ctty port. */ + _hurd_port_set (&d->ctty, newctty); + } + + __mutex_unlock (&_hurd_dtable_lock); +} + +#if 0 + +#include + + +/* Make FD be the controlling terminal. + This function is called for `ioctl (fd, TCIOSCTTY)'. */ + +static int +tiocsctty (int fd, + int request, /* Always TCIOSCTTY. */ + void *arg) /* Not used. */ +{ + mach_port_t cttyid; + error_t err; + + /* Get FD's cttyid port, unless it is already ours. */ + err = _HURD_DPORT_USE (fd, + ctty ? EADDRINUSE : __term_getctty (port, &cttyid)); + if (err == EADDRINUSE) + /* FD is already the ctty. Nothing to do. */ + return 0; + else if (err) + return err; + + /* Make it our own. */ + _hurd_port_set (&_hurd_ports[INIT_PORT_CTTYID], cttyid); /* Consumes ref. */ + + /* Reset all the ctty ports in all the descriptors. */ + _HURD_PORT_USE (&_hurd_ports[INIT_PORT_CTTYID], (rectty_dtable (port), 0)); + + return 0; +} +_HURD_HANDLE_IOCTL (tiocsctty, TIOCSCTTY); + +#ifdef TIOCNOCTTY +/* Dissociate from the controlling terminal. */ + +static int +tiocnoctty (int fd, + int request, /* Always TIOCNOCTTY. */ + void *arg) /* Not used. */ +{ + /* XXX should verify that FD is ctty and return EINVAL? */ + + /* Clear our cttyid port cell. */ + _hurd_port_set (&_hurd_ports[INIT_PORT_CTTYID], MACH_PORT_NULL); + + /* Reset all the ctty ports in all the descriptors. */ + _HURD_PORT_USE (&_hurd_ports[INIT_PORT_CTTYID], + (rectty_dtable (MACH_PORT_NULL), 0)); + + return 0; +} +_HURD_HANDLE_IOCTL (tiocnotty, TIOCNOTTY); +#endif + +#endif diff -ruN glibc-1.06/hurd/fchroot.c glibc-1.07/hurd/fchroot.c --- glibc-1.06/hurd/fchroot.c Fri Mar 20 23:57:32 1992 +++ glibc-1.07/hurd/fchroot.c Tue Dec 14 16:08:10 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993 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,6 +29,8 @@ error_t err; file_t crdir; + /* XXX check that's it's a directory */ + if (err = _HURD_DPORT_USE (fd, __mach_port_mod_refs (__mach_task_self (), (crdir = port), @@ -35,7 +37,7 @@ MACH_PORT_RIGHT_SEND, 1))) return err; - _hurd_port_set (&_hurd_crdir, crdir); + _hurd_port_set (&_hurd_ports[INIT_PORT_CRDIR], crdir); return 0; } diff -ruN glibc-1.06/hurd/fexecve.c glibc-1.07/hurd/fexecve.c --- glibc-1.06/hurd/fexecve.c +++ glibc-1.07/hurd/fexecve.c Thu Dec 30 23:10:15 1993 @@ -0,0 +1,29 @@ +/* Copyright (C) 1993 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include +#include + +/* Execute the file FD refers to, overlaying the running program image. */ + +int +fexecve (int fd, char *const argv[], char *const envp[]) +{ + error_t err = _HURD_DPORT_USE (fd, _hurd_exec (port, argv, envp)); + return __hurd_fail (err); +} diff -ruN glibc-1.06/hurd/fopenport.c glibc-1.07/hurd/fopenport.c --- glibc-1.06/hurd/fopenport.c Sun Mar 22 00:40:43 1992 +++ glibc-1.07/hurd/fopenport.c @@ -1,21 +0,0 @@ -/* Copyright (C) 1992 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include - -symbol_alias (__fopenport, fopenport); diff -ruN glibc-1.06/hurd/getuids.c glibc-1.07/hurd/getuids.c --- glibc-1.06/hurd/getuids.c Fri Mar 20 23:58:57 1992 +++ glibc-1.07/hurd/getuids.c Thu Oct 28 23:08:31 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1993 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,33 +18,35 @@ #include -/* Return the effective uid set. */ + int -getuids (int n, uid_t *uidset) +__getuids (int n, uid_t *uidset) { + error_t err; int nuids; - __mutex_lock (&_hurd_idlock); - if (!_hurd_id_valid) + __mutex_lock (&_hurd_id.lock); + + if (err = _hurd_check_ids ()) { - error_t err = _HURD_PORT_USE (&_hurd_auth, - __auth_getids (port, &_hurd_id)); - if (err) - { - __mutex_unlock (&_hurd_idlock); - return __hurd_fail (err); - } - _hurd_id_valid = 1; + __mutex_unlock (&_hurd_id.lock); + return __hurd_fail (err); } - nuids = _hurd_id.nuids; - if (uidset != NULL) + + nuids = _hurd_id.gen.nuids; + + if (n != 0) { - /* Copy into a temporary array before releasing the lock. */ + /* Copy the uids onto stack storage and then release the idlock. */ uid_t uids[nuids]; - memcpy (uids, _hurd_id.uids, sizeof (uids)); - __mutex_unlock (&_hurd_idlock); - /* Lock is released; now copy into user array, which might fault. */ - memcpy (uidset, uids, sizeof (uids)); + memcpy (uids, _hurd_id.gen.uids, sizeof (uids)); + __mutex_unlock (&_hurd_id.lock); + + /* Now that the lock is released, we can safely copy the + uid set into the user's array, which might fault. */ + if (nuids > n) + nuids = n; + memcpy (uidset, uids, nuids * sizeof (uid_t)); } else __mutex_unlock (&_hurd_idlock); diff -ruN glibc-1.06/hurd/hurd.h glibc-1.07/hurd/hurd.h --- glibc-1.06/hurd/hurd.h Mon Feb 22 16:57:03 1993 +++ glibc-1.07/hurd/hurd.h Sun Jan 16 05:38:44 1994 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1994 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -20,41 +20,70 @@ #define _HURD_H 1 +/* This is here because this file includes some other headers + and expects some non-ANSI, non-POSIX symbols to be defined. */ +#ifndef _GNU_SOURCE #define _GNU_SOURCE +#endif #include + +/* Get types, macros, constants and function declarations + for all Mach microkernel interaction. */ #include +#include + +/* Get types and constants necessary for Hurd interfaces. */ #include + +/* Get MiG stub declarations for commonly used Hurd interfaces. */ +#include #include #include #include -#include +#include +#include #define __hurd_fail(err) (errno = (err), -1) + +#define __spin_lock(lockaddr) /* no-op XXX */ +#define __spin_unlock(lockaddr) /* no-op XXX */ + +#define __mutex_lock(lockaddr) /* no-op XXX */ +#define __mutex_unlock(lockaddr) /* no-op XXX */ + /* Lightweight user references for ports. */ -/* Structure describing a cell containing a port. - With the lock held, a user extracts PORT, and sets USER_DEALLOC to point - to a word in his local storage. PORT can then safely be used. When - PORT is no longer needed, with the lock held, the user examines - USER_DEALLOC. If it is the same address that user stored there, he - extracts *USER_DEALLOC, clears USER_DEALLOC to NULL, and releases the - lock. If *USER_DEALLOC is set, the user deallocates the port he used. */ +/* Structure describing a cell containing a port. With the lock held, a + user extracts PORT, and attaches his own link (in local storage) to the + USERS chain. PORT can then safely be used. When PORT is no longer + needed, with the lock held, the user removes his link from the chain. + If his link is the last, and PORT has changed since he fetched it, the + user deallocates the port he used. */ struct _hurd_port { +#ifdef noteven spin_lock_t lock; /* Locks rest. */ +#endif + struct _hurd_port_userlink *users; /* Chain of users; see below. */ mach_port_t port; /* Port. */ - int *user_dealloc; /* If not NULL, points to user's flag word. */ + }; + +/* This structure is simply a doubly-linked list. + Users of a port cell are recorded by their presence in the list. */ +struct _hurd_port_userlink + { + struct _hurd_port_userlink *next, **prevp; }; /* Evaluate EXPR with the variable `port' bound to the port in PORTCELL. */ #define _HURD_PORT_USE(portcell, expr) \ - ({ struct _hurd_port *const __p = &(portcell); \ - int __dealloc; \ - const mach_port_t port = _hurd_port_get (__p, &__dealloc); \ + ({ struct _hurd_port *const __p = (portcell); \ + struct _hurd_port_userlink __link; \ + const mach_port_t port = _hurd_port_get (__p, &__link); \ __typeof(expr) __result = (expr); \ - _hurd_port_free (__p, &__dealloc); \ + _hurd_port_free (__p, &__link, port); \ __result; }) /* Initialize *PORT to INIT. */ @@ -61,22 +90,28 @@ static inline void _hurd_port_init (struct _hurd_port *port, mach_port_t init) { +#ifdef noteven __spin_lock_init (&port->lock); +#endif + port->users = NULL; port->port = init; - port->user_dealloc = NULL; } /* Get a reference to *PORT, which is locked. - Pass return value and MYFLAG to _hurd_port_free when done. */ + Pass return value and LINK to _hurd_port_free when done. */ static inline mach_port_t -_hurd_port_locked_get (struct _hurd_port *port, int *myflag) +_hurd_port_locked_get (struct _hurd_port *port, + struct _hurd_port_userlink *link) { mach_port_t result; result = port->port; if (result != MACH_PORT_NULL) { - port->user_dealloc = myflag; - *myflag = 0; + link->next = port->users; + if (link->next) + link->next->prevp = &link->next; + link->prevp = &port->users; + port->users = link; } __spin_unlock (&port->lock); return result; @@ -91,30 +126,43 @@ } /* Free a reference gotten with - `USED_PORT = _hurd_port_get (PORT, MYFLAG);' */ + `USED_PORT = _hurd_port_get (PORT, LINK);' */ static inline void _hurd_port_free (struct _hurd_port *port, - int *myflag, mach_port_t used_port) + struct _hurd_port_userlink *link, + mach_port_t used_port) { + int dealloc; __spin_lock (&port->lock); - if (port->user_dealloc == myflag) - port->user_dealloc = NULL; + /* We should deallocate USED_PORT if our chain has been detached from the + cell (and thus has a nil `prevp'), and there is no next link + representing another user reference to the same port we fetched. */ + dealloc = ! link->next && ! link->prevp; + /* Remove our link from the chain of current users. */ + if (link->prevp) + *link->prevp = link->next; + if (link->next) + link->next->prevp = link->prevp; __spin_unlock (&port->lock); - if (*myflag) + if (dealloc) __mach_port_deallocate (__mach_task_self (), used_port); } -/* Set *PORT's port to NEWPORT. PORT is locked. */ +/* Set *PORT's port to NEWPORT. NEWPORT's reference is consumed by PORT->port. + PORT->lock is locked. */ static inline void _hurd_port_locked_set (struct _hurd_port *port, mach_port_t newport) { mach_port_t old; - if (port->user_dealloc == NULL) + if (port->users == NULL) old = port->port; else { old = MACH_PORT_NULL; - *port->user_dealloc = 1; + /* Detach the chain of current users from the cell. The last user to + remove his link from that chain will deallocate the old port. */ + port->users->prevp = NULL; + port->users = NULL; } port->port = newport; __spin_unlock (&port->lock); @@ -131,37 +179,61 @@ } /* Basic ports and info, initialized by startup. */ -extern struct _hurd_port _hurd_proc, _hurd_auth; -extern struct _hurd_port _hurd_ccdir, _hurd_cwdir, _hurd_crdir; +extern struct _hurd_port *_hurd_ports; +extern unsigned int _hurd_nports; extern volatile mode_t _hurd_umask; -extern struct mutex _hurd_ctty_lock; -extern int _hurd_ctty_fstype; -extern fsid_t _hurd_ctty_fsid; -extern ino_t _hurd_ctty_fileid; - -extern vm_address_t _hurd_stack_low, _hurd_stack_high; /* Not locked. */ +/* Shorthand macro for referencing _hurd_ports. */ +#define __USEPORT(which, expr) \ + _HURD_PORT_USE (&_hurd_ports[INIT_PORT_##which], (expr)) + +/* Base address and size of the initial stack set up by the exec server. + If using cthreads, this stack is deallocated in startup. + Not locked. */ +extern vm_address_t _hurd_stack_base; +extern vm_size_t _hurd_stack_size; extern thread_t _hurd_msgport_thread; extern mach_port_t _hurd_msgport; /* Locked by _hurd_siglock. */ -/* Not locked. If we are using a real dtable, - these are turned into that and then cleared at startup. - If not, these are never changed after startup. */ +/* Not locked. If we are using a real dtable, these are turned into that + and then cleared at startup. If not, these are never changed after + startup. */ extern mach_port_t *_hurd_init_dtable; -extern size_t _hurd_init_dtablesize; +extern mach_msg_type_number_t _hurd_init_dtablesize; /* File descriptor table. */ + + +/* File descriptor structure. */ struct _hurd_fd { - struct _hurd_port port; + struct _hurd_port port; /* io server port. */ int flags; /* fcntl flags; locked by port.lock. */ - /* Normal port to the ctty. Also locked by port.lock. - (The ctty.lock is only ever used when the port.lock is held.) */ + /* Normal port to the ctty. When `port' is our ctty, this is a port to + the same io object but which never returns EBACKGROUND; when not, + this is nil. */ struct _hurd_port ctty; }; +/* Set up *FD to have PORT its server port, doing appropriate ctty magic. + Does no locking or unlocking. */ +extern void _hurd_port2fd (struct _hurd_fd *fd, io_t port, int flags); + +/* Allocate a new file descriptor and install PORT in it (doing any + appropriate ctty magic); consumes a user reference on PORT. FLAGS are + as for `open'; only O_NOCTTY is meaningful, but all are saved. + + If the descriptor table is full, set errno, and return -1. + If DEALLOC is nonzero, deallocate PORT first. */ +extern int _hurd_intern_fd (io_t port, int flags, int dealloc); + +/* Allocate a new file descriptor and return it, locked. + The new descriptor will not be less than FIRST_FD. */ +extern struct _hurd_fd *_hurd_alloc_fd (int *fd_ptr, int first_fd); + + struct _hurd_dtable { int size; /* Number of elts in `d' array. */ @@ -171,9 +243,12 @@ struct _hurd_fd *d; }; + +#ifdef noteven extern struct mutex _hurd_dtable_lock; /* Locks next two. */ +#endif extern struct _hurd_dtable _hurd_dtable; -extern int _hurd_dtable_rlimit; +extern int _hurd_dtable_rlimit; /* RLIM_OFILES: number of file descriptors. */ /* If not NULL, pointed-to word is set when _hurd_dtable.d changes. User who set `user_dealloc' should free the _hurd_dtable.d value @@ -209,46 +284,14 @@ __mutex_unlock (&_hurd_dtable_lock); if (*dealloc) /* _hurd_dtable_resizes is a symbol set. - setdtablesize.c gives it one element: free. - If setdtablesize is not linked in, *DEALLOC + setrlimit.c gives it one element: free. + If setrlimit is not linked in, *DEALLOC will never get set, so we will never get here. This hair avoids linking in free if we don't need it. */ - (*_hurd_dtable_resizes.free) (dtable); -} - - -/* Allocate a new file descriptor and set it to PORT. - If the table is full, deallocate PORT, set errno, and return -1. */ -static inline int -_hurd_dalloc (io_t port, io_t ctty, int flags) -{ - int i; - __mutex_lock (&hurd_dtable_lock); - for (i = 0; i < _hurd_dtable.size; ++i) - { - struct _hurd_fd *d = &_hurd_dtable.d[i]; - __spin_lock (&d->port.lock); - if (d->port.port == MACH_PORT_NULL) - { - d->port.port = port; - d->port.user_dealloc = NULL; - d->ctty.port = ctty; - d->ctty.user_dealloc = NULL; - d->flags = flags; - __spin_unlock (&d->port.lock); - __mutex_unlock (&hurd_dtable_lock); - return i; - } - __spin_unlock (&d->port.lock); - } - __mutex_unlock (&hurd_dtable_lock); - __mach_port_deallocate (__mach_task_self (), port); - __mach_port_deallocate (__mach_task_self (), ctty); - errno = EMFILE; - return -1; + (*_hurd_dtable_resizes.free) (dtable.d); } -/* Returns the descriptor cell for FD in DTABLE, locked. */ +/* Return the descriptor cell for FD in DTABLE, locked. */ static inline struct _hurd_fd * _hurd_dtable_fd (int fd, struct _hurd_dtable dtable) { @@ -273,13 +316,15 @@ struct _hurd_fd *d; }; -/* Returns the descriptor cell for FD, locked. */ +/* Returns the descriptor cell for FD, locked. The passed DEALLOC word and + returned structure hold onto the descriptor table to it doesn't move + while you might be using a pointer into it. */ static inline struct _hurd_fd_user _hurd_fd (int fd, int *dealloc) { struct _hurd_fd_user d; d.dtable = _hurd_dtable_use (dealloc); - d.d = _hurd_dtable_fd (fd, dtable); + d.d = _hurd_dtable_fd (fd, d.dtable); if (d.d == NULL) _hurd_dtable_done (d.dtable, dealloc); return d; @@ -288,7 +333,7 @@ static inline void _hurd_fd_done (struct _hurd_fd_user d, int *dealloc) { - _hurd_dtable_done (d->dtable, dealloc); + _hurd_dtable_done (d.dtable, dealloc); } /* Evaluate EXPR with the variable `port' bound to the port to FD, @@ -296,57 +341,81 @@ #define _HURD_DPORT_USE(fd, expr) \ ({ int __dealloc_dt; \ + error_t __result; \ struct _hurd_fd_user __d = _hurd_fd (fd, &__dealloc_dt); \ - if (__d.cell == NULL) \ - EBADF; \ + if (__d.d == NULL) \ + __result = EBADF; \ else \ { \ - int __dealloc = 0, __dealloc_ctty = 0; \ + int __dealloc, __dealloc_ctty; \ io_t port = _hurd_port_locked_get (&__d.d->port, &__dealloc); \ io_t ctty = _hurd_port_locked_get (&__d.d->ctty, &__dealloc_ctty); \ - __typeof (expr) __result; \ __result = (expr); \ - _hurd_port_free (&__d.d->port, port, &__dealloc); \ + _hurd_port_free (&__d.d->port, &__dealloc, port); \ if (ctty != MACH_PORT_NULL) \ - _hurd_port_free (&__d.d->ctty, ctty, &__dealloc_ctty); \ + _hurd_port_free (&__d.d->ctty, &__dealloc_ctty, ctty); \ _hurd_fd_done (__d, &__dealloc_dt); \ - __result; \ } \ + __result; \ }) \ static inline int -_hurd_dfail (int fd, error_t err) +__hurd_dfail (int fd, error_t err) { - int signo; switch (err) { case MACH_SEND_INVALID_DEST: /* The server has disappeared! */ +#ifdef notyet _hurd_raise_signal (NULL, SIGLOST, fd); +#else + abort (); +#endif break; case EPIPE: +#ifdef notyet _hurd_raise_signal (NULL, SIGPIPE, fd); +#else + abort (); +#endif break; + default: + return __hurd_fail (err); } - return __hurd_fail (err); } /* Return the socket server for sockaddr domain DOMAIN. */ extern socket_t _hurd_socket_server (int domain); -/* Return a receive right which will not be sent to. */ -extern mach_port_t _hurd_dead_recv (void); - /* Current process IDs. */ extern pid_t _hurd_pid, _hurd_ppid, _hurd_pgrp; extern int _hurd_orphaned; +#ifdef noteven +extern struct mutex _hurd_pid_lock; /* Locks above. */ +#endif /* User and group IDs. */ -extern mutex_t _hurd_idlock; -extern int _hurd_id_valid; /* Nonzero if _hurd_id is valid. */ -extern idblock_t _hurd_id; -extern auth_t _hurd_rid_auth; /* Cache used by access. */ +struct _hurd_id_data + { +#ifdef noteven + mutex_t lock; +#endif + + int valid; /* If following data are up to date. */ + + struct + { + uid_t *uids; + gid_t *gids; + unsigned int nuids, ngids; + } gen, aux; + + auth_t rid_auth; /* Cache used by access. */ + }; +extern struct _hurd_id_data _hurd_id; +/* Update _hurd_id (caller should be holding the lock). */ +extern error_t _hurd_check_ids (void); /* Unix `data break', for brk and sbrk. @@ -353,7 +422,9 @@ If brk and sbrk are not used, this info will not be initialized or used. */ extern vm_address_t _hurd_brk; /* Data break. */ extern vm_address_t _hurd_data_end; /* End of allocated space. */ +#ifdef noteven extern struct mutex _hurd_brk_lock; /* Locks brk and data_end. */ +#endif extern int _hurd_set_data_limit (const struct rlimit *); /* Set the data break; the brk lock must @@ -368,10 +439,13 @@ /* Per-thread signal state. */ struct _hurd_sigstate { + /* XXX should be in cthread variable (?) */ thread_t thread; struct _hurd_sigstate *next; /* Linked-list of thread sigstates. */ +#ifdef noteven struct mutex lock; /* Locks the rest of this structure. */ +#endif sigset_t blocked; sigset_t pending; struct sigaction actions[NSIG]; @@ -379,7 +453,9 @@ int sigcodes[NSIG]; /* Codes for pending signals. */ int suspended; /* If nonzero, sig_post signals `arrived'. */ +#ifdef noteven struct condition arrived; +#endif #if 0 int vforked; /* Nonzero if this thread is a vfork child. */ @@ -423,6 +499,7 @@ extern void _hurd_msgport_receive (void); +#ifdef notyet /* Perform interruptible RPC CALL on PORT. The args in CALL should be constant or local variable refs. They may be evaluated many times, and must not change. @@ -465,6 +542,57 @@ __ss->intr_port = MACH_PORT_NULL; __err; }) + +#endif /* notyet */ + +/* Mask of signals that cannot be caught, blocked, or ignored. */ +#define _SIG_CANT_MASK (__sigmask (SIGSTOP) | __sigmask (SIGKILL)) + +/* Do an RPC to a process's message port. + + Each argument is an expression which returns an error code; each + expression may be evaluated several times. FETCH_MSGPORT_EXPR should + fetch the appropriate message port and store it in the local variable + `msgport'. FETCH_REFPORT_EXPR should fetch the appropriate message port + and store it in the local variable `refport' (if no reference port is + needed in the call, then FETCH_REFPORT_EXPR should be simply + KERN_SUCCESS or 0). Both of these are assumed to create user + references, which this macro deallocates. RPC_EXPR should perform the + desired RPC operation using `msgport' and `refport'. + + The reason for the complexity is that a process's message port and + reference port may change between fetching those ports and completing an + RPC using them (usually they change only when a process execs). The RPC + will fail with MACH_SEND_INVALID_DEST if the msgport dies before we can + send the RPC request; or with MIG_SERVER_DIED if the msgport was + destroyed after we sent the RPC request but before it was serviced. In + either of these cases, we retry the entire operation, discarding the old + message and reference ports and fetch them anew. */ + +#define _HURD_MSGPORT_RPC(fetch_msgport_expr, fetch_refport_expr, rpc_expr) \ +({ \ + error_t __err; \ + mach_port_t msgport, refport = MACH_PORT_NULL; \ + do \ + { \ + /* Get the message port. */ \ + if (__err = (fetch_msgport_expr)) \ + break; \ + /* Get the reference port. */ \ + if (__err = (fetch_refport_expr)) \ + { \ + /* Couldn't get it; deallocate MSGPORT and fail. */ \ + mach_port_deallocate (__mach_task_self (), msgport); \ + break; \ + } \ + __err = (rpc_expr); \ + mach_port_deallocate (__mach_task_self (), msgport); \ + if (refport != MACH_PORT_NULL) \ + mach_port_deallocate (__mach_task_self (), refport); \ + } while (__err != MACH_SEND_INVALID_DEST && \ + __err != MIG_SERVER_DIED); \ + __err; \ +}) /* Calls to get and set basic ports. */ extern process_t getproc (void); @@ -471,37 +599,92 @@ extern file_t getccdir (void), getcwdir (void), getcrdir (void); extern auth_t getauth (void); extern int setproc (process_t); -extern int setccdir (file_t), setcwdir (file_t), setcrdir (file_t); +extern int setcwdir (file_t), setcrdir (file_t); /* Does reauth with the proc server and fd io servers. */ extern int __setauth (auth_t), setauth (auth_t); -#define setauth __setauth extern error_t __hurd_path_split (file_t crdir, file_t cwdir, const char *file, - file_t *dir, const char **name); -#define hurd_path_split __hurd_path_split + file_t *dir, char **name); +extern error_t hurd_path_split (file_t crdir, file_t cwdir, + const char *file, + file_t *dir, char **name); extern error_t __hurd_path_lookup (file_t crdir, file_t cwdir, const char *file, int flags, mode_t mode, - file_t *file); -#define hurd_path_lookup __hurd_path_lookup + file_t *port); +extern error_t hurd_path_lookup (file_t crdir, file_t cwdir, + const char *filename, + int flags, mode_t mode, + file_t *port); /* Returns a port to the directory, and sets *NAME to the file name. */ -extern file_t __path_split (const char *file, const char **name); -#define path_split __path_split +extern file_t __path_split (const char *file, char **name); +extern file_t path_split (const char *file, char **name); /* Looks up FILE with the given FLAGS and MODE (as for dir_pathtrans). */ extern file_t __path_lookup (const char *file, int flags, mode_t mode); -#define path_lookup __path_lookup +extern file_t path_lookup (const char *file, int flags, mode_t mode); /* Open a file descriptor on a port. */ -extern int openport (io_t port); +extern int openport (io_t port, int flags); +/* Execute a file, replacing the current program image. */ +extern error_t _hurd_exec (file_t file, + char *const argv[], + char *const envp[]); + /* Inform the proc server we have exitted with STATUS, and kill the task thoroughly. This function never returns, no matter what. */ extern volatile void _hurd_exit (int status); + +/* Initialize the library data structures from the + ints and ports passed to us by the exec server. + Then vm_deallocate PORTARRAY and INTARRAY. */ +extern void _hurd_init (int flags, char **argv, + mach_port_t *portarray, size_t portarraysize, + int *intarray, size_t intarraysize); + +/* Do startup handshaking with the proc server. */ +extern void _hurd_proc_init (char **argv); + +/* Fetch the host privileged port and device master port from the proc + server. They are fetched only once and then cached in the variables + below. A special program that gets them from somewhere other than the + proc server (such as a bootstrap filesystem) can set these variables at + startup to install the ports. */ +extern kern_return_t get_privileged_ports (host_priv_t *host_priv_ptr, + device_t *device_master_ptr); +extern mach_port_t _hurd_host_priv, _hurd_device_master; + +/* Convert between PIDs and task ports. */ +extern pid_t __task2pid (task_t), task2pid (task_t); +extern task_t __pid2task (pid_t), pid2task (pid_t); + +/* User-registered handlers for specific `ioctl' requests. */ + +struct ioctl_handler + { + int first_request, last_request; /* Range of handled request values. */ + + int (*handler) (int fd, int request, void *arg); + + struct ioctl_handler *next; /* Next handler. */ + }; + +/* Define a library-internal handler for ioctl commands + between FIRST and LAST inclusive. */ + +#define _HURD_HANDLE_IOCTLS(handler, first, last) \ + static const struct ioctl_handler handler##_ioctl_handler = \ + { first, last, handler, NULL }; \ + text_set_element (_hurd_ioctl_handler_lists, ##handler##_ioctl_handler) + +/* Define a library-internal handler for a single ioctl command. */ +#define _HURD_HANDLE_IOCTL(handler, ioctl) \ + _HURD_HANDLE_IOCTLS (handler, (ioctl), (ioctl)) #endif /* hurd.h */ diff -ruN glibc-1.06/hurd/hurdauth.c glibc-1.07/hurd/hurdauth.c --- glibc-1.06/hurd/hurdauth.c Wed Mar 25 19:16:25 1992 +++ glibc-1.07/hurd/hurdauth.c @@ -1,100 +0,0 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include - -struct _hurd_port _hurd_auth; - -error_t -__add_auth (sigthread_t me, - auth_t addauth) -{ - error_t err; - auth_t newauth; - - if (err = _HURD_PORT_USE (&_hurd_auth, - __auth_combine (port, addauth, &newauth))) - return err; - - /* XXX clobbers errno. Need per-thread errno. */ - err = __setauth (newauth); - __mach_port_deallocate (__mach_task_self (), newauth); - if (err) - return errno; - - __mach_port_deallocate (__mach_task_self (), addauth); - return POSIX_SUCCESS; -} - -error_t -__del_auth (sigthread_t me, task_t task, - uid_t *uids, size_t nuids, - gid_t *gids, size_t ngids) -{ - error_t err; - auth_t newauth; - size_t i, j; - - if (task != __mach_task_self ()) - return EPERM; - - __mutex_lock (&_hurd_idlock); - if (!_hurd_id_valid) - { - error_t err = _HURD_PORT_USE (&_hurd_auth, - __auth_getids (port, &_hurd_id)); - if (err) - { - __mutex_unlock (&_hurd_idlock); - return err; - } - _hurd_id_valid = 1; - } - - while (nuids-- > 0) - { - const uid_t uid = *uids++; - for (i = 0; i < _hurd_id.nuids; ++i) - if (_hurd_id.uidset[i] == uid) - /* Move the last uid into this slot, and decrease the - number of uids so the last slot is no longer used. */ - _hurd_id.uidset[i] = _hurd_id.uidset[--_hurd_id.nuids]; - } - while (ngids-- > 0) - { - const gid_t gid = *gids++; - for (i = 0; i < _hurd_id.ngroups; ++i) - if (_hurd_id.gidset[i] == gid) - /* Move the last gid into this slot, and decrease the - number of gids so the last slot is no longer used. */ - _hurd_id.gidset[i] = _hurd_id.gidset[--_hurd_id.ngroups]; - } - - err = _HURD_PORT_USE (&_hurd_auth, - __auth_makeauth (port, &_hurd_id, &newauth)); - _hurd_id_valid = !err; - __mutex_unlock (&_hurd_idlock); - - if (err) - return err; - err = __setauth (newauth); /* XXX clobbers errno */ - __mach_port_deallocate (__mach_task_self (), newauth); - if (err) - return errno; - return POSIX_SUCCESS; -} diff -ruN glibc-1.06/hurd/hurdexec.c glibc-1.07/hurd/hurdexec.c --- glibc-1.06/hurd/hurdexec.c +++ glibc-1.07/hurd/hurdexec.c Thu Jan 6 01:41:07 1994 @@ -0,0 +1,188 @@ +/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include +#include +#include +#include +#include +#include +#include + +/* Replace the current process, executing FILE with arguments ARGV and + environment ENVP. ARGV and ENVP are terminated by NULL pointers. */ +error_t +_hurd_exec (file_t file, char *const argv[], char *const envp[]) +{ + error_t err; + char *args, *env, *ap; + size_t argslen, envlen; + int ints[INIT_INT_MAX]; + mach_port_t ports[_hurd_nports]; + int dealloc_ports[_hurd_nports]; + file_t *dtable; + int dtablesize; + struct _hurd_port **dtable_cells; + int *dealloc_dtable, *dealloc_cells; + int i; + char *const *p; + struct _hurd_sigstate *ss; + + /* Pack the arguments into an array with nulls separating the elements. */ + argslen = 0; + p = argv; + while (*p != NULL) + argslen += strlen (*p++) + 1; + args = __alloca (argslen); + ap = args; + for (p = argv; *p != NULL; ++p) + ap = __memccpy (ap, *p, '\0', ULONG_MAX); + + /* Pack the environment into an array with nulls separating elements. */ + envlen = 0; + p = envp; + while (*p != NULL) + envlen += strlen (*p++) + 1; + env = __alloca (envlen); + ap = env; + for (p = envp; *p != NULL; ++p) + ap = __memccpy (ap, *p, '\0', ULONG_MAX); + + /* Load up the ports to give to the new program. */ + for (i = 0; i < _hurd_nports; ++i) + ports[i] = _hurd_port_get (&_hurd_ports[i], &dealloc_ports[i]); + + /* Load up the ints to give the new program. */ + for (i = 0; i < INIT_INT_MAX; ++i) + switch (i) + { + case INIT_UMASK: + ints[i] = _hurd_umask; + break; + + case INIT_SIGMASK: + case INIT_SIGIGN: + case INIT_SIGPENDING: + /* We will set these all below. */ + break; + + default: + ints[i] = 0; + } + + ss = _hurd_thread_sigstate (__mach_thread_self ()); + ints[INIT_SIGMASK] = ss->blocked; + ints[INIT_SIGPENDING] = ss->pending; + ints[INIT_SIGIGN] = 0; + for (i = 1; i < NSIG; ++i) + if (ss->actions[i].sa_handler == SIG_IGN) + ints[INIT_SIGIGN] |= __sigmask (i); + + /* We hold the sigstate lock until the exec has failed so that no signal + can arrive between when we pack the blocked and ignored signals, and + when the exec actually happens. A signal handler could change what + signals are blocked and ignored. Either the change will be reflected + in the exec, or the signal will never be delivered. */ + + /* Pack up the descriptor table to give the new program. */ + __mutex_lock (&_hurd_dtable_lock); + if (_hurd_dtable.d != NULL) + { + dtablesize = _hurd_dtable.size; + dtable = __alloca (dtablesize * sizeof (dtable[0])); + dealloc_dtable = __alloca (dtablesize * sizeof (dealloc_dtable[0])); + dtable_cells = __alloca (dtablesize * sizeof (dealloc_cells[0])); + for (i = 0; i < dtablesize; ++i) + { + struct _hurd_fd *const d = &_hurd_dtable.d[i]; + __spin_lock (&d->port.lock); + if (d->flags & FD_CLOEXEC) + { + dtable[i] = MACH_PORT_NULL; + __spin_unlock (&d->port.lock); + } + else + { + /* If this is a descriptor to our controlling tty, + we want to give the normal port, not the foreground port. */ + dtable[i] = _hurd_port_get (&d->ctty, &dealloc_dtable[i]); + if (dtable[i] == MACH_PORT_NULL) + { + dtable[i] = _hurd_port_locked_get (&d->port, + &dealloc_dtable[i]); + dtable_cells[i] = &d->port; + } + else + { + __spin_unlock (&d->port.lock); + dtable_cells[i] = &d->ctty; + } + } + } + } + else + { + dtable = _hurd_init_dtable; + dtablesize = _hurd_init_dtablesize; + dealloc_dtable = NULL; + dealloc_cells = NULL; + } + + /* The information is all set up now. Try to exec the file. */ + + { + mach_port_t please_dealloc[_hurd_nports + dtablesize]; + mach_port_t *p = please_dealloc; + + /* Request the exec server to deallocate some ports from us if the exec + succeeds. The init ports and descriptor ports will arrive in the + new program's exec_startup message. If we failed to deallocate + them, the new program would have duplicate user references for them. + But we cannot deallocate them ourselves, because we must still have + them after a failed exec call. */ + + for (i = 0; i < _hurd_nports; ++i) + *p++ = ports[i]; + for (i = 0; i < dtablesize; ++i) + *p++ = dtable[i]; + + err = __file_exec (file, __mach_task_self (), + 0, + args, argslen, env, envlen, + dtable, dtablesize, MACH_MSG_TYPE_COPY_SEND, + ports, _hurd_nports, MACH_MSG_TYPE_COPY_SEND, + ints, INIT_INT_MAX, + please_dealloc, p - please_dealloc, + NULL, 0); + } + + /* Safe to let signals happen now. */ + __mutex_unlock (&ss->lock); + + /* Release references to the standard ports. */ + for (i = 0; i < _hurd_nports; ++i) + _hurd_port_free (&_hurd_ports[i], &dealloc_ports[i], ports[i]); + + if (dealloc_dtable != NULL) + /* Release references to the file descriptor ports. */ + for (i = 0; i < dtablesize; ++i) + if (dtable[i] != MACH_PORT_NULL) + _hurd_port_free (dtable_cells[i], &dealloc_dtable[i], dtable[i]); + + return err; +} diff -ruN glibc-1.06/hurd/hurdfrob.c glibc-1.07/hurd/hurdfrob.c --- glibc-1.06/hurd/hurdfrob.c Wed Jul 1 00:52:43 1992 +++ glibc-1.07/hurd/hurdfrob.c @@ -1,125 +0,0 @@ -/* Copyright (C) 1992 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include -#include "msg_server.h" - -error_t -__get_init_port (mach_port_t msgport, mach_port_t auth, - int which, mach_port_t *port) -{ - if (task != mach_task_self () && - _HURD_PORT_USE (&_hurd_auth, auth != port)) - return EPERM; - - switch (which) - { - case INIT_PORT_CWDIR: - *port = get (&_hurd_cwdir); - return 0; - case INIT_PORT_CRDIR: - *port = get (&_hurd_crdir); - return 0; - case INIT_PORT_PROC: - *port = get (&_hurd_proc); - return 0; - case INIT_PORT_AUTH: - *port = get (&_hurd_auth); - return 0; - case INIT_PORT_LOGINCOLL: - return EOPNOTSUPP; /* XXX */ - case INIT_PORT_BOOTSTRAP: - return __task_get_special_port (__mach_task_self (), - TASK_BOOTSTRAP_PORT, - port); - default: - return EINVAL; - } -} - -error_t -__set_init_port (mach_port_t msgport, task_t task, - int which, mach_port_t port) -{ - if (task != mach_task_self () && - _HURD_PORT_USE (&_hurd_auth, auth != port)) - return EPERM; - - switch (which) - { - case INIT_PORT_CWDIR: - set (&_hurd_cwdir); - return 0; - case INIT_PORT_CRDIR: - set (&_hurd_crdir); - return 0; - case INIT_PORT_PROC: - set (&_hurd_proc); /* XXX do more? */ - return 0; - case INIT_PORT_AUTH: - __setauth (&_hurd_auth); - return errno; /* XXX can't clobber errno */ - case INIT_PORT_LOGINCOLL: - return EOPNOTSUPP; /* XXX */ - case INIT_PORT_BOOTSTRAP: - return __task_set_special_port (__mach_task_self (), - TASK_BOOTSTRAP_PORT, - port); - default: - return EINVAL; - } -} - -error_t -__get_init_int (mach_port_t msgport, mach_port_t auth, - int which, int *value) -{ - if (task != mach_task_self () && - _HURD_PORT_USE (&_hurd_auth, auth != port)) - return EPERM; - - switch (which) - { - case INIT_UMASK: - *value = _hurd_umask; - return 0; - case INIT_SIGMASK: - { - struct _hurd_sigstate *ss = _hurd_thread_sigstate (_hurd_sigthread); - *value = ss->blocked; - __mutex_unlock (&ss->lock); - return 0; - } - case INIT_SIGMASK: - { - struct _hurd_sigstate *ss = _hurd_thread_sigstate (_hurd_sigthread); - sigset_t ign; - int sig; - __sigemptyset (&ign); - for (sig = 1; sig < NSIG; ++sig) - if (ss->actions[sig].sa_handler == SIG_IGN) - __sigaddset (sig, &ign); - __mutex_unlock (&ss->lock); - *value = ign - return 0; - } - /* XXX ctty crap */ - default: - return EINVAL; - } -} diff -ruN glibc-1.06/hurd/hurdid.c glibc-1.07/hurd/hurdid.c --- glibc-1.06/hurd/hurdid.c Mon Nov 11 22:34:56 1991 +++ glibc-1.07/hurd/hurdid.c Thu Oct 28 23:08:03 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991 Free Software Foundation, Inc. +/* Copyright (C) 1993 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 @@ -19,15 +19,64 @@ #include #include -struct mutex _hurd_idlock; -int _hurd_id_valid; -struct idblock _hurd_id; +struct _hurd_id_data _hurd_id; static void init_id (void) { - __mutex_init (&_hurd_idlock); - _hurd_id_valid = 0; +#ifdef noteven + __mutex_init (&_hurd_id.lock); +#endif + _hurd_id.valid = 0; } text_set_element (__libc_subinit, init_id); + +/* Check that _hurd_id.{gen,aux} are valid and update them if not. + Expects _hurd_id.lock to be held and does not release it. */ + +error_t +_hurd_check_ids (void) +{ + if (! _hurd_id.valid) + { + error_t err; + inline void dealloc (__typeof (_hurd_id.gen) *p) + { + if (p->uids) + { + __vm_deallocate (__mach_task_self (), + (vm_address_t) p->uids, + p->nuids * sizeof (uid_t)); + p->uids = NULL; + } + if (p->gids) + { + __vm_deallocate (__mach_task_self (), + (vm_address_t) p->gids, + p->ngids * sizeof (gid_t)); + p->gids = NULL; + } + } + + dealloc (&_hurd_id.gen); + dealloc (&_hurd_id.aux); + if (_hurd_id.rid_auth) + { + __mach_port_deallocate (__mach_task_self (), _hurd_id.rid_auth); + _hurd_id.rid_auth = MACH_PORT_NULL; + } + + if (err = __USEPORT (AUTH, __auth_getids + (port, + &_hurd_id.gen.uids, &_hurd_id.gen.nuids, + &_hurd_id.aux.uids, &_hurd_id.aux.nuids, + &_hurd_id.gen.gids, &_hurd_id.gen.ngids, + &_hurd_id.aux.gids, &_hurd_id.aux.ngids))) + return err; + + _hurd_id.valid = 1; + } + + return 0; +} diff -ruN glibc-1.06/hurd/hurdinit.c glibc-1.07/hurd/hurdinit.c --- glibc-1.06/hurd/hurdinit.c Tue Jul 14 23:26:27 1992 +++ glibc-1.07/hurd/hurdinit.c Sun Nov 7 08:31:07 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1993 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 @@ -17,8 +17,18 @@ Cambridge, MA 02139, USA. */ #include +#include +#include +#include +#include +struct _hurd_port *_hurd_ports; +unsigned int _hurd_nports; +mode_t _hurd_umask; + +void _hurd_proc_init (char **argv); + /* Initialize the library data structures from the ints and ports passed to us by the exec server. @@ -25,91 +35,102 @@ PORTARRAY and INTARRAY are vm_deallocate'd. */ void -_hurd_init (char **argv, +_hurd_init (int flags, char **argv, mach_port_t *portarray, size_t portarraysize, int *intarray, size_t intarraysize) { int i; + _hurd_ports = malloc (portarraysize * sizeof (*_hurd_ports)); + if (_hurd_ports == NULL) + __libc_fatal ("Can't allocate _hurd_ports\n"); + _hurd_nports = portarraysize; + /* See what ports we were passed. */ for (i = 0; i < portarraysize; ++i) - switch (i) - { -#define initport(upper, lower) \ - case INIT_PORT_##upper: \ - _hurd_port_init (&_hurd_##lower, portarray[i]); \ - break - - /* Install the standard ports in their cells. */ - initport (CCDIR, ccdir); - initport (CWDIR, cwdir); - initport (CRDIR, crdir); - initport (AUTH, auth); - - case INIT_PORT_PROC: - /* Install the proc port and tell the proc server we exist. */ - _hurd_proc_init (portarray[i], argv); - break; - - case INIT_PORT_BOOTSTRAP: - /* When the user asks for the bootstrap port, - he will get the one the exec server passed us. */ - __task_set_special_port (__mach_task_self (), - TASK_BOOTSTRAP_PORT, portarray[i]); - /* FALLTHROUGH */ - - default: - /* Wonder what that could be. */ - __mach_port_deallocate (__mach_task_self (), portarray[i]); - break; - } + { + _hurd_port_init (&_hurd_ports[i], portarray[i]); + + switch (i) + { + case INIT_PORT_PROC: + /* Tell the proc server we exist, if it does. */ + if (portarray[i] != MACH_PORT_NULL) + _hurd_proc_init (argv); + break; + + case INIT_PORT_BOOTSTRAP: + /* When the user asks for the bootstrap port, + he will get the one the exec server passed us. */ + __task_set_special_port (__mach_task_self (), + TASK_BOOTSTRAP_PORT, portarray[i]); + break; + } + } if (intarraysize > INIT_UMASK) _hurd_umask = intarray[INIT_UMASK] & 0777; else - _hurd_umask = 0022; /* XXX */ - if (intarraysize > INIT_CTTY_FILEID) /* Knows that these are sequential. */ - { - _hurd_ctty_fstype = intarray[INIT_CTTY_FSTYPE]; - _hurd_ctty_fsid.val[0] = intarray[INIT_CTTY_FSID1]; - _hurd_ctty_fsid.val[1] = intarray[INIT_CTTY_FSID2]; - _hurd_ctty_fileid = intarray[INIT_CTTY_FILEID]; - } - + _hurd_umask = CMASK; /* All done with init ints and ports. */ - __vm_deallocate (__mach_task_self (), intarray, nints * sizeof (int)); __vm_deallocate (__mach_task_self (), - portarray, nports * sizeof (mach_port_t)); + (vm_address_t) intarray, + intarraysize * sizeof (int)); + __vm_deallocate (__mach_task_self (), + (vm_address_t) portarray, + portarraysize * sizeof (mach_port_t)); + + if (flags & EXEC_SECURE) + /* XXX if secure exec, elide environment variables + which the library uses and could be security holes. + CORESERVER, COREFILE + */ ; } -/* The user can do "int _hide_arguments = 1;" to make sure the - arguments are never visible with `ps'. */ -int _hide_arguments; +/* The user can do "int _hide_arguments = 1;" to make + sure the arguments are never visible with `ps'. */ +int _hide_arguments, _hide_environment; -/* Make PROCSERVER be our proc server port. - Tell the proc server that we exist. */ +/* Do startup handshaking with the proc server just installed in _hurd_ports. + Call _hurdsig_init to set up signal processing. */ void -_hurd_proc_init (process_t procserver, char **argv) +_hurd_proc_init (char **argv) { - mach_port_t oldsig, oldtask; - - _hurd_port_init (&_hurd_proc, procserver); - - /* Tell the proc server where our args and environment are. */ - __proc_setprocargs (procserver, _hide_arguments ? 0 : argv, __environ); + mach_port_t oldmsg; + int dealloc; + process_t procserver; +#ifdef notyet /* Initialize the signal code; Mach exceptions will become signals. - This sets _hurd_msgport; it must be run before _hurd_proc_init. */ + This function will be a no-op on calls after the first. + On the first call, it sets up the message port and the signal thread. */ _hurdsig_init (); +#endif - /* Give the proc server our task and signal ports. */ - __proc_setports (procserver, - _hurd_msgport, __mach_task_self (), - &oldsig, &oldtask); - if (oldsig != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), oldsig); - if (oldtask != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), oldtask); + /* The signal thread is now prepared to receive messages. + It is safe to give the port to the proc server. */ + + procserver = _hurd_port_get (&_hurd_ports[INIT_PORT_PROC], &dealloc); + +#ifdef notyet + /* Give the proc server our message port. */ + __proc_setmsgport (procserver, _hurd_msgport, &oldmsg); + if (oldmsg != MACH_PORT_NULL) + /* Deallocate the old msg port we replaced. */ + __mach_port_deallocate (__mach_task_self (), oldmsg); +#endif + + /* Tell the proc server where our args and environment are. */ + __proc_setprocargs (procserver, + _hide_arguments ? 0 : (vm_address_t) argv, + _hide_environment ? 0 : (vm_address_t) __environ); + + _hurd_port_free (&_hurd_ports[INIT_PORT_PROC], &dealloc, procserver); + +#ifdef notyet + /* Initialize proc server-assisted fault recovery for the signal thread. */ + _hurdsig_fault_init (); +#endif } diff -ruN glibc-1.06/hurd/hurdpath.c glibc-1.07/hurd/hurdpath.c --- glibc-1.06/hurd/hurdpath.c Thu Jun 4 20:40:01 1992 +++ glibc-1.07/hurd/hurdpath.c Mon Dec 13 19:23:02 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1993 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 @@ -19,6 +19,7 @@ #include #include #include +#include error_t __hurd_path_lookup (file_t crdir, file_t cwdir, @@ -26,10 +27,10 @@ file_t *result) { error_t err; - file_t startdir, result; + file_t startdir; enum retry_type doretry; - char retryname[PATH_MAX]; + char retryname[1024]; /* XXX string_t LOSES! */ file_t newpt; int dealloc_dir; int nloops; @@ -48,8 +49,8 @@ for (;;) { - err = __dir_pathtrans (startdir, path, flags, mode, - &doretry, retryname, &result); + err = __dir_pathtrans (startdir, (char *) path, flags, mode, + &doretry, retryname, result); if (dealloc_dir) __mach_port_deallocate (__mach_task_self (), startdir); @@ -59,19 +60,32 @@ switch (doretry) { case FS_RETRY_NONE: - return POSIX_SUCCESS; + /* We got a successful translation. Now apply any + open-time action flags we were passed. */ + if (flags & O_EXLOCK) + ; /* XXX */ + if (!err && (flags & O_SHLOCK)) + ; /* XXX */ + if (!err && (flags & O_TRUNC)) + err = __file_truncate (*result, 0); + + if (err) + __mach_port_deallocate (__mach_task_self (), *result); + return err; case FS_RETRY_REAUTH: - __io_reauthenticate (*result); - _HURD_PORT_USE (&_hurd_auth, - __auth_user_authenticate (port, result, &newpt)); + __io_reauthenticate (*result, _hurd_pid); + __USEPORT (AUTH, __auth_user_authenticate (port, *result, _hurd_pid, + &newpt)); __mach_port_deallocate (__mach_task_self (), *result); *result = newpt; /* Fall through. */ case FS_RETRY_NORMAL: - if (nloops++ >= MAXSYMLINKS) +#ifdef SYMLINK_MAX + if (nloops++ >= SYMLINK_MAX) return ELOOP; +#endif if (retryname[0] == '/') { @@ -88,6 +102,9 @@ dealloc_dir = 1; path = retryname; } + break; + + /* case FS_RETRY_MAGICAL: XXX */ } } } @@ -114,7 +131,7 @@ if (lastslash == path) { /* "/foobar" => crdir + "foobar". */ - *name = path + 1; + *name = (char *) path + 1; __mach_port_mod_refs (__mach_task_self (), MACH_PORT_RIGHT_SEND, crdir, +1); *dir = crdir; @@ -125,8 +142,8 @@ /* "/dir1/dir2/.../file". */ char dirname[lastslash - path + 1]; memcpy (dirname, path, lastslash - path); - dirname[lastslath - path] = '\0'; - *name = lastslash + 1; + dirname[lastslash - path] = '\0'; + *name = (char *) lastslash + 1; return __hurd_path_lookup (crdir, cwdir, dirname, 0, 0, dir); } } @@ -133,7 +150,7 @@ else { /* "foobar" => cwdir + "foobar". */ - *name = path; + *name = (char *) path; __mach_port_mod_refs (__mach_task_self (), MACH_PORT_RIGHT_SEND, cwdir, 1); *dir = cwdir; @@ -148,13 +165,13 @@ file_t result, crdir, cwdir; int dealloc_crdir, dealloc_cwdir; - crdir = _hurd_port_get (&_hurd_crdir, &dealloc_crdir); - cwdir = _hurd_port_get (&_hurd_cwdir, &dealloc_cwdir); + crdir = _hurd_port_get (&_hurd_ports[INIT_PORT_CRDIR], &dealloc_crdir); + cwdir = _hurd_port_get (&_hurd_ports[INIT_PORT_CWDIR], &dealloc_cwdir); err = __hurd_path_lookup (crdir, cwdir, path, flags, mode, &result); - _hurd_port_free (crdir, &dealloc_crdir); - _hurd_port_free (cwdir, &dealloc_cwdir); + _hurd_port_free (&_hurd_ports[INIT_PORT_CRDIR], &dealloc_crdir, crdir); + _hurd_port_free (&_hurd_ports[INIT_PORT_CWDIR], &dealloc_cwdir, cwdir); if (err) { @@ -172,13 +189,13 @@ file_t dir, crdir, cwdir; int dealloc_crdir, dealloc_cwdir; - crdir = _hurd_port_get (&_hurd_crdir, &dealloc_crdir); - cwdir = _hurd_port_get (&_hurd_cwdir, &dealloc_cwdir); + crdir = _hurd_port_get (&_hurd_ports[INIT_PORT_CRDIR], &dealloc_crdir); + cwdir = _hurd_port_get (&_hurd_ports[INIT_PORT_CWDIR], &dealloc_cwdir); err = __hurd_path_split (crdir, cwdir, path, &dir, name); - _hurd_port_free (crdir, &dealloc_crdir); - _hurd_port_free (cwdir, &dealloc_cwdir); + _hurd_port_free (&_hurd_ports[INIT_PORT_CRDIR], &dealloc_crdir, crdir); + _hurd_port_free (&_hurd_ports[INIT_PORT_CWDIR], &dealloc_cwdir, cwdir); if (err) { diff -ruN glibc-1.06/hurd/hurdpid.c glibc-1.07/hurd/hurdpid.c --- glibc-1.06/hurd/hurdpid.c Wed Mar 25 19:17:47 1992 +++ glibc-1.07/hurd/hurdpid.c Wed Nov 3 11:13:45 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993 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 @@ -17,7 +17,11 @@ Cambridge, MA 02139, USA. */ #include +#include +#if 0 +struct mutex _hurd_pid_lock; +#endif pid_t _hurd_pid, _hurd_ppid, _hurd_pgrp; int _hurd_orphaned; @@ -24,23 +28,36 @@ static void init_pids (void) { - int dealloc; - process_t proc = _hurd_port_get (&_hurd_proc, &dealloc); - - __proc_getpids (proc, &_hurd_pid, &_hurd_ppid, &_hurd_orphaned); - __proc_getpgrp (proc, _hurd_pid, &_hurd_pgrp); - - _hurd_port_free (proc, &dealloc); +#if 0 + __mutex_init (&_hurd_pid_lock); +#endif + + __USEPORT (PROC, + ({ + __proc_getpids (port, &_hurd_pid, &_hurd_ppid, &_hurd_orphaned); + __proc_getpgrp (port, _hurd_pid, &_hurd_pgrp); + })); } text_set_element (__libc_subinit, init_pids); +#include "hurd/msg_server.h" + error_t -__proc_newids (sigthread_t me, - pid_t ppid, pid_t pgrp, int orphaned) +_S_proc_newids (mach_port_t me, + task_t task, + pid_t ppid, pid_t pgrp, int orphaned) { + if (task != __mach_task_self ()) + return EPERM; + + __mach_port_deallocate (__mach_task_self (), task); + + __mutex_lock (&_hurd_pid_lock); _hurd_ppid = ppid; _hurd_pgrp = pgrp; _hurd_orphaned = orphaned; - return POSIX_SUCCESS; + __mutex_unlock (&_hurd_pid_lock); + + return 0; } diff -ruN glibc-1.06/hurd/hurdports.c glibc-1.07/hurd/hurdports.c --- glibc-1.06/hurd/hurdports.c Thu Apr 29 16:59:33 1993 +++ glibc-1.07/hurd/hurdports.c Wed Jun 23 16:22:04 1993 @@ -19,10 +19,10 @@ #include static inline mach_port_t -get (struct _hurd_port *cell) +get (const size_t idx) { mach_port_t result; - error_t err = _HURD_PORT_USE (cell, + error_t err = _HURD_PORT_USE (&_hurd_ports[idx], __mach_port_mod_refs (__mach_task_self (), (result = port), MACH_PORT_RIGHT_SEND, @@ -35,11 +35,11 @@ else return result; } -#define GET(type, what) \ - type get##what (void) { return get (&what); } +#define GET(type, what, idx) \ + type get##what (void) { return get (INIT_PORT_##idx); } static inline int -set (struct _hurd_port *cell, mach_port_t new) +set (const size_t idx, mach_port_t new) { error_t err; if (err = __mach_port_mod_refs (__mach_task_self (), new, @@ -48,18 +48,18 @@ errno = EINVAL; return -1; } - _hurd_port_set (cell, new); + _hurd_port_set (&_hurd_ports[idx], new); return 0; } -#define SET(type, what) \ - int set##what (type new) { return set (&what, new); } +#define SET(type, what, idx) \ + int set##what (type new) { return set (INIT_PORT_##idx, new); } -#define GETSET(type, what) \ - GET (type, what) SET (type, what) +#define GETSET(type, what, idx) \ + GET (type, what, idx) SET (type, what, idx) -GETSET (process_t, proc) -GETSET (file_t, cwdir) -GETSET (file_t, crdir) +GETSET (process_t, proc, PROC) +GETSET (file_t, cwdir, CWDIR) +GETSET (file_t, crdir, CRDIR) /* setauth is nontrivial; see __setauth.c. */ -GET (auth_t, auth) +GET (auth_t, auth, AUTH) diff -ruN glibc-1.06/hurd/hurdsig.c glibc-1.07/hurd/hurdsig.c --- glibc-1.06/hurd/hurdsig.c Mon Apr 26 17:34:31 1993 +++ glibc-1.07/hurd/hurdsig.c @@ -1,570 +0,0 @@ -/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include -#include - -struct mutex _hurd_siglock; -int _hurd_stopped; - -/* Port that receives signals and other miscellaneous messages. */ -mach_port_t _hurd_msgport; - -/* Thread listening on it. */ -thread_t _hurd_msgport_thread; - -/* Thread which receives task-global signals. */ -thread_t _hurd_sigthread; - -/* Linked-list of per-thread signal state. */ -struct _hurd_sigstate *_hurd_sigstates; - -struct _hurd_sigstate * -_hurd_thread_sigstate (thread_t thread) -{ - struct _hurd_sigstate *ss; - __mutex_lock (&_hurd_siglock); - for (ss = _hurd_sigstates; ss != NULL; ss = ss->next) - if (ss->thread == thread) - break; - if (ss == NULL) - { - ss = calloc (1, sizeof (*ss)); /* Zero-initialized. */ - if (ss == NULL) - __libc_fatal ("hurd: Can't allocate thread sigstate\n"); - ss->thread = thread; - __mutex_init (&ss->lock); - ss->next = _hurd_sigstates; - _hurd_sigstates = ss; - } - __mutex_lock (&ss->lock); - __mutex_unlock (&_hurd_siglock); - return ss; -} - -#include - -/* Limit on size of core files. */ -int _hurd_core_limit; - -/* Call the core server to mummify us before we die. - Returns nonzero if a core file was written. */ -static int -write_corefile (int signo, int sigcode) -{ - error_t err; - mach_port_t coreserver; - file_t file; - char *name; - char *target; - - if (_hurd_core_limit == 0) - /* User doesn't want a core. */ - return 0; - - coreserver = MACH_PORT_NULL; - if (!setjmp (_hurd_sigthread_fault_env)) - { - name = getenv ("CORESERVER"); - if (name != NULL) - coreserver = __path_lookup (name, 0, 0); - } - - if (coreserver == MACH_PORT_NULL) - coreserver = __path_lookup (_SERVERS_CORE, 0, 0); - if (coreserver == MACH_PORT_NULL) - return 0; - - file = MACH_PORT_NULL; - if (!setjmp (_hurd_sigthread_fault_env)) - { - name = getenv ("COREFILE"); - if (name != NULL) - file = __path_lookup (name, FS_LOOKUP_WRITE|FS_LOOKUP_CREATE, - 0666 & ~_hurd_umask); - } - if (name == NULL || file == MACH_PORT_NULL) - { - name = "core"; - file = __path_lookup (name, FS_LOOKUP_WRITE|FS_LOOKUP_CREATE, - 0666 & ~_hurd_umask); - } - - if (file == MACH_PORT_NULL) - return 0; - - if (setjmp (_hurd_sigthread_fault_env)) - /* We bombed in getenv. */ - target = NULL; - else - { - target = getenv ("GNUTARGET"); - /* Fault now if TARGET is a bogus string. */ - (void) strlen (target) - } - - err = __core_dump_task (coreserver, - __mach_task_self (), - file, - signo, sigcode, - target); - __mach_port_deallocate (__mach_task_self (), coreserver); - if (!err && _hurd_core_limit != RLIM_INFINITY) - { - io_statbuf_t stb; - err = __io_stat (file, &stb); - if (!err && stb.stb_size > _hurd_core_limit) - err = EFBIG; - } - __mach_port_deallocate (__mach_task_self (), file); - if (err) - (void) remove (name); - return !err; -} - - -extern const size_t _hurd_thread_state_count; - -/* How long to give servers to respond to - interrupt_operation before giving up on them. */ -mach_msg_timeout_t _hurd_interrupt_timeout = 1000; /* One second. */ - -/* SS->thread is suspended. Fills STATE in with its registers. - SS->lock is held and kept. */ -static inline void -abort_rpcs (struct _hurd_sigstate *ss, int signo, void *state) -{ - if (ss->intr_port != MACH_PORT_NULL) - { - /* Abort whatever the thread is doing. - If it is in the mach_msg syscall doing the send, - the syscall will return MACH_SEND_INTERRUPTED. */ - __thread_abort (ss->thread); - _hurd_thread_state (ss->thread, state); - - if (_hurd_thread_msging_p (state)) - { - /* The thread was waiting for the RPC to return. - Abort the operation. The RPC will return EINTR. */ - - struct - { - mach_msg_header_t header; - mach_msg_type_t type; - kern_return_t retcode; - } msg; - kern_return_t err; - - msg.header.msgh_request_port = ss->intr_port; - msg.header.msgh_reply_port = __mach_reply_port (); - msg.header.msgh_seqno = 0; - msg.header.msgh_id = 33000; /* interrupt_operation XXX */ - err = __mach_msg (&msg.header, - MACH_SEND_MSG|MACH_RCV_MSG|MACH_RCV_TIMEOUT, - sizeof (msg.header), sizeof (msg), - msg.header.msgh_reply_port, - _hurd_interrupt_timeout, - MACH_PORT_NULL); - if (err != MACH_MSG_SUCCESS) - /* The interrupt didn't work. - Destroy the receive right the thread is blocked on. */ - __mach_port_destroy (__mach_task_self (), - /* XXX */ - _hurd_thread_reply_port (ss->thread)); - else - /* In case the server returned something screwy. */ - __mach_msg_destroy (&msg.header); - - /* Tell the thread whether it should restart the - operation or return EINTR when it wakes up. */ - ss->intr_restart = ss->actions[signo].sa_flags & SA_RESTART; - } - - /* If the thread is anywhere before the system call trap, - it will start the operation after the signal is handled. - - If the thread is after the system call trap, but before it has - cleared SS->intr_port, the operation is already finished. */ - } -} - -/* Abort the RPCs being run by all threads but this one; - all other threads should be suspended. */ -static inline void -abort_all_rpcs (int signo, void *state) -{ - thread_t me = __mach_thread_self (); - thread_t *threads; - size_t nthreads, i; - - __task_threads (__mach_task_self (), &threads, &nthreads); - for (i = 0; i < nthreads; ++i) - { - if (threads[i] != me) - { - struct _hurd_sigstate *ss = _hurd_thread_sigstate (*nthreads); - abort_rpcs (ss, signo, state); - __mutex_unlock (&ss->lock); - } - __mach_port_deallocate (__mach_task_self (), threads[i]); - } -} - - -/* Deliver a signal. - SS->lock is held on entry and released before return. */ -void -_hurd_internal_post_signal (struct _hurd_sigstate *ss, - int signo, - int sigcode, - sigset_t *restore_blocked) -{ - char thread_state[_hurd_thread_state_count]; - enum { stop, ignore, core, term } act; - - if (ss->actions[signo].sa_handler == SIG_DFL) - switch (signo) - { - case 0: - /* A sig_post msg with SIGNO==0 is sent to - tell us to check for pending signals. */ - act = ignore; - break; - - case SIGTTIN: - case SIGTTOU: - case SIGSTOP: - case SIGTSTP: - ss->pending &= ~sigmask (SIGCONT); - act = stop; - break; - - case SIGCONT: - ss->pending &= ~(sigmask (SIGSTOP) | sigmask (SIGTSTP) | - sigmask (SIGTTIN) | sigmask (SIGTTOU)); - /* Fall through. */ - case SIGIO: - case SIGURG: - case SIGCHLD: - case SIGWINCH: - act = ignore; - break; - - case SIGQUIT: - case SIGILL: - case SIGTRAP: - case SIGIOT: - case SIGEMT: - case SIGFPE: - case SIGBUS: - case SIGSEGV: - case SIGSYS: - act = core; - break; - - default: - act = term; - break; - } - else if (ss->actions[signo].sa_handler == SIG_IGN) - act = ignore; - else - act = handle; - if (_hurd_orphaned && - (signo == SIGTTIN || signo == SIGTTOU || signo == SIGTSTP) && - act == stop) - { - sigcode = signo; - signo = SIGKILL; - act = term; - } - - /* Handle receipt of a blocked signal. */ - if ((__sigismember (signo, &ss->blocked) && act != ignore) || - (signo != SIGKILL && _hurd_stopped)) - { - __sigaddmember (signo, &ss->pending); - /* Save the code to be given to the handler when SIGNO is unblocked. */ - ss->sigcodes[signo] = sigcode; - act = ignore; - } - - if (restore_blocked != NULL) - ss->blocked = *restore_blocked; - - switch (act) - { - case stop: - _HURD_PORT_USE - (&_hurd_proc, - ({ - /* Hold the siglock while stopping other threads to be - sure it is not held by another thread afterwards. */ - __mutex_unlock (&ss->lock); - __mutex_lock (&_hurd_siglock); - __proc_dostop (port, __mach_thread_self ()); - __mutex_unlock (&_hurd_siglock); - abort_all_rpcs (signo, thread_state); - __proc_markstop (port, signo); - })); - _hurd_stopped = 1; - - __mutex_lock (&ss->lock); - if (ss->suspended) - /* There is a sigsuspend waiting. Tell it to wake up. */ - __condition_signal (&ss->arrived); - else - __mutex_unlock (&ss->lock); - - return; - - case ignore: - break; - - case core: - case term: - _HURD_PORT_USE - (&_hurd_proc, - ({ - __proc_dostop (port, __mach_thread_self ()); - abort_all_rpcs (signo, thread_state); - __proc_exit (port, - (W_EXITCODE (0, signo) | - (act == core && write_corefile (signo, sigcode) ? - WCOREDUMP : 0))) - })); - - case handle: - __thread_suspend (ss->thread); - abort_rpcs (ss, signo, thread_state); - { - const sigset_t blocked = ss->blocked; - ss->blocked |= __sigmask (signo) | ss->actions[signo].sa_mask; - _hurd_run_sighandler (ss, signo, sigcode, blocked, thread_state); - } - __thread_resume (ss->thread); - } - - /* We get here only if we are handling or ignoring the signal; - otherwise we are stopped or dead by now. We still hold SS->lock. - Check for pending signals, and loop to post them. */ - for (signo = 1; signo < NSIG; ++signo) - if (__sigismember (signo, &ss->pending)) - { - __sigdelmember (signo, &ss->pending); - _hurd_internal_post_signal (ss, signo, ss->sigcodes[signo], NULL); - return; - } - - if (ss->suspended) - /* There is a sigsuspend waiting. Tell it to wake up. */ - __condition_signal (&ss->arrived); - else - __mutex_unlock (&ss->lock); -} - -/* Sent when someone wants us to get a signal. */ -error_t -__sig_post (sigthread_t me, - mig_reply_port_t reply, - int signo, - mach_port_t refport) -{ - struct _hurd_sigstate *ss; - - if (signo < 0 || signo >= NSIG) - return EINVAL; - - if (refport == __mach_task_self ()) - /* Can send any signal. */ - goto win; - else if (refport == _hurd_cttyport) - switch (signo) - { - case SIGINT: - case SIGQUIT: - case SIGTSTP: - case SIGHUP: - goto win; - } - else - { - static mach_port_t sessport = MACH_PORT_NULL; - if (sessport == MACH_PORT_NULL) - _HURD_PORT_USE (&_hurd_proc, - __proc_getsidport (port, &sessport)); - if (sessport != MACH_PORT_NULL && refport == sessport && - signo == SIGCONT) - goto win; - } - - /* XXX async io? */ - return EPERM; - - win: - ss = _hurd_thread_sigstate (_hurd_sigthread); - __sig_post_reply (reply, 0); - _hurd_internal_post_signal (ss, signo, 0, NULL); - return MIG_NO_REPLY; /* Already replied. */ -} - -/* Called by the exception handler to take a signal. */ -void -_hurd_exc_post_signal (thread_t thread, int signo, int sigcode) -{ - _hurd_internal_post_signal (_hurd_thread_sigstate (thread), - signo, sigcode, NULL); -} - -#include - -/* Handle signal SIGNO in the calling thread. - If SS is not NULL it is the sigstate for the calling thread; - SS->lock is held on entry and released before return. */ -void -_hurd_raise_signal (struct _hurd_sigstate *ss, int signo, int sigcode) -{ - jmp_buf env; - struct sigcontext sc; - - if (ss == NULL) - ss = _hurd_thread_sigstate (__mach_thread_self ()); - - if (! setjmp (env)) - { - register volatile void (*handler) (int signo, int sigcode, - struct sigcontext *scp); - - handler = (__typeof (handler)) ss->actions[signo].sa_handler; - - /* Set up SC to make setjmp return 1. */ - _hurd_jmp_buf_sigcontext (env, &sc, 1); - - sc.sc_mask = ss->blocked; /* Restored by sigreturn. */ - sc.sc_onstack = ((ss->actions[signo].sa_flags & SA_ONSTACK) && - !(ss->sigaltstack.ss_flags & SA_DISABLE)); - if (sc.sc_onstack) - { - /* Switch to the signal stack. */ - ss->sigaltstack.ss_flags |= SA_ONSTACK; - SET_SP (ss->sigaltstack.ss_sp); - } - - __mutex_unlock (&ss->lock); - - /* Call the handler. */ - (*handler) (signo, sigcode, &sc); - - __sigreturn (&sc); /* Does not return. */ - LOSE; /* Firewall. */ - } -} - -void -_hurdsig_init (void) -{ - thread_t sigthread; - - __mutex_init (&_hurd_siglock); - - if (_hurd_msgport == MACH_PORT_NULL) - if (err = __mach_port_allocate (__mach_task_self (), - MACH_PORT_RIGHT_RECEIVE, - &_hurd_msgport)) - __libc_fatal ("hurd: Can't create signal port receive right\n"); - - if (err = __thread_create (__mach_task_self (), &sigthread)) - __libc_fatal ("hurd: Can't create signal thread\n"); - if (err = _hurd_start_sigthread (sigthread, _hurd_msgport_receive)) - __libc_fatal ("hurd: Can't start signal thread\n"); - _hurd_msgport_thread = sigthread; - - /* Make a send right to the signal port. */ - if (err = __mach_port_insert_right (__mach_task_self (), - _hurd_msgport, - MACH_PORT_RIGHT_MAKE_SEND)) - __libc_fatal ("hurd: Can't create send right to signal port\n"); - - /* Receive exceptions on the signal port. */ - __task_set_special_port (__mach_task_self (), - TASK_EXCEPTION, - _hurd_msgport); - - { - /* Send exceptions for the signal thread to the proc server. - It will forward the message on to our message port, - and then restore the thread's state to code which - does `longjmp (_hurd_sigthread_fault_env, 1)'. */ - - mach_port_t sigexc; - int state[_hurd_thread_state_count]; - if (err = __mach_port_allocate (__mach_task_self (), - MACH_PORT_RIGHT_RECEIVE, &sigexc)) - __libc_fatal ("hurd: Can't create receive right for sigthread exc\n"); - _hurd_initialize_fault_recovery_state (state); - __thread_set_special_port (sigthread, THREAD_EXCEPTION, sigexc); - if (err = HURD_PORT_USE - (&_hurd_proc, - __proc_handle_exceptions (port, - sigexc, - _hurd_msgport, MACH_PORT_RIGHT_COPY_SEND, - _hurd_thread_state_flavor, - state, _hurd_thread_state_count))) - __libc_fatal ("hurd: proc won't handle sigthread exceptions\n"); - } -} - /* XXXX */ -struct _hurd_port _hurd_proc; - -/* Make PROCSERVER be our proc server port. - Tell the proc server that we exist. */ - -void -_hurd_proc_init (process_t procserver, char **argv) -{ - mach_port_t oldsig, oldtask; - - _hurd_port_init (&_hurd_proc, procserver); - - /* Tell the proc server where our args and environment are. */ - __proc_setprocargs (procserver, argv, __environ); - - /* Initialize the signal code; Mach exceptions will become signals. - This sets _hurd_msgport; it must be run before _hurd_proc_init. */ - _hurdsig_init (); - - /* Give the proc server our task and signal ports. */ - __proc_setports (procserver, - _hurd_msgportG, __mach_task_self (), - &oldsig, &oldtask); - if (oldsig != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), oldsig); - if (oldtask != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), oldtask); -} - -static void -reauth_proc (mach_port_t new) -{ - /* Reauthenticate with the proc server. */ - if (! _HURD_PORT_USE (&_hurd_proc, - __proc_reauthenticate (port) || - __auth_user_authenticate (new, port, &ignore)) - && ignore != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), ignore); -} diff -ruN glibc-1.06/hurd/hurdsock.c glibc-1.07/hurd/hurdsock.c --- glibc-1.06/hurd/hurdsock.c Sat Mar 21 00:21:38 1992 +++ glibc-1.07/hurd/hurdsock.c @@ -1,90 +0,0 @@ -/* _hurd_socket_server - Find the server for a socket domain. - -Copyright (C) 1991, 1992 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include -#include -#include - -static struct mutex lock; -static void -init_sock (void) -{ - __mutex_init (&lock); -} -text_set_element (__libc_subinit, init_sock); - -static file_t sockdir = MACH_PORT_NULL; -static file_t *servers; -static int max_domain; - -/* Return a port to the socket server for DOMAIN. - Socket servers translate nodes in the directory _SERVERS_SOCKET - (canonically /servers/socket). These naming point nodes are named - by the simplest decimal representation of the socket domain number, - for example "/servers/socket/3". - - Socket servers are assumed not to change very often. - The library keeps all the server socket ports it has ever looked up, - and does not look them up in /servers/socket more than once. */ - -socket_t -_hurd_socket_server (int domain) -{ - error_t err; - - __mutex_lock (&lock); - - if (sockdir == MACH_PORT_NULL) - { - sockdir = __path_lookup (_SERVERS_SOCKET, FS_LOOKUP_EXEC, 0); - if (sockdir == MACH_PORT_NULL) - { - __mutex_unlock (&lock); - return MACH_PORT_NULL; - } - } - - if (domain > max_domain) - { - file_t *new = realloc (servers, (domain + 1) * sizeof (file_t)); - if (new == NULL) - { - __mutex_unlock (&lock); - return MACH_PORT_NULL; - } - while (max_domain < domain) - new[max_domain++] = MACH_PORT_NULL; - servers = new; - } - - { - char name[100]; - sprintf (name, "%d", domain); - if (err = _HURD_PORT_USE (&_hurd_crdir, - __hurd_path_lookup (port, sockdir, - name, 0, 0, - &servers[domain]))) - errno = err; - } - - __mutex_unlock (&lock); - - return servers[domain]; -} diff -ruN glibc-1.06/hurd/msgportdemux.c glibc-1.07/hurd/msgportdemux.c --- glibc-1.06/hurd/msgportdemux.c Wed Jul 1 00:36:02 1992 +++ glibc-1.07/hurd/msgportdemux.c @@ -1,54 +0,0 @@ -/* Demux messages sent on the signal port. - -Copyright (C) 1991, 1992 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include - -struct demux - { - struct demux *next; - boolean_t (*demux) (mach_msg_header_t *inp, - mach_msg_header_t *outp); - }; - -struct demux *_hurd_msgport_demuxers = NULL; - -extern boolean_t __msg_server (mach_msg_header_t *inp, - mach_msg_header_t *outp); - -static boolean_t -msgport_server (mach_msg_header_t *inp, - mach_msg_header_t *outp) -{ - struct demux *d; - - for (d = _hurd_msgport_demuxers; d != NULL; d = d->next) - if ((*d->demux) (inp, outp)) - return 1; - - return __msg_server (inp, outp); -} - -/* This is the code that the signal thread runs. */ -void -_hurd_msgport_receive (void) -{ - while (1) - (void) __mach_msg_server (msgport_server, __vm_page_size, _hurd_msgport); -} diff -ruN glibc-1.06/hurd/openport.c glibc-1.07/hurd/openport.c --- glibc-1.06/hurd/openport.c Sat Mar 21 00:23:35 1992 +++ glibc-1.07/hurd/openport.c Thu Oct 28 22:15:37 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1993 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 @@ -17,27 +17,13 @@ Cambridge, MA 02139, USA. */ #include +#include -/* Open a file descriptor on a port. */ +/* User entry point for interning a port as a new FD. + Just like _hurd_intern_fd, but don't dealloc PORT on error. */ int -openport (io_t port) +openport (io_t port, int flags) { - int fd; - - /* Give the port a new user reference. - This is a good way to check that it is valid. */ - if (__mach_port_mod_refs (__mach_task_self (), port, - MACH_PORT_RIGHT_SEND, 1)) - { - errno = EINVAL; - return -1; - } - - fd = _hurd_dalloc (port, 0); - if (fd < 0) - /* The descriptor table is full. */ - __mach_port_deallocate (__mach_task_self (), port); - - return fd; + return _hurd_intern_fd (port, flags, 0); } diff -ruN glibc-1.06/hurd/setdtsz.c glibc-1.07/hurd/setdtsz.c --- glibc-1.06/hurd/setdtsz.c Thu Apr 29 17:01:12 1993 +++ glibc-1.07/hurd/setdtsz.c Thu Oct 28 22:15:36 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993 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 @@ -17,6 +17,7 @@ Cambridge, MA 02139, USA. */ #include +#include /* XXX this should be done by setrlimit (RLIM_OFILES, size). */ diff -ruN glibc-1.06/hurd/setuids.c glibc-1.07/hurd/setuids.c --- glibc-1.06/hurd/setuids.c +++ glibc-1.07/hurd/setuids.c Mon Nov 29 16:39:20 1993 @@ -0,0 +1,58 @@ +/* Copyright (C) 1993 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#ifndef MIB_HACKS +#include + +/* Set the uid set for the current user to UIDS (N of them). */ +int +setuids (int n, const uid_t *uids) +{ + error_t err; + auth_t newauth; + size_t i; + gid_t new[n]; + + /* Fault before taking locks. */ + for (i = 0; i < n; ++i) + new[i] = uids[i]; + + __mutex_lock (&_hurd_id.lock); + err = _hurd_check_ids (); + if (! err) + { + /* Get a new auth port using those IDs. */ + err = __USEPORT (AUTH, + __auth_makeauth (port, + new, n, + _hurd_id.aux.uids, _hurd_id.aux.nuids, + _hurd_id.gen.gids, _hurd_id.gen.ngids, + _hurd_id.aux.gids, _hurd_id.aux.ngids, + &newauth)); + } + __mutex_unlock (&_hurd_id.lock); + + if (err) + return __hurd_fail (err); + + /* Install the new auth port and reauthenticate everything. */ + err = __setauth (newauth); + __mach_port_deallocate (__mach_task_self (), newauth); + return err; +} +#endif diff -ruN glibc-1.06/hurd/vpprintf.c glibc-1.07/hurd/vpprintf.c --- glibc-1.06/hurd/vpprintf.c Mon Oct 28 23:19:15 1991 +++ glibc-1.07/hurd/vpprintf.c @@ -1,59 +0,0 @@ -/* Copyright (C) 1991 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include -#include -#include -#include -#include - -static ssize_t -DEFUN(pwrite, (cookie, buf, n), - PTR cookie AND CONST char *buf AND size_t n) -{ - error_t error = __io_write ((io_t) cookie, buf, n, &n); - if (error) - return __hurd_fail (error); - return n; -} - - -/* Write formatted output to PORT, a Mach port supporting the i/o protocol, - according to the format string FORMAT, using the argument list in ARG. */ -int -DEFUN(vpprintf, (port, format, arg), - io_t port AND CONST char *format AND va_list arg) -{ - int done; - FILE f; - - /* Create an unbuffered stream talking to PORT on the stack. */ - memset((PTR) &f, 0, sizeof(f)); - f.__magic = _IOMAGIC; - f.__mode.__write = 1; - f.__cookie = (PTR) port; - f.__room_funcs = __default_room_functions; - f.__io_funcs.__write = pwrite; - f.__seen = 1; - f.__userbuf = 1; - - /* vfprintf will use a buffer on the stack for the life of the call. */ - done = vfprintf(&f, format, arg); - - return done; -} diff -ruN glibc-1.06/install.sh glibc-1.07/install.sh --- glibc-1.06/install.sh +++ glibc-1.07/install.sh Mon Oct 26 22:42:49 1992 @@ -0,0 +1,119 @@ +#!/bin/sh + +# +# install - install a program, script, or datafile +# This comes from X11R5; it is not part of GNU. +# +# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ +# +# This script is compatible with the BSD install script, but was written +# from scratch. +# + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" + +instcmd="$mvprog" +chmodcmd="" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +fi + +if [ x"$dst" = x ] +then + echo "install: no destination specified" + exit 1 +fi + + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + +if [ -d $dst ] +then + dst="$dst"/`basename $src` +fi + +# Make a temp file name in the proper directory. + +dstdir=`dirname $dst` +dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + +$doit $instcmd $src $dsttmp + +# and set any options; do chmod last to preserve setuid bits + +if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi +if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi +if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi +if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi + +# Now rename the file to the real destination. + +$doit $rmcmd $dst +$doit $mvcmd $dsttmp $dst + + +exit 0 diff -ruN glibc-1.06/io/TAGS glibc-1.07/io/TAGS --- glibc-1.06/io/TAGS Wed May 12 23:56:11 1993 +++ glibc-1.07/io/TAGS Sat Jan 8 02:47:57 1994 @@ -6,7 +6,7 @@ DEFUN(__access,26,943 ../sysdeps/mach/hurd/__access.c,23 -DEFUN(__access,25,959 +DEFUN(__access,26,984 ../sysdeps/unix/__chdir.S,25 SYSCALL__ (chdir,21,852 @@ -16,7 +16,7 @@ DEFUN(__chdir, (path), CONST char *path)26,956 ../sysdeps/mach/hurd/__chdir.c,22 -DEFUN(__chdir,25,941 +DEFUN(__chdir,26,966 ../sysdeps/unix/__chmod.S,25 SYSCALL__ (chmod,21,852 @@ -46,7 +46,7 @@ DEFUN(__close, (fd), int fd)25,928 ../sysdeps/mach/hurd/__close.c,22 -DEFUN(__close,26,952 +DEFUN(__close,26,958 ../sysdeps/unix/__dup.S,23 SYSCALL__ (dup,21,852 @@ -58,20 +58,22 @@ DEFUN(__dup,26,986 ../sysdeps/mach/hurd/__dup.c,21 -DEFUN(__dup,27,1010 +DEFUN(__dup,27,1016 ../sysdeps/unix/common/__dup2.S,24 SYSCALL__ (dup2,21,852 ../sysdeps/posix/__dup2.c,22 -DEFUN(__dup2,28,1034 +DEFUN(__dup2,29,1060 ../sysdeps/stub/__dup2.c,75 DEFUN(__dup2,28,1028 DEFUN(__dup2, (fd, fd2), int fd AND int fd2)28,1028 +../sysdeps/unix/sysv/sysv4/__dup2.c,0 + ../sysdeps/mach/hurd/__dup2.c,22 -DEFUN(__dup2,29,1055 +DEFUN(__dup2,29,1061 ../sysdeps/unix/common/__fchmod.S,26 SYSCALL__ (fchmod,21,852 @@ -90,8 +92,8 @@ DEFUN(__fchown,27,1005 int fd AND uid_t owner AND gid_t group)28,1041 -../sysdeps/mach/hurd/__fchown.c,23 -DEFUN(__fchown,26,982 +../sysdeps/mach/hurd/__fchown.c,24 +DEFUN(__fchown,27,1006 ../sysdeps/unix/__fcntl.S,25 SYSCALL__ (fcntl,21,852 @@ -101,7 +103,7 @@ DEFUN(__fcntl, (fd, cmd), int fd AND int cmd DOTS)25,936 ../sysdeps/mach/hurd/__fcntl.c,22 -DEFUN(__fcntl,26,954 +DEFUN(__fcntl,28,981 ../sysdeps/unix/bsd/__flock.S,25 SYSCALL__ (flock,21,846 @@ -123,7 +125,7 @@ DEFUN(__fstat, (fd, buf), int fd AND struct stat *buf)26,973 ../sysdeps/mach/hurd/__fstat.c,22 -DEFUN(__fstat,26,973 +DEFUN(__fstat,27,997 ../sysdeps/unix/bsd/__isatty.c,23 DEFUN(__isatty,26,961 @@ -142,7 +144,7 @@ DEFUN(__link, (from, to), CONST char *from AND CONST char *to)27,950 ../sysdeps/mach/hurd/__link.c,21 -DEFUN(__link,27,973 +DEFUN(__link,27,979 ../sysdeps/unix/__lseek.S,25 SYSCALL__ (lseek,21,852 @@ -152,7 +154,7 @@ DEFUN(__lseek, (fd, offset, whence), int fd AND off_t offset AND int whence)26,967 ../sysdeps/mach/hurd/__lseek.c,22 -DEFUN(__lseek,25,950 +DEFUN(__lseek,26,974 ../sysdeps/unix/common/__lstat.S,25 SYSCALL__ (lstat,21,852 @@ -165,7 +167,7 @@ DEFUN(__lstat, (file, buf), CONST char *file AND struct stat *buf)27,1009 ../sysdeps/mach/hurd/__lstat.c,22 -DEFUN(__lstat,25,913 +DEFUN(__lstat,27,956 ../sysdeps/unix/common/__mkdir.S,25 SYSCALL__ (mkdir,21,852 @@ -177,8 +179,8 @@ ../sysdeps/unix/sysv/__mkdir.c,23 DEFUN(__mkdir,30,1058 -../sysdeps/mach/hurd/__mkdir.c,22 -DEFUN(__mkdir,27,991 +../sysdeps/mach/hurd/__mkdir.c,23 +DEFUN(__mkdir,27,1003 ../sysdeps/unix/__open.S,24 SYSCALL__ (open,21,852 @@ -187,10 +189,10 @@ DEFUN(__open,28,1038 ../sysdeps/mach/hurd/__open.c,22 -DEFUN(__open,28,1036 +DEFUN(__open,28,1042 ../sysdeps/unix/bsd/m68k/__pipe.S,24 -SYSCALL__ (pipe,21,852 +SYSCALL__ (pipe,21,858 ../sysdeps/stub/__pipe.c,22 DEFUN(__pipe,29,1127 @@ -199,7 +201,10 @@ SYSCALL__ (pipe,21,852 ../sysdeps/unix/bsd/ultrix4/mips/__pipe.S,24 -SYSCALL__ (pipe,21,864 +SYSCALL__ (pipe,21,857 + +../sysdeps/unix/bsd/osf1/alpha/__pipe.S,24 +SYSCALL__ (pipe,21,857 ../sysdeps/unix/i386/__pipe.S,24 SYSCALL__ (pipe,21,858 @@ -209,7 +214,7 @@ PSEUDO (__Spipe,23,902 ../sysdeps/mach/hurd/__pipe.c,22 -DEFUN(__pipe,30,1131 +DEFUN(__pipe,32,1186 ../sysdeps/unix/__read.S,24 SYSCALL__ (read,21,852 @@ -227,7 +232,7 @@ DEFUN(__readlink,27,1080 ../sysdeps/mach/hurd/__readlink.c,26 -DEFUN(__readlink,29,1124 +DEFUN(__readlink,31,1175 ../sysdeps/unix/common/__rmdir.S,25 SYSCALL__ (rmdir,21,852 @@ -240,7 +245,7 @@ DEFUN(__rmdir,30,1058 ../sysdeps/mach/hurd/__rmdir.c,22 -DEFUN(__rmdir,27,969 +DEFUN(__rmdir,27,981 ../sysdeps/unix/__stat.S,24 SYSCALL__ (stat,21,852 @@ -250,7 +255,7 @@ DEFUN(__stat, (file, buf), CONST char *file AND struct stat *buf)26,960 ../sysdeps/mach/hurd/__stat.c,21 -DEFUN(__stat,26,960 +DEFUN(__stat,27,984 ../sysdeps/unix/common/__symlink.S,27 SYSCALL__ (symlink,21,852 @@ -259,8 +264,8 @@ DEFUN(__symlink,27,950 DEFUN(__symlink, (from, to), CONST char *from AND CONST char *to)27,950 -../sysdeps/mach/hurd/__symlink.c,24 -DEFUN(__symlink,27,973 +../sysdeps/mach/hurd/__symlink.c,25 +DEFUN(__symlink,29,1022 ../sysdeps/unix/__umask.S,25 SYSCALL__ (umask,21,852 @@ -279,7 +284,7 @@ DEFUN(__unlink, (name), CONST char *name)27,947 ../sysdeps/mach/hurd/__unlink.c,23 -DEFUN(__unlink,28,971 +DEFUN(__unlink,28,983 ../sysdeps/unix/__write.S,25 SYSCALL__ (write,21,852 @@ -288,7 +293,7 @@ DEFUN(__write,27,1004 ../sysdeps/mach/hurd/__write.c,22 -DEFUN(__write,25,919 +DEFUN(__write,25,925 access.c,29 DEFUN(access,25,957 @@ -323,7 +328,7 @@ ../sysdeps/unix/sysv/sysv4/fchdir.S,0 ../sysdeps/mach/hurd/fchdir.c,21 -DEFUN(fchdir,27,978 +DEFUN(fchdir,27,984 fchmod.c,29 DEFUN(fchmod,27,987 @@ -331,8 +336,8 @@ fchown.c,29 DEFUN(fchown,27,993 -fcntl.c,28 - DEFUN(fcntl,27,979 +fcntl.c,21 +DEFUN(fcntl,40,1238 flock.c,28 DEFUN(flock,25,959 @@ -340,9 +345,10 @@ fstat.c,28 DEFUN(fstat,25,953 -ftw.c,44 -DEFUN (ftw_dir,34,1117 -DEFUN(ftw,149,3171 +ftw.c,70 +#define PATH_MAX 32,1075 +DEFUN (ftw_dir,39,1176 +DEFUN(ftw,154,3230 ../sysdeps/posix/getcwd.c,536 #define NULL 50,1326 @@ -370,6 +376,9 @@ ../sysdeps/stub/getcwd.c,22 DEFUN(getcwd,32,1285 +../sysdeps/mach/hurd/getcwd.c,16 +getcwd 38,1407 + getdirname.c,41 DEFUN_VOID(get_current_dir_name)30,1103 @@ -427,6 +436,9 @@ ../sysdeps/stub/ttyname.c,23 DEFUN(ttyname,30,1092 +../sysdeps/mach/hurd/ttyname.c,17 +ttyname 36,1235 + umask.c,28 DEFUN(umask,26,962 @@ -479,6 +491,24 @@ #define __S_IWRITE 67,2392 #define __S_IEXEC 68,2439 +../sysdeps/unix/bsd/osf1/alpha/statbuf.h,424 +#define _STATBUF_H20,855 +struct stat25,949 +#define __S_IFMT 54,1877 +#define __S_IFDIR 57,1961 +#define __S_IFCHR 58,2005 +#define __S_IFBLK 59,2056 +#define __S_IFREG 60,2103 +#define __S_IFIFO 61,2150 +#define __S_IFLNK 63,2190 +#define __S_IFSOCK 64,2238 +#define __S_ISUID 68,2306 +#define __S_ISGID 69,2363 +#define __S_ISVTX 70,2421 +#define __S_IREAD 71,2490 +#define __S_IWRITE 72,2535 +#define __S_IEXEC 73,2582 + ../sysdeps/unix/sysv/statbuf.h,424 #define _STATBUF_H20,844 struct stat22,864 @@ -497,23 +527,60 @@ #define __S_IWRITE 58,1941 #define __S_IEXEC 59,1988 -../sysdeps/mach/hurd/statbuf.h,425 -#define _STATBUF_H 21,845 -struct stat25,891 -#define __S_IFMT 53,2059 -#define __S_IFDIR 56,2143 -#define __S_IFCHR 57,2187 -#define __S_IFBLK 58,2238 -#define __S_IFREG 59,2285 -#define __S_IFLNK 60,2332 -#define __S_IFSOCK 61,2380 -#define __S_IFIFO 62,2422 -#define __S_ISUID 66,2487 -#define __S_ISGID 67,2544 -#define __S_ISVTX 68,2602 -#define __S_IREAD 69,2671 -#define __S_IWRITE 70,2716 -#define __S_IEXEC 71,2763 +../sysdeps/unix/sysv/sysv4/solaris2/statbuf.h,424 +#define _STATBUF_H20,855 +struct stat25,949 +#define __S_IFMT 60,2184 +#define __S_IFDIR 63,2268 +#define __S_IFCHR 64,2312 +#define __S_IFBLK 65,2363 +#define __S_IFREG 66,2410 +#define __S_IFIFO 67,2457 +#define __S_IFLNK 70,2574 +#define __S_IFSOCK 71,2622 +#define __S_ISUID 75,2690 +#define __S_ISGID 76,2747 +#define __S_ISVTX 77,2805 +#define __S_IREAD 78,2874 +#define __S_IWRITE 79,2919 +#define __S_IEXEC 80,2966 + +../sysdeps/unix/sysv/sysv4/i386/statbuf.h,424 +#define _STATBUF_H20,855 +struct stat25,949 +#define __S_IFMT 62,2189 +#define __S_IFDIR 65,2273 +#define __S_IFCHR 66,2317 +#define __S_IFBLK 67,2368 +#define __S_IFREG 68,2415 +#define __S_IFIFO 69,2462 +#define __S_IFLNK 72,2579 +#define __S_IFSOCK 73,2627 +#define __S_ISUID 77,2695 +#define __S_ISGID 78,2752 +#define __S_ISVTX 79,2810 +#define __S_IREAD 80,2879 +#define __S_IWRITE 81,2924 +#define __S_IEXEC 82,2971 + +../sysdeps/mach/hurd/statbuf.h,448 +#define _STATBUF_H 21,851 +struct stat25,897 +#define __S_IFMT 63,2129 +#define __S_IFDIR 66,2213 +#define __S_IFCHR 67,2257 +#define __S_IFBLK 68,2308 +#define __S_IFREG 69,2355 +#define __S_IFLNK 70,2402 +#define __S_IFSOCK 71,2450 +#define __S_IFIFO 72,2492 +#define __S_ISUID 76,2557 +#define __S_ISGID 77,2614 +#define __S_ISVTX 78,2672 +#define __S_IREAD 79,2741 +#define __S_IWRITE 80,2786 +#define __S_IEXEC 81,2833 +#define CMASK 86,2943 sys/stat.h,884 #define _SYS_STAT_H 25,923 @@ -852,6 +919,60 @@ #define F_RDLCK 115,4217 #define F_WRLCK 116,4253 #define F_UNLCK 117,4290 + +../sysdeps/mach/hurd/fcntlbits.h,1346 +#define _FCNTLBITS_H 22,882 +#define O_READ 32,1265 +#define O_WRITE 33,1315 +#define O_EXEC 34,1366 +#define O_RDONLY 37,1454 +#define O_WRONLY 38,1501 +#define O_RDWR 39,1549 +#define O_ACCMODE 40,1621 +#define O_CREAT 48,1870 +#define O_EXCL 49,1934 +#define O_NOLINK 51,2010 +#define O_NOTRANS 52,2078 +#define O_APPEND 62,2478 +#define O_ASYNC 63,2543 +#define O_FSYNC 64,2614 +#define O_SYNC 65,2665 +#define O_NOATIME 67,2706 +#define O_NONBLOCK 85,3496 +#define O_NDELAY 87,3585 +#define O_HURD 93,3695 +#define O_TRUNC 101,3937 +#define O_SHLOCK 103,4020 +#define O_EXLOCK 104,4083 +#define O_IGNORE_CTTY 112,4307 +#define O_NOCTTY 115,4445 +#define FREAD 120,4585 +#define FWRITE 121,4609 +#define FASYNC 124,4678 +#define FCREAT 125,4702 +#define FEXCL 126,4726 +#define FTRUNC 127,4748 +#define FNOCTTY 128,4772 +#define FFSYNC 129,4798 +#define FSYNC 130,4822 +#define FAPPEND 131,4844 +#define FNONBLOCK 132,4870 +#define FNDELAY 133,4899 +#define F_DUPFD 138,4984 +#define F_GETFD 139,5039 +#define F_SETFD 140,5092 +#define F_GETFL 141,5145 +#define F_SETFL 142,5194 +#define F_GETOWN 144,5260 +#define F_SETOWN 145,5317 +#define F_GETLK 147,5381 +#define F_SETLK 148,5432 +#define F_SETLKW 149,5498 +#define FD_CLOEXEC 152,5621 +struct flock159,5843 +#define F_RDLCK 169,6247 +#define F_WRLCK 170,6283 +#define F_UNLCK 171,6320 fcntl.h,136 #define _FCNTL_H 25,920 diff -ruN glibc-1.06/io/fcntl.c glibc-1.07/io/fcntl.c --- glibc-1.06/io/fcntl.c Mon Apr 13 20:38:41 1992 +++ glibc-1.07/io/fcntl.c Tue Dec 7 16:08:42 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 19911993 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 @@ -19,9 +19,33 @@ #include #include #include -#include #undef fcntl -function_alias(fcntl, __fcntl, int, (fd, cmd), - DEFUN(fcntl, (fd, cmd), int fd AND int cmd DOTS)) +/* fcntl takes a third argument of unknown type, so function_alias cannot + work for it (without symbol aliases). We trust that the argument passed + is always a word the same size as a pointer. */ + +#ifdef HAVE_GNU_LD + +#include + +symbol_alias(__fcntl, fcntl); + +#else /* No GNU stabs. */ + +#include + +int +DEFUN(fcntl, (fd, cmd), int fd AND int cmd DOTS) +{ + va_list args; + __ptr_t arg; + va_start (args, cmd); + arg = va_arg (args, __ptr_t); + va_end (args); + + return __fcntl (fd, cmd, arg); +} + +#endif /* GNU stabs. */ diff -ruN glibc-1.06/io/ftw.c glibc-1.07/io/ftw.c --- glibc-1.06/io/ftw.c Thu Jun 4 16:47:03 1992 +++ glibc-1.07/io/ftw.c Thu Jan 6 12:03:17 1994 @@ -28,6 +28,11 @@ #include +#ifndef PATH_MAX +#define PATH_MAX 1024 /* XXX */ +#endif + + /* Traverse one level of a directory tree. */ static int diff -ruN glibc-1.06/locale/C-ctype_ct.c glibc-1.07/locale/C-ctype_ct.c --- glibc-1.06/locale/C-ctype_ct.c Wed Oct 7 18:23:03 1992 +++ glibc-1.07/locale/C-ctype_ct.c Thu Dec 2 15:48:15 1993 @@ -14,7 +14,7 @@ _IScntrl, _IScntrl, _IScntrl, - _IScntrl|_ISspace, + _IScntrl, _IScntrl|_ISspace|_ISblank, _IScntrl|_ISspace, _IScntrl|_ISspace, diff -ruN glibc-1.06/locale/TAGS glibc-1.07/locale/TAGS --- glibc-1.06/locale/TAGS Fri May 7 18:19:46 1993 +++ glibc-1.07/locale/TAGS Tue Dec 21 04:09:46 1993 @@ -1,5 +1,27 @@ -locale.h,215 +setlocale.c,25 +DEFUN(setlocale,33,1289 + +localeconv.c,30 +DEFUN_VOID(localeconv)26,987 + +C-collate.c,0 + +C-ctype.c,0 + +C-ctype_ct.c,0 + +C-ctype_mb.c,0 + +C-monetary.c,0 + +C-numeric.c,0 + +C-response.c,0 + +C-time.c,0 + +locale.h,236 #define _LOCALE_H 25,910 #define LC_COLLATE 33,1180 #define LC_CTYPE 34,1208 @@ -8,15 +30,26 @@ #define LC_TIME 37,1291 #define LC_RESPONSE 38,1317 #define LC_ALL 39,1346 +struct lconv44,1508 -localeinfo.h,255 +localeinfo.h,546 #define _LOCALEINFO_H 23,897 #define __need_size_t25,922 #define __need_wchar_t26,944 #define WCHAR_MAX 32,1063 } mb_char;41,1281 +struct ctype_mbchar_info43,1293 +struct ctype_ctype_info49,1408 +struct ctype_info56,1593 } literal_value;75,2032 } subst;86,2224 +struct collate_info88,2234 +struct numeric_info101,2429 +struct monetary_info112,2619 +struct time_info135,3081 +struct response_info153,3638 } locale;177,4033 +typedef struct sub_locale179,4044 +} sublocale;187,4150 #define LIMAGIC 193,4355 #define CATEGORY_MAGIC(198,4651 diff -ruN glibc-1.06/locale/localeconv.c glibc-1.07/locale/localeconv.c --- glibc-1.06/locale/localeconv.c Wed Apr 15 02:10:46 1992 +++ glibc-1.07/locale/localeconv.c Wed Jul 14 14:51:54 1993 @@ -1,19 +1,20 @@ /* Copyright (C) 1991, 1992 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 General Public License as published by -the Free Software Foundation; either version 1, or (at your option) -any later version. +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. +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 General Public License -along with the GNU C Library; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ #include #include diff -ruN glibc-1.06/mach/Machrules glibc-1.07/mach/Machrules --- glibc-1.06/mach/Machrules Sun May 9 23:23:29 1993 +++ glibc-1.07/mach/Machrules Thu Jan 6 03:03:36 1994 @@ -1,6 +1,6 @@ # Rules for MiG interfaces that want to go into the C library. -# Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. +# Copyright (C) 1991, 1992, 1993, 1994 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 @@ -24,16 +24,24 @@ # This file sets: # interface-headers Names of generated interface header files. # interface-routines Names of generated interface routines. -# All user stubs are put in individual files, prefixed with __, and a -# symbol-alias to the un-__'d form generated; header for both is put in -# foo.h. If a server interface is listed as __foo, then its routines are -# prefixed with __; server interfaces are written to foo_server.c and -# foo_server.h (or __foo_server.c and __foo_server.h). +# All user stubs are put in individual files, prefixed with RPC_ (and the +# function names prefixed with __), and a symbol-alias to the un-__'d form +# generated; header for both is put in foo.h. Server interfaces are +# written to foo_server.c and foo_server.h; the server functions are called +# _S_rpcname. # Includers can also add to or modify `migdefines' to set MiG flags. all: +# Make sure no value comes from the environment, since we append to it. +# This is done also in ../Rules, but we append to the value before +# including Rules, which changes the origin. +ifneq "$(findstring env,$(origin generated))" "" +generated := +endif + + include ../Makeconfig ifndef MIG @@ -42,7 +50,7 @@ MIGFLAGS = -DMACH_IPC_COMPAT=0 -DSTANDALONE -DTypeCheck=0 \ $(+includes) $(migdefines) -subrprefix __ -.SUFFIXES: .defs +.SUFFIXES: .defs # Just to set specified_rule_matched. define nl # This is needed by *.ir. @@ -49,54 +57,78 @@ endef ifdef user-interfaces -interface-includes := $(foreach if,$(user-interfaces),$(if).ir) -ifndef no_deps -include $(interface-includes) +*.ir := $(addprefix $(objpfx),$(foreach if,$(user-interfaces),$(if).ir)) +ifndef inhibit_interface_rules +include $(*.ir) +endif +ifneq "$(*.ir)" "$(wildcard $(*.ir))" +# If any .ir file is missing, we will be unable to make all the deps. +no_deps=t endif -generated := $(generated) $(interface-includes) +generated += $(*.ir) endif + # %.ir defines a variable `%-calls', which lists the RPCs defined by -# %.defs, and a rule to build $(%-calls:%=__$(%-userprefix)%.c) from +# %.defs, and a rule to build $(%-calls:%=RPC_$(%-userprefix)%.c) from # %.defs, where $(%-userprefix) is the user prefix given in %.defs. We use # the kludgificacious method of defining a pattern rule to build files # matching patterns we are pretty damn sure will only match the particular -# files we have in mind. -%.ir: %.uh +# files we have in mind. To be so damn sure, we use the silly names +# RPC_*.c and the pattern R%C_*.c because using __*.c and _%*.c (or any +# other useful pattern) causes the rule for `host_info' to also match +# `xxx_host_info', and analogous lossage. +# +# Depend on %.h just so they will be built from %.uh in the +# makefile-rebuilding run which builds %.ir; otherwise, %.uh is built as an +# intermediate in order to make %.ir and then removed before re-exec, when +# %.uh is built all over again to build %.h. +$(objpfx)%.ir: $(objpfx)%.uh $(objpfx)%.h (echo 'define $*-calls' ;\ awk '/^kern_return_t/ { print $$2 }' $< ;\ echo 'endef' ;\ echo '$*-calls := $$(subst $$(nl), ,$$($*-calls))' ;\ - echo '$$($*-calls:%=_\%%.c): $*.defs' ;\ - echo ' $$(generate-user-calls)' \ + echo '$$($*-calls:%=$$(objpfx)R\%C_%.c): $$(objpfx)$*.ustamp ;';\ ) > $@-new mv $@-new $@ vpath Machrules ../mach # Find ourselves. -define generate-user-calls -$(MIG) $< $(MIGFLAGS) \ - -prefix __ -i ./__ -server /dev/null -user /dev/null -header /dev/null -endef +# Not an implicit rule so the stamps are never removed as intermediates! +$(patsubst %,$(objpfx)%.ustamp,$(user-interfaces)): $(objpfx)%.ustamp: %.defs + $(MIG) $< $(MIGFLAGS) \ + -prefix __ -i $(objpfx)tmp_ \ + -server /dev/null -user /dev/null -header /dev/null + for call in $($*-calls); do \ + ../move-if-change $(objpfx)tmp_$${call}.c $(objpfx)RPC_$${call}.c; \ + done + touch $@ -__%_server.c __%_server.h: %.defs - $(MIG) $< $(MIGFLAGS) -prefix __ \ - -user /dev/null -header /dev/null \ - -server $(@:.h=.c) -sheader $(@:.c=.h) -%_server.c %_server.h: %.defs +# Look for the server stub files where they will be written. +vpath %_server.c $(addprefix $(objpfx),$(sort $(dir $(server-interfaces)))) + +# Build the server stubs in $(objdir). +$(objpfx)%_server.c $(objpfx)%_server.h: %.defs $(MIG) $< $(MIGFLAGS) \ + -prefix _S_ \ -user /dev/null -header /dev/null \ -server $(@:.h=.c) -sheader $(@:.c=.h) # To get header files that declare both the straight and __ functions, # we generate two files and paste them together. -%.uh: %.defs - $(MIG) $< $(MIGFLAGS) \ - -header $@ -server /dev/null -user /dev/null -%.__h: %.defs - $(MIG) $< $(MIGFLAGS) -prefix __ \ - -header $@ -server /dev/null -user /dev/null +$(objpfx)%.uh: %.defs; $(mig.uh) +define mig.uh +$(make-target-directory) +$(MIG) $< $(MIGFLAGS) \ + -header $@ -server /dev/null -user /dev/null +endef +$(objpfx)%.__h: %.defs; $(mig.__h) +define mig.__h +$(make-target-directory) +$(MIG) $< $(MIGFLAGS) -prefix __ \ + -header $@ -server /dev/null -user /dev/null +endef -%.h: %.__h %.uh +$(objpfx)%.h: $(objpfx)%.__h $(objpfx)%.uh # The last line of foo.__h is "#endif _foo_user_". # The first two lines of foo.uh are "#ifndef _foo_user_"/"#define _foo_user_". (sed -e '$$d' $<; sed -e '1,2d' $(word 2,$^)) > $@-new @@ -104,23 +136,32 @@ if-calls.c := $(strip $(foreach if,$(user-interfaces),$($(if)-calls:%=%.c))) ifdef if-calls.c -$(if-calls.c): +$(addprefix $(objpfx),$(if-calls.c)): $(objpfx)%.c: # Machrules (echo '#include '; \ - echo 'symbol_alias (__$*, $*)') > $@-new + echo 'symbol_alias (__$*, $*);') > $@-new mv $@-new $@ endif -interface-routines := $(foreach if,$(user-interfaces), \ - $($(if)-calls) \ - $(addprefix __,$($(if)-calls))) \ +interface-routines := $(foreach if,$(user-interfaces), \ + $($(if)-calls) \ + $(addprefix RPC_,$($(if)-calls))) \ $(server-interfaces:%=%_server) -interface-headers := $(user-interfaces:%=%.h) $(server-interfaces:%=%_server.h) +interface-headers := $(user-interfaces:%=%.h) \ + $(server-interfaces:%=%_server.h) # Remove the generated user stub source and header files, # and don't distribute them. -mach-generated := $(interface-routines:%=%.c) \ - $(interface-headers:%=%.h %.uh %.__h) -generated := $(generated) $(mach-generated) +mach-generated = $(interface-routines:%=%.c) \ + $(foreach h,$(interface-headers:%.h=%),$h.h $h.uh $h.__h) +generated += $(addprefix $(objpfx),$(mach-generated)) # These are needed to generate the dependencies. -before-compile := $(before-compile) $(interface-headers) +before-compile += $(interface-headers:%=$(objpfx)%) + +# Don't let these be intermediate files and get removed. +$(foreach h,$(interface-headers:%.h=$(objpfx)%),$h.h $h.__h $h.uh) : +$(interface-routines:%=$(objpfx)%.c) : + +# Convenient target to generate all the headers. +.PHONY: interface-headers +interface-headers: $(interface-headers) diff -ruN glibc-1.06/mach/Makefile glibc-1.07/mach/Makefile --- glibc-1.06/mach/Makefile Wed May 19 14:33:10 1993 +++ glibc-1.07/mach/Makefile Thu Jan 6 14:08:09 1994 @@ -1,4 +1,4 @@ -# Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. +# Copyright (C) 1991, 1992, 1993, 1994 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,36 +18,14 @@ subdir := mach -distribute = Machrules syscalls.awk shortcut.awk +all: -headers = mach_init.h mach.h mach-shortcuts.h \ - $(addprefix mach/,$(mach-headers)) \ - # $(interface-headers) -generated = mach-shortcuts.h $(interface-headers) - -ifndef no_deps # XXX -mach-headers := host_info.h kern_return.h \ - mach_param.h mach_types.h \ - memory_object.h \ - message.h mig_errors.h msg_type.h \ - policy.h port.h processor_info.h \ - std_types.h task_info.h task_special_ports.h \ - thread_info.h thread_special_ports.h \ - thread_status.h thread_switch.h time_value.h \ - vm_attributes.h vm_inherit.h vm_prot.h \ - vm_statistics.h -endif +# Some things below (but before including Rules) use configuration variables. +include ../Makeconfig -user-interfaces := $(addprefix mach/,mach_interface mach_port mach_host \ - default_pager_object \ - memory_object_user \ - memory_object_default \ - kernel_boot \ - )\ - $(addprefix device/,device device_request) -# device_reply is giving me headaches because of userprefix -server-interfaces := # mach/__exc mach/exc +headers = mach_init.h mach.h mach_error.h mach-shortcuts.h \ + $(interface-headers) mach/mach.h mach/mig_support.h mach/error.h routines = $(interface-routines) \ $(filter-out syscall_%,$(mach-syscalls)) \ $(addprefix __,$(mach-syscalls)) \ @@ -57,16 +35,72 @@ mig_support mig_syms \ msg_destroy msg_server msg_server_t \ __msg_dest __msg_server \ - devstream bootprivport # privports - + mach_error mach_error_string error_compat errsystems \ + devstream bootprivport +user-interfaces := $(addprefix mach/,mach_interface mach_port mach_host \ + memory_object_user \ + memory_object_default \ + exc \ + )\ + $(addprefix device/,device device_request) +server-interfaces := device/device_reply mach/exc mach/notify tests := hello - - -all: - - +# It is important that we do not use the wildcard function to expand +# `err_*.sub'. Leaving the wildcard allows Make-dist to find all matching +# files in all sysdep directories. +distribute := Machrules syscalls.awk shortcut.awk \ + errorlib.h err_*.sub + + +# XXX currently these files have been copied into mach/. They will +# supposedly disappear in the future. +headers += $(addprefix mach/default_pager_types.,h defs) +user-interfaces += mach/default_pager +server-interfaces += mach/default_pager_helper + +# Clear any environment value. +generated = + +# Get the proper definition of `mach-srcdir'. +include ../sysdeps/mach/Makefile + +# Use and install the Mach header files directly out of the Mach kernel source. + +# Find the MiG defs files in the kernel source. +vpath %.defs $(mach-srcdir) + +# Install all .h and .defs files we find in some of the kernel's source +# directories and their subdirectories (in MK82, max one level deep). +mach-src-headers := $(wildcard $(foreach dir,mach device mach_debug \ + $(config-machine),\ + $(addprefix $(mach-srcdir)/$(dir)/,\ + *.defs *.h \ + */*.defs */*.h))) +# Exclude mach/machine/*. A symlink will be installed for mach/machine. +# Exclude $(headers) for Mach files we have our own versions of. +mach-headers = $(filter-out mach/machine/% $(headers),\ + $(mach-src-headers:$(mach-srcdir)/%=%)) + +# Don't distribute the Mach headers; they are in the Mach distribution. +dont_distribute = $(mach-headers) + +# DO NOT try to remake these in any way!!! +$(addprefix $(mach-srcdir)/,$(mach-headers)) : ; +install-others += $(addprefix $(includedir)/,$(mach-headers)) +$(includedir)/%: $(mach-srcdir)/%; $(do-install) + +# Make symlinks for machine and mach/machine in the include directory. +install-others += $(includedir)/mach/machine $(includedir)/machine +$(includedir)/mach/machine $(includedir)/machine: $(common-objpfx)config.make + -rm -f $@ + cd $(@D); ln -s $(config-machine) $(@F) + +# Install Mach's as . +install-others += $(includedir)/mach/version.h +$(includedir)/mach/version.h: $(mach-srcdir)/sys/version.h; $(do-install) + # Define mach-syscalls and sysno-*. -ifneq ($(no_deps),t) +ifndef inhibit_mach_syscalls include $(objpfx)mach-syscalls.mk endif $(objpfx)mach-syscalls.mk: mach/syscall_sw.h syscalls.awk @@ -73,23 +107,26 @@ # Go kludges!!! sed -n -e '/Unix server implement them/,$$d' \ -e 's/^kernel_trap(\(.*\),\([-0-9]*\),[0-9]*)$$/\1 \2/p' \ - < $< | awk -f $(word 2,$^) > $@-new + < $< | awk -f $(word 2,$^) > $@-new mv $@-new $@ -generated := $(generated) $(objpfx)mach-syscalls.mk +generated += $(objpfx)mach-syscalls.mk -ifdef mach-syscalls +ifndef mach-syscalls +# We cannot make the deps properly until we know how to make the system +# call functions, and for that we must know what they all are. +no_deps=t +else $(mach-syscalls:%=$(objpfx)__%.S): $(objpfx)__%.S: $(objpfx)mach-syscalls.mk (echo '#include '; \ echo 'SYSCALL_TRAP (__$*, $(sysno-$*))') > $@-new mv $@-new $@ -$(mach-syscalls:%=$(objpfx)%.c): $(objpfx)%.c: +$(mach-syscalls:%=$(objpfx)%.c): $(objpfx)%.c: Makefile (echo '#include '; \ - echo 'symbol_alias (__$*, $*)') > $@-new + echo 'symbol_alias (__$*, $*);') > $@-new mv $@-new $@ -generated := $(generated) \ - $(mach-syscalls:%=$(objpfx)__%.S) \ - $(mach-syscalls:%=$(objpfx)%.c) -endif +generated += $(mach-syscalls:%=$(objpfx)__%.S) \ + $(mach-syscalls:%=$(objpfx)%.c) +endif # mach-syscalls mach-shortcuts := $(patsubst syscall_%,%,$(filter syscall_%,$(mach-syscalls))) @@ -103,12 +140,12 @@ endif # Make the MiG stubs for $(mach-shortcuts) be CALL_rpc. -migdefines := $(migdefines) \ - $(foreach call,$(mach-shortcuts),-D$(call)=$(call)_rpc) +migdefines += $(foreach call,$(mach-shortcuts),-D$(call)=$(call)_rpc) mach/mach_interface.uh mach/mach_port.uh: $(objpfx)mach-syscalls.mk ifdef mach-shortcuts -$(mach-shortcuts:%=__%.c): __%.c: shortcut.awk __%_rpc.c +$(mach-shortcuts:%=$(objpfx)__%.c): $(objpfx)__%.c: shortcut.awk \ + $(objpfx)RPC_%_rpc.c gawk -v call=__$* -v rpc=__$*_rpc -v syscall=__syscall_$* \ -f $^ > $@-new mv $@-new $@ @@ -116,36 +153,55 @@ # The shortcut calls have had their names changed to CALL_rpc, so # CALL_rpc.c is being generated with a symbol alias to __CALL_rpc. # We also want CALL.c with an alias to __CALL. -$(mach-shortcuts:%=%.c): +$(mach-shortcuts:%=$(objpfx)%.c): $(objpfx)%.c: # Makefile (echo '#include '; \ - echo 'symbol_alias (__$*, $*)') > $@-new + echo 'symbol_alias (__$*, $*);') > $@-new mv $@-new $@ -generated := $(generated) $(mach-shortcuts:%=%.c) +generated += $(mach-shortcuts:%=$(objpfx)%.c) +endif # mach-shortcuts # Generate mach-shortcuts.h, which will contain the prototypes for the # shortcutted kernel RPC functions. -$(objpfx)mach-shortcuts.h: mach/mach_interface.uh mach/mach_port.uh +$(objpfx)mach-shortcuts.h: $(objpfx)mach/mach_interface.h \ + $(objpfx)mach/mach_port.h # The first line gets us one paragraph per line, with @s separating real lines. # The second line selects paragraphs for the shortcutted functions. # The third line removes `_rpc' from the names and rerealifies the lines. cat $^ | tr \\012 @ | sed s/@@/@%/g | tr % \\012 \ | grep '^/\* Routine [a-z0-9_]*_rpc \*/' \ - | sed 's/_rpc//' | tr @ \\012 > $@-new + | sed 's/_rpc//g' | tr @ \\012 > $@-new mv $@-new $@ -endif # mach-shortcuts +generated += $(objpfx)mach-shortcuts.h +before-compile += $(objpfx)mach-shortcuts.h + include Machrules include ../Rules # There is already a mach.h, so mach.defs generates mach_interface.h. -mach/mach_interface.defs: mach/mach.defs +$(objpfx)mach/mach_interface.defs: $(mach-srcdir)/mach/mach.defs ln $< $@ || cp $< $@ # There is already a memory_object.h, # so memory_object.defs generates memory_object_user.h. -mach/memory_object_user.defs: mach/memory_object.defs +$(objpfx)mach/memory_object_user.defs: $(mach-srcdir)/mach/memory_object.defs ln $< $@ || cp $< $@ -generated := $(generated) mach/mach.defs mach/memory_object_user.defs + +ifdef objdir +vpath mach/mach_interface.defs $(objdir) +vpath mach/memory_object_user.defs $(objdir) +endif # Be sure not to make these with implicit rules from foo.defs. -$(filter-out $(interface-headers),$(headers)) : ; +mach.h mach/memory_object.h: ; + +ifeq (,) +# XXX we have an errsystems.c here because a gcc bug makes the generated +# version lose. +else +generated += $(objpfx)errsystems.c +$(objpfx)errsystems.c: errsystems.awk err_*.sub \ + $(wildcard $(addsuffix /err_*.sub,$(+sysdep_dirs))) + gawk -v subsys='$(filter-out $<,$^)' -f $^ > $@.n + mv $@.n $@ +endif diff -ruN glibc-1.06/mach/TAGS glibc-1.07/mach/TAGS --- glibc-1.06/mach/TAGS Wed May 19 20:06:58 1993 +++ glibc-1.07/mach/TAGS Tue Dec 21 04:13:04 1993 @@ -1,6 +1,6 @@ mach_init.c,20 -__mach_init 27,943 +__mach_init 28,982 vm_page_size.c,0 @@ -30,18 +30,33 @@ msg_server_t.c,0 __msg_dest.c,94 -__mach_msg_destroy(56,1607 -mach_msg_destroy_port(123,3381 -mach_msg_destroy_memory(141,3822 - -__msg_server.c,63 -__mach_msg_server_timeout(56,1603 -__mach_msg_server 129,3536 - -devstream.c,61 -input 29,1006 -output 68,1760 -mach_open_devstream 158,3524 +__mach_msg_destroy(61,1720 +mach_msg_destroy_port(128,3494 +mach_msg_destroy_memory(146,3935 + +__msg_server.c,28 +__mach_msg_server 176,5450 + +mach_error.c,20 +mach_error(66,2073 + +mach_error_string.c,114 +#define EXPORT_BOOLEAN40,1352 +mach_error_type(49,1540 +mach_error_string_int(67,1892 +mach_error_string(90,2450 + +error_compat.c,33 +__mach_error_map_compat(39,1295 + +errsystems.c,22 +#define static 5,126 + +devstream.c,78 +input 29,1012 +output 70,1790 +output 130,2890 +mach_open_devstream 221,4661 bootprivport.c,30 __mach_get_priv_ports 22,858 @@ -54,5 +69,58 @@ #define round_page(41,1490 #define trunc_page(46,1656 -mach.h,24 +mach.h,52 #define _MACH_H 22,881 +#define __need_FILE74,2770 + +mach_error.h,30 +#define _MACH_ERROR_ 45,1391 + +mach/mach.h,0 + +mach/mig_support.h,80 +#define _MACH_MIG_SUPPORT_H 23,929 +__mig_strncpy 53,2048 +mig_strncpy 58,2193 + +mach/error.h,772 +#define _MACH_ERROR_H_89,2773 +#define err_none 100,2938 +#define ERR_SUCCESS 101,2972 +#define ERR_ROUTINE_NIL 102,3009 +#define err_system(105,3055 +#define err_sub(106,3095 +#define err_get_system(108,3134 +#define err_get_sub(109,3181 +#define err_get_code(110,3226 +#define system_emask 112,3268 +#define sub_emask 113,3309 +#define code_emask 114,3345 +#define err_kern 118,3402 +#define err_us 119,3450 +#define err_server 120,3509 +#define err_ipc 121,3571 +#define err_mach_ipc 122,3627 +#define err_bootstrap 123,3688 +#define err_hurd 124,3751 +#define err_local 125,3815 +#define err_ipc_compat 126,3877 +#define err_max_system 128,3957 +#define unix_err(132,4037 +typedef kern_return_t mach_error_t;134,4091 +typedef mach_error_t (* mach_error_fn_t)135,4127 + +mach/default_pager_types.h,457 +#define _MACH_DEFAULT_PAGER_TYPES_H_40,1306 +typedef struct default_pager_info 47,1459 +} default_pager_info_t;51,1666 +typedef struct default_pager_object 54,1692 +} default_pager_object_t;57,1852 +typedef default_pager_object_t *default_pager_object_array_t;59,1879 +typedef struct default_pager_page 62,1943 +} default_pager_page_t;64,2044 +typedef default_pager_page_t *default_pager_page_array_t;66,2069 +typedef char default_pager_filename_t[68,2128 + +mach/default_pager_types.defs,48 +#define _MACH_DEFAULT_PAGER_TYPES_DEFS_44,1408 diff -ruN glibc-1.06/mach/__msg_dest.c glibc-1.07/mach/__msg_dest.c --- glibc-1.06/mach/__msg_dest.c Wed Oct 23 08:49:45 1991 +++ glibc-1.07/mach/__msg_dest.c Tue Aug 3 02:13:18 1993 @@ -38,9 +38,14 @@ * */ +#if 1 +#include +#else +/* This is what CMU did, but that fails to declare some used functions. */ #include #include #include +#endif static void mach_msg_destroy_port(); static void mach_msg_destroy_memory(); diff -ruN glibc-1.06/mach/__msg_server.c glibc-1.07/mach/__msg_server.c --- glibc-1.06/mach/__msg_server.c Sat Oct 24 21:47:21 1992 +++ glibc-1.07/mach/__msg_server.c Mon Dec 6 18:25:25 1993 @@ -1,3 +1,26 @@ +/* Copyright (C) 1993 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +/* Based on CMU's mach_msg_server.c revision 2.4 of 91/05/14, and thus + under the following copyright. Rewritten by Roland McGrath (FSF) + 93/12/06 to use stack space instead of malloc, and to handle + large messages with MACH_RCV_LARGE. */ + /* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University @@ -38,90 +61,114 @@ * */ -#include -#include -#include -#include -#include +#include +#include #include /* For malloc and free. */ -/* - * Routine: mach_msg_server - * Purpose: - * A simple generic server function. - */ - mach_msg_return_t -__mach_msg_server_timeout(demux, max_size, rcv_name, option, timeout) - boolean_t (*demux)(); - mach_msg_size_t max_size; - mach_port_t rcv_name; - mach_msg_option_t option; - mach_msg_timeout_t timeout; +__mach_msg_server_timeout (boolean_t (*demux) (mach_msg_header_t *request, + mach_msg_header_t *reply), + mach_msg_size_t max_size, + mach_port_t rcv_name, + mach_msg_option_t option, + mach_msg_timeout_t timeout) { - register mig_reply_header_t *bufRequest, *bufReply, *bufTemp; - register mach_msg_return_t mr; + register mig_reply_header_t *request, *reply; + register mach_msg_return_t mr; - bufRequest = (mig_reply_header_t *) malloc(max_size); - if (bufRequest == 0) - return KERN_RESOURCE_SHORTAGE; - bufReply = (mig_reply_header_t *) malloc(max_size); - if (bufReply == 0) - return KERN_RESOURCE_SHORTAGE; - - for (;;) { - get_request: - mr = __mach_msg(&bufRequest->Head, MACH_RCV_MSG|option, - 0, max_size, rcv_name, - timeout, MACH_PORT_NULL); - while (mr == MACH_MSG_SUCCESS) { - /* we have a request message */ - - (void) (*demux)(&bufRequest->Head, &bufReply->Head); - - if (bufReply->RetCode != KERN_SUCCESS) { - if (bufReply->RetCode == MIG_NO_REPLY) - goto get_request; - - /* don't destroy the reply port right, - so we can send an error message */ - bufRequest->Head.msgh_remote_port = MACH_PORT_NULL; - __mach_msg_destroy(&bufRequest->Head); - } + if (max_size == 0) + { + option |= MACH_RCV_LARGE; + max_size = __vm_page_size; /* Generic. Good? XXX */ + } - if (bufReply->Head.msgh_remote_port == MACH_PORT_NULL) { - /* no reply port, so destroy the reply */ - if (bufReply->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) - __mach_msg_destroy(&bufReply->Head); + request = __alloca (max_size); + reply = __alloca (max_size); - goto get_request; + while (1) + { + get_request: + mr = __mach_msg (&request->Head, MACH_RCV_MSG|option, + 0, max_size, rcv_name, + timeout, MACH_PORT_NULL); + while (mr == MACH_MSG_SUCCESS) + { + /* We have a request message. + Pass it to DEMUX for processing. */ + + (void) (*demux) (&request->Head, &reply->Head); + + switch (reply->RetCode) + { + case KERN_SUCCESS: + /* Hunky dory. */ + break; + + case MIG_NO_REPLY: + /* The server function wanted no reply sent. + Loop for another request. */ + goto get_request; + + default: + /* Some error; destroy the request message to release any + port rights or VM it holds. Don't destroy the reply port + right, so we can send an error message. */ + request->Head.msgh_remote_port = MACH_PORT_NULL; + __mach_msg_destroy (&request->Head); + break; } - /* send reply and get next request */ + if (reply->Head.msgh_remote_port == MACH_PORT_NULL) + { + /* No reply port, so destroy the reply. */ + if (reply->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) + __mach_msg_destroy (&reply->Head); + goto get_request; + } - bufTemp = bufRequest; - bufRequest = bufReply; - bufReply = bufTemp; - - mr = __mach_msg(&bufRequest->Head, - MACH_SEND_MSG|MACH_RCV_MSG|option, - bufRequest->Head.msgh_size, max_size, rcv_name, - timeout, MACH_PORT_NULL); - } + /* Send the reply and the get next request. */ - /* a message error occurred */ + { + /* Swap the request and reply buffers. mach_msg will read the + reply message from the buffer we pass and write the new + request message to the same buffer. */ + void *tmp = request; + request = reply; + reply = tmp; + } + + mr = __mach_msg (&request->Head, + MACH_SEND_MSG|MACH_RCV_MSG|option, + request->Head.msgh_size, max_size, rcv_name, + timeout, MACH_PORT_NULL); + } - if (mr != MACH_SEND_INVALID_DEST) - break; + /* A message error occurred. */ - /* the reply can't be delivered, so destroy it */ - __mach_msg_destroy(&bufRequest->Head); + switch (mr) + { + case MACH_RCV_TOO_LARGE: + /* The request message is larger than MAX_SIZE, and has not + been dequued. The message header has the actual size of + the message. We recurse here in hopes that the compiler + will optimize the tail-call and allocate some more stack + space instead of way too much. */ + return __mach_msg_server_timeout (demux, request->Head.msgh_size, + rcv_name, option, timeout); + + case MACH_SEND_INVALID_DEST: + /* The reply can't be delivered, so destroy it. This error + indicates only that the requestor went away, so we + continue and get the next request. */ + __mach_msg_destroy (&request->Head); + break; + + default: + /* Some other form of lossage; return to caller. */ + return mr; + } } - - free((char *) bufRequest); - free((char *) bufReply); - return mr; } diff -ruN glibc-1.06/mach/bootprivport.c glibc-1.07/mach/bootprivport.c --- glibc-1.06/mach/bootprivport.c Thu Nov 5 19:58:00 1992 +++ glibc-1.07/mach/bootprivport.c Mon Jun 28 22:30:25 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992 Free Software Foundation, Inc. +/* Copyright (C) 1993 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -39,7 +39,7 @@ /* We cannot simply use a MiG-generated user stub to do this, because the return message does not contain a return code datum. */ - reply = mach_reply_port (); + reply = __mach_reply_port (); msg.hdr.msgh_bits = MACH_MSGH_BITS (MACH_MSG_TYPE_COPY_SEND, MACH_MSG_TYPE_MAKE_SEND_ONCE); msg.hdr.msgh_size = 0; @@ -47,10 +47,10 @@ msg.hdr.msgh_local_port = reply; msg.hdr.msgh_kind = MACH_MSGH_KIND_NORMAL; msg.hdr.msgh_id = 999999; - err = mach_msg (&msg.hdr, - MACH_SEND_MSG|MACH_RCV_MSG|MACH_RCV_TIMEOUT, - sizeof (msg.hdr), sizeof (msg), reply, - 500, MACH_PORT_NULL); + err = __mach_msg (&msg.hdr, + MACH_SEND_MSG|MACH_RCV_MSG|MACH_RCV_TIMEOUT, + sizeof (msg.hdr), sizeof (msg), reply, + 500, MACH_PORT_NULL); /* XXX timeout is arbitrary */ mach_port_deallocate (mach_task_self (), bootstrap); mach_port_deallocate (mach_task_self (), reply); diff -ruN glibc-1.06/mach/devstream.c glibc-1.07/mach/devstream.c --- glibc-1.06/mach/devstream.c Fri Oct 2 21:03:17 1992 +++ glibc-1.07/mach/devstream.c Wed Nov 24 01:01:23 1993 @@ -1,7 +1,7 @@ /* stdio on a Mach device port. Translates \n to \r\n on output. -Copyright (C) 1992 Free Software Foundation, Inc. +Copyright (C) 1992, 1993 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,8 @@ { kern_return_t err; char *buffer; - size_t to_read, nread; + size_t to_read; + mach_msg_type_size_t nread; char c; if (f->__buffer == NULL) @@ -64,6 +65,67 @@ return (unsigned char) *f->__bufp++; } + +static void +output (FILE *f, int c) +{ + inline void write_some (const char *p, size_t to_write) + { + kern_return_t err; + int wrote; + while (to_write > 0) + { + if (err = device_write_inband ((device_t) f->__cookie, 0, + f->__target, (char *)p, + to_write, &wrote)) + { + errno = err; + f->__error = 1; + break; + } + p += wrote; + to_write -= wrote; + f->__target += wrote; + } + } + + if (f->__buffer != NULL) + { + if (f->__put_limit == f->__buffer) + { + /* Prime the stream for writing. */ + f->__put_limit = f->__buffer + f->__bufsize; + f->__bufp = f->__buffer; + if (c != EOF) + { + *f->__bufp++ = (unsigned char) c; + c = EOF; + } + } + + + /* Write out the buffer. */ + + write_some (f->__buffer, f->__bufp - f->__buffer); + + f->__bufp = f->__buffer; + } + + if (c != EOF && !ferror (f)) + { + if (f->__linebuf && (unsigned char) c == '\n') + { + static const char nl = '\n'; + write_some (&nl, 1); + } + else + *f->__bufp++ = (unsigned char) c; + } +} + + + +#if 0 /* Translates \n to \r\n. */ static void output (FILE *f, int c) { @@ -153,9 +215,10 @@ *f->__bufp++ = (unsigned char) c; } } +#endif FILE * -mach_open_devstream (device_t dev, const char *mode) +mach_open_devstream (mach_port_t dev, const char *mode) { FILE *stream = fopencookie ((void *) dev, mode, __default_io_functions); if (stream == NULL) @@ -163,7 +226,7 @@ stream->__room_funcs.__input = input; stream->__room_funcs.__output = output; - stream->__io_funcs.__close = device_close; + stream->__io_funcs.__close = (__io_close_fn *) device_close; stream->__seen = 1; return stream; diff -ruN glibc-1.06/mach/err_bootstrap.sub glibc-1.07/mach/err_bootstrap.sub --- glibc-1.06/mach/err_bootstrap.sub +++ glibc-1.07/mach/err_bootstrap.sub Tue Oct 6 14:29:52 1992 @@ -0,0 +1,60 @@ +/* + * Mach Operating System + * Copyright (c) 1992 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +/* + * HISTORY + * $Log: err_bootstrap.sub,v $ + * Revision 2.2 92/04/01 19:37:59 rpd + * Created. + * [92/03/09 rpd] + * + */ +/* + * File: err_bootstrap.sub + * Author: Richard Draves, Carnegie Mellon University + * Date: March 9, 1992 + * + * Error string definitions for bootstrap + */ + +static char * err_codes_bootstrap_fs[] = { + /* 0 */ "(bootstrap/fs) not a directory", + /* 1 */ "(bootstrap/fs) name not found", + /* 2 */ "(bootstrap/fs) name too long", + /* 3 */ "(bootstrap/fs) symbolic link loop", + /* 4 */ "(bootstrap/fs) bad file system", + /* 5 */ "(bootstrap/fs) offset not in file", + /* 6 */ "(bootstrap/fs) invalid parameter", +}; + +/* err_bootstrap subsystems */ +static struct error_subsystem err_bootstrap_sub[] = { + /* bootstrap/0; */ + { + "(bootstrap/fs)", + errlib_count(err_codes_bootstrap_fs), + err_codes_bootstrap_fs, + }, +}; diff -ruN glibc-1.06/mach/err_ipc.sub glibc-1.07/mach/err_ipc.sub --- glibc-1.06/mach/err_ipc.sub +++ glibc-1.07/mach/err_ipc.sub Tue Oct 6 14:29:52 1992 @@ -0,0 +1,106 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the + * rights to redistribute these changes. + */ +/* + * HISTORY + * $Log: err_ipc.sub,v $ + * Revision 2.2 92/01/16 00:08:40 rpd + * Moved from user collection to mk collection. + * + * Revision 2.2 91/03/27 16:05:16 mrt + * First checkin + * + * + */ +/* + * File: err_ipc.sub + * Author: Douglas Orr, Carnegie Mellon University + * Date: Mar, 1988 + * + * Definitions of error strings for original IPC + */ + +static char * err_codes_send[] = { + "(ipc/send) unknown error", /* -100 */ + "(ipc/send) invalid memory", /* -101 */ + "(ipc/send) invalid port", /* -102 */ + "(ipc/send) timed out", /* -103 */ + "(ipc/send) unused error", /* -104 */ + "(ipc/send) will notify", /* -105 */ + "(ipc/send) notify in progress", /* -106 */ + "(ipc/send) kernel refused message", /* -107 */ + "(ipc/send) send interrupted", /* -108 */ + "(ipc/send) send message too large", /* -109 */ + "(ipc/send) send message too small", /* -110 */ + "(ipc/send) message size changed while being copied", /* -111 */ +}; + +static char * err_codes_rcv[] = { + "(ipc/rcv) unknown error", /* -200 */ + "(ipc/rcv) invalid memory", /* -201 */ + "(ipc/rcv) invalid port", /* -202 */ + "(ipc/rcv) receive timed out", /* -203 */ + "(ipc/rcv) message too large", /* -204 */ + "(ipc/rcv) no space for message data", /* -205 */ + "(ipc/rcv) only sender remaining", /* -206 */ + "(ipc/rcv) receive interrupted", /* -207 */ + "(ipc/rcv) port receiver changed or port became enabled", /* -208 */ +}; + +static char * err_codes_mig[] = { + "(ipc/mig) type check failure in message interface", /* 0 (-300) */ + "(ipc/mig) wrong return message ID", /* 1 */ + "(ipc/mig) server detected error", /* 2 */ + "(ipc/mig) bad message ID", /* 3 */ + "(ipc/mig) server found wrong arguments", /* 4 */ + "(ipc/mig) no reply should be sent", /* 5 */ + "(ipc/mig) server raised exception", /* 6 */ + "(ipc/mig) user specified array not large enough for return info", /* 7 */ +}; + +/* err_ipc subsystems */ +static struct error_subsystem err_ipc_sub[] = { + /* ipc/0; */ + { + "(ipc/send)", + errlib_count(err_codes_send), + err_codes_send, + }, + /* ipc/1; */ + { + "(ipc/rcv)", + errlib_count(err_codes_rcv), + err_codes_rcv, + + }, + /* ipc/2 */ + { + "(ipc/mig)", + errlib_count(err_codes_mig), + err_codes_mig, + }, + +}; + diff -ruN glibc-1.06/mach/err_kern.sub glibc-1.07/mach/err_kern.sub --- glibc-1.06/mach/err_kern.sub +++ glibc-1.07/mach/err_kern.sub Fri Dec 17 01:14:52 1993 @@ -0,0 +1,185 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the + * rights to redistribute these changes. + */ +/* + * HISTORY + * $Log: err_kern.sub,v $ + * Revision 2.3 92/04/01 19:38:02 rpd + * Added err_codes_device. + * [92/03/09 rpd] + * + * Revision 2.2 92/01/16 00:08:50 rpd + * Moved from user collection to mk collection. + * + * Revision 2.3 91/08/29 15:51:22 rpd + * Updated err_codes_kern. + * [91/08/15 rpd] + * + * Revision 2.2 91/03/27 16:05:27 mrt + * First checkin + * + */ +/* + * File: err_kern.sub + * Author: Douglas Orr, Carnegie Mellon University + * Date: Mar, 1988 + * + * error codes for Mach and Unix kernels + */ + +static char * err_codes_kern[] = { + "(os/kern) successful", + "(os/kern) invalid address", + "(os/kern) protection failure", + "(os/kern) no space available", + "(os/kern) invalid argument", + "(os/kern) failure", + "(os/kern) resource shortage", + "(os/kern) not receiver", + "(os/kern) no access", + "(os/kern) memory failure", + "(os/kern) memory error", + "(os/kern) already in set", + "(os/kern) not in set", + "(os/kern) name exists", + "(os/kern) aborted", + "(os/kern) invalid name", + "(os/kern) invalid task", + "(os/kern) invalid right", + "(os/kern) invalid value", + "(os/kern) urefs overflow", + "(os/kern) invalid capability", + "(os/kern) right exists", + "(os/kern) invalid host", + "(os/kern) memory present", +}; + +static char * err_codes_device[] = { + "(os/device) hardware IO error", + "(os/device) operation would block", + "(os/device) no such device", + "(os/device) device already open", + "(os/device) device is shut down", + "(os/device) invalid operation", + "(os/device) invalid record number", + "(os/device) invalid IO size", + "(os/device) memory allocation failure", + "(os/device) read only", +}; + +static char * err_codes_unix[] = { + NO_SUCH_ERROR, + "(os/unix) no rights to object", + "(os/unix) file or directory does not exist", + "(os/unix) no such process", + "(os/unix) interrupted system call", + "(os/unix) i/o error", + "(os/unix) device does not exist", + "(os/unix) argument list is too long", + "(os/unix) invalid executable object format", + "(os/unix) bad file descriptor number", + "(os/unix) no child processes are present", + "(os/unix) no more processes are available", + "(os/unix) insufficient memory", + "(os/unix) access denied", + "(os/unix) memory access fault", + "(os/unix) block device required for operation", + "(os/unix) mount device busy", + "(os/unix) file already exists", + "(os/unix) cross device link", + "(os/unix) device does not exist", + "(os/unix) object is not a directory", + "(os/unix) object is a directory", + "(os/unix) invalid argument", + "(os/unix) internal file table overflow", + "(os/unix) maximum number of open files reached", + "(os/unix) object is not a tty-like device", + "(os/unix) executable object is in use", + "(os/unix) file is too large", + "(os/unix) no space is left on device", + "(os/unix) illegal seek attempt", + "(os/unix) read-only file system", + "(os/unix) too many links", + "(os/unix) broken pipe", + "(os/unix) argument is too large", + "(os/unix) result is out of range", + "(os/unix) operation on device would block", + "(os/unix) operation is now in progress", + "(os/unix) operation is already in progress", + "(os/unix) socket operation attempted on non-socket object", + "(os/unix) destination address is required", + "(os/unix) message is too long", + "(os/unix) protocol type is incorrect for socket", + "(os/unix) protocol type is not availaible", + "(os/unix) protocol type is not supported", + "(os/unix) socket type is not supported", + "(os/unix) operation is not supported on sockets", + "(os/unix) protocol family is not supported", + "(os/unix) address family is not supported by protocol family", + "(os/unix) address is already in use", + "(os/unix) can't assign requested address", + "(os/unix) network is down", + "(os/unix) network is unreachable", + "(os/unix) network dropped connection on reset", + "(os/unix) software aborted connection", + "(os/unix) connection reset by peer", + "(os/unix) no buffer space is available", + "(os/unix) socket is already connected", + "(os/unix) socket is not connected", + "(os/unix) can't send after socket shutdown", + "(os/unix) too many references; can't splice", + "(os/unix) connection timed out", + "(os/unix) connection was refused", + "(os/unix) too many levels of symbolic links", + "(os/unix) file name exceeds system maximum limit", + "(os/unix) host is down", + "(os/unix) there is no route to host", + "(os/unix) directory is not empty", + "(os/unix) quota on number of processes exceeded", + "(os/unix) quota on number of users exceeded", + "(os/unix) quota on available disk space exceeded", +}; + +static struct error_subsystem err_kern_sub[] = { + { + "(os/kern)", + errlib_count(err_codes_kern), + err_codes_kern, + }, + { + "(os/device)", + errlib_count(err_codes_device), + err_codes_device, + }, + { + "(os/?)", + 0, + }, + { + "(os/unix)", + errlib_count(err_codes_unix), + err_codes_unix, + }, +}; diff -ruN glibc-1.06/mach/err_mach_ipc.sub glibc-1.07/mach/err_mach_ipc.sub --- glibc-1.06/mach/err_mach_ipc.sub +++ glibc-1.07/mach/err_mach_ipc.sub Tue Oct 6 14:29:52 1992 @@ -0,0 +1,127 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the + * rights to redistribute these changes. + */ +/* + * HISTORY + * $Log: err_mach_ipc.sub,v $ + * Revision 2.3 92/04/01 19:38:05 rpd + * Added MIG_DESTROY_REQUEST. + * [92/03/09 rpd] + * + * Revision 2.2 92/01/16 00:09:05 rpd + * Moved from user collection to mk collection. + * + * Revision 2.3 91/08/29 15:51:30 rpd + * Added MIG_SERVER_DIED. + * [91/08/21 rpd] + * + * Revision 2.2 91/03/27 16:05:37 mrt + * First checkin + * + * Revision 2.2 91/03/18 17:39:03 rpd + * Created. + * [91/03/18 rpd] + * + */ +/* + * File: err_mach_ipc.sub + * Author: Richard Draves, Carnegie Mellon University + * Date: Jan, 1990 + * + * Error string definitions for the new Mach IPC + */ + +static char * err_codes_mach_send[] = { + /* 0 */ "(ipc/send) no error", + /* 1 */ "(ipc/send) send in progress", + /* 2 */ "(ipc/send) invalid data", + /* 3 */ "(ipc/send) invalid destination port", + /* 4 */ "(ipc/send) timed out", + /* 5 */ "(ipc/send) will notify", + /* 6 */ "(ipc/send) notify in progress", + /* 7 */ "(ipc/send) interrupted", + /* 8 */ "(ipc/send) msg too small", + /* 9 */ "(ipc/send) invalid reply port", + /* 10 */ "(ipc/send) invalid port right", + /* 11 */ "(ipc/send) invalid notify port", + /* 12 */ "(ipc/send) invalid memory", + /* 13 */ "(ipc/send) no msg buffer", + /* 14 */ "(ipc/send) no notify possible", + /* 15 */ "(ipc/send) invalid msg-type", + /* 16 */ "(ipc/send) invalid msg-header", +}; + +static char * err_codes_mach_rcv[] = { + /* 0 */ "(ipc/rcv) no error", + /* 1 */ "(ipc/rcv) receive in progress", + /* 2 */ "(ipc/rcv) invalid name", + /* 3 */ "(ipc/rcv) timed out", + /* 4 */ "(ipc/rcv) msg too large", + /* 5 */ "(ipc/rcv) interrupted", + /* 6 */ "(ipc/rcv) port changed", + /* 7 */ "(ipc/rcv) invalid notify port", + /* 8 */ "(ipc/rcv) invalid data", + /* 9 */ "(ipc/rcv) port died", + /* 10 */ "(ipc/rcv) port in set", + /* 11 */ "(ipc/rcv) header error", + /* 12 */ "(ipc/rcv) body error", +}; + +static char * err_codes_mach_mig[] = { + /* 0 */ "(ipc/mig) client type check failure", + /* 1 */ "(ipc/mig) wrong reply message ID", + /* 2 */ "(ipc/mig) server detected error", + /* 3 */ "(ipc/mig) bad request message ID", + /* 4 */ "(ipc/mig) server type check failure", + /* 5 */ "(ipc/mig) no reply should be sent", + /* 6 */ "(ipc/mig) server raised exception", + /* 7 */ "(ipc/mig) array not large enough", + /* 8 */ "(ipc/mig) server died", + /* 9 */ "(ipc/mig) destroy request with no reply", +}; + +/* err_mach_ipc subsystems */ +static struct error_subsystem err_mach_ipc_sub[] = { + /* ipc/0; */ + { + "(ipc/send)", + errlib_count(err_codes_mach_send), + err_codes_mach_send, + }, + /* ipc/1; */ + { + "(ipc/rcv)", + errlib_count(err_codes_mach_rcv), + err_codes_mach_rcv, + + }, + /* ipc/2 */ + { + "(ipc/mig)", + errlib_count(err_codes_mach_mig), + err_codes_mach_mig, + }, + +}; diff -ruN glibc-1.06/mach/err_server.sub glibc-1.07/mach/err_server.sub --- glibc-1.06/mach/err_server.sub +++ glibc-1.07/mach/err_server.sub Tue Oct 6 14:29:53 1992 @@ -0,0 +1,371 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the + * rights to redistribute these changes. + */ +/* + * HISTORY + * $Log: err_server.sub,v $ + * Revision 2.2 92/01/16 00:10:29 rpd + * Moved from user collection to mk collection. + * + * Revision 2.3 91/08/29 15:51:39 rpd + * Fixed err_codes_netname. + * [91/08/22 rpd] + * + * Revision 2.2 91/03/27 16:05:51 mrt + * First checkin + * + * Revision 2.3 90/10/29 17:27:20 dpj + * Merged-up to U25 + * [90/09/02 20:00:25 dpj] + * + */ +/* + * File: err_server.sub + * Author: Douglas Orr, Carnegie Mellon University + * Date: Mar, 1988 + * + * Definitions of Servers error strings + */ + +static char * err_codes_netname[] = { /* 0 */ + "(server/netname) name is not yours", + "(server/netname) name not checked in", + "(server/netname) no such host", + "(server/netname) host not found", +}; +static char * err_codes_env_mgr[] = { /* 1 */ + NO_SUCH_ERROR, + "(server/env_mgr) variable not found", + "(server/env_mgr) wrong type of variable", + "(server/env_mgr) unknown port", + "(server/env_mgr) read only environment", + "(server/env_mgr) no more connections available", + "(server/env_mgr) port table full", + "(server/env_mgr) attempting to enter a null port ", +}; +static char * err_codes_execd[] = { /* 2 */ + NO_SUCH_ERROR, + "(server/execd) could not find file to run", + "(server/execd) userid or password incorrect", + "(server/execd) fork failed", +}; +static char * err_codes_netmemory[] = { /* 3 */ + "(server/netmemory) successful", + "(server/netmemory) invalid argument", + "(server/netmemory) resource shortage", +}; +static char * err_codes_ufs[] = { /* 4 */ + NO_SUCH_ERROR, +/* XXX "(server/ufs) invalid port", */ +}; + +static char * err_codes_task_master[] = { /* 5 */ + "(server/task_master) GENERIC ERROR", + "(server/task_master) invalid tm_task port", + "(server/task_master) invalid task id", + "(server/task_master) invalid kernel port", + "(server/task_master) invalid job group", + "(server/task_master) invalid action", +}; + +static char * err_codes_ns[] = { /* 6 */ + "(server/ns) GENERIC ERROR", + "(server/ns) invalid handle", + "(server/ns) name not found", + "(server/ns) name already exists", + "(server/ns) name too long", + "(server/ns) path too long", + "(server/ns) invalid name", + "(server/ns) not a directory", + "(server/ns) is a directory", + "(server/ns) directory not empty", + "(server/ns) infinite retry loop in resolver", + "(server/ns) infinite forwarding loop in resolver", + "(server/ns) invalid prefix", + "(server/ns) prefix table overflow", + "(server/ns) bad format for directory", + "(server/ns) unknown entry type", + "(server/ns) invalid generation", + "(server/ns) entry not reserved", +}; + +static char * err_codes_io[] = { /* 7 */ + "(server/io) GENERIC ERROR", + "(server/io) invalid offset", + "(server/io) invalid size", + "(server/io) invalid mode", + "(server/io) invalid strategy", + "(server/io) operation rejected under current I/O strategy", +}; + +static char * err_codes_auth[] = { /* 8 */ + "(server/auth) GENERIC ERROR", + "(server/auth) bad private port", + "(server/auth) bad name", + "(server/auth) not primary", + "(server/auth) bad pauthsword", + "(server/auth) bad group", + "(server/auth) duplicate id", + "(server/auth) duplicate name", + "(server/auth) not secondary", +}; + +static char * err_codes_us[] = { /* 9 */ + "(server/us) GENERIC ERROR", + "(server/us) unknown error", + "(server/us) object not found", + "(server/us) object exists", + "(server/us) object busy", + "(server/us) object not started", + "(server/us) object dead", + "(server/us) invalid args", + "(server/us) invalid access", + "(server/us) invalid format", + "(server/us) invalid buffer size", + "(server/us) access denied", + "(server/us) resource exhausted", + "(server/us) quota exceeded", + "(server/us) limit exceeded", + "(server/us) not implemented", + "(server/us) not supported", + "(server/us) hardware error", + "(server/us) retry required", + "(server/us) not authenticated", + "(server/us) exclusive access", + "(server/us) timeout", + "(server/us) bad reference count", + "(server/us) internal error", +}; + +static char * err_codes_sunrpc[] = { /* 10 */ + "(server/sunrpc) GENERIC ERROR", + "(server/sunrpc) cannot encode arguments", + "(server/sunrpc) cannot decode results", + "(server/sunrpc) failure in sending call", + "(server/sunrpc) failure in receiving result", + "(server/sunrpc) call timed out", + "(server/sunrpc) rpc versions not compatible", + "(server/sunrpc) authentication error", + "(server/sunrpc) program not available", + "(server/sunrpc) program version mismatched", + "(server/sunrpc) procedure unavailable", + "(server/sunrpc) decode arguments error", + "(server/sunrpc) generic other problem", + "(server/sunrpc) unknown host name", + "(server/sunrpc) portmapper failed", + "(server/sunrpc) remote program not registered", + "(server/sunrpc) unspecified error", + "(server/sunrpc) unknown protocol", +}; + +static char * err_codes_machobj[] = { /* 11 */ + "(server/object system) GENERIC ERROR", + "(server/object system) object not found", + "(server/object system) no such operation", + "(server/object system) undefined ipc method arguments", + "(server/object system) too many arguments to method", + "(server/object system) bad ipc message format", +}; + +static char * err_codes_loader[] = { /* 12 */ + "(server/loader) GENERIC ERROR", + "(server/loader) object file not relocated", + "(server/loader) unknown file type", + "(server/loader) symbol not found", + "(server/loader) symbol multiply defined", + "(server/loader) memory region overlap", +}; + + +static char * err_codes_exception[] = { /* 13 */ + "(server/exception) GENERIC ERROR", + "(server/exception) invalid access", + "(server/exception) invalid instruction", + "(server/exception) arithmetic exception", + "(server/exception) emulation exception", + "(server/exception) software exception", + "(server/exception) breakpoint exception", +}; + +static char * err_codes_ux_signal[] = { /* 14 */ + "(server/unix-signal) GENERIC ERROR", + "(server/unix-signal) hangup", + "(server/unix-signal) interrupt", + "(server/unix-signal) quit", + "(server/unix-signal) undefined", + "(server/unix-signal) undefined", + "(server/unix-signal) undefined", + "(server/unix-signal) undefined", + "(server/unix-signal) kill", + "(server/unix-signal) undefined", + "(server/unix-signal) undefined", + "(server/unix-signal) system error", + "(server/unix-signal) pipe signal", + "(server/unix-signal) alarm", + "(server/unix-signal) terminate", + "(server/unix-signal) urgent i/o", + "(server/unix-signal) stop", + "(server/unix-signal) terminal stop", + "(server/unix-signal) continue", + "(server/unix-signal) child death", + "(server/unix-signal) tty input", + "(server/unix-signal) tty output", + "(server/unix-signal) i/o signal", + "(server/unix-signal) cpu time limit exceeded", + "(server/unix-signal) file size exceeded", + "(server/unix-signal) virtual alarm", + "(server/unix-signal) profile signal", + "(server/unix-signal) window size change", + "(server/unix-signal) user-defined signal 1", + "(server/unix-signal) user-defined signal 2", +}; + +static char * err_codes_xkernel[] = { /* 15 */ + "(server/xkernel) GENERIC ERROR", + "(server/xkernel) map full", + "(server/xkernel) inconsistent bind", + "(server/xkernel) cannot resolve", + "(server/xkernel) cannot unbind", + "(server/xkernel) invalid type", + "(server/xkernel) invalid opcode", + "(server/xkernel) buffer too small", + "(server/xkernel) invalid ev code", + "(server/xkernel) event not registered", + "(server/xkernel) invalid open", + "(server/xkernel) already open", + "(server/xkernel) bad addr", +}; + + +/* err_server subsystems */ +static struct error_subsystem err_server_sub[] = { + /* server/0; */ + { + "(server/netname)", + errlib_count(err_codes_netname), + err_codes_netname, + }, + /* server/1; */ + { + "(server/env_mgr)", + errlib_count(err_codes_env_mgr), + err_codes_env_mgr, + }, + /* server/2; */ + { + "(server/execd)", + errlib_count(err_codes_execd), + err_codes_execd, + }, + /* server/3; */ + { + "(server/netmemory)", + errlib_count(err_codes_netmemory), + err_codes_netmemory, + }, + /* server/4; */ + { + "(server/ufs)", + errlib_count(err_codes_ufs), + err_codes_ufs, + }, + /* server/5; */ + { + "(server/task_master)", + errlib_count(err_codes_task_master), + err_codes_task_master, + }, + /* server/6; */ + { + "(server/ns)", + errlib_count(err_codes_ns), + err_codes_ns, + }, + + /* server/7; i/o subsystem */ + { + "(server/io)", + errlib_count(err_codes_io), + err_codes_io, + }, + + /* server/8; authentication server */ + { + "(server/auth)", + errlib_count(err_codes_auth), + err_codes_auth, + }, + + /* server/9; generic US system */ + { + "(server/us)", + errlib_count(err_codes_us), + err_codes_us, + }, + + /* server/10; SUN RPC package */ + { + "(server/sunrpc)", + errlib_count(err_codes_sunrpc), + err_codes_sunrpc, + }, + + /* server/11; MachObject system */ + { + "(server/object system)", + errlib_count(err_codes_machobj), + err_codes_machobj, + }, + + /* server/12; loader */ + { + "(server/loader)", + errlib_count(err_codes_loader), + err_codes_loader, + }, + + /* server/13; mach exception */ + { + "(server/exception)", + errlib_count(err_codes_exception), + err_codes_exception, + }, + + /* server/14; unix signal */ + { + "(server/unix-signal)", + errlib_count(err_codes_ux_signal), + err_codes_ux_signal, + }, + + /* server/15; xkernel */ + { + "(server/xkernel)", + errlib_count(err_codes_xkernel), + err_codes_xkernel, + }, + +}; + diff -ruN glibc-1.06/mach/err_us.sub glibc-1.07/mach/err_us.sub --- glibc-1.06/mach/err_us.sub +++ glibc-1.07/mach/err_us.sub Tue Nov 23 16:14:05 1993 @@ -0,0 +1,53 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the + * rights to redistribute these changes. + */ +/* + * HISTORY + * $Log: err_us.sub,v $ + * Revision 2.2 92/01/16 00:10:45 rpd + * Moved from user collection to mk collection. + * + * Revision 2.2 91/03/27 16:06:06 mrt + * First checkin + * + */ +/* + * File: err_us.sub + * Author: Douglas Orr, Carnegie Mellon University + * Date: Mar, 1988 + * + * A place to define User errors + */ + + +/* err_us subsystems */ +static struct error_subsystem err_us_sub[] = { + {0,0,0} +}; + + + + + diff -ruN glibc-1.06/mach/error_compat.c glibc-1.07/mach/error_compat.c --- glibc-1.06/mach/error_compat.c +++ glibc-1.07/mach/error_compat.c Tue Nov 30 12:35:24 1993 @@ -0,0 +1,67 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ + +/* This file was broken out from: + $Log: mach_error_string.c,v $ + Revision 2.3 92/04/01 19:38:18 rpd + The static do_compat function is renamed to be globally accessible. + */ + +#include +#include +#include + + +void +__mach_error_map_compat( org_err ) + mach_error_t * org_err; +{ + mach_error_t err = *org_err; + + /* + * map old error numbers to + * to new error sys & subsystem + */ + + if ((-200 < err) && (err <= -100)) + err = -(err + 100) | IPC_SEND_MOD; + else if ((-300 < err) && (err <= -200)) + err = -(err + 200) | IPC_RCV_MOD; + else if ((-400 < err) && (err <= -300)) + err = -(err + 300) | MACH_IPC_MIG_MOD; + else if ((1000 <= err) && (err < 1100)) + err = (err - 1000) | SERV_NETNAME_MOD; + else if ((1600 <= err) && (err < 1700)) + err = (err - 1600) | SERV_ENV_MOD; + else if ((27600 <= err) && (err < 27700)) + err = (err - 27600) | SERV_EXECD_MOD; + else if ((2500 <= err) && (err < 2600)) + err = (err - 2500) | KERN_DEVICE_MOD; + else if ((5000 <= err) && (err < 5100)) + err = (err - 5000) | BOOTSTRAP_FS_MOD; + + *org_err = err; +} diff -ruN glibc-1.06/mach/errorlib.h glibc-1.07/mach/errorlib.h --- glibc-1.06/mach/errorlib.h +++ glibc-1.07/mach/errorlib.h Fri Dec 17 16:56:16 1993 @@ -0,0 +1,84 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the + * rights to redistribute these changes. + */ +/* + * HISTORY + * $Log: errorlib.h,v $ + * Revision 2.3 92/03/31 15:18:52 rpd + * Added KERN_DEVICE_MOD for device errors. + * [92/03/09 rpd] + * + * Revision 2.2 92/01/16 00:21:17 rpd + * Moved from user collection to mk collection. + * + * Revision 2.2 91/03/27 15:37:37 mrt + * First checkin + * + */ +/* + * File: errorlib.h + * Author: Douglas Orr, Carnegie Mellon University + * Date: Mar. 1988 + * + * Error bases for subsytems errors. + */ + +#include + +#define KERN_DEVICE_MOD (err_kern|err_sub(1)) + +#define BOOTSTRAP_FS_MOD (err_bootstrap|err_sub(0)) + +#define MACH_IPC_SEND_MOD (err_mach_ipc|err_sub(0)) +#define MACH_IPC_RCV_MOD (err_mach_ipc|err_sub(1)) +#define MACH_IPC_MIG_MOD (err_mach_ipc|err_sub(2)) + +#define IPC_SEND_MOD (err_ipc|err_sub(0)) +#define IPC_RCV_MOD (err_ipc|err_sub(1)) +#define IPC_MIG_MOD (err_ipc|err_sub(2)) + +#define SERV_NETNAME_MOD (err_server|err_sub(0)) +#define SERV_ENV_MOD (err_server|err_sub(1)) +#define SERV_EXECD_MOD (err_server|err_sub(2)) + + +#define NO_SUCH_ERROR "unknown error code" + +struct error_subsystem { + const char * subsys_name; + int max_code; + const char * const * codes; +}; + +struct error_system { + int max_sub; + const char * bad_sub; + const struct error_subsystem * subsystem; +}; + +#define errors __mach_error_systems +extern struct error_system errors[err_max_system+1]; + +#define errlib_count(s) (sizeof(s)/sizeof(s[0])) diff -ruN glibc-1.06/mach/errsystems.c glibc-1.07/mach/errsystems.c --- glibc-1.06/mach/errsystems.c +++ glibc-1.07/mach/errsystems.c Fri Dec 17 17:37:08 1993 @@ -0,0 +1,27 @@ +/* XXX temp kludge: this file should be generated, but a gcc bug screws it. */ + +#include +#include +#define static static const +#include "../sysdeps/mach/hurd/err_hurd.sub" +#include "err_us.sub" +#include "err_server.sub" +#include "err_mach_ipc.sub" +#include "err_kern.sub" +#include "err_ipc.sub" +#include "err_bootstrap.sub" + + +const struct error_system __mach_error_systems[err_max_system + 1] = + { + /* 0 [err_get_system (err_kern)] = */ { errlib_count (err_kern_sub),"(system kern) error with unknown subsystem", err_kern_sub }, + /* 1 [err_get_system (err_us)] = */ { errlib_count (err_us_sub),"(system us) error with unknown subsystem", err_us_sub }, + /* 2 [err_get_system (err_server)] = */ { errlib_count (err_server_sub),"(system server) error with unknown subsystem", err_server_sub }, + /* 3 [err_get_system (err_ipc)] = */ { errlib_count (err_ipc_sub),"(system ipc) error with unknown subsystem", err_ipc_sub }, + /* 4 [err_get_system (err_mach_ipc)] = */ { errlib_count (err_mach_ipc_sub),"(system mach_ipc) error with unknown subsystem", err_mach_ipc_sub }, + /* 5 [err_get_system (err_bootstrap)] = */ { errlib_count (err_bootstrap_sub),"(system bootstrap) error with unknown subsystem", err_bootstrap_sub }, + /* [6..15] */ {},{},{},{},{},{},{},{},{},{}, + /* 16==0x10 [err_get_system (err_hurd)] = */ { errlib_count (err_hurd_sub),"(system hurd) error with unknown subsystem", err_hurd_sub }, + }; + +const int __mach_error_system_count = errlib_count (__mach_error_systems); diff -ruN glibc-1.06/mach/hello.c glibc-1.07/mach/hello.c --- glibc-1.06/mach/hello.c Sun Oct 25 03:17:04 1992 +++ glibc-1.07/mach/hello.c Mon Sep 6 23:37:42 1993 @@ -1,6 +1,6 @@ /* "Hello world" program for GNU C Library on bare Mach 3.0. -Copyright (C) 1991, 1992 Free Software Foundation, Inc. +Copyright (C) 1991, 1992, 1993 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 @@ -23,8 +23,6 @@ #include #include -extern FILE *mach_open_devstream (device_t dev); - int main (void) { @@ -40,7 +38,7 @@ if (err) _exit (err); - consf = mach_open_devstream (consdev); + consf = mach_open_devstream (consdev, "w"); if (consf == NULL) exit (errno); diff -ruN glibc-1.06/mach/mach/default_pager_types.defs glibc-1.07/mach/mach/default_pager_types.defs --- glibc-1.06/mach/mach/default_pager_types.defs +++ glibc-1.07/mach/mach/default_pager_types.defs Mon Oct 18 08:02:01 1993 @@ -0,0 +1,60 @@ +/* + * Mach Operating System + * Copyright (c) 1992 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +/* + * HISTORY + * $Log: default_pager_types.defs,v $ + * Revision 2.4 93/01/14 17:09:40 danner + * 64bit cleanup. + * [92/12/10 14:39:41 af] + * + * Revision 2.3 92/02/20 13:42:45 elf + * Added filename types. + * [92/02/19 17:34:54 af] + * + * Revision 2.2 92/01/14 16:59:18 rpd + * Created. + * [92/01/13 rpd] + * + */ + +#ifndef _MACH_DEFAULT_PAGER_TYPES_DEFS_ +#define _MACH_DEFAULT_PAGER_TYPES_DEFS_ + +#include + +type default_pager_info_t = struct[3] of natural_t; + +type default_pager_object_t = struct[2] of natural_t; +type default_pager_object_array_t = array[] of default_pager_object_t; + +type default_pager_page_t = struct[1] of natural_t; +type default_pager_page_array_t = array[] of default_pager_page_t; + +type default_pager_filename_t = (MACH_MSG_TYPE_STRING_C, 8*256); + +import ; + +#endif _MACH_DEFAULT_PAGER_TYPES_DEFS_ diff -ruN glibc-1.06/mach/mach/default_pager_types.h glibc-1.07/mach/mach/default_pager_types.h --- glibc-1.06/mach/mach/default_pager_types.h +++ glibc-1.07/mach/mach/default_pager_types.h Mon Oct 18 08:02:01 1993 @@ -0,0 +1,70 @@ +/* + * Mach Operating System + * Copyright (c) 1992 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +/* + * HISTORY + * $Log: default_pager_types.h,v $ + * Revision 2.3 92/02/20 13:42:48 elf + * Added filename types. + * [92/02/19 17:34:33 af] + * + * Revision 2.2 92/01/14 16:59:20 rpd + * Created. + * [92/01/13 rpd] + * + */ + +#ifndef _MACH_DEFAULT_PAGER_TYPES_H_ +#define _MACH_DEFAULT_PAGER_TYPES_H_ + +/* + * Remember to update the mig type definitions + * in default_pager_types.defs when adding/removing fields. + */ + +typedef struct default_pager_info { + vm_size_t dpi_total_space; /* size of backing store */ + vm_size_t dpi_free_space; /* how much of it is unused */ + vm_size_t dpi_page_size; /* the pager's vm page size */ +} default_pager_info_t; + + +typedef struct default_pager_object { + vm_offset_t dpo_object; /* object managed by the pager */ + vm_size_t dpo_size; /* backing store used for the object */ +} default_pager_object_t; + +typedef default_pager_object_t *default_pager_object_array_t; + + +typedef struct default_pager_page { + vm_offset_t dpp_offset; /* offset of the page in its object */ +} default_pager_page_t; + +typedef default_pager_page_t *default_pager_page_array_t; + +typedef char default_pager_filename_t[256]; + +#endif _MACH_DEFAULT_PAGER_TYPES_H_ diff -ruN glibc-1.06/mach/mach/error.h glibc-1.07/mach/mach/error.h --- glibc-1.06/mach/mach/error.h +++ glibc-1.07/mach/mach/error.h Fri Dec 17 16:40:28 1993 @@ -0,0 +1,137 @@ +/* err_hurd added by roland@gnu.ai.mit.edu for GNU Hurd. + * + * Mach Operating System + * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +/* + * HISTORY + * $Log: error.h,v $ + * Revision 2.6 93/01/14 17:41:31 danner + * Standardized include symbol name. + * [92/06/10 pds] + * + * Revision 2.5 92/03/31 15:18:11 rpd + * Added err_bootstrap for bootstrap errors. + * [92/03/09 rpd] + * + * Revision 2.4 91/05/14 16:51:24 mrt + * Correcting copyright + * + * Revision 2.3 91/02/05 17:31:48 mrt + * Changed to new Mach copyright + * [91/02/01 17:16:50 mrt] + * + * Revision 2.2 90/06/02 14:57:47 rpd + * Added err_mach_ipc for new IPC. + * [90/03/26 22:28:42 rpd] + * + * Revision 2.1 89/08/03 16:02:07 rwd + * Created. + * + * Revision 2.4 89/02/25 18:13:18 gm0w + * Changes for cleanup. + * + * Revision 2.3 89/02/07 00:51:57 mwyoung + * Relocated from sys/error.h + * + * Revision 2.2 88/10/18 00:37:31 mwyoung + * Added {system,sub and code}_emask + * [88/10/17 17:06:58 mrt] + * + * Added {system,sub and code}_emask + * + * 12-May-88 Mary Thompson (mrt) at Carnegie Mellon + * Changed mach_error_t from unsigned int to kern_return_t + * which is a 32 bit integer regardless of machine type. + * insigned int was incompatible with old usages of mach_error. + * + * 10-May-88 Douglas Orr (dorr) at Carnegie-Mellon University + * Missing endif replaced + * + * 5-May-88 Mary Thompson (mrt) at Carnegie Mellon + * Changed typedef of mach_error_t from long to unsigned int + * to keep our Camelot users happy. Also moved the nonkernel + * function declarations from here to mach_error.h. + * + * 10-Feb-88 Douglas Orr (dorr) at Carnegie-Mellon University + * Created. + * + */ +/* + * File: mach/error.h + * Purpose: + * error module definitions + * + */ + +#ifndef _MACH_ERROR_H_ +#define _MACH_ERROR_H_ +#include + +/* + * error number layout as follows: + * + * hi lo + * | system(6) | subsystem(12) | code(14) | + */ + + +#define err_none (mach_error_t)0 +#define ERR_SUCCESS (mach_error_t)0 +#define ERR_ROUTINE_NIL (mach_error_fn_t)0 + + +#define err_system(x) (((x)&0x3f)<<26) +#define err_sub(x) (((x)&0xfff)<<14) + +#define err_get_system(err) (((err)>>26)&0x3f) +#define err_get_sub(err) (((err)>>14)&0xfff) +#define err_get_code(err) ((err)&0x3fff) + +#define system_emask (err_system(0x3f)) +#define sub_emask (err_sub(0xfff)) +#define code_emask (0x3fff) + + +/* major error systems */ +#define err_kern err_system(0x0) /* kernel */ +#define err_us err_system(0x1) /* user space library */ +#define err_server err_system(0x2) /* user space servers */ +#define err_ipc err_system(0x3) /* old ipc errors */ +#define err_mach_ipc err_system(0x4) /* mach-ipc errors */ +#define err_bootstrap err_system(0x5) /* bootstrap errors */ +#define err_hurd err_system(0x10) /* GNU Hurd server errors */ +#define err_local err_system(0x3e) /* user defined errors */ +#define err_ipc_compat err_system(0x3f) /* (compatibility) mach-ipc errors */ + +#define err_max_system 0x3f + + +/* unix errors get lumped into one subsystem */ +#define unix_err(errno) (err_kern|err_sub(3)|errno) + +typedef kern_return_t mach_error_t; +typedef mach_error_t (* mach_error_fn_t)(); + +#endif /* _MACH_ERROR_H_ */ diff -ruN glibc-1.06/mach/mach/mach.h glibc-1.07/mach/mach/mach.h --- glibc-1.06/mach/mach/mach.h +++ glibc-1.07/mach/mach/mach.h Mon Aug 16 17:08:50 1993 @@ -0,0 +1,3 @@ +/* Some old programs may expect to find in . */ + +#include diff -ruN glibc-1.06/mach/mach/mig_support.h glibc-1.07/mach/mach/mig_support.h --- glibc-1.06/mach/mach/mig_support.h +++ glibc-1.07/mach/mach/mig_support.h Sat Oct 30 15:12:11 1993 @@ -0,0 +1,65 @@ +/* Copyright (C) 1993 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +/* Useful declarations and support functions for MiG-generated stubs. */ + +#ifndef _MACH_MIG_SUPPORT_H + +#define _MACH_MIG_SUPPORT_H 1 + +#include +#include +#include +#include + +/* MiG initialization. */ +extern void __mig_init (void *__first); +extern void mig_init (void *__first); + +/* Shorthand functions for vm_allocate and vm_deallocate on + mach_task_self () (and with ANYWHERE=1). */ +extern void __mig_allocate (vm_address_t *__addr_p, vm_size_t __size); +extern void mig_allocate (vm_address_t *__addr_p, vm_size_t __size); +extern void __mig_deallocate (vm_address_t __addr, vm_size_t __size); +extern void mig_deallocate (vm_address_t __addr, vm_size_t __size); + +/* Reply-port management support functions. */ +extern void __mig_dealloc_reply_port (void); +extern void mig_dealloc_reply_port (void); +extern mach_port_t __mig_get_reply_port (void); +extern mach_port_t mig_get_reply_port (void); +extern void __mig_reply_setup (const mach_msg_header_t *__request, + mach_msg_header_t *__reply); +extern void mig_reply_setup (const mach_msg_header_t *__request, + mach_msg_header_t *__reply); + +/* Idiocy support function. */ +extern __inline vm_size_t +__mig_strncpy (char *__dst, const char *__src, vm_size_t __len) +{ + return __stpncpy (__dst, __src, __len) - __dst; +} +extern __inline vm_size_t +mig_strncpy (char *__dst, const char *__src, vm_size_t __len) +{ + return __mig_strncpy (__dst, __src, __len); +} + + + +#endif /* mach/mig_support.h */ diff -ruN glibc-1.06/mach/mach.h glibc-1.07/mach/mach.h --- glibc-1.06/mach/mach.h Wed Mar 17 19:19:35 1993 +++ glibc-1.07/mach/mach.h Fri Dec 3 17:32:26 1993 @@ -27,8 +27,11 @@ /* This declares the basic variables and macros everything needs. */ #include +/* This declares all the real system call functions. */ +#include + /* These are MiG-generated headers for the kernel interfaces commonly used. */ -#include +#include /* From . */ #include #include @@ -36,5 +39,43 @@ the MiG-generated header in fact declares `CALL_rpc' rather than `CALL'. This file declares the simple `CALL' functions. */ #include + + +/* Receive RPC request messages on RCV_NAME and pass them to DEMUX, which + decodes them and produces reply messages. MAX_SIZE is the maximum size + (in bytes) of the request and reply buffers. */ +extern mach_msg_return_t +__mach_msg_server (boolean_t (*__demux) (mach_msg_header_t *__request, + mach_msg_header_t *__reply), + mach_msg_size_t __max_size, + mach_port_t __rcv_name), +mach_msg_server (boolean_t (*__demux) (mach_msg_header_t *__request, + mach_msg_header_t *__reply), + mach_msg_size_t __max_size, + mach_port_t __rcv_name); + +/* Just like `mach_msg_server', but the OPTION and TIMEOUT parameters are + passed on to `mach_msg'. */ +extern mach_msg_return_t +__mach_msg_server_timeout (boolean_t (*__demux) (mach_msg_header_t *__request, + mach_msg_header_t *__reply), + mach_msg_size_t __max_size, + mach_port_t __rcv_name, + mach_msg_option_t __option, + mach_msg_timeout_t __timeout), +mach_msg_server_timeout (boolean_t (*__demux) (mach_msg_header_t *__request, + mach_msg_header_t *__reply), + mach_msg_size_t __max_size, + mach_port_t __rcv_name, + mach_msg_option_t __option, + mach_msg_timeout_t __timeout); + + +#define __need_FILE +#include + +/* Open a stream on a Mach device. */ +extern FILE *mach_open_devstream (mach_port_t device_port, const char *mode); + #endif /* mach.h */ diff -ruN glibc-1.06/mach/mach_error.c glibc-1.07/mach/mach_error.c --- glibc-1.06/mach/mach_error.c +++ glibc-1.07/mach/mach_error.c Tue Oct 6 14:29:54 1992 @@ -0,0 +1,82 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +/* + * HISTORY + * $Log: mach_error.c,v $ + * Revision 2.4 92/02/19 15:10:52 elf + * Moved mach_error_string and mach_error_type to mach_error_string.c. + * [92/02/11 rpd] + * + * Revision 2.3 92/01/23 15:22:06 rpd + * Changed to . + * [92/01/16 rpd] + * + * Revision 2.2 92/01/16 00:08:03 rpd + * Moved from user collection to mk collection. + * + * Revision 2.3 91/08/29 15:51:50 rpd + * Changed IPC_MIG_MOD to MACH_IPC_MIG_MOD, to get the new error strings. + * [91/08/22 rpd] + * + * Revision 2.2 91/03/27 16:06:29 mrt + * Changed include of "errorlib.h" to + * Added new copyright + * [91/03/20 mrt] + * + */ +/* + * File: mach_error.c + * Author: Douglas Orr, Carnegie Mellon University + * Date: Mar 1988 + * + * interprets structured mach error codes and prints + * or returns a descriptive string. + */ + +#include +#include +#include + +extern char * mach_error_string_int(); + +void +mach_error( str, err ) + char *str; + mach_error_t err; +{ + char * err_str; + char buf[1024]; + boolean_t diag; + + err_str=mach_error_string_int(err, &diag); + + if ( diag ) { + sprintf( buf, "%s %s (%x)", mach_error_type(err), err_str, err ); + err_str = buf; + } + + fprintf(stderr, "%s %s\n", str, err_str); +} diff -ruN glibc-1.06/mach/mach_error.h glibc-1.07/mach/mach_error.h --- glibc-1.06/mach/mach_error.h +++ glibc-1.07/mach/mach_error.h Tue Nov 23 15:39:08 1993 @@ -0,0 +1,77 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the + * rights to redistribute these changes. + */ +/* + * HISTORY + * $Log: mach_error.h,v $ + * Revision 2.2 92/01/16 00:08:10 rpd + * Moved from user collection to mk collection. + * + * Revision 2.2 91/03/27 15:39:13 mrt + * First checkin + * + */ +/* + * File: mach_error.h + * Author: Douglas Orr, Carnegie Mellon University + * Date: Mar. 1988 + * + * Definitions of routines in mach_error.c + */ + +#ifndef _MACH_ERROR_ +#define _MACH_ERROR_ 1 + +#include + +const char *mach_error_string( +/* + * Returns a string appropriate to the error argument given + */ +#if c_plusplus + mach_error_t error_value +#endif c_plusplus + ); + +void mach_error( +/* + * Prints an appropriate message on the standard error stream + */ +#if c_plusplus + char *str, + mach_error_t error_value +#endif c_plusplus + ); + +const char *mach_error_type( +/* + * Returns a string with the error system, subsystem and code +*/ +#if c_plusplus + mach_error_t error_value +#endif c_plusplus + ); + +#endif _MACH_ERROR_ diff -ruN glibc-1.06/mach/mach_error_string.c glibc-1.07/mach/mach_error_string.c --- glibc-1.06/mach/mach_error_string.c +++ glibc-1.07/mach/mach_error_string.c Tue Nov 30 12:35:58 1993 @@ -0,0 +1,97 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +/* + * HISTORY + * $Log: mach_error_string.c,v $ + * Revision 2.3 92/04/01 19:38:18 rpd + * Updated do_compat for kernel device errors, + * bootstrap file-system errors. + * [92/03/09 rpd] + * + * Revision 2.2 92/02/20 15:58:08 elf + * Created from mach_error.c. + * [92/02/11 rpd] + * + */ + +#define EXPORT_BOOLEAN +#include +#include +#include +#include + +extern void __mach_error_map_compat (mach_error_t *); + +const char * +mach_error_type( err ) + mach_error_t err; +{ + int sub, system; + + __mach_error_map_compat( &err ); + + sub = err_get_sub(err); + system = err_get_system(err); + + if (system > err_max_system + || sub >= errors[system].max_sub ) return( "(?/?)" ); + return( errors[system].subsystem[sub].subsys_name ); +} + +boolean_t mach_error_full_diag = FALSE; + +const char * +mach_error_string_int( err, diag ) + mach_error_t err; + boolean_t * diag; +{ + int sub, system, code; + + __mach_error_map_compat( &err ); + + sub = err_get_sub(err); + system = err_get_system(err); + code = err_get_code(err); + + *diag = TRUE; + + if (system > err_max_system) return( "(?/?) unknown error system" ); + if (sub >= errors[system].max_sub) return( errors[system].bad_sub ); + if (code >= errors[system].subsystem[sub].max_code) return ( NO_SUCH_ERROR ); + + *diag = mach_error_full_diag; + return( errors[system].subsystem[sub].codes[code] ); +} + +const char * +mach_error_string( err ) + mach_error_t err; +{ + boolean_t diag; + + return mach_error_string_int( err, &diag ); + +} diff -ruN glibc-1.06/mach/mach_init.c glibc-1.07/mach/mach_init.c --- glibc-1.06/mach/mach_init.c Thu Sep 10 19:55:32 1992 +++ glibc-1.07/mach/mach_init.c Tue Aug 3 02:08:17 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1993 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 @@ -17,6 +17,7 @@ Cambridge, MA 02139, USA. */ #include +#include extern void __mig_init (int); diff -ruN glibc-1.06/mach/shortcut.awk glibc-1.07/mach/shortcut.awk --- glibc-1.06/mach/shortcut.awk Fri Apr 3 01:39:38 1992 +++ glibc-1.07/mach/shortcut.awk Wed Jun 30 21:56:19 1993 @@ -1,9 +1,14 @@ # Icky intimate knowledge of MiG output. -BEGIN { args=""; argsnext=0; echo=1; - print "/* This file is generated by shortcut.awk. */"; +BEGIN { print "/* This file is generated by shortcut.awk. */"; + echo=1; + inproto=0; proto=""; arglist=""; } +# $1 == "LINTLIBRARY" { print "#include "; next } + +# Copy the first line of the definition, but +# replace the function name (RPC) with CALL. $NF == rpc \ { for (i = 1; i < NF; ++i) printf "%s ", $i; @@ -11,24 +16,28 @@ next; } -args == "" && $1 == "#else" { argsnext=1; print $0; next; } - -argsnext == 1 { args=$0; } - -{ argsnext=0; } +# Collect the lines of the prototype in PROTO, and extract the parameter +# names into ARGLIST. +NF == 1 && $1 == ")" { inproto=0 } +inproto { proto = proto $0; + arg = $NF; + gsub(/[^a-zA-Z0-9_,]/, "", arg); + arglist = arglist arg; + } +NF == 1 && $1 == "(" { inproto=1 } -/^{/ { echo=0; } +/^{$/ { echo=0; } echo == 1 { print $0; } -/^}/ \ +/^}$/ \ { print "{"; print " kern_return_t err;"; - print " extern kern_return_t " syscall " ();"; - print " err = " syscall args ";"; + print " extern kern_return_t " syscall " (" proto ");"; + print " err = " syscall " (" arglist ");"; print " if (err == MACH_SEND_INTERRUPTED)"; - print " err = " rpc args ";"; + print " err = " rpc " (" arglist ");"; print " return err;" print "}"; echo = 1; diff -ruN glibc-1.06/malloc/Makefile glibc-1.07/malloc/Makefile --- glibc-1.06/malloc/Makefile Fri May 14 20:30:33 1993 +++ glibc-1.07/malloc/Makefile Mon Jan 17 23:08:56 1994 @@ -1,4 +1,4 @@ -# Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. +# Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -25,6 +25,7 @@ dist-headers := malloc.h headers := $(dist-headers) obstack.h +tests := mallocbug # Things which get pasted together into gmalloc.c. gmalloc-routines := malloc free cfree realloc calloc morecore memalign valloc @@ -53,13 +54,13 @@ gmalloc-head.c mtrace.awk %.uu: % uuencode $< < $< > $@-tmp - mv $@-tmp $@ + mv -f $@-tmp $@ %.Z: % compress -c $< > $@-tmp - mv $@-tmp $@ -%.z: % - gzip -9 -c $< > $@-tmp - mv $@-tmp $@ + mv -f $@-tmp $@ +%.gz: % + gzip -9 -v -c $< > $@-tmp + mv -f $@-tmp $@ malloc.tar: $(addprefix malloc/,$(malloc-dist)) tar cho$(verbose)f $@ $^ @@ -68,7 +69,7 @@ changelog-extract --regexp 'malloc/.*' < $< > $@.new (echo ''; echo 'Find older changes in OChangeLog.') >> $@.new chmod a-w $@.new - mv $@.new $@ + mv -f $@.new $@ malloc/Makefile: dist-Makefile Makefile sed -e 's,,$(addsuffix .c,$(gmalloc-routines)),' \ @@ -95,3 +96,5 @@ $(objpfx)libmcheck.a: $(objpfx)mcheck-init.o -rm -f $@ ln $< $@ + +lib: $(objpfx)libmcheck.a diff -ruN glibc-1.06/malloc/TAGS glibc-1.07/malloc/TAGS --- glibc-1.06/malloc/TAGS Sun May 23 00:31:26 1993 +++ glibc-1.07/malloc/TAGS Tue Dec 21 04:15:13 1993 @@ -1,12 +1,14 @@ -malloc.c,138 +malloc.c,174 #define _MALLOC_INTERNAL24,1003 __ptr_t 29,1094 -__ptr_t 32,1200 align 66,1958 initialize 91,2483 morecore 110,3027 malloc 150,4063 +_malloc 335,9777 +_free 342,9844 +_realloc 349,9901 free.c,72 #define _MALLOC_INTERNAL24,1016 @@ -18,21 +20,22 @@ DEFUN(cfree,32,1024 cfree 37,1075 -realloc.c,88 +realloc.c,116 #define _MALLOC_INTERNAL24,1035 -#define min(28,1088 -__ptr_t 31,1166 -realloc 40,1592 +safe_bcopy 38,1381 +#define memmove(91,2759 +#define min(96,2835 +__ptr_t 99,2913 calloc.c,48 #define _MALLOC_INTERNAL22,933 calloc 29,1104 -../sysdeps/unix/morecore.c,104 -#define _MALLOC_INTERNAL19,807 -#define __sbrk 24,884 -#define NULL 30,971 -__default_morecore 37,1160 +../sysdeps/unix/morecore.c,105 +#define _MALLOC_INTERNAL19,813 +#define __sbrk 24,890 +#define NULL 34,1137 +__default_morecore 41,1326 ../sysdeps/stub/morecore.c,66 #define _MALLOC_INTERNAL23,893 @@ -43,13 +46,13 @@ DEFUN(__default_morecore,32,1139 memalign.c,49 -#define _MALLOC_INTERNAL19,801 -memalign 24,862 +#define _MALLOC_INTERNAL19,807 +memalign 24,868 -valloc.c,80 -#define _MALLOC_INTERNAL23,978 -#define __getpagesize(35,1202 -valloc 41,1282 +valloc.c,81 +#define __getpagesize(28,1118 +#define _MALLOC_INTERNAL32,1190 +valloc 39,1276 mcheck.c,248 #define _MALLOC_INTERNAL24,1014 @@ -62,134 +65,138 @@ freehook 57,1865 mallochook 70,2113 reallochook 89,2523 -mcheck 112,3055 +mcheck 113,3081 mtrace.c,184 #define _MALLOC_INTERNAL25,1075 -static __ptr_t 46,1544 -static __ptr_t 47,1602 -tr_break 56,1944 -tr_freehook 62,2014 -tr_mallochook 75,2306 -tr_reallochook 95,2700 -mtrace 129,3568 +static __ptr_t 46,1497 +static __ptr_t 47,1555 +tr_break 56,1897 +tr_freehook 62,1967 +tr_mallochook 75,2259 +tr_reallochook 95,2654 +mtrace 129,3524 mstats.c,49 #define _MALLOC_INTERNAL24,1016 mstats 29,1083 -vm-limit.c,147 -typedef size_t SIZE;29,966 -typedef void *POINTER;30,987 -#define EXCEEDS_LISP_PTR(31,1010 -check_memory_limits 52,1478 -memory_warnings 121,3135 - -ralloc.c,686 -typedef void *POINTER;39,1353 -typedef char *POINTER;46,1432 -typedef unsigned long SIZE;50,1464 -typedef size_t SIZE;62,1676 -typedef void *POINTER;63,1697 -#define safe_bcopy(69,1782 -#define NIL 73,1851 -#define PAGE 108,3135 -#define ALIGNED(109,3165 -#define ROUNDUP(110,3236 -#define ROUND_TO_PAGE(111,3319 -obtain 122,3744 -get_more_space 148,4283 -relinquish 162,4565 -typedef struct bp193,5550 -} *bloc_ptr;200,5658 -#define NIL_BLOC 202,5672 -#define BLOC_PTR_SIZE 203,5704 -find_bloc 212,5950 -get_bloc 233,6346 -relocate_some_blocs 275,7232 -free_bloc 301,7795 -r_alloc_sbrk 345,8869 -r_alloc 401,10496 -r_alloc_free 426,10930 -r_re_alloc 450,11519 -r_alloc_init 485,12297 +vm-limit.c,149 +typedef size_t SIZE;30,1065 +typedef void *POINTER;31,1086 +#define EXCEEDS_LISP_PTR(32,1109 +check_memory_limits 53,1577 +memory_warnings 122,3254 + +ralloc.c,717 +typedef void *POINTER;41,1504 +typedef char *POINTER;48,1583 +typedef char *POINTER;54,1674 +typedef unsigned long SIZE;56,1698 +typedef size_t SIZE;68,1910 +typedef void *POINTER;69,1931 +#define safe_bcopy(75,2016 +#define NIL 79,2085 +#define PAGE 114,3369 +#define ALIGNED(115,3399 +#define ROUNDUP(116,3475 +#define ROUND_TO_PAGE(118,3574 +obtain 129,3999 +get_more_space 155,4538 +relinquish 169,4820 +typedef struct bp200,5805 +} *bloc_ptr;207,5913 +#define NIL_BLOC 209,5927 +#define BLOC_PTR_SIZE 210,5959 +find_bloc 219,6205 +get_bloc 240,6601 +relocate_some_blocs 282,7487 +free_bloc 308,8050 +r_alloc_sbrk 352,9124 +r_alloc 411,10938 +r_alloc_free 436,11372 +r_re_alloc 460,11961 +r_alloc_init 495,12740 obstack.c,677 -#define POINTER 38,1574 -#define POINTER 40,1603 -struct fooalign 44,1670 -#define DEFAULT_ALIGNMENT 45,1707 -union fooround 50,2015 -#define DEFAULT_ROUNDING 51,2051 -#define COPYING_UNIT 58,2356 -#define CALL_CHUNKFUN(72,2869 -#define CALL_FREEFUN(77,3012 -_obstack_begin 92,3465 -_obstack_begin_1 136,4896 -_obstack_newchunk 188,6651 -_obstack_allocated_p 249,8752 -_obstack_free 277,9611 -obstack_free 311,10602 -int (obstack_object_size)368,12321 -int (obstack_room)374,12432 -void (obstack_grow)380,12529 -void (obstack_grow0)388,12693 -void (obstack_1grow)396,12859 -void (obstack_blank)403,12994 -void (obstack_1grow_fast)410,13120 -void (obstack_blank_fast)417,13265 +#define POINTER 39,1673 +#define POINTER 41,1702 +struct fooalign 45,1769 +#define DEFAULT_ALIGNMENT 46,1806 +union fooround 51,2114 +#define DEFAULT_ROUNDING 52,2150 +#define COPYING_UNIT 59,2455 +#define CALL_CHUNKFUN(73,2968 +#define CALL_FREEFUN(78,3111 +_obstack_begin 93,3564 +_obstack_begin_1 137,4995 +_obstack_newchunk 189,6750 +_obstack_allocated_p 256,9061 +_obstack_free 284,9920 +obstack_free 318,10911 +int (obstack_object_size)375,12630 +int (obstack_room)381,12741 +void (obstack_grow)387,12838 +void (obstack_grow0)395,13002 +void (obstack_1grow)403,13168 +void (obstack_blank)410,13303 +void (obstack_1grow_fast)417,13429 +void (obstack_blank_fast)424,13574 -malloc.h,27 +malloc.h,101 #define _MALLOC_H 25,1015 - -obstack.h,1734 -#define __OBSTACKS__107,4820 -#define __PTR_TO_INT(114,5048 -#define __INT_TO_PTR(118,5119 -#define __need_ptrdiff_t131,5659 -#define PTR_INT_TYPE 142,5844 -#define PTR_INT_TYPE 144,5881 -struct _obstack_chunk 147,5915 -struct obstack 154,6143 -#define obstack_base(236,9438 -#define obstack_chunk_size(240,9527 -#define obstack_next_free(244,9641 -#define obstack_alignment_mask(248,9767 -#define obstack_init(250,9824 -#define obstack_begin(254,9956 -#define obstack_specify_allocation(258,10100 -#define obstack_specify_allocation_with_arg(262,10281 -#define obstack_1grow_fast(266,10485 -#define obstack_blank_fast(268,10552 -#define __extension__272,10672 -#define obstack_object_size(280,10904 -#define obstack_room(285,11073 -#define obstack_grow(295,11495 -#define obstack_grow0(305,11844 -#define obstack_1grow(316,12235 -#define obstack_ptr_grow(328,12673 -#define obstack_int_grow(336,12978 -#define obstack_ptr_grow_fast(344,13275 -#define obstack_int_grow_fast(345,13359 -#define obstack_blank(347,13439 -#define obstack_alloc(356,13738 -#define obstack_copy(362,13916 -#define obstack_copy0(368,14105 -#define obstack_finish(376,14394 -#define obstack_free(391,14988 -#define obstack_object_size(401,15337 -#define obstack_room(404,15419 -#define obstack_grow(407,15495 -#define obstack_grow0(414,15761 -#define obstack_1grow(422,16070 -#define obstack_ptr_grow(427,16238 -#define obstack_int_grow(432,16482 -#define obstack_ptr_grow_fast(437,16711 -#define obstack_int_grow_fast(438,16795 -#define obstack_blank(440,16875 -#define obstack_alloc(446,17088 -#define obstack_copy(449,17183 -#define obstack_copy0(452,17290 -#define obstack_finish(455,17399 -#define obstack_free(470,17968 -#define obstack_free(477,18305 +#define memset(37,1211 +#define memcpy(40,1277 +#define CHAR_BIT 47,1415 + +obstack.h,1735 +#define __OBSTACKS__108,4919 +#define __PTR_TO_INT(115,5147 +#define __INT_TO_PTR(119,5218 +#define __need_ptrdiff_t132,5758 +#define PTR_INT_TYPE 143,5943 +#define PTR_INT_TYPE 145,5980 +struct _obstack_chunk 148,6014 +struct obstack 155,6242 +#define obstack_base(237,9537 +#define obstack_chunk_size(241,9626 +#define obstack_next_free(245,9740 +#define obstack_alignment_mask(249,9866 +#define obstack_init(251,9923 +#define obstack_begin(255,10055 +#define obstack_specify_allocation(259,10199 +#define obstack_specify_allocation_with_arg(263,10380 +#define obstack_1grow_fast(267,10584 +#define obstack_blank_fast(269,10651 +#define __extension__273,10771 +#define obstack_object_size(281,11003 +#define obstack_room(286,11172 +#define obstack_grow(296,11594 +#define obstack_grow0(306,11943 +#define obstack_1grow(317,12334 +#define obstack_ptr_grow(329,12772 +#define obstack_int_grow(337,13077 +#define obstack_ptr_grow_fast(345,13374 +#define obstack_int_grow_fast(346,13458 +#define obstack_blank(348,13538 +#define obstack_alloc(357,13837 +#define obstack_copy(363,14015 +#define obstack_copy0(369,14204 +#define obstack_finish(377,14493 +#define obstack_free(392,15087 +#define obstack_object_size(402,15436 +#define obstack_room(405,15518 +#define obstack_grow(408,15594 +#define obstack_grow0(415,15860 +#define obstack_1grow(423,16169 +#define obstack_ptr_grow(428,16337 +#define obstack_int_grow(433,16581 +#define obstack_ptr_grow_fast(438,16810 +#define obstack_int_grow_fast(439,16894 +#define obstack_blank(441,16974 +#define obstack_alloc(447,17187 +#define obstack_copy(450,17282 +#define obstack_copy0(453,17389 +#define obstack_finish(456,17498 +#define obstack_free(471,18067 +#define obstack_free(478,18404 diff -ruN glibc-1.06/malloc/getpagesize.h glibc-1.07/malloc/getpagesize.h --- glibc-1.06/malloc/getpagesize.h Sun Mar 14 16:39:55 1993 +++ glibc-1.07/malloc/getpagesize.h Fri Jul 30 18:30:50 1993 @@ -1,8 +1,4 @@ -#ifdef BSD -#ifndef BSD4_1 -#define HAVE_GETPAGESIZE -#endif -#endif +/* Emulate getpagesize on systems that lack it. */ #ifndef HAVE_GETPAGESIZE @@ -29,10 +25,11 @@ #define CLSIZE 1 #endif /* no CLSIZE */ #else /* no NBPG */ +#ifdef NBPC #define getpagesize() NBPC +#endif /* NBPC */ #endif /* no NBPG */ #endif /* no EXEC_PAGESIZE */ #endif /* no _SC_PAGESIZE */ #endif /* not HAVE_GETPAGESIZE */ - diff -ruN glibc-1.06/malloc/malloc.c glibc-1.07/malloc/malloc.c --- glibc-1.06/malloc/malloc.c Fri Mar 26 14:58:38 1993 +++ glibc-1.07/malloc/malloc.c Thu Jul 22 15:04:45 1993 @@ -155,8 +155,17 @@ register size_t i; struct list *next; + /* ANSI C allows `malloc (0)' to either return NULL, or to return a + valid address you can realloc and free (though not dereference). + + It turns out that some extant code (sunrpc, at least Ultrix's version) + expects `malloc (0)' to return non-NULL and breaks otherwise. + Be compatible. */ + +#if 0 if (size == 0) return NULL; +#endif if (__malloc_hook != NULL) return (*__malloc_hook) (size); @@ -168,6 +177,11 @@ if (size < sizeof (struct list)) size = sizeof (struct list); +#ifdef SUNOS_LOCALTIME_BUG + if (size < 16) + size = 16; +#endif + /* Determine the allocation policy based on the request size. */ if (size <= BLOCKSIZE / 2) { @@ -254,7 +268,11 @@ (*__morecore) (0) == ADDRESS (block + lastblocks) && (morecore ((blocks - lastblocks) * BLOCKSIZE)) != NULL) { - _heapinfo[block].free.size = blocks; + /* Which block we are extending (the `final free + block' referred to above) might have changed, if + it got combined with a freed info table. */ + block = _heapinfo[0].free.prev; + _heapinfo[block].free.size += (blocks - lastblocks); _bytes_free += (blocks - lastblocks) * BLOCKSIZE; continue; } @@ -307,3 +325,32 @@ return result; } + +#ifndef _LIBC + +/* On some ANSI C systems, some libc functions call _malloc, _free + and _realloc. Make them use the GNU functions. */ + +__ptr_t +_malloc (size) + size_t size; +{ + return malloc (size); +} + +void +_free (ptr) + __ptr_t ptr; +{ + free (ptr); +} + +__ptr_t +_realloc (ptr, size) + __ptr_t ptr; + size_t size; +{ + return realloc (ptr, size); +} + +#endif diff -ruN glibc-1.06/malloc/malloc.h glibc-1.07/malloc/malloc.h --- glibc-1.06/malloc/malloc.h Fri Mar 26 14:58:35 1993 +++ glibc-1.07/malloc/malloc.h Fri Aug 13 16:53:29 1993 @@ -25,12 +25,31 @@ #define _MALLOC_H 1 #ifdef _MALLOC_INTERNAL -/* Harmless, gets __GNU_LIBRARY__ defined. - We must do this before #defining size_t and ptrdiff_t - because tries to typedef them on some systems. */ -#include + +#ifdef HAVE_CONFIG_H +#include +#endif + +#if defined(_LIBC) || defined(STDC_HEADERS) || defined(USG) +#include +#else +#ifndef memset +#define memset(s, zero, n) bzero ((s), (n)) +#endif +#ifndef memcpy +#define memcpy(d, s, n) bcopy ((s), (d), (n)) +#endif +#endif + +#if defined(__GNU_LIBRARY__) || defined(__STDC__) +#include +#else +#define CHAR_BIT 8 #endif +#endif /* _MALLOC_INTERNAL. */ + + #ifdef __cplusplus extern "C" { @@ -50,10 +69,6 @@ #define __ptr_t char * #endif /* C++ or ANSI C. */ -#ifndef NULL -#define NULL 0 -#endif - #ifdef __STDC__ #include #else @@ -63,6 +78,10 @@ #define ptrdiff_t int #endif +#ifndef NULL +#define NULL 0 +#endif + /* Allocate SIZE bytes of memory. */ extern __ptr_t malloc __P ((size_t __size)); @@ -83,31 +102,6 @@ #ifdef _MALLOC_INTERNAL -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#if defined(__GNU_LIBRARY__) || defined(STDC_HEADERS) || defined(USG) -#include -#else -#ifndef memset -#define memset(s, zero, n) bzero ((s), (n)) -#endif -#ifndef memcpy -#define memcpy(d, s, n) bcopy ((s), (d), (n)) -#endif -#ifndef memmove -#define memmove(d, s, n) bcopy ((s), (d), (n)) -#endif -#endif - - -#if defined(__GNU_LIBRARY__) || defined(__STDC__) -#include -#else -#define CHAR_BIT 8 -#endif - /* The allocator divides the heap into blocks of fixed size; large requests receive one or more whole blocks, and small requests receive a fragment of a block. Fragment sizes are powers of two, @@ -242,7 +236,7 @@ /* Call WARNFUN with a warning message when memory usage is high. */ extern void memory_warnings __P ((__ptr_t __start, - void (*__warnfun) __P ((__const char *)))); + void (*__warnfun) __P ((const char *)))); /* Relocating allocator. */ diff -ruN glibc-1.06/malloc/mallocbug.c glibc-1.07/malloc/mallocbug.c --- glibc-1.06/malloc/mallocbug.c +++ glibc-1.07/malloc/mallocbug.c Sun Jul 18 21:13:07 1993 @@ -0,0 +1,66 @@ +/* Reproduce a GNU malloc bug. */ +#include +extern char *malloc (); + +#define size_t unsigned int + +int +main () +{ + char *dummy0; + char *dummy1; + char *fill_info_table1; + char *over_top; + size_t over_top_size = 0x3000; + char *over_top_dup; + size_t over_top_dup_size = 0x7000; + char *x; + size_t i; + + /* Here's what memory is supposed to look like (hex): + size contents + 3000 original_info_table, later fill_info_table1 + 3fa000 dummy0 + 3fa000 dummy1 + 6000 info_table_2 + 3000 over_top + + */ + /* mem: original_info_table */ + dummy0 = malloc (0x3fa000); + /* mem: original_info_table, dummy0 */ + dummy1 = malloc (0x3fa000); + /* mem: free, dummy0, dummy1, info_table_2 */ + fill_info_table1 = malloc (0x3000); + /* mem: fill_info_table1, dummy0, dummy1, info_table_2 */ + + x = malloc (0x1000); + free (x); + /* mem: fill_info_table1, dummy0, dummy1, info_table_2, freexx */ + + /* This is what loses; info_table_2 and freexx get combined unbeknownst + to mmalloc, and mmalloc puts over_top in a section of memory which + is on the free list as part of another block (where info_table_2 had + been). */ + over_top = malloc (over_top_size); + over_top_dup = malloc (over_top_dup_size); + memset (over_top, 0, over_top_size); + memset (over_top_dup, 1, over_top_dup_size); + + for (i = 0; i < over_top_size; ++i) + if (over_top[i] != 0) + { + printf ("FAIL: malloc expands info table\n"); + return 0; + } + + for (i = 0; i < over_top_dup_size; ++i) + if (over_top_dup[i] != 1) + { + printf ("FAIL: malloc expands info table\n"); + return 0; + } + + printf ("PASS: malloc expands info table\n"); + return 0; +} diff -ruN glibc-1.06/malloc/mcheck.c glibc-1.07/malloc/mcheck.c --- glibc-1.06/malloc/mcheck.c Thu Feb 18 14:33:35 1993 +++ glibc-1.07/malloc/mcheck.c Mon Jul 12 21:59:11 1993 @@ -104,6 +104,7 @@ return NULL; hdr->size = size; + hdr->magic = MAGICWORD; ((char *) &hdr[1])[size] = MAGICBYTE; return (__ptr_t) (hdr + 1); } diff -ruN glibc-1.06/malloc/mem-limits.h glibc-1.07/malloc/mem-limits.h --- glibc-1.06/malloc/mem-limits.h Sat May 22 18:21:02 1993 +++ glibc-1.07/malloc/mem-limits.h Thu Jan 6 01:25:51 1994 @@ -2,7 +2,8 @@ Copyright (C) 1990, 1993 Free Software Foundation, Inc. -This file is part of the GNU C Library. +This file is part of the GNU C Library. Its master source is NOT part of +the C library, however. The master source lives in /gd/gnu/lib. 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 @@ -19,9 +20,31 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#ifdef MSDOS +#include +#endif + +#ifdef _LIBC + +#include +#define BSD4_2 /* Tell code below to use getrlimit. */ + +#else + +#if defined (__osf__) && (defined (__mips) || defined (mips)) +#include +#include +#endif + +#ifdef __bsdi__ +#define BSD4_2 +#endif + #ifndef BSD4_2 #ifndef USG +#ifndef MSDOS #include +#endif /* not MSDOS */ #endif /* not USG */ #else /* if BSD4_2 */ #include @@ -28,6 +51,8 @@ #include #endif /* BSD4_2 */ +#endif /* _LIBC */ + #ifdef emacs /* The important properties of this type are that 1) it's a pointer, and 2) arithmetic on it should work as if the size of the object pointed @@ -97,13 +122,24 @@ } #else /* not USG */ -#ifndef BSD4_2 +#if !defined (BSD4_2) && !defined (__osf__) +#ifdef MSDOS +void +get_lim_data () +{ + _go32_dpmi_meminfo info; + + _go32_dpmi_get_free_memory_information (&info); + lim_data = info.available_memory; +} +#else /* not MSDOS */ static void get_lim_data () { lim_data = vlimit (LIM_DATA, -1); } +#endif /* not MSDOS */ #else /* BSD4_2 */ diff -ruN glibc-1.06/malloc/memalign.c glibc-1.07/malloc/memalign.c --- glibc-1.06/malloc/memalign.c Thu Jun 25 21:06:58 1992 +++ glibc-1.07/malloc/memalign.c Wed Dec 8 15:59:41 1993 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -50,11 +50,11 @@ free (result); return NULL; } + l->next = _aligned_blocks; + _aligned_blocks = l; } l->exact = result; result = l->aligned = (char *) result + alignment - adj; - l->next = _aligned_blocks; - _aligned_blocks = l; } return result; diff -ruN glibc-1.06/malloc/mtrace.c glibc-1.07/malloc/mtrace.c --- glibc-1.06/malloc/mtrace.c Mon Feb 22 12:36:12 1993 +++ glibc-1.07/malloc/mtrace.c Thu Jul 22 15:20:23 1993 @@ -26,7 +26,7 @@ #include #endif -/* Don't #include because did it for us. */ +#include #ifndef __GNU_LIBRARY__ extern char *getenv (); @@ -82,7 +82,7 @@ __malloc_hook = tr_mallochook; /* We could be printing a NULL here; that's OK. */ - fprintf (mallstream, "+ %p %x\n", hdr, size); + fprintf (mallstream, "+ %p %lx\n", hdr, size); if (hdr == mallwatch) tr_break (); @@ -110,9 +110,9 @@ __realloc_hook = tr_reallochook; if (hdr == NULL) /* Failed realloc. */ - fprintf (mallstream, "! %p %x\n", ptr, size); + fprintf (mallstream, "! %p %lx\n", ptr, size); else - fprintf (mallstream, "< %p\n> %p %x\n", ptr, hdr, size); + fprintf (mallstream, "< %p\n> %p %lx\n", ptr, hdr, size); if (hdr == mallwatch) tr_break (); diff -ruN glibc-1.06/malloc/obstack.c glibc-1.07/malloc/obstack.c --- glibc-1.06/malloc/obstack.c Wed Apr 21 20:06:46 1993 +++ glibc-1.07/malloc/obstack.c Sat Aug 7 01:52:38 1993 @@ -1,7 +1,8 @@ /* obstack.c - subroutines used implicitly by object stack macros Copyright (C) 1988, 1993 Free Software Foundation, Inc. -This file is part of the GNU C Library. +This file is part of the GNU C Library. Its master source is NOT part of +the C library, however. The master source lives in /gd/gnu/lib. 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 @@ -244,6 +245,12 @@ /* Return nonzero if object OBJ has been allocated from obstack H. This is here for debugging. If you use it in a program, you are probably losing. */ + +#ifdef __STDC__ +/* Suppress -Wmissing-prototypes warning. We don't want to declare this in + obstack.h because it is just for debugging. */ +int _obstack_allocated_p (struct obstack *h, POINTER obj); +#endif int _obstack_allocated_p (h, obj) diff -ruN glibc-1.06/malloc/obstack.h glibc-1.07/malloc/obstack.h --- glibc-1.06/malloc/obstack.h Tue Oct 20 18:56:02 1992 +++ glibc-1.07/malloc/obstack.h Sat Aug 7 01:52:42 1993 @@ -1,7 +1,8 @@ /* obstack.h - object stack macros Copyright (C) 1988, 1992 Free Software Foundation, Inc. -This file is part of the GNU C Library. +This file is part of the GNU C Library. Its master source is NOT part of +the C library, however. The master source lives in /gd/gnu/lib. 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 diff -ruN glibc-1.06/malloc/ralloc.c glibc-1.07/malloc/ralloc.c --- glibc-1.06/malloc/ralloc.c Sat May 22 18:20:53 1993 +++ glibc-1.07/malloc/ralloc.c Mon Nov 29 18:00:05 1993 @@ -2,7 +2,8 @@ Copyright (C) 1993 Free Software Foundation, Inc. -This file is part of the GNU C Library. +This file is part of the GNU C Library. Its master source is NOT part of +the C library, however. The master source lives in /gd/gnu/lib. 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 @@ -21,13 +22,13 @@ /* NOTES: - Only relocate the blocs neccessary for SIZE in r_alloc_sbrk, + Only relocate the blocs necessary for SIZE in r_alloc_sbrk, rather than all of them. This means allowing for a possible hole between the first bloc and the end of malloc storage. */ #ifdef emacs -#include "config.h" +#include #include "lisp.h" /* Needed for VALBITS. */ #undef NULL @@ -35,6 +36,7 @@ /* The important properties of this type are that 1) it's a pointer, and 2) arithmetic on it should work as if the size of the object pointed to has a size of 1. */ +#if 0 /* Arithmetic on void* is a GCC extension. */ #ifdef __STDC__ typedef void *POINTER; #else @@ -46,6 +48,10 @@ typedef char *POINTER; #endif +#endif /* 0 */ + +/* Unconditionally use char * for this. */ +typedef char *POINTER; typedef unsigned long SIZE; @@ -106,8 +112,9 @@ /* Macros for rounding. Note that rounding to any value is possible by changing the definition of PAGE. */ #define PAGE (getpagesize ()) -#define ALIGNED(addr) (((unsigned int) (addr) & (page_size - 1)) == 0) -#define ROUNDUP(size) (((unsigned int) (size) + page_size - 1) & ~(page_size - 1)) +#define ALIGNED(addr) (((unsigned long int) (addr) & (page_size - 1)) == 0) +#define ROUNDUP(size) (((unsigned long int) (size) + page_size - 1) \ + & ~(page_size - 1)) #define ROUND_TO_PAGE(addr) (addr & (~(page_size - 1))) /* Functions to get and return memory from the system. */ @@ -348,7 +355,10 @@ /* This is the first address not currently available for the heap. */ POINTER top; /* Amount of empty space below that. */ - SIZE already_available; + /* It is not correct to use SIZE here, because that is usually unsigned. + ptrdiff_t would be okay, but is not always available. + `long' will work in all cases, in practice. */ + long already_available; POINTER ptr; if (! use_relocatable_buffers) @@ -479,7 +489,7 @@ from the system. */ extern POINTER (*__morecore) (); -/* Intialize various things for memory allocation. */ +/* Initialize various things for memory allocation. */ static void r_alloc_init () @@ -499,8 +509,20 @@ extra_bytes = ROUNDUP (50000); page_break_value = (POINTER) ROUNDUP (break_value); + + /* The extra call to real_morecore guarantees that the end of the + address space is a multiple of page_size, even if page_size is + not really the page size of the system running the binary in + which page_size is stored. This allows a binary to be built on a + system with one page size and run on a system with a smaller page + size. */ + (*real_morecore) (page_break_value - break_value); + /* Clear the rest of the last page; this memory is in our address space even though it is after the sbrk value. */ + /* Doubly true, with the additional call that explicitly adds the + rest of that page to the address space. */ bzero (break_value, (page_break_value - break_value)); + virtual_break_value = break_value = page_break_value; use_relocatable_buffers = 1; } diff -ruN glibc-1.06/malloc/realloc.c glibc-1.07/malloc/realloc.c --- glibc-1.06/malloc/realloc.c Fri Mar 26 14:58:26 1993 +++ glibc-1.07/malloc/realloc.c Fri Oct 22 03:58:03 1993 @@ -25,6 +25,74 @@ #include #endif +#if (defined (MEMMOVE_MISSING) || \ + !defined(_LIBC) && !defined(STDC_HEADERS) && !defined(USG)) + +/* Snarfed directly from Emacs src/dispnew.c: + XXX Should use system bcopy if it handles overlap. */ +#ifndef emacs + +/* Like bcopy except never gets confused by overlap. */ + +static void +safe_bcopy (from, to, size) + char *from, *to; + int size; +{ + if (size <= 0 || from == to) + return; + + /* If the source and destination don't overlap, then bcopy can + handle it. If they do overlap, but the destination is lower in + memory than the source, we'll assume bcopy can handle that. */ + if (to < from || from + size <= to) + bcopy (from, to, size); + + /* Otherwise, we'll copy from the end. */ + else + { + register char *endf = from + size; + register char *endt = to + size; + + /* If TO - FROM is large, then we should break the copy into + nonoverlapping chunks of TO - FROM bytes each. However, if + TO - FROM is small, then the bcopy function call overhead + makes this not worth it. The crossover point could be about + anywhere. Since I don't think the obvious copy loop is too + bad, I'm trying to err in its favor. */ + if (to - from < 64) + { + do + *--endt = *--endf; + while (endf != from); + } + else + { + for (;;) + { + endt -= (to - from); + endf -= (to - from); + + if (endt < to) + break; + + bcopy (endf, endt, to - from); + } + + /* If SIZE wasn't a multiple of TO - FROM, there will be a + little left over. The amount left over is + (endt + (to - from)) - to, which is endt - from. */ + bcopy (from, to, endt - from); + } + } +} +#endif /* Not emacs. */ + +#define memmove(to, from, size) safe_bcopy ((from), (to), (size)) + +#endif + + #define min(A, B) ((A) < (B) ? (A) : (B)) /* Debugging hook for realloc. */ @@ -69,7 +137,7 @@ if (result != NULL) { memcpy (result, ptr, size); - free (ptr); + _free_internal (ptr); return result; } } @@ -85,7 +153,7 @@ _heapinfo[block + blocks].busy.info.size = _heapinfo[block].busy.info.size - blocks; _heapinfo[block].busy.info.size = blocks; - free (ADDRESS (block + blocks)); + _free_internal (ADDRESS (block + blocks)); result = ptr; } else if (blocks == _heapinfo[block].busy.info.size) @@ -100,7 +168,7 @@ /* Prevent free from actually returning memory to the system. */ oldlimit = _heaplimit; _heaplimit = 0; - free (ptr); + _free_internal (ptr); _heaplimit = oldlimit; result = malloc (size); if (result == NULL) @@ -114,7 +182,7 @@ { __ptr_t previous = malloc ((block - _heapindex) * BLOCKSIZE); (void) malloc (blocks * BLOCKSIZE); - free (previous); + _free_internal (previous); } return NULL; } diff -ruN glibc-1.06/malloc/valloc.c glibc-1.07/malloc/valloc.c --- glibc-1.06/malloc/valloc.c Mon Feb 22 12:45:57 1993 +++ glibc-1.07/malloc/valloc.c Thu Aug 12 19:26:23 1993 @@ -19,20 +19,18 @@ The author may be reached (Email) at the address mike@ai.mit.edu, or (US mail) as Mike Haertel c/o Free Software Foundation. */ -#ifndef _MALLOC_INTERNAL -#define _MALLOC_INTERNAL -#include -#endif - -#if defined (emacs) || defined (HAVE_CONFIG_H) -#include "config.h" -#endif - -#ifdef __GNU_LIBRARY__ +#if defined (__GNU_LIBRARY__) || defined (_LIBC) +#include +#include extern size_t __getpagesize __P ((void)); #else #include "getpagesize.h" #define __getpagesize() getpagesize() +#endif + +#ifndef _MALLOC_INTERNAL +#define _MALLOC_INTERNAL +#include #endif static size_t pagesize; diff -ruN glibc-1.06/malloc/vm-limit.c glibc-1.07/malloc/vm-limit.c --- glibc-1.06/malloc/vm-limit.c Tue Oct 20 18:55:39 1992 +++ glibc-1.07/malloc/vm-limit.c Thu Oct 14 16:08:09 1993 @@ -2,7 +2,8 @@ Copyright (C) 1990, 1992 Free Software Foundation, Inc. -This file is part of the GNU C Library. +This file is part of the GNU C Library. Its master source is NOT part of +the C library, however. The master source lives in /gd/gnu/lib. 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 @@ -20,7 +21,7 @@ Cambridge, MA 02139, USA. */ #ifdef emacs -#include "config.h" +#include #include "lisp.h" #endif @@ -54,8 +55,8 @@ extern POINTER (*__morecore) (); register POINTER cp; - int five_percent; - int data_size; + unsigned long five_percent; + unsigned long data_size; if (lim_data == 0) get_lim_data (); diff -ruN glibc-1.06/manual/COPYING.LIB glibc-1.07/manual/COPYING.LIB --- glibc-1.06/manual/COPYING.LIB Mon Jun 3 16:28:41 1991 +++ glibc-1.07/manual/COPYING.LIB @@ -1,481 +0,0 @@ - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Library General Public License, applies to some -specially designated Free Software Foundation software, and to any -other libraries whose authors decide to use it. You can use it for -your libraries, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if -you distribute copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide -complete object files to the recipients so that they can relink them -with the library, after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright -the library, and (2) offer you this license which gives you legal -permission to copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain -that everyone understands that there is no warranty for this free -library. If the library is modified by someone else and passed on, we -want its recipients to know that what they have is not the original -version, so that any problems introduced by others will not reflect on -the original authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that companies distributing free -software will individually obtain patent licenses, thus in effect -transforming the program into proprietary software. To prevent this, -we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary -GNU General Public License, which was designed for utility programs. This -license, the GNU Library General Public License, applies to certain -designated libraries. This license is quite different from the ordinary -one; be sure to read it in full, and don't assume that anything in it is -the same as in the ordinary license. - - The reason we have a separate public license for some libraries is that -they blur the distinction we usually make between modifying or adding to a -program and simply using it. Linking a program with a library, without -changing the library, is in some sense simply using the library, and is -analogous to running a utility program or application program. However, in -a textual and legal sense, the linked executable is a combined work, a -derivative of the original library, and the ordinary General Public License -treats it as such. - - Because of this blurred distinction, using the ordinary General -Public License for libraries did not effectively promote software -sharing, because most developers did not use the libraries. We -concluded that weaker conditions might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the -users of those programs of all benefit from the free status of the -libraries themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while -preserving your freedom as a user of such programs to change the free -libraries that are incorporated in them. (We have not seen how to achieve -this as regards changes in header files, but we have achieved it as regards -changes in the actual functions of the Library.) The hope is that this -will lead to faster development of free libraries. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, while the latter only -works together with the library. - - Note that it is possible for a library to be covered by the ordinary -General Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which -contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - d) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the source code distributed need not include anything that is normally -distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Library General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff -ruN glibc-1.06/manual/Makefile glibc-1.07/manual/Makefile --- glibc-1.06/manual/Makefile Sat May 22 18:16:57 1993 +++ glibc-1.07/manual/Makefile Thu Dec 23 01:47:19 1993 @@ -31,13 +31,13 @@ endif # Set chapters and chapters-incl. -include $(objpfx)chapters -$(objpfx)chapters: libc.texinfo +include chapters +chapters: libc.texinfo $(find-includes) chapters := $(filter-out summary.texi,$(chapters)) ifdef chapters -include $(objpfx)chapters-incl -$(objpfx)chapters-incl: $(chapters) +include chapters-incl +chapters-incl: $(chapters) $(find-includes) endif @@ -47,38 +47,32 @@ mv $@.new $@ endef -$(objpfx)libc.dvi $(objpfx)libc.info: $(chapters) summary.texi $(chapters-incl) -$(objpfx)libc.dvi: texinfo.tex +libc.dvi libc.info: $(chapters) summary.texi $(chapters-incl) +libc.dvi: texinfo.tex -$(objpfx)%.info: %.texinfo - $(MAKEINFO) $< -o $@ -$(objpfx)%.dvi: %.texinfo - $(TEXI2DVI) $< - # Generate the summary from the Texinfo source files for each chapter. -$(objpfx)summary.texi: stamp-summary ; -$(objpfx)stamp-summary: summary.awk $(chapters) +summary.texi: stamp-summary ; +stamp-summary: summary.awk $(chapters) awk -f $^ \ - | sort +1 -2 | tr '\014' '\012' > summary-tmp - ./move-if-change summary-tmp $(objpfx)summary.texi + | sort -df +1 -2 | tr '\014' '\012' > summary-tmp + ./move-if-change summary-tmp summary.texi # touch is broken on our machines. Sigh. date > $@ # Generate Texinfo files from the C source for the example programs. -$(objpfx)%.c.texi: examples/%.c +%.c.texi: examples/%.c sed -e 's,[{}],@&,g' \ -e 's,/\*\(@.*\)\*/,\1,g' \ - -e 's,/\* *\(.*\) *\*/,/* @r{\1} */,g' \ + -e 's,/\* *,/* @r{,g' -e 's, *\*/,} */,' \ -e 's/\(@[a-z][a-z]*\)@{\([^}]*\)@}/\1{\2}/'\ - $< > $@.new + $< | expand > $@.new mv $@.new $@ -minimal-dist = COPYING.LIB summary.awk move-if-change \ - libc.texinfo $(chapters) \ +minimal-dist = summary.awk move-if-change libc.texinfo $(chapters) \ $(patsubst %.c.texi,examples/%.c, \ $(filter-out summary.texi,$(chapters-incl))) -doc-only-dist = Makefile mkinstalldirs +doc-only-dist = Makefile COPYING.LIB mkinstalldirs distribute = $(minimal-dist) \ $(patsubst examples/%.c,%.c.texi,$(filter examples/%.c, \ $(minimal-dist))) \ @@ -91,7 +85,8 @@ manual.tar: $(doc-only-dist) $(minimal-dist) ; $(tar-it) mandist.tar: $(doc-only-dist) $(distribute) ; $(tar-it) -edition := $(shell sed -n 's/^@set EDITION \(.*\)$$/\1/p' libc.texinfo) +edition := $(shell sed -n 's/^@set EDITION \([0-9][0-9.]*\)[^0-9.]*.*$$/\1/p' \ + libc.texinfo) glibc-doc-$(edition).tar: $(doc-only-dist) $(distribute) @rm -f glibc-doc-$(edition) @@ -113,15 +108,17 @@ subdir_clean: clean distclean clean: mostlyclean mostlyclean: - -rm -f $(addprefix $(objpfx),libc.dvi libc.info*) + -rm -f libc.dvi libc.info* realclean: clean - -rm -f $(addprefix $(objpfx),chapters chapters-incl \ - summary.texi stamp-summary \ - *.c.texi) + -rm -f chapters chapters-incl summary.texi stamp-summary *.c.texi + -rm -f libc.cp libc.cps libc.fn libc.fns libc.pg libc.pgs \ + libc.tp libc.tps libc.vr libc.vrs libc.log libc.aux libc.toc -.PHONY: install subdir_install installdirs -subdir_install: install +.PHONY: install subdir_install installdirs install-data +install-data subdir_install: install install: $(infodir)/libc.info +# Catchall implicit rule for other installation targets from the parent. +install-%: ; ifndef infodir infodir = $(prefix)/info @@ -137,11 +134,11 @@ INSTALL = install endif -$(infodir)/libc.info: $(objpfx)libc.info installdirs +$(infodir)/libc.info: libc.info installdirs for file in $<*; do \ name=`basename $$file`; \ $(INSTALL_DATA) $$file \ - `echo $@ | sed "s,$( #include #include @@ -732,7 +737,7 @@ status = -1; return status; @} -@end example +@end smallexample @comment Yes, this example has been tested. diff -ruN glibc-1.06/manual/conf.texi glibc-1.07/manual/conf.texi --- glibc-1.06/manual/conf.texi Wed May 12 14:25:55 1993 +++ glibc-1.07/manual/conf.texi Mon Jul 26 19:22:18 1993 @@ -126,8 +126,8 @@ construct @samp{\@{@var{min},@var{max}\@}} in a regular expression. The value of this macro is actually a lower bound for the maximum. That -is, you can count on being able to have that many supplementary group -IDs, but a particular machine might let you have even more. You can use +is, you can count on being able to have that many repetitions, but a +particular machine might let you have even more. You can use @code{sysconf} to see whether a particular machine will let you have more (@pxref{Sysconf}). And even the value that @code{sysconf} tells you is just a lower bound---larger values might work. @@ -438,6 +438,14 @@ @comment unistd.h @comment POSIX.2 +@item _SC_EQUIV_CLASS_MAX +Inquire about the maximum number of weights that can be assigned to an +entry of the @code{LC_COLLATE} category @samp{order} keyword in a locale +definition. The GNU C library does not presently support locale +definitions. + +@comment unistd.h +@comment POSIX.2 @item _SC_VERSION Inquire about the version number of POSIX.1 that the library and kernel support. @@ -447,6 +455,13 @@ @item _SC_2_VERSION Inquire about the version number of POSIX.2 that the system utilities support. + +@comment unistd.h +@comment GNU +@item _SC_PAGESIZE +Inquire about the virtual memory page size of the machine. +@code{getpagesize} returns the same value. +@xref{XXX getpagesize}. @end table @node Examples of Sysconf @@ -457,7 +472,7 @@ macro is not defined. For example, here is how to test whether job control is supported: -@example +@smallexample @group int have_job_control (void) @@ -474,11 +489,11 @@ #endif @} @end group -@end example +@end smallexample Here is how to get the value of a numeric limit: -@example +@smallexample int get_child_max () @{ @@ -491,7 +506,7 @@ return value; #endif @} -@end example +@end smallexample @node Minimums @section Minimum Values for General Capacity Limits @@ -824,47 +839,47 @@ @comment unistd.h @comment POSIX.1 @item _PC_LINK_MAX -Inquire about the parameter corresponding to @code{LINK_MAX}. +Inquire about the value of @code{LINK_MAX}. @comment unistd.h @comment POSIX.1 @item _PC_MAX_CANON -Inquire about the parameter corresponding to @code{MAX_CANON}. +Inquire about the value of @code{MAX_CANON}. @comment unistd.h @comment POSIX.1 @item _PC_MAX_INPUT -Inquire about the parameter corresponding to @code{MAX_INPUT}. +Inquire about the value of @code{MAX_INPUT}. @comment unistd.h @comment POSIX.1 @item _PC_NAME_MAX -Inquire about the parameter corresponding to @code{NAME_MAX}. +Inquire about the value of @code{NAME_MAX}. @comment unistd.h @comment POSIX.1 @item _PC_PATH_MAX -Inquire about the parameter corresponding to @code{PATH_MAX}. +Inquire about the value of @code{PATH_MAX}. @comment unistd.h @comment POSIX.1 @item _PC_PIPE_BUF -Inquire about the parameter corresponding to @code{PIPE_BUF}. +Inquire about the value of @code{PIPE_BUF}. @comment unistd.h @comment POSIX.1 @item _PC_CHOWN_RESTRICTED -Inquire about the parameter corresponding to @code{_POSIX_CHOWN_RESTRICTED}. +Inquire about the value of @code{_POSIX_CHOWN_RESTRICTED}. @comment unistd.h @comment POSIX.1 @item _PC_NO_TRUNC -Inquire about the parameter corresponding to @code{_POSIX_NO_TRUNC}. +Inquire about the value of @code{_POSIX_NO_TRUNC}. @comment unistd.h @comment POSIX.1 @item _PC_VDISABLE -Inquire about the parameter corresponding to @code{_POSIX_VDISABLE}. +Inquire about the value of @code{_POSIX_VDISABLE}. @end table @node Utility Limits @@ -937,6 +952,14 @@ memory, but there is no way that the library can tell you this.) @end deftypevr +@comment limits.h +@comment POSIX.2 +@deftypevr Macro int EQUIV_CLASS_MAX +The maximum number of weights that can be assigned to an entry of the +@code{LC_COLLATE} category @samp{order} keyword in a locale definition. +The GNU C library does not presently support locale definitions. +@end deftypevr + @node Utility Minimums @section Minimum Values for Utility Limits @@ -985,6 +1008,15 @@ The most restrictive limit permitted by POSIX.2 for the maximum size of a text line that the text utilities can handle. Its value is @code{2048}. + +@comment limits.h +@comment POSIX.2 +@item _POSIX2_EQUIV_CLASS_MAX +The most restrictive limit permitted by POSIX.2 for the maximum number +of weights that can be assigned to an entry of the @code{LC_COLLATE} +category @samp{order} keyword in a locale definition. Its value is +@code{2}. The GNU C library does not presently support locale +definitions. @end table @node String Parameters @@ -1036,7 +1068,7 @@ buffer accordingly, and then call @code{confstr} again to fill the buffer, like this: -@example +@smallexample @group char * get_default_path (void) @@ -1053,4 +1085,4 @@ return buffer; @} @end group -@end example +@end smallexample diff -ruN glibc-1.06/manual/ctype.texi glibc-1.07/manual/ctype.texi --- glibc-1.06/manual/ctype.texi Wed May 12 14:25:56 1993 +++ glibc-1.07/manual/ctype.texi Thu Jun 24 20:35:15 1993 @@ -34,10 +34,10 @@ nonzero integer if the character is alphabetic, and zero otherwise. You would use it like this: -@example +@smallexample if (isalpha (c)) printf ("The character `%c' is alphabetic.\n", c); -@end example +@end smallexample Each of the functions in this section tests for membership in a particular class of characters; each has a name starting with @samp{is}. diff -ruN glibc-1.06/manual/db.c.texi glibc-1.07/manual/db.c.texi --- glibc-1.06/manual/db.c.texi Tue Oct 27 19:00:09 1992 +++ glibc-1.07/manual/db.c.texi Sun Jun 20 19:56:33 1993 @@ -12,7 +12,7 @@ struct group *my_group; char **members; - /* @r{Get information about the user ID. } */ + /* @r{Get information about the user ID.} */ me = getuid (); my_passwd = getpwuid (me); if (!my_passwd) @@ -21,7 +21,7 @@ exit (EXIT_FAILURE); @} - /* @r{Print the information. } */ + /* @r{Print the information.} */ printf ("I am %s.\n", my_passwd->pw_gecos); printf ("My login name is %s.\n", my_passwd->pw_name); printf ("My uid is %d.\n", (int) (my_passwd->pw_uid)); @@ -28,17 +28,18 @@ printf ("My home directory is %s.\n", my_passwd->pw_dir); printf ("My default shell is %s.\n", my_passwd->pw_shell); - /* @r{Get information about the default group ID. } */ + /* @r{Get information about the default group ID.} */ my_group = getgrgid (my_passwd->pw_gid); if (!my_group) @{ - printf ("Couldn't find out about group %d.\n", (int) my_passwd->pw_gid); + printf ("Couldn't find out about group %d.\n", + (int) my_passwd->pw_gid); exit (EXIT_FAILURE); @} - /* @r{Print the information. } */ + /* @r{Print the information.} */ printf ("My default group is %s (%d).\n", - my_group->gr_name, (int) (my_passwd->pw_gid)); + my_group->gr_name, (int) (my_passwd->pw_gid)); printf ("The members of this group are:\n"); members = my_group->gr_mem; while (*members) diff -ruN glibc-1.06/manual/dir.c.texi glibc-1.07/manual/dir.c.texi --- glibc-1.06/manual/dir.c.texi Tue Oct 27 18:59:50 1992 +++ glibc-1.07/manual/dir.c.texi Thu Jun 10 18:00:22 1993 @@ -15,7 +15,7 @@ if (dp != NULL) @{ while (ep = readdir (dp)) - puts (ep->d_name); + puts (ep->d_name); (void) closedir (dp); @} else diff -ruN glibc-1.06/manual/errno.texi glibc-1.07/manual/errno.texi --- glibc-1.06/manual/errno.texi Wed May 19 15:00:19 1993 +++ glibc-1.07/manual/errno.texi Tue Dec 28 18:39:05 1993 @@ -59,7 +59,8 @@ Many library functions can set @code{errno} to a nonzero value as a result of calling other library functions which might fail. You should -assume that any library function might alter @code{errno}. +assume that any library function might alter @code{errno} when the +function returns an error. @strong{Portability Note:} ANSI C specifies @code{errno} as a ``modifiable lvalue'' rather than as a variable, permitting it to be @@ -151,9 +152,11 @@ @comment errno.h @comment POSIX.1: Device not configured @deftypevr Macro int ENXIO -No such device or address. Typically, this means that a file -representing a device has been installed incorrectly, and the -system can't find the right kind of device driver for it. +No such device or address. The system tried to use the device +represented by a file you specified, and it couldn't find the device. +This can mean that the device file was installed incorrectly, or that +the physical device is missing or not correctly attached to the +computer. @end deftypevr @comment errno.h @@ -191,8 +194,10 @@ @comment errno.h @comment POSIX.1: Resource deadlock avoided @deftypevr Macro int EDEADLK -Deadlock avoided; allocating a system resource would have resulted in -a deadlock situation. @xref{File Locks}, for an example. +Deadlock avoided; allocating a system resource would have resulted in a +deadlock situation. The system does not guarantee that it will notice +all such situations. This error means you got lucky and the system +noticed; it might just hang. @xref{File Locks}, for an example. @end deftypevr @comment errno.h @@ -241,6 +246,8 @@ @comment POSIX.1: Invalid cross-device link @deftypevr Macro int EXDEV An attempt to make an improper link across file systems was detected. +This happens not only when you use @code{link} (@pxref{Hard Links}) but +also when you rename a file with @code{rename} (@pxref{Renaming Files}). @end deftypevr @comment errno.h @@ -271,17 +278,6 @@ @end deftypevr @comment errno.h -@comment POSIX.1: Too many open files in system -@deftypevr Macro int ENFILE -There are too many distinct file openings in the entire system. Note -that any number of linked channels count as just one file opening; see -@ref{Linked Channels}. -@c !!! this will never happen in GNU; EMFILE or ENOMEM instead. -@c ??? I'm not sure it is a good thing to return ENOMEM -@c ??? in a case where programmers have been told to expect ENFILE--rms. -@end deftypevr - -@comment errno.h @comment POSIX.1: Too many open files @deftypevr Macro int EMFILE The current process has too many files open and can't open any more. @@ -291,6 +287,14 @@ @end deftypevr @comment errno.h +@comment POSIX.1: Too many open files in system +@deftypevr Macro int ENFILE +There are too many distinct file openings in the entire system. Note +that any number of linked channels count as just one file opening; see +@ref{Linked Channels}. This error never occurs in the GNU system. +@end deftypevr + +@comment errno.h @comment POSIX.1: Inappropriate ioctl for device @deftypevr Macro int ENOTTY Inappropriate I/O control operation, such as trying to set terminal @@ -328,7 +332,7 @@ @comment errno.h @comment POSIX.1: Read-only file system @deftypevr Macro int EROFS -An attempt was made to modify a file on a read-only file system. +An attempt was made to modify something on a read-only file system. @end deftypevr @comment errno.h @@ -335,6 +339,8 @@ @comment POSIX.1: Too many links @deftypevr Macro int EMLINK Too many links; the link count of a single file is too large. +@code{rename} can cause this error if the file being renamed already has +as many links as it can take (@pxref{Renaming Files}). @end deftypevr @comment errno.h @@ -367,6 +373,7 @@ Resource temporarily unavailable; the call might work if you try again later. Only @code{fork} returns error code @code{EAGAIN} for such a reason. +@c !!! sysv uses it somehow? Don't say "only fork" when ==EWOULDBLOCK. @end deftypevr @comment errno.h @@ -386,7 +393,13 @@ @comment BSD: Operation now in progress @deftypevr Macro int EINPROGRESS An operation that cannot complete immediately was initiated on an object -that has non-blocking mode selected. +that has non-blocking mode selected. Some functions that must always +block (such as @code{connect}; @pxref{Connecting}) never return +@code{EWOULDBLOCK}. +@c !!! EAGAIN? +Instead, they return @code{EINPROGRESS} to indicate that the operation +has begun and will take some time. Attempts to manipulate the object +before the call completes return @code{EALREADY}. @end deftypevr @comment errno.h @@ -405,7 +418,7 @@ @comment errno.h @comment BSD: Destination address required @deftypevr Macro int EDESTADDRREQ -No destination address was supplied on a socket operation. +No destination address was supplied on a socket operation that needed one. @end deftypevr @comment errno.h @@ -431,7 +444,8 @@ @comment errno.h @comment BSD: Protocol not supported @deftypevr Macro int EPROTONOSUPPORT -The socket domain does not support the requested communications protocol. +The socket domain does not support the requested communications protocol +(perhaps because the requested protocol is completely invalid.) @xref{Creating a Socket}. @end deftypevr @@ -505,7 +519,8 @@ @comment BSD: Connection reset by peer @deftypevr Macro int ECONNRESET A network connection was closed for reasons outside the control of the -local host, such as by the remote machine rebooting. +local host, such as by the remote machine rebooting or an unrecoverable +protocol violation. @end deftypevr @comment errno.h @@ -624,6 +639,7 @@ @deftypevr Macro int ENOLCK No locks available. This is used by the file locking facilities; see @ref{File Locks}. +This error never occurs in the GNU system. @end deftypevr @comment errno.h @@ -635,6 +651,17 @@ @end deftypevr @comment errno.h +@comment GNU: Inappropriate operation for background process +@deftypevr Macro int EBACKGROUND +In the GNU system, servers supporting the @code{term} protocol return +this error for certain operations when the caller is not in the +foreground process group of the terminal. Users do not usually see this +error because functions such as @code{read} and @code{write} translate +it into a @code{SIGTTIN} or @code{SIGTTOU} signal. @xref{Job Control}, +for information on process groups and these signals. +@end deftypevr + +@comment errno.h @comment GNU: ? @deftypevr Macro int ED The experienced user will know what is wrong. @@ -641,6 +668,18 @@ @end deftypevr @comment errno.h +@comment GNU: You really blew it this time +@deftypevr Macro int EGREGIOUS +You did @strong{what}? +@end deftypevr + +@comment errno.h +@comment GNU: Computer bought the farm +@deftypevr Macro int EIEIO +Go home and have a glass of warm, dairy-fresh milk. +@end deftypevr + +@comment errno.h @comment GNU: Gratuitous error @deftypevr Macro int EGRATUITOUS This error code has no purpose. @@ -716,7 +755,9 @@ @comment GNU @deftypevar {char *} program_invocation_name This variable's value is the name that was used to invoke the program -running in the current process. It is the same as @code{argv[0]}. +running in the current process. It is the same as @code{argv[0]}. Note +that this is not necessarily a useful file name; often it contains no +directory names. @xref{Program Arguments}. @end deftypevar @comment errno.h @@ -728,9 +769,8 @@ everything up to the last slash, if any.) @end deftypevar -Both @code{program_invocation_name} and -@code{program_invocation_short_name} are set up by the system before -@code{main} is called. +The library initialization code sets up both of these variables before +calling @code{main}. @strong{Portability Note:} These two variables are GNU extensions. If you want your program to work with non-GNU libraries, you must save the @@ -750,7 +790,7 @@ save it in a local variable instead, because those other library functions might overwrite @code{errno} in the meantime. -@example +@smallexample #include #include #include @@ -763,12 +803,14 @@ errno = 0; stream = fopen (name, "r"); - if (!stream) @{ - fprintf (stderr, "%s: Couldn't open file %s; %s\n", - program_invocation_short_name, name, strerror (errno)); - exit (EXIT_FAILURE); - @} else + if (stream == NULL) + @{ + fprintf (stderr, "%s: Couldn't open file %s; %s\n", + program_invocation_short_name, name, strerror (errno)); + exit (EXIT_FAILURE); + @} + else return stream; @} -@end example +@end smallexample diff -ruN glibc-1.06/manual/examples/db.c glibc-1.07/manual/examples/db.c --- glibc-1.06/manual/examples/db.c Mon Oct 19 21:15:42 1992 +++ glibc-1.07/manual/examples/db.c Sun Jun 20 19:32:02 1993 @@ -32,7 +32,8 @@ my_group = getgrgid (my_passwd->pw_gid); if (!my_group) { - printf ("Couldn't find out about group %d.\n", (int) my_passwd->pw_gid); + printf ("Couldn't find out about group %d.\n", + (int) my_passwd->pw_gid); exit (EXIT_FAILURE); } diff -ruN glibc-1.06/manual/examples/filecli.c glibc-1.07/manual/examples/filecli.c --- glibc-1.06/manual/examples/filecli.c +++ glibc-1.07/manual/examples/filecli.c Thu Jun 10 18:00:35 1993 @@ -0,0 +1,54 @@ +#include +#include +#include +#include +#include +#include + +#define SERVER "/tmp/serversocket" +#define CLIENT "/tmp/mysocket" +#define MAXMSG 512 +#define MESSAGE "Yow!!! Are we having fun yet?!?" + +int +main (void) +{ + extern int make_named_socket (const char *name); + int sock; + char message[MAXMSG]; + struct sockaddr_un name; + size_t size; + int nbytes; + + /* Make the socket. */ + sock = make_named_socket (CLIENT); + + /* Initialize the server socket address. */ + name.sun_family = AF_UNIX; + strcpy (name.sun_path, SERVER); + size = strlen (name.sun_path) + sizeof (name.sun_family); + + /* Send the datagram. */ + nbytes = sendto (sock, MESSAGE, strlen (MESSAGE) + 1, 0, + (struct sockaddr *) & name, size); + if (nbytes < 0) + { + perror ("sendto (client)"); + exit (EXIT_FAILURE); + } + + /* Wait for a reply. */ + nbytes = recvfrom (sock, message, MAXMSG, 0, NULL, 0); + if (nbytes < 0) + { + perror ("recfrom (client)"); + exit (EXIT_FAILURE); + } + + /* Print a diagnostic message. */ + fprintf (stderr, "Client: got message: %s\n", message); + + /* Clean up. */ + remove (CLIENT); + close (sock); +} diff -ruN glibc-1.06/manual/examples/fileclient.c glibc-1.07/manual/examples/fileclient.c --- glibc-1.06/manual/examples/fileclient.c Mon Nov 9 19:24:50 1992 +++ glibc-1.07/manual/examples/fileclient.c @@ -1,54 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#define SERVER "/tmp/serversocket" -#define CLIENT "/tmp/mysocket" -#define MAXMSG 512 -#define MESSAGE "Yow!!! Are we having fun yet?!?" - -int -main (void) -{ - extern int make_named_socket (const char *name); - int sock; - char message[MAXMSG]; - struct sockaddr_un name; - size_t size; - int nbytes; - - /* Make the socket. */ - sock = make_named_socket (CLIENT); - - /* Initialize the server socket address. */ - name.sun_family = AF_UNIX; - strcpy (name.sun_path, SERVER); - size = strlen (name.sun_path) + sizeof (name.sun_family); - - /* Send the datagram. */ - nbytes = sendto (sock, MESSAGE, strlen (MESSAGE) + 1, 0, - (struct sockaddr *) & name, size); - if (nbytes < 0) - { - perror ("sendto (client)"); - exit (EXIT_FAILURE); - } - - /* Wait for a reply. */ - nbytes = recvfrom (sock, message, MAXMSG, 0, NULL, 0); - if (nbytes < 0) - { - perror ("recfrom (client)"); - exit (EXIT_FAILURE); - } - - /* Print a diagnostic message. */ - fprintf (stderr, "Client: got message: %s\n", message); - - /* Clean up. */ - remove (CLIENT); - close (sock); -} diff -ruN glibc-1.06/manual/examples/fileserver.c glibc-1.07/manual/examples/fileserver.c --- glibc-1.06/manual/examples/fileserver.c Mon Nov 9 19:22:44 1992 +++ glibc-1.07/manual/examples/fileserver.c @@ -1,46 +0,0 @@ -#include -#include -#include -#include -#include - -#define SERVER "/tmp/serversocket" -#define MAXMSG 512 - -int -main (void) -{ - int sock; - char message[MAXMSG]; - struct sockaddr_un name; - size_t size; - int nbytes; - - /* Make the socket, then loop endlessly. */ - - sock = make_named_socket (SERVER); - while (1) - { - /* Wait for a datagram. */ - size = sizeof (name); - nbytes = recvfrom (sock, message, MAXMSG, 0, - (struct sockaddr *) & name, &size); - if (nbytes < 0) - { - perror ("recfrom (server)"); - exit (EXIT_FAILURE); - } - - /* Give a diagnostic message. */ - fprintf (stderr, "Server: got message: %s\n", message); - - /* Bounce the message back to the sender. */ - nbytes = sendto (sock, message, nbytes, 0, - (struct sockaddr *) & name, size); - if (nbytes < 0) - { - perror ("sendto (server)"); - exit (EXIT_FAILURE); - } - } -} diff -ruN glibc-1.06/manual/examples/filesrv.c glibc-1.07/manual/examples/filesrv.c --- glibc-1.06/manual/examples/filesrv.c +++ glibc-1.07/manual/examples/filesrv.c Thu Jun 10 18:00:33 1993 @@ -0,0 +1,46 @@ +#include +#include +#include +#include +#include + +#define SERVER "/tmp/serversocket" +#define MAXMSG 512 + +int +main (void) +{ + int sock; + char message[MAXMSG]; + struct sockaddr_un name; + size_t size; + int nbytes; + + /* Make the socket, then loop endlessly. */ + + sock = make_named_socket (SERVER); + while (1) + { + /* Wait for a datagram. */ + size = sizeof (name); + nbytes = recvfrom (sock, message, MAXMSG, 0, + (struct sockaddr *) & name, &size); + if (nbytes < 0) + { + perror ("recfrom (server)"); + exit (EXIT_FAILURE); + } + + /* Give a diagnostic message. */ + fprintf (stderr, "Server: got message: %s\n", message); + + /* Bounce the message back to the sender. */ + nbytes = sendto (sock, message, nbytes, 0, + (struct sockaddr *) & name, size); + if (nbytes < 0) + { + perror ("sendto (server)"); + exit (EXIT_FAILURE); + } + } +} diff -ruN glibc-1.06/manual/examples/inetcli.c glibc-1.07/manual/examples/inetcli.c --- glibc-1.06/manual/examples/inetcli.c +++ glibc-1.07/manual/examples/inetcli.c Sun Jun 20 19:39:00 1993 @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define PORT 5555 +#define MESSAGE "Yow!!! Are we having fun yet?!?" +#define SERVERHOST "churchy.gnu.ai.mit.edu" + +void +write_to_server (int filedes) +{ + int nbytes; + + nbytes = write (filedes, MESSAGE, strlen (MESSAGE) + 1); + if (nbytes < 0) + { + perror ("write"); + exit (EXIT_FAILURE); + } +} + + +int +main (void) +{ + extern void init_sockaddr (struct sockaddr_in *name, + const char *hostname, + unsigned short int port); + int sock; + struct sockaddr_in servername; + + /* Create the socket. */ + sock = socket (PF_INET, SOCK_STREAM, 0); + if (sock < 0) + { + perror ("socket (client)"); + exit (EXIT_FAILURE); + } + + /* Connect to the server. */ + init_sockaddr (&servername, SERVERHOST, PORT); + if (0 > connect (sock, + (struct sockaddr *) &servername, + sizeof (servername))) + { + perror ("connect (client)"); + exit (EXIT_FAILURE); + } + + /* Send data to the server. */ + write_to_server (sock); + close (sock); + exit (EXIT_SUCCESS); +} diff -ruN glibc-1.06/manual/examples/inetclient.c glibc-1.07/manual/examples/inetclient.c --- glibc-1.06/manual/examples/inetclient.c Tue Jan 5 17:33:12 1993 +++ glibc-1.07/manual/examples/inetclient.c @@ -1,58 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#define PORT 5555 -#define MESSAGE "Yow!!! Are we having fun yet?!?" -#define SERVERHOST "churchy.gnu.ai.mit.edu" - -void -write_to_server (int filedes) -{ - int nbytes; - - nbytes = write (filedes, MESSAGE, strlen (MESSAGE) + 1); - if (nbytes < 0) - { - perror ("write"); - exit (EXIT_FAILURE); - } -} - - -int -main (void) -{ - extern void init_sockaddr (struct sockaddr_in *name, - const char *hostname, unsigned short int port); - int sock; - struct sockaddr_in servername; - - /* Create the socket. */ - sock = socket (PF_INET, SOCK_STREAM, 0); - if (sock < 0) - { - perror ("socket (client)"); - exit (EXIT_FAILURE); - } - - /* Connect to the server. */ - init_sockaddr (&servername, SERVERHOST, PORT); - if (0 > connect (sock, - (struct sockaddr *) &servername, - sizeof (servername))) - { - perror ("connect (client)"); - exit (EXIT_FAILURE); - } - - /* Send data to the server. */ - write_to_server (sock); - close (sock); - exit (EXIT_SUCCESS); -} diff -ruN glibc-1.06/manual/examples/inetserver.c glibc-1.07/manual/examples/inetserver.c --- glibc-1.06/manual/examples/inetserver.c Mon Nov 9 19:15:08 1992 +++ glibc-1.07/manual/examples/inetserver.c @@ -1,100 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#define PORT 5555 -#define MAXMSG 512 - -int -read_from_client (int filedes) -{ - char buffer[MAXMSG]; - int nbytes; - - nbytes = read (filedes, buffer, MAXMSG); - if (nbytes < 0) - { - /* Read error. */ - perror ("read"); - exit (EXIT_FAILURE); - } - else if (nbytes == 0) - /* End-of-file. */ - return -1; - else - { - /* Data read. */ - fprintf (stderr, "Server: got message: `%s'\n", buffer); - return 0; - } -} - -int -main (void) -{ - extern int make_socket (unsigned short int port); - int sock; - int status; - fd_set active_fd_set, read_fd_set; - int i; - struct sockaddr_in clientname; - size_t size; - - /* Create the socket and set it up to accept connections. */ - sock = make_socket (PORT); - if (listen (sock, 1) < 0) - { - perror ("listen"); - exit (EXIT_FAILURE); - } - - /* Initialize the set of active sockets. */ - FD_ZERO (&active_fd_set); - FD_SET (sock, &active_fd_set); - - while (1) - { - /* Block until input arrives on one or more active sockets. */ - read_fd_set = active_fd_set; - if (select (FD_SETSIZE, &read_fd_set, NULL, NULL, NULL) < 0) - { - perror ("select"); - exit (EXIT_FAILURE); - } - - /* Service all the sockets with input pending. */ - for (i = 0; i < FD_SETSIZE; ++i) - if (FD_ISSET (i, &read_fd_set)) - { - if (i == sock) - { - /* Connection request on original socket. */ - size = sizeof (clientname); - if (accept (sock, - (struct sockaddr *) &clientname, &size) < 0) - { - perror ("accept"); - exit (EXIT_FAILURE); - } - fprintf (stderr, "Server: connect from host %s, port %hd.\n", - inet_ntoa (clientname.sin_addr), - ntohs (clientname.sin_port)); - FD_SET (status, &active_fd_set); - } - else - { - /* Data arriving on an already-connected socket. */ - if (read_from_client (i) < 0) - { - close (i); - FD_CLR (i, &active_fd_set); - } - } - } - } -} diff -ruN glibc-1.06/manual/examples/inetsrv.c glibc-1.07/manual/examples/inetsrv.c --- glibc-1.06/manual/examples/inetsrv.c +++ glibc-1.07/manual/examples/inetsrv.c Sun Jun 20 19:15:00 1993 @@ -0,0 +1,101 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define PORT 5555 +#define MAXMSG 512 + +int +read_from_client (int filedes) +{ + char buffer[MAXMSG]; + int nbytes; + + nbytes = read (filedes, buffer, MAXMSG); + if (nbytes < 0) + { + /* Read error. */ + perror ("read"); + exit (EXIT_FAILURE); + } + else if (nbytes == 0) + /* End-of-file. */ + return -1; + else + { + /* Data read. */ + fprintf (stderr, "Server: got message: `%s'\n", buffer); + return 0; + } +} + +int +main (void) +{ + extern int make_socket (unsigned short int port); + int sock; + int status; + fd_set active_fd_set, read_fd_set; + int i; + struct sockaddr_in clientname; + size_t size; + + /* Create the socket and set it up to accept connections. */ + sock = make_socket (PORT); + if (listen (sock, 1) < 0) + { + perror ("listen"); + exit (EXIT_FAILURE); + } + + /* Initialize the set of active sockets. */ + FD_ZERO (&active_fd_set); + FD_SET (sock, &active_fd_set); + + while (1) + { + /* Block until input arrives on one or more active sockets. */ + read_fd_set = active_fd_set; + if (select (FD_SETSIZE, &read_fd_set, NULL, NULL, NULL) < 0) + { + perror ("select"); + exit (EXIT_FAILURE); + } + + /* Service all the sockets with input pending. */ + for (i = 0; i < FD_SETSIZE; ++i) + if (FD_ISSET (i, &read_fd_set)) + { + if (i == sock) + { + /* Connection request on original socket. */ + size = sizeof (clientname); + if (accept (sock, + (struct sockaddr *) &clientname, &size) < 0) + { + perror ("accept"); + exit (EXIT_FAILURE); + } + fprintf (stderr, + "Server: connect from host %s, port %hd.\n", + inet_ntoa (clientname.sin_addr), + ntohs (clientname.sin_port)); + FD_SET (status, &active_fd_set); + } + else + { + /* Data arriving on an already-connected socket. */ + if (read_from_client (i) < 0) + { + close (i); + FD_CLR (i, &active_fd_set); + } + } + } + } +} diff -ruN glibc-1.06/manual/examples/isockad.c glibc-1.07/manual/examples/isockad.c --- glibc-1.06/manual/examples/isockad.c +++ glibc-1.07/manual/examples/isockad.c Wed Jun 16 20:21:10 1993 @@ -0,0 +1,23 @@ +#include +#include +#include +#include +#include + +void +init_sockaddr (struct sockaddr_in *name, + const char *hostname, + unsigned short int port) +{ + struct hostent *hostinfo; + + name->sin_family = AF_INET; + name->sin_port = htons (port); + hostinfo = gethostbyname (hostname); + if (hostinfo == NULL) + { + fprintf (stderr, "Unknown host %s.\n", hostname); + exit (EXIT_FAILURE); + } + name->sin_addr = *(struct in_addr *) hostinfo->h_addr; +} diff -ruN glibc-1.06/manual/examples/isockaddr.c glibc-1.07/manual/examples/isockaddr.c --- glibc-1.06/manual/examples/isockaddr.c Mon Nov 9 18:59:08 1992 +++ glibc-1.07/manual/examples/isockaddr.c @@ -1,22 +0,0 @@ -#include -#include -#include -#include -#include - -void -init_sockaddr (struct sockaddr_in *name, - const char *hostname, unsigned short int port) -{ - struct hostent *hostinfo; - - name->sin_family = AF_INET; - name->sin_port = htons (port); - hostinfo = gethostbyname (serverhost); - if (hostinfo == NULL) - { - fprintf (stderr, "Unknown host %s.\n", hostname); - exit (EXIT_FAILURE); - } - name->sin_addr = *(struct in_addr *) hostinfo->h_addr; -} diff -ruN glibc-1.06/manual/examples/makefsock.c glibc-1.07/manual/examples/makefsock.c --- glibc-1.06/manual/examples/makefsock.c Sun Dec 27 04:29:15 1992 +++ glibc-1.07/manual/examples/makefsock.c @@ -1,43 +0,0 @@ -#include -#include -#include -#include -#include -#include - -int -make_named_socket (const char *filename) -{ - struct sockaddr_un name; - int sock; - size_t size; - - /* Create the socket. */ - - sock = socket (PF_UNIX, SOCK_DGRAM, 0); - if (sock < 0) - { - perror ("socket"); - exit (EXIT_FAILURE); - } - - /* Bind a name to the socket. */ - - name.sun_family = AF_FILE; - strcpy (name.sun_path, filename); - - /* The size of the address is - the offset of the start of the filename, - plus its length, - plus one for the terminating null byte. */ - size = (offsetof (struct sockaddr_un, sun_path) - + strlen (name.sun_path) + 1); - - if (bind (sock, (struct sockaddr *) &name, size) < 0) - { - perror ("bind"); - exit (EXIT_FAILURE); - } - - return sock; -} diff -ruN glibc-1.06/manual/examples/makeisock.c glibc-1.07/manual/examples/makeisock.c --- glibc-1.06/manual/examples/makeisock.c Mon Nov 9 18:53:13 1992 +++ glibc-1.07/manual/examples/makeisock.c @@ -1,31 +0,0 @@ -#include -#include -#include -#include - -int -make_socket (unsigned short int port) -{ - int sock; - struct sockaddr_in name; - - /* Create the socket. */ - sock = socket (PF_INET, SOCK_STREAM, 0); - if (sock < 0) - { - perror ("socket"); - exit (EXIT_FAILURE); - } - - /* Give the socket a name. */ - name.sin_family = AF_INET; - name.sin_port = htons (port); - name.sin_addr.s_addr = htonl (INADDR_ANY); - if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0) - { - perror ("bind"); - exit (EXIT_FAILURE); - } - - return sock; -} diff -ruN glibc-1.06/manual/examples/memstream.c glibc-1.07/manual/examples/memstream.c --- glibc-1.06/manual/examples/memstream.c Mon May 18 22:10:06 1992 +++ glibc-1.07/manual/examples/memstream.c @@ -1,19 +0,0 @@ -#include - -int -main (void) -{ - char *bp; - size_t size; - FILE *stream; - - stream = open_memstream (&bp, &size); - fprintf (stream, "hello"); - fflush (stream); - printf ("buf = %s, size = %d\n", bp, size); - fprintf (stream, ", world"); - fclose (stream); - printf ("buf = %s, size = %d\n", bp, size); - - return 0; -} diff -ruN glibc-1.06/manual/examples/memstrm.c glibc-1.07/manual/examples/memstrm.c --- glibc-1.06/manual/examples/memstrm.c +++ glibc-1.07/manual/examples/memstrm.c Thu Jun 10 18:00:17 1993 @@ -0,0 +1,19 @@ +#include + +int +main (void) +{ + char *bp; + size_t size; + FILE *stream; + + stream = open_memstream (&bp, &size); + fprintf (stream, "hello"); + fflush (stream); + printf ("buf = %s, size = %d\n", bp, size); + fprintf (stream, ", world"); + fclose (stream); + printf ("buf = %s, size = %d\n", bp, size); + + return 0; +} diff -ruN glibc-1.06/manual/examples/mkfsock.c glibc-1.07/manual/examples/mkfsock.c --- glibc-1.06/manual/examples/mkfsock.c +++ glibc-1.07/manual/examples/mkfsock.c Thu Jun 10 18:00:26 1993 @@ -0,0 +1,43 @@ +#include +#include +#include +#include +#include +#include + +int +make_named_socket (const char *filename) +{ + struct sockaddr_un name; + int sock; + size_t size; + + /* Create the socket. */ + + sock = socket (PF_UNIX, SOCK_DGRAM, 0); + if (sock < 0) + { + perror ("socket"); + exit (EXIT_FAILURE); + } + + /* Bind a name to the socket. */ + + name.sun_family = AF_FILE; + strcpy (name.sun_path, filename); + + /* The size of the address is + the offset of the start of the filename, + plus its length, + plus one for the terminating null byte. */ + size = (offsetof (struct sockaddr_un, sun_path) + + strlen (name.sun_path) + 1); + + if (bind (sock, (struct sockaddr *) &name, size) < 0) + { + perror ("bind"); + exit (EXIT_FAILURE); + } + + return sock; +} diff -ruN glibc-1.06/manual/examples/mkisock.c glibc-1.07/manual/examples/mkisock.c --- glibc-1.06/manual/examples/mkisock.c +++ glibc-1.07/manual/examples/mkisock.c Thu Jun 10 18:00:27 1993 @@ -0,0 +1,31 @@ +#include +#include +#include +#include + +int +make_socket (unsigned short int port) +{ + int sock; + struct sockaddr_in name; + + /* Create the socket. */ + sock = socket (PF_INET, SOCK_STREAM, 0); + if (sock < 0) + { + perror ("socket"); + exit (EXIT_FAILURE); + } + + /* Give the socket a name. */ + name.sin_family = AF_INET; + name.sin_port = htons (port); + name.sin_addr.s_addr = htonl (INADDR_ANY); + if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0) + { + perror ("bind"); + exit (EXIT_FAILURE); + } + + return sock; +} diff -ruN glibc-1.06/manual/examples/search.c glibc-1.07/manual/examples/search.c --- glibc-1.06/manual/examples/search.c Mon Oct 19 15:27:47 1992 +++ glibc-1.07/manual/examples/search.c Mon Aug 30 17:10:55 1993 @@ -5,28 +5,29 @@ /* Define an array of critters to sort. */ struct critter -{ - char *name; - char *species; -}; - -struct critter muppets[]= -{ - {"Kermit", "frog"}, - {"Piggy", "pig"}, - {"Gonzo", "whatever"}, - {"Fozzie", "bear"}, - {"Sam", "eagle"}, - {"Robin", "frog"}, - {"Animal", "animal"}, - {"Camilla", "chicken"}, - {"Sweetums", "monster"}, - {"Dr. Strangepork", "pig"}, - {"Link Hogthrob", "pig"}, - {"Zoot", "human"}, - {"Dr. Bunsen Honeydew", "human"}, - {"Beaker", "human"}, - {"Swedish Chef", "human"}}; + { + const char *name; + const char *species; + }; + +struct critter muppets[] = + { + {"Kermit", "frog"}, + {"Piggy", "pig"}, + {"Gonzo", "whatever"}, + {"Fozzie", "bear"}, + {"Sam", "eagle"}, + {"Robin", "frog"}, + {"Animal", "animal"}, + {"Camilla", "chicken"}, + {"Sweetums", "monster"}, + {"Dr. Strangepork", "pig"}, + {"Link Hogthrob", "pig"}, + {"Zoot", "human"}, + {"Dr. Bunsen Honeydew", "human"}, + {"Beaker", "human"}, + {"Swedish Chef", "human"} + }; int count = sizeof (muppets) / sizeof (struct critter); @@ -54,7 +55,7 @@ /* Do the lookup into the sorted array. */ void -find_critter (char *name) +find_critter (const char *name) { struct critter target, *result; target.name = name; diff -ruN glibc-1.06/manual/examples/select.c glibc-1.07/manual/examples/select.c --- glibc-1.06/manual/examples/select.c Mon Oct 19 16:56:12 1992 +++ glibc-1.07/manual/examples/select.c Sun Jun 20 19:39:00 1993 @@ -18,12 +18,15 @@ timeout.tv_usec = 0; /* @code{select} returns 0 if timeout, 1 if input available, -1 if error. */ - return TEMP_FAILURE_RETRY (select (FD_SETSIZE, &set, NULL, NULL, &timeout)); + return TEMP_FAILURE_RETRY (select (FD_SETSIZE, + &set, NULL, NULL, + &timeout)); } int main (void) { - fprintf (stderr, "select returned %d.\n", input_timeout (STDIN_FILENO, 5)); + fprintf (stderr, "select returned %d.\n", + input_timeout (STDIN_FILENO, 5)); return 0; } diff -ruN glibc-1.06/manual/examples/stpcpy.c glibc-1.07/manual/examples/stpcpy.c --- glibc-1.06/manual/examples/stpcpy.c Fri Oct 16 19:27:45 1992 +++ glibc-1.07/manual/examples/stpcpy.c Mon Aug 30 16:46:14 1993 @@ -1,10 +1,13 @@ #include +#include int main (void) { + char buffer[10]; char *to = buffer; to = stpcpy (to, "foo"); to = stpcpy (to, "bar"); - printf ("%s\n", buffer); + puts (buffer); + return 0; } diff -ruN glibc-1.06/manual/examples/strftim.c glibc-1.07/manual/examples/strftim.c --- glibc-1.06/manual/examples/strftim.c +++ glibc-1.07/manual/examples/strftim.c Thu Jun 10 18:00:38 1993 @@ -0,0 +1,31 @@ +#include +#include + +#define SIZE 256 + +int +main (void) +{ + char buffer[SIZE]; + time_t curtime; + struct tm *loctime; + + /* Get the current time. */ + curtime = time (NULL); + + /* Convert it to local time representation. */ + loctime = localtime (&curtime); + + /* Print out the date and time in the standard format. */ + fputs (asctime (loctime), stdout); + +/*@group*/ + /* Print it out in a nice format. */ + strftime (buffer, SIZE, "Today is %A, %B %d.\n", loctime); + fputs (buffer, stdout); + strftime (buffer, SIZE, "The time is %I:%M %p.\n", loctime); + fputs (buffer, stdout); + + return 0; +} +/*@end group*/ diff -ruN glibc-1.06/manual/examples/strftime.c glibc-1.07/manual/examples/strftime.c --- glibc-1.06/manual/examples/strftime.c Mon Oct 19 19:24:10 1992 +++ glibc-1.07/manual/examples/strftime.c @@ -1,31 +0,0 @@ -#include -#include - -#define SIZE 256 - -int -main (void) -{ - char buffer[SIZE]; - time_t curtime; - struct tm *loctime; - - /* Get the current time. */ - curtime = time (NULL); - - /* Convert it to local time representation. */ - loctime = localtime (&curtime); - - /* Print out the date and time in the standard format. */ - fputs (asctime (loctime), stdout); - -/*@group*/ - /* Print it out in a nice format. */ - strftime (buffer, SIZE, "Today is %A, %B %d.\n", loctime); - fputs (buffer, stdout); - strftime (buffer, SIZE, "The time is %I:%M %p.\n", loctime); - fputs (buffer, stdout); - - return 0; -} -/*@end group*/ diff -ruN glibc-1.06/manual/examples/strncat.c glibc-1.07/manual/examples/strncat.c --- glibc-1.06/manual/examples/strncat.c Mon May 18 22:10:10 1992 +++ glibc-1.07/manual/examples/strncat.c Mon Aug 30 16:57:13 1993 @@ -8,7 +8,7 @@ main () { strncpy (buffer, "hello", SIZE); - printf ("%s\n", buffer); + puts (buffer); strncat (buffer, ", world", SIZE - strlen (buffer) - 1); - printf ("%s\n", buffer); + puts (buffer); } diff -ruN glibc-1.06/manual/filecli.c.texi glibc-1.07/manual/filecli.c.texi --- glibc-1.06/manual/filecli.c.texi +++ glibc-1.07/manual/filecli.c.texi Thu Jun 10 18:00:36 1993 @@ -0,0 +1,54 @@ +#include +#include +#include +#include +#include +#include + +#define SERVER "/tmp/serversocket" +#define CLIENT "/tmp/mysocket" +#define MAXMSG 512 +#define MESSAGE "Yow!!! Are we having fun yet?!?" + +int +main (void) +@{ + extern int make_named_socket (const char *name); + int sock; + char message[MAXMSG]; + struct sockaddr_un name; + size_t size; + int nbytes; + + /* @r{Make the socket.} */ + sock = make_named_socket (CLIENT); + + /* @r{Initialize the server socket address.} */ + name.sun_family = AF_UNIX; + strcpy (name.sun_path, SERVER); + size = strlen (name.sun_path) + sizeof (name.sun_family); + + /* @r{Send the datagram.} */ + nbytes = sendto (sock, MESSAGE, strlen (MESSAGE) + 1, 0, + (struct sockaddr *) & name, size); + if (nbytes < 0) + @{ + perror ("sendto (client)"); + exit (EXIT_FAILURE); + @} + + /* @r{Wait for a reply.} */ + nbytes = recvfrom (sock, message, MAXMSG, 0, NULL, 0); + if (nbytes < 0) + @{ + perror ("recfrom (client)"); + exit (EXIT_FAILURE); + @} + + /* @r{Print a diagnostic message.} */ + fprintf (stderr, "Client: got message: %s\n", message); + + /* @r{Clean up.} */ + remove (CLIENT); + close (sock); +@} diff -ruN glibc-1.06/manual/fileclient.c.texi glibc-1.07/manual/fileclient.c.texi --- glibc-1.06/manual/fileclient.c.texi Tue Jan 5 14:46:16 1993 +++ glibc-1.07/manual/fileclient.c.texi @@ -1,54 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#define SERVER "/tmp/serversocket" -#define CLIENT "/tmp/mysocket" -#define MAXMSG 512 -#define MESSAGE "Yow!!! Are we having fun yet?!?" - -int -main (void) -@{ - extern int make_named_socket (const char *name); - int sock; - char message[MAXMSG]; - struct sockaddr_un name; - size_t size; - int nbytes; - - /* @r{Make the socket. } */ - sock = make_named_socket (CLIENT); - - /* @r{Initialize the server socket address. } */ - name.sun_family = AF_UNIX; - strcpy (name.sun_path, SERVER); - size = strlen (name.sun_path) + sizeof (name.sun_family); - - /* @r{Send the datagram. } */ - nbytes = sendto (sock, MESSAGE, strlen (MESSAGE) + 1, 0, - (struct sockaddr *) & name, size); - if (nbytes < 0) - @{ - perror ("sendto (client)"); - exit (EXIT_FAILURE); - @} - - /* @r{Wait for a reply. } */ - nbytes = recvfrom (sock, message, MAXMSG, 0, NULL, 0); - if (nbytes < 0) - @{ - perror ("recfrom (client)"); - exit (EXIT_FAILURE); - @} - - /* @r{Print a diagnostic message. } */ - fprintf (stderr, "Client: got message: %s\n", message); - - /* @r{Clean up. } */ - remove (CLIENT); - close (sock); -@} diff -ruN glibc-1.06/manual/fileserver.c.texi glibc-1.07/manual/fileserver.c.texi --- glibc-1.06/manual/fileserver.c.texi Tue Jan 5 14:45:57 1993 +++ glibc-1.07/manual/fileserver.c.texi @@ -1,46 +0,0 @@ -#include -#include -#include -#include -#include - -#define SERVER "/tmp/serversocket" -#define MAXMSG 512 - -int -main (void) -@{ - int sock; - char message[MAXMSG]; - struct sockaddr_un name; - size_t size; - int nbytes; - - /* @r{Make the socket, then loop endlessly. } */ - - sock = make_named_socket (SERVER); - while (1) - @{ - /* @r{Wait for a datagram. } */ - size = sizeof (name); - nbytes = recvfrom (sock, message, MAXMSG, 0, - (struct sockaddr *) & name, &size); - if (nbytes < 0) - @{ - perror ("recfrom (server)"); - exit (EXIT_FAILURE); - @} - - /* @r{Give a diagnostic message. } */ - fprintf (stderr, "Server: got message: %s\n", message); - - /* @r{Bounce the message back to the sender. } */ - nbytes = sendto (sock, message, nbytes, 0, - (struct sockaddr *) & name, size); - if (nbytes < 0) - @{ - perror ("sendto (server)"); - exit (EXIT_FAILURE); - @} - @} -@} diff -ruN glibc-1.06/manual/filesrv.c.texi glibc-1.07/manual/filesrv.c.texi --- glibc-1.06/manual/filesrv.c.texi +++ glibc-1.07/manual/filesrv.c.texi Thu Jun 10 18:00:34 1993 @@ -0,0 +1,46 @@ +#include +#include +#include +#include +#include + +#define SERVER "/tmp/serversocket" +#define MAXMSG 512 + +int +main (void) +@{ + int sock; + char message[MAXMSG]; + struct sockaddr_un name; + size_t size; + int nbytes; + + /* @r{Make the socket, then loop endlessly.} */ + + sock = make_named_socket (SERVER); + while (1) + @{ + /* @r{Wait for a datagram.} */ + size = sizeof (name); + nbytes = recvfrom (sock, message, MAXMSG, 0, + (struct sockaddr *) & name, &size); + if (nbytes < 0) + @{ + perror ("recfrom (server)"); + exit (EXIT_FAILURE); + @} + + /* @r{Give a diagnostic message.} */ + fprintf (stderr, "Server: got message: %s\n", message); + + /* @r{Bounce the message back to the sender.} */ + nbytes = sendto (sock, message, nbytes, 0, + (struct sockaddr *) & name, size); + if (nbytes < 0) + @{ + perror ("sendto (server)"); + exit (EXIT_FAILURE); + @} + @} +@} diff -ruN glibc-1.06/manual/filesys.texi glibc-1.07/manual/filesys.texi --- glibc-1.06/manual/filesys.texi Wed May 12 14:26:00 1993 +++ glibc-1.07/manual/filesys.texi Tue Aug 3 02:58:40 1993 @@ -24,6 +24,7 @@ * Creating Directories:: A system call just for creating a directory. * File Attributes:: Attributes of individual files. * Making Special Files:: How to create special files. +* Temporary Files:: Naming and creating temporary files. @end menu @node Working Directory @@ -87,7 +88,7 @@ @w{@code{getcwd (NULL, 0)}} using only the standard behavior of @code{getcwd}: -@example +@smallexample char * gnu_getcwd () @{ @@ -104,7 +105,7 @@ buffer = (char *) xmalloc (size); @} @} -@end example +@end smallexample @noindent @xref{Malloc Examples}, for information about @code{xmalloc}, which is @@ -266,7 +267,8 @@ subsequent call. @strong{Portability Note:} On some systems, @code{readdir} may not -return entries for @file{.} and @file{..}. @xref{File Name Resolution}. +return entries for @file{.} and @file{..}, even though these are always +valid file names in any directory. @xref{File Name Resolution}. If there are no more entries in the directory or an error is detected, @code{readdir} returns a null pointer. The following @code{errno} error @@ -299,13 +301,13 @@ Here's a simple program that prints the names of the files in the current working directory: -@example +@smallexample @include dir.c.texi -@end example +@end smallexample The order in which files appear in a directory tends to be fairly random. A more useful program would sort the entries (perhaps by -alphabetizing them) before printing them; see @ref{Array Sort Function} +alphabetizing them) before printing them; see @ref{Array Sort Function}. @c ??? not documented: scandir, alphasort @@ -518,7 +520,7 @@ there was room to return the entire name. So make a bigger buffer and call @code{readlink} again. Here is an example: -@example +@smallexample char * readlink_malloc (char *filename) @{ @@ -534,7 +536,7 @@ size *= 2; @} @} -@end example +@end smallexample @c @group Invalid outside example. A value of @code{-1} is returned in case of error. In addition to the @@ -909,9 +911,9 @@ You can tell (approximately) whether a file is sparse by comparing this value with @code{st_size}, like this: -@example +@smallexample (st.st_blocks * 512 < st.st_size) -@end example +@end smallexample This test is not perfect because a file that is just slightly sparse might not be detected as sparse at all. For practical applications, @@ -1093,16 +1095,16 @@ @code{S_IFMT} to extract the file type code, and compared to the appropriate type code constant. For example, -@example +@smallexample S_ISCHR (@var{mode}) -@end example +@end smallexample @noindent is equivalent to: -@example +@smallexample ((@var{mode} & S_IFMT) == S_IFCHR) -@end example +@end smallexample @comment sys/stat.h @comment BSD @@ -1495,7 +1497,7 @@ Here is an example showing how to read the mask with @code{umask} without changing it permanently: -@example +@smallexample mode_t read_umask (void) @{ @@ -1502,7 +1504,7 @@ mask = umask (0); umask (mask); @} -@end example +@end smallexample @noindent However, it is better to use @code{getumask} if you just want to read @@ -1848,3 +1850,146 @@ @end table @end deftypefun +@node Temporary Files +@section Temporary Files + +If you need to use a temporary file in your program, you can use the +@code{tmpfile} function to open it. Or you can use the @code{tmpnam} +function make a name for a temporary file and then open it in the usual +way with @code{fopen}. + +The @code{tempnam} function is like @code{tmpnam} but lets you choose +what directory temporary files will go in, and something about what +their file names will look like. + +These facilities are declared in the header file @file{stdio.h}. +@pindex stdio.h + +@comment stdio.h +@comment ANSI +@deftypefun {FILE *} tmpfile (void) +This function creates a temporary binary file for update mode, as if by +calling @code{fopen} with mode @code{"wb+"}. The file is deleted +automatically when it is closed or when the program terminates. (On +some other ANSI C systems the file may fail to be deleted if the program +terminates abnormally). +@end deftypefun + +@comment stdio.h +@comment ANSI +@deftypefun {char *} tmpnam (char *@var{result}) +This function constructs and returns a file name that is a valid file +name and that does not name any existing file. If the @var{result} +argument is a null pointer, the return value is a pointer to an internal +static string, which might be modified by subsequent calls. Otherwise, +the @var{result} argument should be a pointer to an array of at least +@code{L_tmpnam} characters, and the result is written into that array. + +It is possible for @code{tmpnam} to fail if you call it too many times. +This is because the fixed length of a temporary file name gives room for +only a finite number of different names. If @code{tmpnam} fails, it +returns a null pointer. +@end deftypefun + +@comment stdio.h +@comment ANSI +@deftypevr Macro int L_tmpnam +The value of this macro is an integer constant expression that represents +the minimum allocation size of a string large enough to hold the +file name generated by the @code{tmpnam} function. +@end deftypevr + +@comment stdio.h +@comment ANSI +@deftypevr Macro int TMP_MAX +The macro @code{TMP_MAX} is a lower bound for how many temporary names +you can create with @code{tmpnam}. You can rely on being able to call +@code{tmpnam} at least this many times before it might fail saying you +have made too many temporary file names. + +With the GNU library, you can create a very large number of temporary +file names---if you actually create the files, you will probably run out +of disk space before you run out of names. Some other systems have a +fixed, small limit on the number of temporary files. The limit is never +less than @code{25}. +@end deftypevr + +@comment stdio.h +@comment SVID +@deftypefun {char *} tempnam (const char *@var{dir}, const char *@var{prefix}) +This function generates a unique temporary filename. If @var{prefix} is +not a null pointer, up to five characters of this string are used as +a prefix for the file name. + +The directory prefix for the temporary file name is determined by testing +each of the following, in sequence. The directory must exist and be +writable. + +@itemize @bullet +@item +The environment variable @code{TMPDIR}, if it is defined. + +@item +The @var{dir} argument, if it is not a null pointer. + +@item +The value of the @code{P_tmpdir} macro. + +@item +The directory @file{/tmp}. +@end itemize + +This function is defined for SVID compatibility. +@end deftypefun +@cindex TMPDIR environment variable + +@comment stdio.h +@comment SVID +@c !!! are we putting SVID/GNU/POSIX.1/BSD in here or not?? +@deftypevr {SVID Macro} {char *} P_tmpdir +This macro is the name of the default directory for temporary files. +@end deftypevr + +Older Unix systems did not have the functions just described. Instead +they used @code{mktemp} and @code{mkstemp}. Both of these functions +work by modifying a file name template string you pass. The last six +characters of this string must be @samp{XXXXXX}. These six @samp{X}s +are replaced with six characters which make the whole string a unique +file name. Usually the template string is something like +@samp{/tmp/@var{prefix}XXXXXX}, and each program uses a unique @var{prefix}. + +@strong{Note:} Because @code{mktemp} and @code{mkstemp} modify the +template string, you @emph{must not} pass string constants to them. +String constants are normally in read-only storage, so your program +would crash when @code{mktemp} or @code{mkstemp} tried to modify the +string. + +@comment unistd.h +@comment Unix +@deftypefun {char *} mktemp (char *@var{template}) +The @code{mktemp} function generates a unique file name by modifying +@var{template} as described above. If successful, it returns +@var{template} as modified. If @code{mktemp} cannot find a unique file +name, it makes @var{template} an empty string and returns that. If +@var{template} does not end with @samp{XXXXXX}, @code{mktemp} returns a +null pointer. +@end deftypefun + +@comment unistd.h +@comment BSD +@deftypefun int mkstemp (char *@var{template}) +The @code{mkstemp} function generates a unique file name just as +@code{mktemp} does, but it also opens the file for you with @code{open} +(@pxref{Opening and Closing Files}). If successful, it modifies +@var{template} in place and returns a file descriptor open on that file +for reading and writing. If @code{mkstemp} cannot create a +uniquely-named file, it makes @var{template} an empty string and returns +@code{-1}. If @var{template} does not end with @samp{XXXXXX}, +@code{mkstemp} returns @code{-1} and does not modify @var{template}. +@end deftypefun + +Unlike @code{mktemp}, @code{mkstemp} is actually guaranteed to create a +unique file that cannot possibly clash with any other program trying to +create a temporary file. This is because it works by calling +@code{open} with the @code{O_EXCL} flag bit, which says you want to +always create a new file, and get an error if the file already exists. diff -ruN glibc-1.06/manual/inetcli.c.texi glibc-1.07/manual/inetcli.c.texi --- glibc-1.06/manual/inetcli.c.texi +++ glibc-1.07/manual/inetcli.c.texi Sun Jun 20 19:56:31 1993 @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define PORT 5555 +#define MESSAGE "Yow!!! Are we having fun yet?!?" +#define SERVERHOST "churchy.gnu.ai.mit.edu" + +void +write_to_server (int filedes) +@{ + int nbytes; + + nbytes = write (filedes, MESSAGE, strlen (MESSAGE) + 1); + if (nbytes < 0) + @{ + perror ("write"); + exit (EXIT_FAILURE); + @} +@} + + +int +main (void) +@{ + extern void init_sockaddr (struct sockaddr_in *name, + const char *hostname, + unsigned short int port); + int sock; + struct sockaddr_in servername; + + /* @r{Create the socket.} */ + sock = socket (PF_INET, SOCK_STREAM, 0); + if (sock < 0) + @{ + perror ("socket (client)"); + exit (EXIT_FAILURE); + @} + + /* @r{Connect to the server.} */ + init_sockaddr (&servername, SERVERHOST, PORT); + if (0 > connect (sock, + (struct sockaddr *) &servername, + sizeof (servername))) + @{ + perror ("connect (client)"); + exit (EXIT_FAILURE); + @} + + /* @r{Send data to the server.} */ + write_to_server (sock); + close (sock); + exit (EXIT_SUCCESS); +@} diff -ruN glibc-1.06/manual/inetclient.c.texi glibc-1.07/manual/inetclient.c.texi --- glibc-1.06/manual/inetclient.c.texi Tue Jan 5 17:39:32 1993 +++ glibc-1.07/manual/inetclient.c.texi @@ -1,58 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#define PORT 5555 -#define MESSAGE "Yow!!! Are we having fun yet?!?" -#define SERVERHOST "churchy.gnu.ai.mit.edu" - -void -write_to_server (int filedes) -@{ - int nbytes; - - nbytes = write (filedes, MESSAGE, strlen (MESSAGE) + 1); - if (nbytes < 0) - @{ - perror ("write"); - exit (EXIT_FAILURE); - @} -@} - - -int -main (void) -@{ - extern void init_sockaddr (struct sockaddr_in *name, - const char *hostname, unsigned short int port); - int sock; - struct sockaddr_in servername; - - /* @r{Create the socket. } */ - sock = socket (PF_INET, SOCK_STREAM, 0); - if (sock < 0) - @{ - perror ("socket (client)"); - exit (EXIT_FAILURE); - @} - - /* @r{Connect to the server. } */ - init_sockaddr (&servername, SERVERHOST, PORT); - if (0 > connect (sock, - (struct sockaddr *) &servername, - sizeof (servername))) - @{ - perror ("connect (client)"); - exit (EXIT_FAILURE); - @} - - /* @r{Send data to the server. } */ - write_to_server (sock); - close (sock); - exit (EXIT_SUCCESS); -@} diff -ruN glibc-1.06/manual/inetserver.c.texi glibc-1.07/manual/inetserver.c.texi --- glibc-1.06/manual/inetserver.c.texi Tue Jan 5 14:45:35 1993 +++ glibc-1.07/manual/inetserver.c.texi @@ -1,100 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#define PORT 5555 -#define MAXMSG 512 - -int -read_from_client (int filedes) -@{ - char buffer[MAXMSG]; - int nbytes; - - nbytes = read (filedes, buffer, MAXMSG); - if (nbytes < 0) - @{ - /* @r{Read error. } */ - perror ("read"); - exit (EXIT_FAILURE); - @} - else if (nbytes == 0) - /* @r{End-of-file. } */ - return -1; - else - @{ - /* @r{Data read. } */ - fprintf (stderr, "Server: got message: `%s'\n", buffer); - return 0; - @} -@} - -int -main (void) -@{ - extern int make_socket (unsigned short int port); - int sock; - int status; - fd_set active_fd_set, read_fd_set; - int i; - struct sockaddr_in clientname; - size_t size; - - /* @r{Create the socket and set it up to accept connections. } */ - sock = make_socket (PORT); - if (listen (sock, 1) < 0) - @{ - perror ("listen"); - exit (EXIT_FAILURE); - @} - - /* @r{Initialize the set of active sockets. } */ - FD_ZERO (&active_fd_set); - FD_SET (sock, &active_fd_set); - - while (1) - @{ - /* @r{Block until input arrives on one or more active sockets. } */ - read_fd_set = active_fd_set; - if (select (FD_SETSIZE, &read_fd_set, NULL, NULL, NULL) < 0) - @{ - perror ("select"); - exit (EXIT_FAILURE); - @} - - /* @r{Service all the sockets with input pending. } */ - for (i = 0; i < FD_SETSIZE; ++i) - if (FD_ISSET (i, &read_fd_set)) - @{ - if (i == sock) - @{ - /* @r{Connection request on original socket. } */ - size = sizeof (clientname); - if (accept (sock, - (struct sockaddr *) &clientname, &size) < 0) - @{ - perror ("accept"); - exit (EXIT_FAILURE); - @} - fprintf (stderr, "Server: connect from host %s, port %hd.\n", - inet_ntoa (clientname.sin_addr), - ntohs (clientname.sin_port)); - FD_SET (status, &active_fd_set); - @} - else - @{ - /* @r{Data arriving on an already-connected socket. } */ - if (read_from_client (i) < 0) - @{ - close (i); - FD_CLR (i, &active_fd_set); - @} - @} - @} - @} -@} diff -ruN glibc-1.06/manual/inetsrv.c.texi glibc-1.07/manual/inetsrv.c.texi --- glibc-1.06/manual/inetsrv.c.texi +++ glibc-1.07/manual/inetsrv.c.texi Sun Jun 20 19:56:32 1993 @@ -0,0 +1,101 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define PORT 5555 +#define MAXMSG 512 + +int +read_from_client (int filedes) +@{ + char buffer[MAXMSG]; + int nbytes; + + nbytes = read (filedes, buffer, MAXMSG); + if (nbytes < 0) + @{ + /* @r{Read error.} */ + perror ("read"); + exit (EXIT_FAILURE); + @} + else if (nbytes == 0) + /* @r{End-of-file.} */ + return -1; + else + @{ + /* @r{Data read.} */ + fprintf (stderr, "Server: got message: `%s'\n", buffer); + return 0; + @} +@} + +int +main (void) +@{ + extern int make_socket (unsigned short int port); + int sock; + int status; + fd_set active_fd_set, read_fd_set; + int i; + struct sockaddr_in clientname; + size_t size; + + /* @r{Create the socket and set it up to accept connections.} */ + sock = make_socket (PORT); + if (listen (sock, 1) < 0) + @{ + perror ("listen"); + exit (EXIT_FAILURE); + @} + + /* @r{Initialize the set of active sockets.} */ + FD_ZERO (&active_fd_set); + FD_SET (sock, &active_fd_set); + + while (1) + @{ + /* @r{Block until input arrives on one or more active sockets.} */ + read_fd_set = active_fd_set; + if (select (FD_SETSIZE, &read_fd_set, NULL, NULL, NULL) < 0) + @{ + perror ("select"); + exit (EXIT_FAILURE); + @} + + /* @r{Service all the sockets with input pending.} */ + for (i = 0; i < FD_SETSIZE; ++i) + if (FD_ISSET (i, &read_fd_set)) + @{ + if (i == sock) + @{ + /* @r{Connection request on original socket.} */ + size = sizeof (clientname); + if (accept (sock, + (struct sockaddr *) &clientname, &size) < 0) + @{ + perror ("accept"); + exit (EXIT_FAILURE); + @} + fprintf (stderr, + "Server: connect from host %s, port %hd.\n", + inet_ntoa (clientname.sin_addr), + ntohs (clientname.sin_port)); + FD_SET (status, &active_fd_set); + @} + else + @{ + /* @r{Data arriving on an already-connected socket.} */ + if (read_from_client (i) < 0) + @{ + close (i); + FD_CLR (i, &active_fd_set); + @} + @} + @} + @} +@} diff -ruN glibc-1.06/manual/intro.texi glibc-1.07/manual/intro.texi --- glibc-1.06/manual/intro.texi Wed May 12 14:26:02 1993 +++ glibc-1.07/manual/intro.texi Mon Aug 30 19:40:09 1993 @@ -16,7 +16,7 @@ The purpose of this manual is to tell you how to use the facilities of the GNU library. We have mentioned which features belong to which standards to help you identify things that are potentially nonportable -to other systems. But the emphasis on this manual is not on strict +to other systems. But the emphasis in this manual is not on strict portability. @menu @@ -127,17 +127,17 @@ Interface for Computer Environments}. POSIX is derived mostly from various versions of the Unix operating system. -The library facilities specified by the POSIX standard are a superset of -those required by ANSI C; POSIX specifies additional features for ANSI C -functions, as well as specifying new additional functions. In general, -the additional requirements and functionality defined by the POSIX -standard are aimed at providing lower-level support for a particular -kind of operating system environment, rather than general programming -language support which can run in many diverse operating system -environments.@refill +The library facilities specified by the POSIX standards are a superset +of those required by ANSI C; POSIX specifies additional features for +ANSI C functions, as well as specifying new additional functions. In +general, the additional requirements and functionality defined by the +POSIX standards are aimed at providing lower-level support for a +particular kind of operating system environment, rather than general +programming language support which can run in many diverse operating +system environments.@refill The GNU C library implements all of the functions specified in -@cite{IEEE Std 1003.1-1988, the POSIX System Application Program +@cite{IEEE Std 1003.1-1990, the POSIX System Application Program Interface}, commonly referred to as POSIX.1. The primary extensions to the ANSI C facilities specified by this standard include file system interface primitives (@pxref{File System Interface}), device-specific @@ -144,10 +144,10 @@ terminal control functions (@pxref{Low-Level Terminal Interface}), and process control functions (@pxref{Child Processes}). -Some facilities from draft 11 of @cite{IEEE Std 1003.2, the POSIX Shell -and Utilities standard} (POSIX.2) are also implemented in the GNU -library. These include utilities for dealing with regular expressions -and other pattern matching facilities (@pxref{Pattern Matching}). +Some facilities from @cite{IEEE Std 1003.2-1992, the POSIX Shell and +Utilities standard} (POSIX.2) are also implemented in the GNU library. +These include utilities for dealing with regular expressions and other +pattern matching facilities (@pxref{Pattern Matching}). @comment Roland sez: @comment The GNU C library as it stands conforms to 1003.2 draft 11, which @@ -166,15 +166,17 @@ @node Berkeley Unix, SVID, POSIX, Standards and Portability @subsection Berkeley Unix @cindex BSD Unix -@cindex 4.x BSD Unix +@cindex 4.@var{n} BSD Unix @cindex Berkeley Unix @cindex SunOS @cindex Unix, Berkeley -The GNU C library defines facilities from some other versions of Unix, -specifically from the 4.2 BSD and 4.3 BSD Unix systems (also known as -@dfn{Berkeley Unix}) and from @dfn{SunOS} (a popular 4.2 BSD derivative -that includes some Unix System V functionality). +The GNU C library defines facilities from some versions of Unix which +are not formally standardized, specifically from the 4.2 BSD, 4.3 BSD, +and 4.4 BSD Unix systems (also known as @dfn{Berkeley Unix}) and from +@dfn{SunOS} (a popular 4.2 BSD derivative that includes some Unix System +V functionality). These systems support most of the ANSI and POSIX +facilities, and 4.4 BSD and newer releases of SunOS in fact support them all. The BSD facilities include symbolic links (@pxref{Symbolic Links}), the @code{select} function (@pxref{Waiting for I/O}), the BSD signal @@ -197,11 +199,9 @@ obscure and less generally useful facilities required by the SVID are not included. (In fact, Unix System V itself does not provide them all.) -@strong{Incomplete:} Are there any particular System V facilities that -ought to be mentioned specifically here? +@c !!! mention sysv ipc/shmem when it is there. - @node Using the Library, Roadmap to the Manual, Standards and Portability, Introduction @section Using the Library @@ -248,9 +248,9 @@ @samp{#include} preprocessor directive. The C language supports two forms of this directive; the first, -@example +@smallexample #include "@var{header}" -@end example +@end smallexample @noindent is typically used to include a header file @var{header} that you write @@ -258,9 +258,9 @@ interfaces between the different parts of your particular application. By contrast, -@example +@smallexample #include -@end example +@end smallexample @noindent is typically used to include a header file @file{file.h} that contains @@ -325,9 +325,9 @@ Taking the address of a library function works even if it is also defined as a macro. This is because, in this context, the name of the function isn't followed by the left parenthesis that is syntactically -necessary to recognize the a macro call. +necessary to recognize a macro call. -You might occasionally want to avoid using the a macro definition of a +You might occasionally want to avoid using the macro definition of a function---perhaps to make your program easier to debug. There are two ways you can do this: @@ -347,17 +347,17 @@ For example, suppose the header file @file{stdlib.h} declares a function named @code{abs} with -@example +@smallexample extern int abs (int); -@end example +@end smallexample @noindent and also provides a macro definition for @code{abs}. Then, in: -@example +@smallexample #include int f (int *i) @{ return (abs (++*i)); @} -@end example +@end smallexample @noindent the reference to @code{abs} might refer to either a macro or a function. @@ -364,13 +364,13 @@ On the other hand, in each of the following examples the reference is to a function and not a macro. -@example +@smallexample #include int g (int *i) @{ return ((abs)(++*i)); @} #undef abs int h (int *i) @{ return (abs (++*i)); @} -@end example +@end smallexample Since macro definitions that double for a function behave in exactly the same way as the actual function version, there is usually no @@ -386,7 +386,7 @@ The names of all library types, macros, variables and functions that come from the ANSI C standard are reserved unconditionally; your program @strong{may not} redefine these names. All other library names are -reserved if your programs explicitly includes the header file that +reserved if your program explicitly includes the header file that defines or declares them. There are several reasons for these restrictions: @@ -447,7 +447,7 @@ @item Names of all existing mathematics functions (@pxref{Mathematics}) suffixed with @samp{f} or @samp{l} are reserved for corresponding -functions that operate on @code{float} or @code{long double} arguments, +functions that operate on @code{float} and @code{long double} arguments, respectively. @item @@ -523,16 +523,19 @@ The exact set of features available when you compile a source file is controlled by which @dfn{feature test macros} you define. -If you compile your programs using @samp{gcc -ansi}, you get only -the ANSI C library features, unless you explicitly request additional +If you compile your programs using @samp{gcc -ansi}, you get only the +ANSI C library features, unless you explicitly request additional features by defining one or more of the feature macros. -@xref{Options,,, gcc.info, The GNU CC Manual}, for more information -about GCC options.@refill +@xref{Invoking GCC,, GNU CC Command Options, gcc.info, The GNU CC Manual}, +for more information about GCC options.@refill You should define these macros by using @samp{#define} preprocessor -directives at the top of your source code files. You could also use -the @samp{-D} option to GCC, but it's better if you make the source -files indicate their own meaning in a self-contained way. +directives at the top of your source code files. These directives +@emph{must} come before any @code{#include} of a system header file. It +is best to make them the very first thing in the file, preceded only by +comments. You could also use the @samp{-D} option to GCC, but it's +better if you make the source files indicate their own meaning in a +self-contained way. @comment (none) @comment POSIX.1 @@ -563,6 +566,19 @@ corresponding features specified by the POSIX.1 standard. If this macro is defined, the 4.3 BSD definitions take precedence over the POSIX definitions. + +Due to the nature of some of the conflicts between 4.3 BSD and POSIX.1, +you need to use a special @dfn{BSD compatibility library} when linking +programs compiled for BSD compatibility. This is because some functions +must be defined in two different ways, one of them in the normal C +library, and one of them in the compatibility library. If your program +defines @code{_BSD_SOURCE}, you must give the option @samp{-lbsd-compat} +to the compiler or linker when linking the program, to tell it to find +functions in this special compatibility library before looking for them in +the normal C library. +@pindex -lbsd-compat +@pindex bsd-compat +@cindex BSD compatibility library. @end defvr @comment (none) @@ -583,33 +599,36 @@ BSD definitions take precedence over the POSIX definitions, use this sequence of definitions: -@example +@smallexample #define _GNU_SOURCE #define _BSD_SOURCE #define _SVID_SOURCE -@end example +@end smallexample + +Note that if you do this, you must link your program with the BSD +compatibility library by passing the @samp{-lbsd-compat} option to the +compiler or linker. @strong{Note:} If you forget to do this, you may +get very strange errors at run time. @end defvr -We recommend you use @code{_GNU_SOURCE} in new programs. -If you don't specify the @samp{-ansi} option to GCC and don't define -any of these macros explicitly, the effect as the same as defining -@code{_GNU_SOURCE}. - -When you define a feature test macro to request a larger class of -features, it is harmless to define in addition a feature test macro for -a subset of those features. For example, if you define -@code{_POSIX_C_SOURCE}, then defining @code{_POSIX_SOURCE} as well has -no effect. Likewise, if you define @code{_GNU_SOURCE}, then defining -either @code{_POSIX_SOURCE} or @code{_POSIX_C_SOURCE} or -@code{_SVID_SOURCE} as well has no effect. - -Note, however, that the features of @code{_BSD_SOURCE} are not a subset -of any of the other feature test macros supported. This is because it -defines BSD features that take precedence over the POSIX features that -are requested by the other macros. For this reason, defining -@code{_BSD_SOURCE} in addition to the other feature test macros does -have an effect: it causes the BSD features to take priority over the -conflicting POSIX features. +We recommend you use @code{_GNU_SOURCE} in new programs. If you don't +specify the @samp{-ansi} option to GCC and don't define any of these macros +explicitly, the effect is the same as defining @code{_GNU_SOURCE}. + +When you define a feature test macro to request a larger class of features, +it is harmless to define in addition a feature test macro for a subset of +those features. For example, if you define @code{_POSIX_C_SOURCE}, then +defining @code{_POSIX_SOURCE} as well has no effect. Likewise, if you +define @code{_GNU_SOURCE}, then defining either @code{_POSIX_SOURCE} or +@code{_POSIX_C_SOURCE} or @code{_SVID_SOURCE} as well has no effect. + +Note, however, that the features of @code{_BSD_SOURCE} are not a subset of +any of the other feature test macros supported. This is because it defines +BSD features that take precedence over the POSIX features that are +requested by the other macros. For this reason, defining +@code{_BSD_SOURCE} in addition to the other feature test macros does have +an effect: it causes the BSD features to take priority over the conflicting +POSIX features. @node Roadmap to the Manual, , Using the Library, Introduction @section Roadmap to the Manual @@ -624,9 +643,12 @@ @item @ref{Language Features}, contains information about library support for -standard parts of the C language, including things like the -@code{sizeof} operator and the symbolic constant @code{NULL}, and how to -write functions accepting variable numbers of arguments. +standard parts of the C language, including things like the @code{sizeof} +operator and the symbolic constant @code{NULL}, how to write functions +accepting variable numbers of arguments, and constants describing the +ranges and other properties of the numerical types. There is also a simple +debugging mechanism which allows you to put assertions in your code, and +have diagnostic messages printed if the tests fail. @item @ref{Memory Allocation}, describes the GNU library's facilities for @@ -644,22 +666,6 @@ manipulating strings (null-terminated character arrays) and general byte arrays, including operations such as copying and comparison. -@item -@ref{Extended Characters}, contains information about manipulating -characters and strings using character sets larger than will fit in -the usual @code{char} data type. - -@item -@ref{Locales}, describes how selecting a particular country -or language affects the behavior of the library. For example, the locale -affects collation sequences for strings and how monetary values are -formatted. - -@item -@ref{Searching and Sorting}, contains information about functions -for searching and sorting arrays. You can use these functions on any -kind of array by providing an appropriate comparison function. - @item @ref{I/O Overview}, gives an overall look at the input and output facilities in the library, and contains information about basic concepts @@ -692,8 +698,7 @@ @ref{Sockets}, describes a more complicated interprocess communication mechanism that allows processes running on different machines to communicate over a network. This chapter also contains information about -Internet host addressing and how to use the system network databases, -such as @file{/etc/hosts}. +Internet host addressing and how to use the system network databases. @item @ref{Low-Level Terminal Interface}, describes how you can change the @@ -701,11 +706,6 @@ characters typed by the user, for example, read this chapter. @item -@ref{Consistency Checking}, contains information about a simple -debugging mechanism. You can put assertions in your code, and -diagnostic messages are printed if the test fails. - -@item @ref{Mathematics}, contains information about the math library functions. These include things like random-number generators and remainder functions on integers as well as the usual trigonometric and @@ -712,12 +712,38 @@ exponential functions on floating-point numbers. @item +@ref{Low-Level Arithmetic Functions}, describes functions for simple +arithmetic, analysis of floating-point values, and reading numbers from +strings. + +@item +@ref{Searching and Sorting}, contains information about functions +for searching and sorting arrays. You can use these functions on any +kind of array by providing an appropriate comparison function. + +@item +@ref{Pattern Matching}, presents functions for matching regular expressions +and shell file name patterns, and for expanding words as the shell does. + +@item @ref{Date and Time}, describes functions for measuring both calendar time and CPU time, as well as functions for setting alarms and timers. +@item +@ref{Extended Characters}, contains information about manipulating +characters and strings using character sets larger than will fit in +the usual @code{char} data type. + +@item +@ref{Locales}, describes how selecting a particular country +or language affects the behavior of the library. For example, the locale +affects collation sequences for strings and how monetary values are +formatted. + @item @ref{Non-Local Exits}, contains descriptions of the @code{setjmp} and -@code{longjmp} functions. +@code{longjmp} functions. These functions provide a facility for +@code{goto}-like jumps which can jump from one function to another. @item @ref{Signal Handling}, tells you all about signals---what they are, @@ -725,14 +751,14 @@ signal is delivered, and how to prevent signals from arriving during critical sections of your program. -@item -@ref{Child Processes}, contains information about how to start new processes -and run programs. - @item @ref{Process Startup}, tells how your programs can access their command-line arguments and environment variables. +@item +@ref{Child Processes}, contains information about how to start new processes +and run programs. + @item @ref{Job Control}, describes functions for manipulating process groups. This material is probably only of interest if you are writing a shell. @@ -747,16 +773,19 @@ under. @item -@ref{Range of Type}, contains information about -parameters that characterize the sizes of integer and floating-point -types used by the particular C implementation that your program has -been compiled with. Most of these parameters are provided for -compatibility with ANSI C. +@ref{System Configuration}, tells you how you can get information about +various operating system limits. Most of these parameters are provided for +compatibility with POSIX. -@item -@ref{System Configuration}, tells you how you can get -information about various operating system limits. Most of these -parameters are provided for compatibility with POSIX. +@item +@ref{Library Summary}, gives a summary of all the functions, variables, and +macros in the library, with complete data types and function prototypes, +and says what standard or system each is derived from. + +@item +@ref{Maintenance}, explains how to build and install the GNU C library on +your system, how to report any bugs you might find, and how to add new +functions or port the library to a new system. @end itemize If you already know the name of the facility you are interested in, you @@ -763,4 +792,6 @@ can look it up in @ref{Library Summary}. This gives you a summary of its syntax and a pointer to where you can find a more detailed description. This appendix is particularly useful if you just want to -verify the order and type of arguments to a function, for example. +verify the order and type of arguments to a function, for example. It +also tells you what standard or system each function, variable, or macro +is derived from. diff -ruN glibc-1.06/manual/io.texi glibc-1.07/manual/io.texi --- glibc-1.06/manual/io.texi Wed May 12 14:26:03 1993 +++ glibc-1.07/manual/io.texi Mon Aug 30 20:33:06 1993 @@ -29,7 +29,7 @@ communication facilities. @item -@ref{Sockets}, covering a more complicated interprocess communication +@ref{Sockets}, which covers a more complicated interprocess communication facility with support for networking. @item @@ -128,10 +128,11 @@ @node File Position, , Streams and File Descriptors, I/O Concepts @subsection File Position -One of the attributes of an open file is its @dfn{file position} -that keeps track of where in the file the next character is to be read -or written. In the GNU system, the file position is simply an integer -representing the number of bytes from the beginning of the file. +One of the attributes of an open file is its @dfn{file position} that +keeps track of where in the file the next character is to be read or +written. In the GNU system, and all POSIX.1 systems, the file position +is simply an integer representing the number of bytes from the beginning +of the file. The file position is normally set to the beginning of the file when it is opened, and each time a character is read or written, the file @@ -146,7 +147,8 @@ You can change the file position using the @code{fseek} function on a stream (@pxref{File Positioning}) or the @code{lseek} function on a file descriptor (@pxref{I/O Primitives}). If you try to change the file -position on a file that doesn't support random access, you get an error. +position on a file that doesn't support random access, you get the +@code{ESPIPE} error. @cindex random-access files Streams and descriptors that are opened for @dfn{append access} are @@ -230,7 +232,7 @@ @subsection File Name Resolution A file name consists of file name components separated by slash -(@samp{/}) characters. On the systems that that GNU library supports, +(@samp{/}) characters. On the systems that the GNU C library supports, multiple successive @samp{/} characters are equivalent to a single @samp{/} character. @@ -247,10 +249,12 @@ @cindex root directory @cindex absolute file name If a file name begins with a @samp{/}, the first component in the file -name is located in the @dfn{root directory} of the process. Such a file -name is called an @dfn{absolute file name}. -@c !!! xref here to chroot, if we ever document chroot. +name is located in the @dfn{root directory} of the process (usually all +processes on the system have the same root directory). Such a file name +is called an @dfn{absolute file name}. +@c !!! xref here to chroot, if we ever document chroot. -rm @c ??? I don't like the idea of encouraging smoking--rms. +@c !!! What the hell is that bad pun supposed to mean? I don't get it. -rm @cindex relative file name Otherwise, the first component in the file name is located in the @@ -263,7 +267,9 @@ components. The file name component @file{.} refers to the directory itself, while the file name component @file{..} refers to its @dfn{parent directory} (the directory that contains the link for the -directory in question). +directory in question). As a special case, @file{..} in the root +directory refers to the root directory itself, since it has no parent; +thus @file{/..} is the same as @file{/}. Here are some examples of file names: @@ -330,11 +336,18 @@ @item ENOENT This error is reported when a file referenced as a directory component -in the file name doesn't exist. +in the file name doesn't exist, or when a component is a symbolic link +whose target file does not exist. @xref{Symbolic Links}. @item ENOTDIR A file that is referenced as a directory component in the file name exists, but it isn't a directory. + +@item ELOOP +Too many symbolic links were resolved while trying to look up the file +name. The system has an arbitrary limit on the number of symbolic links +that may be resolved in looking up a single file name, as a primitive +way to detect loops. @xref{Symbolic Links}. @end table diff -ruN glibc-1.06/manual/isockad.c.texi glibc-1.07/manual/isockad.c.texi --- glibc-1.06/manual/isockad.c.texi +++ glibc-1.07/manual/isockad.c.texi Wed Jun 16 20:21:11 1993 @@ -0,0 +1,23 @@ +#include +#include +#include +#include +#include + +void +init_sockaddr (struct sockaddr_in *name, + const char *hostname, + unsigned short int port) +@{ + struct hostent *hostinfo; + + name->sin_family = AF_INET; + name->sin_port = htons (port); + hostinfo = gethostbyname (hostname); + if (hostinfo == NULL) + @{ + fprintf (stderr, "Unknown host %s.\n", hostname); + exit (EXIT_FAILURE); + @} + name->sin_addr = *(struct in_addr *) hostinfo->h_addr; +@} diff -ruN glibc-1.06/manual/isockaddr.c.texi glibc-1.07/manual/isockaddr.c.texi --- glibc-1.06/manual/isockaddr.c.texi Tue Jan 5 14:44:47 1993 +++ glibc-1.07/manual/isockaddr.c.texi @@ -1,22 +0,0 @@ -#include -#include -#include -#include -#include - -void -init_sockaddr (struct sockaddr_in *name, - const char *hostname, unsigned short int port) -@{ - struct hostent *hostinfo; - - name->sin_family = AF_INET; - name->sin_port = htons (port); - hostinfo = gethostbyname (serverhost); - if (hostinfo == NULL) - @{ - fprintf (stderr, "Unknown host %s.\n", hostname); - exit (EXIT_FAILURE); - @} - name->sin_addr = *(struct in_addr *) hostinfo->h_addr; -@} diff -ruN glibc-1.06/manual/job.texi glibc-1.07/manual/job.texi --- glibc-1.06/manual/job.texi Wed May 12 14:26:05 1993 +++ glibc-1.07/manual/job.texi Thu Jun 24 20:35:21 1993 @@ -269,7 +269,7 @@ holds information about a single subprocess. Here are the relevant data structure declarations: -@example +@smallexample @group /* @r{A process is a single process.} */ typedef struct process @@ -299,12 +299,12 @@ /* @r{The active jobs are linked into a list. This is its head.} */ job *first_job = NULL; @end group -@end example +@end smallexample Here are some utility functions that are used for operating on @code{job} objects. -@example +@smallexample @group /* @r{Find the active job with the indicated @var{pgid}.} */ job * @@ -346,7 +346,7 @@ return 1; @} @end group -@end example +@end smallexample @node Initializing the Shell, Launching Jobs, Data Structures, Implementing a Shell @@ -395,7 +395,7 @@ Here is the initialization code for the sample shell that shows how to do all of this. -@example +@smallexample /* @r{Keep track of attributes of the shell.} */ #include @@ -448,7 +448,7 @@ tcgetattr (shell_terminal, &shell_tmodes); @} @} -@end example +@end smallexample @node Launching Jobs, Foreground and Background, Initializing the Shell, Implementing a Shell @@ -521,7 +521,7 @@ for launching a program. The function is executed by each child process immediately after it has been forked by the shell, and never returns. -@example +@smallexample void launch_process (process *p, pid_t pgid, int infile, int outfile, int errfile, @@ -572,7 +572,7 @@ perror ("execvp"); exit (1); @} -@end example +@end smallexample If the shell is not running interactively, this function does not do anything with process groups or signals. Remember that a shell not @@ -584,7 +584,7 @@ functions to put the newly created job into the foreground or background; these are discussed in @ref{Foreground and Background}. -@example +@smallexample void launch_job (job *j, int foreground) @{ @@ -612,7 +612,8 @@ pid = fork (); if (pid == 0) /* @r{This is the child process.} */ - launch_process (p, j->pgid, infile, outfile, j->stderr, foreground); + launch_process (p, j->pgid, infile, + outfile, j->stderr, foreground); else if (pid < 0) @{ /* @r{The fork failed.} */ @@ -648,7 +649,7 @@ else put_job_in_background (j, 0); @} -@end example +@end smallexample @node Foreground and Background, Stopped and Terminated Jobs, Launching Jobs, Implementing a Shell @@ -682,7 +683,7 @@ Here is the sample shell's function for doing all of this. -@example +@smallexample @group /* @r{Put job @var{j} in the foreground. If @var{cont} is nonzero,} @r{restore the saved terminal modes and send the process group a} @@ -717,7 +718,7 @@ tcsetattr (shell_terminal, TCSADRAIN, &shell_tmodes); @} @end group -@end example +@end smallexample @cindex background job, launching If the process group is launched as a background job, the shell should @@ -727,7 +728,7 @@ In the sample shell, there is not much that needs to be done to put a job into the background. Here is the function it uses: -@example +@smallexample /* @r{Put a job in the background. If the cont argument is true, send} @r{the process group a @code{SIGCONT} signal to wake it up.} */ @@ -739,7 +740,7 @@ if (kill (-j->pgid, SIGCONT) < 0) perror ("kill (SIGCONT)"); @} -@end example +@end smallexample @node Stopped and Terminated Jobs, Continuing Stopped Jobs, Foreground and Background, Implementing a Shell @@ -776,7 +777,7 @@ Here are the parts of the sample shell program that deal with checking the status of jobs and reporting the information to the user. -@example +@smallexample @group /* @r{Store the status of the process @var{pid} that was returned by waitpid.} @r{Return 0 if all went well, nonzero otherwise.} */ @@ -911,7 +912,7 @@ @} @} @end group -@end example +@end smallexample @node Continuing Stopped Jobs, Missing Pieces, Stopped and Terminated Jobs, Implementing a Shell @subsection Continuing Stopped Jobs @@ -924,19 +925,18 @@ a job in the foreground, the shell should wait for the job to stop or complete, as if the job had just been launched in the foreground. -The sample shell program uses the same set of -functions---@w{@code{put_job_in_foreground}} and -@w{@code{put_job_in_background}}---to handle both newly created and -continued jobs. The definitions of these functions were given in -@ref{Foreground and Background}. When continuing a stopped job, a -nonzero value is passed as the @var{cont} argument to ensure that the -@code{SIGCONT} signal is sent and the terminal modes reset, as -appropriate. +The sample shell program handles both newly created and continued jobs +with the same pair of functions, @w{@code{put_job_in_foreground}} and +@w{@code{put_job_in_background}}. The definitions of these functions +were given in @ref{Foreground and Background}. When continuing a +stopped job, a nonzero value is passed as the @var{cont} argument to +ensure that the @code{SIGCONT} signal is sent and the terminal modes +reset, as appropriate. This leaves only a function for updating the shell's internal bookkeeping about the job being continued: -@example +@smallexample @group /* @r{Mark a stopped job J as being running again.} */ @@ -964,7 +964,7 @@ put_job_in_background (j, 1); @} @end group -@end example +@end smallexample @node Missing Pieces, , Continuing Stopped Jobs, Implementing a Shell @subsection The Missing Pieces @@ -1101,8 +1101,8 @@ BSD systems will not include @file{unistd.h}, which defines @code{getpgrp} specially under @code{_BSD_SOURCE}. You must link such programs with the @code{-lbsd-compat} option to get the BSD definition.@refill -@findex -lbsd-compat -@findex bsd-compat +@pindex -lbsd-compat +@pindex bsd-compat @cindex BSD compatibility library @comment unistd.h diff -ruN glibc-1.06/manual/lang.texi glibc-1.07/manual/lang.texi --- glibc-1.06/manual/lang.texi Wed May 12 14:26:07 1993 +++ glibc-1.07/manual/lang.texi Tue Jun 29 03:19:53 1993 @@ -1,5 +1,5 @@ @node Language Features, Library Summary, System Configuration, Top -@appendix C Language Facilities Implemented By the Library +@appendix C Language Facilities in the Library Some of the facilities implemented by the C library really should be thought of as parts of the C language itself. These facilities ought to @@ -56,9 +56,9 @@ program (@pxref{Aborting a Program}) after printing a message of the form: -@example +@smallexample @file{@var{file}}:@var{linenum}: Assertion `@var{expression}' failed. -@end example +@end smallexample @noindent on the standard error stream @code{stderr} (@pxref{Standard Streams}). @@ -209,13 +209,13 @@ additional arguments. The syntax of ANSI C requires at least one fixed argument before the @samp{@dots{}}. For example, -@example +@smallexample int func (const char *a, int b, @dots{}) @{ @dots{} @} -@end example +@end smallexample @noindent outlines a definition of a function @code{func} which returns an @@ -437,9 +437,9 @@ arguments facility. @comment Yes, this example has been tested. -@example +@smallexample @include add.c.texi -@end example +@end smallexample @node Old Varargs @subsubsection Old-Style Variadic Functions @@ -457,19 +457,19 @@ them. First of all, you must use old-style non-prototype syntax, like this: -@example +@smallexample tree build (va_alist) va_dcl @{ -@end example +@end smallexample Secondly, you must give @code{va_start} just one argument, like this: -@example +@smallexample va_list p; va_start (p); -@end example +@end smallexample These are the special macros used for defining old-style variadic functions: @@ -580,12 +580,12 @@ possibility of error, when a function argument or value is supposed to have type @code{size_t}, never declare its type in any other way. -@strong{Compatibility Note:} Pre-ANSI C implementations generally used -@code{unsigned int} for representing object sizes and @code{int} for -pointer subtraction results. They did not necessarily define either -@code{size_t} or @code{ptrdiff_t}. Unix systems did define -@code{size_t}, in @file{sys/types.h}, but the definition was usually a -signed type. +@strong{Compatibility Note:} Implementations of C before the advent of +ANSI C generally used @code{unsigned int} for representing object sizes +and @code{int} for pointer subtraction results. They did not +necessarily define either @code{size_t} or @code{ptrdiff_t}. Unix +systems did define @code{size_t}, in @file{sys/types.h}, but the +definition was usually a signed type. @node Data Type Measurements @section Data Type Measurements @@ -615,9 +615,9 @@ an integer type is for using an array of @code{long int} as a bit vector. You can access the bit at index @var{n} with -@example +@smallexample vector[@var{n} / LONGBITS] & (1 << (@var{n} % LONGBITS)) -@end example +@end smallexample @noindent provided you define @code{LONGBITS} as the number of bits in a @@ -638,9 +638,9 @@ You can compute the number of bits in any data type @var{type} like this: -@example +@smallexample sizeof (@var{type}) * CHAR_BIT -@end example +@end smallexample @end table @node Range of Type @@ -941,7 +941,7 @@ This value characterizes the rounding mode for floating point addition. The following values indicate standard rounding modes: -@c !!! want @group or somesuch near here +@need 750 @table @code @item -1 @@ -967,13 +967,13 @@ of @code{FLT_ROUNDS}, if the other aspects of the representation match the IEEE single-precision standard. -@example - 0 1 2 3 - 1.00000003 1.0 1.0 1.00000012 1.0 - 1.00000007 1.0 1.00000012 1.00000012 1.0 --1.00000003 -1.0 -1.0 -1.0 -1.00000012 --1.00000007 -1.0 -1.00000012 -1.0 -1.00000012 -@end example +@smallexample + 0 1 2 3 + 1.00000003 1.0 1.0 1.00000012 1.0 + 1.00000007 1.0 1.00000012 1.00000012 1.0 +-1.00000003 -1.0 -1.0 -1.0 -1.00000012 +-1.00000007 -1.0 -1.00000012 -1.0 -1.00000012 +@end smallexample @comment float.h @comment ANSI @@ -991,11 +991,11 @@ yields @code{1.0} (even though mathematically it should not) due to the limited number of mantissa digits: -@example +@smallexample float radix = FLT_RADIX; 1.0f + 1.0f / radix / radix / @dots{} / radix -@end example +@end smallexample @noindent where @code{radix} appears @code{FLT_MANT_DIG} times. @@ -1167,7 +1167,7 @@ @code{float} data type, appropriate values for the corresponding parameters are: -@example +@smallexample FLT_RADIX 2 FLT_MANT_DIG 24 FLT_DIG 6 @@ -1178,11 +1178,11 @@ FLT_MIN 1.17549435E-38F FLT_MAX 3.40282347E+38F FLT_EPSILON 1.19209290E-07F -@end example +@end smallexample Here are the values for the @code{double} data type: -@example +@smallexample DBL_MANT_DIG 53 DBL_DIG 15 DBL_MIN_EXP -1021 @@ -1192,7 +1192,7 @@ DBL_MAX 1.7976931348623157E+308 DBL_MIN 2.2250738585072014E-308 DBL_EPSILON 2.2204460492503131E-016 -@end example +@end smallexample @node Structure Measurement @subsection Structure Field Offset Measurement diff -ruN glibc-1.06/manual/lgpl.texinfo glibc-1.07/manual/lgpl.texinfo --- glibc-1.06/manual/lgpl.texinfo Fri Oct 16 18:04:34 1992 +++ glibc-1.07/manual/lgpl.texinfo Sun Jun 20 22:00:04 1993 @@ -535,12 +535,12 @@ school, if any, to sign a ``copyright disclaimer'' for the library, if necessary. Here is a sample; alter the names: -@example -Yoyodyne, Inc., hereby disclaims all copyright interest in the -library `Frob' (a library for tweaking knobs) written by James Random Hacker. +@smallexample +Yoyodyne, Inc., hereby disclaims all copyright interest in the library +`Frob' (a library for tweaking knobs) written by James Random Hacker. @var{signature of Ty Coon}, 1 April 1990 Ty Coon, President of Vice -@end example +@end smallexample That's all there is to it! diff -ruN glibc-1.06/manual/libc.cp glibc-1.07/manual/libc.cp --- glibc-1.06/manual/libc.cp Mon May 17 17:03:25 1993 +++ glibc-1.07/manual/libc.cp Wed Dec 29 18:38:49 1993 @@ -1,781 +1,782 @@ \entry {library}{1}{library} -\entry {standards}{2}{standards} +\entry {standards}{1}{standards} \entry {ANSI C}{2}{ANSI C} -\entry {POSIX}{3}{POSIX} -\entry {POSIX.1}{3}{POSIX.1} -\entry {IEEE Std 1003.1}{3}{IEEE Std 1003.1} -\entry {POSIX.2}{3}{POSIX.2} -\entry {IEEE Std 1003.2}{3}{IEEE Std 1003.2} +\entry {POSIX}{2}{POSIX} +\entry {POSIX.1}{2}{POSIX.1} +\entry {IEEE Std 1003.1}{2}{IEEE Std 1003.1} +\entry {POSIX.2}{2}{POSIX.2} +\entry {IEEE Std 1003.2}{2}{IEEE Std 1003.2} \entry {BSD Unix}{3}{BSD Unix} -\entry {4.x BSD Unix}{3}{4.x BSD Unix} +\entry {4.n BSD Unix}{3}{4.\var {n} BSD Unix} \entry {Berkeley Unix}{3}{Berkeley Unix} \entry {SunOS}{3}{SunOS} \entry {Unix, Berkeley}{3}{Unix, Berkeley} -\entry {SVID}{4}{SVID} -\entry {System V Unix}{4}{System V Unix} -\entry {Unix, System V}{4}{Unix, System V} +\entry {SVID}{3}{SVID} +\entry {System V Unix}{3}{System V Unix} +\entry {Unix, System V}{3}{Unix, System V} \entry {header files}{4}{header files} \entry {definition (compared to declaration)}{4}{definition (compared to declaration)} \entry {declaration (compared to definition)}{4}{declaration (compared to definition)} -\entry {shadowing functions with macros}{6}{shadowing functions with macros} -\entry {removing macros that shadow functions}{6}{removing macros that shadow functions} -\entry {undefining macros that shadow functions}{6}{undefining macros that shadow functions} -\entry {reserved names}{7}{reserved names} -\entry {name space}{7}{name space} -\entry {feature test macros}{9}{feature test macros} +\entry {shadowing functions with macros}{5}{shadowing functions with macros} +\entry {removing macros that shadow functions}{5}{removing macros that shadow functions} +\entry {undefining macros that shadow functions}{5}{undefining macros that shadow functions} +\entry {reserved names}{6}{reserved names} +\entry {name space}{6}{name space} +\entry {feature test macros}{8}{feature test macros} +\entry {BSD compatibility library.}{9}{BSD compatibility library.} \entry {error reporting}{13}{error reporting} \entry {reporting errors}{13}{reporting errors} \entry {error codes}{13}{error codes} \entry {status codes}{13}{status codes} -\entry {program name}{24}{program name} -\entry {name of running program}{24}{name of running program} -\entry {memory allocation}{27}{memory allocation} -\entry {storage allocation}{27}{storage allocation} -\entry {dynamic allocation}{27}{dynamic allocation} -\entry {static allocation}{27}{static allocation} -\entry {automatic allocation}{27}{automatic allocation} -\entry {unconstrained storage allocation}{28}{unconstrained storage allocation} -\entry {malloc function}{28}{\code {malloc} function} -\entry {heap, dynamic allocation from}{28}{heap, dynamic allocation from} -\entry {allocation of memory with malloc}{29}{allocation of memory with \code {malloc}} -\entry {freeing memory allocated with malloc}{30}{freeing memory allocated with \code {malloc}} -\entry {heap, freeing memory from}{30}{heap, freeing memory from} -\entry {changing the size of a block (malloc)}{31}{changing the size of a block (\code {malloc})} -\entry {efficiency and malloc}{33}{efficiency and \code {malloc}} -\entry {page boundary}{34}{page boundary} -\entry {alignment (with malloc)}{34}{alignment (with \code {malloc})} -\entry {heap consistency checking}{34}{heap consistency checking} -\entry {consistency checking, of heap}{34}{consistency checking, of heap} -\entry {allocation hooks, for malloc}{35}{allocation hooks, for \code {malloc}} -\entry {allocation statistics}{36}{allocation statistics} -\entry {obstacks}{38}{obstacks} -\entry {allocation (obstacks)}{40}{allocation (obstacks)} -\entry {freeing (obstacks)}{41}{freeing (obstacks)} -\entry {macros}{42}{macros} -\entry {growing objects (in obstacks)}{43}{growing objects (in obstacks)} -\entry {changing the size of a block (obstacks)}{43}{changing the size of a block (obstacks)} -\entry {shrinking objects}{45}{shrinking objects} -\entry {efficiency and obstacks}{45}{efficiency and obstacks} -\entry {obstack status}{47}{obstack status} -\entry {status of obstack}{47}{status of obstack} -\entry {alignment (in obstacks)}{47}{alignment (in obstacks)} -\entry {efficiency of chunks}{48}{efficiency of chunks} -\entry {chunks}{48}{chunks} -\entry {automatic freeing}{51}{automatic freeing} -\entry {alloca function}{51}{\code {alloca} function} -\entry {automatic storage with variable size}{51}{automatic storage with variable size} -\entry {longjmp}{52}{longjmp} -\entry {alloca disadvantages}{53}{\code {alloca} disadvantages} -\entry {disadvantages of alloca}{53}{disadvantages of \code {alloca}} -\entry {variable-sized arrays}{53}{variable-sized arrays} -\entry {relocating memory allocator}{54}{relocating memory allocator} -\entry {handle}{54}{handle} -\entry {memory usage warnings}{55}{memory usage warnings} -\entry {warnings of memory almost full}{55}{warnings of memory almost full} -\entry {character testing}{57}{character testing} -\entry {classification of characters}{57}{classification of characters} -\entry {predicates on characters}{57}{predicates on characters} -\entry {character predicates}{57}{character predicates} -\entry {lower-case character}{57}{lower-case character} -\entry {upper-case character}{57}{upper-case character} -\entry {alphabetic character}{58}{alphabetic character} -\entry {digit character}{58}{digit character} -\entry {decimal digit character}{58}{decimal digit character} -\entry {alphanumeric character}{58}{alphanumeric character} -\entry {hexadecimal digit character}{58}{hexadecimal digit character} -\entry {punctuation character}{58}{punctuation character} -\entry {whitespace character}{58}{whitespace character} -\entry {blank character}{58}{blank character} -\entry {graphic character}{59}{graphic character} -\entry {printing character}{59}{printing character} -\entry {control character}{59}{control character} -\entry {ASCII character}{59}{ASCII character} -\entry {character case conversion}{59}{character case conversion} -\entry {case conversion of characters}{59}{case conversion of characters} -\entry {converting case of characters}{59}{converting case of characters} -\entry {string, representation of}{61}{string, representation of} -\entry {string}{61}{string} -\entry {null character}{61}{null character} -\entry {string literal}{61}{string literal} -\entry {length of string}{62}{length of string} -\entry {allocation size of string}{62}{allocation size of string} -\entry {size of string}{62}{size of string} -\entry {string length}{62}{string length} -\entry {string allocation}{62}{string allocation} -\entry {copying strings and arrays}{63}{copying strings and arrays} -\entry {string copy functions}{63}{string copy functions} -\entry {array copy functions}{63}{array copy functions} -\entry {concatenating strings}{63}{concatenating strings} -\entry {string concatenation functions}{63}{string concatenation functions} -\entry {comparing strings and arrays}{68}{comparing strings and arrays} -\entry {string comparison functions}{68}{string comparison functions} -\entry {array comparison functions}{68}{array comparison functions} -\entry {predicates on strings}{68}{predicates on strings} -\entry {predicates on arrays}{68}{predicates on arrays} -\entry {collating strings}{70}{collating strings} -\entry {string collation functions}{70}{string collation functions} -\entry {converting string to collation order}{71}{converting string to collation order} -\entry {search functions (for strings)}{73}{search functions (for strings)} -\entry {string search functions}{73}{string search functions} -\entry {tokenizing strings}{76}{tokenizing strings} -\entry {breaking a string into tokens}{76}{breaking a string into tokens} -\entry {parsing tokens from a string}{76}{parsing tokens from a string} -\entry {extended character sets}{79}{extended character sets} -\entry {wide characters}{79}{wide characters} -\entry {multibyte characters}{80}{multibyte characters} -\entry {basic byte sequence}{80}{basic byte sequence} -\entry {code, character}{84}{code, character} -\entry {character code}{84}{character code} -\entry {extended strings, converting representations}{84}{extended strings, converting representations} -\entry {converting extended strings}{84}{converting extended strings} -\entry {multibyte character, length of}{86}{multibyte character, length of} -\entry {length of multibyte character}{86}{length of multibyte character} -\entry {extended characters, converting}{86}{extended characters, converting} -\entry {converting extended characters}{86}{converting extended characters} -\entry {internationalization}{93}{internationalization} -\entry {locales}{93}{locales} -\entry {combining locales}{94}{combining locales} -\entry {categories for locales}{94}{categories for locales} -\entry {locale categories}{94}{locale categories} -\entry {changing the locale}{95}{changing the locale} -\entry {locale, changing}{95}{locale, changing} -\entry {monetary value formatting}{98}{monetary value formatting} -\entry {numeric value formatting}{98}{numeric value formatting} -\entry {decimal-point separator}{98}{decimal-point separator} -\entry {grouping of digits}{99}{grouping of digits} -\entry {currency symbols}{99}{currency symbols} -\entry {Comparison Function}{103}{Comparison Function} -\entry {search function (for arrays)}{104}{search function (for arrays)} -\entry {binary search function (for arrays)}{104}{binary search function (for arrays)} -\entry {array search function}{104}{array search function} -\entry {sort function (for arrays)}{104}{sort function (for arrays)} -\entry {quick sort function (for arrays)}{104}{quick sort function (for arrays)} -\entry {array sort function}{104}{array sort function} -\entry {stable sorting}{104}{stable sorting} -\entry {Kermit the frog}{107}{Kermit the frog} -\entry {globbing}{110}{globbing} -\entry {word expansion}{120}{word expansion} -\entry {expansion of shell words}{120}{expansion of shell words} -\entry {tilde expansion}{121}{tilde expansion} -\entry {variable substitution}{121}{variable substitution} -\entry {substitution of variables and commands}{121}{substitution of variables and commands} -\entry {command substitution}{121}{command substitution} -\entry {arithmetic expansion}{121}{arithmetic expansion} -\entry {field splitting}{121}{field splitting} -\entry {wildcard expansion}{121}{wildcard expansion} -\entry {quote removal}{121}{quote removal} -\entry {removal of quotes}{121}{removal of quotes} -\entry {opening a file}{127}{opening a file} -\entry {file position}{129}{file position} -\entry {sequential-access files}{129}{sequential-access files} -\entry {random-access files}{129}{random-access files} -\entry {append-access files}{129}{append-access files} -\entry {file name}{130}{file name} -\entry {directory}{130}{directory} -\entry {link}{130}{link} -\entry {directory entry}{130}{directory entry} -\entry {file name component}{130}{file name component} -\entry {file name resolution}{131}{file name resolution} -\entry {root directory}{131}{root directory} -\entry {absolute file name}{131}{absolute file name} -\entry {relative file name}{131}{relative file name} -\entry {parent directory}{131}{parent directory} -\entry {file name syntax errors}{132}{file name syntax errors} -\entry {usual file name syntax errors}{132}{usual file name syntax errors} -\entry {file pointer}{135}{file pointer} -\entry {standard streams}{135}{standard streams} -\entry {streams, standard}{135}{streams, standard} -\entry {standard input stream}{136}{standard input stream} -\entry {standard output stream}{136}{standard output stream} -\entry {standard error stream}{136}{standard error stream} -\entry {opening a stream}{136}{opening a stream} -\entry {closing a stream}{138}{closing a stream} -\entry {writing to a stream, by characters}{139}{writing to a stream, by characters} -\entry {reading from a stream, by characters}{140}{reading from a stream, by characters} -\entry {peeking at input}{144}{peeking at input} -\entry {unreading characters}{144}{unreading characters} -\entry {pushing input back}{144}{pushing input back} -\entry {format string, for printf}{146}{format string, for \code {printf}} -\entry {template, for printf}{146}{template, for \code {printf}} -\entry {formatted output to a stream}{146}{formatted output to a stream} -\entry {writing to a stream, formatted}{146}{writing to a stream, formatted} -\entry {conversion specifications (printf)}{146}{conversion specifications (\code {printf})} -\entry {flag character (printf)}{148}{flag character (\code {printf})} -\entry {minimum field width (printf)}{148}{minimum field width (\code {printf})} -\entry {precision (printf)}{148}{precision (\code {printf})} -\entry {type modifier character (printf)}{148}{type modifier character (\code {printf})} -\entry {output conversions, for printf}{148}{output conversions, for \code {printf}} -\entry {parsing a template string}{160}{parsing a template string} -\entry {customizing printf}{163}{customizing \code {printf}} -\entry {defining new printf conversions}{163}{defining new \code {printf} conversions} -\entry {extending printf}{163}{extending \code {printf}} -\entry {formatted input from a stream}{169}{formatted input from a stream} -\entry {reading from a stream, formatted}{169}{reading from a stream, formatted} -\entry {format string, for scanf}{169}{format string, for \code {scanf}} -\entry {template, for scanf}{169}{template, for \code {scanf}} -\entry {conversion specifications (scanf)}{169}{conversion specifications (\code {scanf})} -\entry {matching failure, in scanf}{169}{matching failure, in \code {scanf}} -\entry {flag character (scanf)}{170}{flag character (\code {scanf})} -\entry {maximum field width (scanf)}{171}{maximum field width (\code {scanf})} -\entry {type modifier character (scanf)}{171}{type modifier character (\code {scanf})} -\entry {input conversions, for scanf}{171}{input conversions, for \code {scanf}} -\entry {binary I/O to a stream}{178}{binary I/O to a stream} -\entry {block I/O to a stream}{178}{block I/O to a stream} -\entry {reading from a stream, by blocks}{178}{reading from a stream, by blocks} -\entry {writing to a stream, by blocks}{178}{writing to a stream, by blocks} -\entry {end of file, on a stream}{179}{end of file, on a stream} -\entry {text stream}{180}{text stream} -\entry {binary stream}{180}{binary stream} -\entry {lines (in a text file)}{180}{lines (in a text file)} -\entry {file positioning on a stream}{181}{file positioning on a stream} -\entry {positioning a stream}{181}{positioning a stream} -\entry {seeking on a stream}{181}{seeking on a stream} -\entry {buffering of streams}{184}{buffering of streams} -\entry {unbuffered stream}{185}{unbuffered stream} -\entry {line buffered stream}{185}{line buffered stream} -\entry {fully buffered stream}{185}{fully buffered stream} -\entry {flushing a stream}{186}{flushing a stream} -\entry {buffering, controlling}{186}{buffering, controlling} -\entry {TMPDIR environment variable}{190}{TMPDIR environment variable} -\entry {stream, for I/O to a string}{191}{stream, for I/O to a string} -\entry {string stream}{191}{string stream} -\entry {custom streams}{194}{custom streams} -\entry {programming your own streams}{194}{programming your own streams} -\entry {cookie, for custom stream}{194}{cookie, for custom stream} -\entry {hook functions (of custom streams)}{196}{hook functions (of custom streams)} -\entry {opening a file descriptor}{199}{opening a file descriptor} -\entry {closing a file descriptor}{199}{closing a file descriptor} -\entry {append mode (file status flag)}{200}{append mode (file status flag)} -\entry {create on open (file status flag)}{200}{create on open (file status flag)} -\entry {non-blocking mode (file status flag)}{200}{non-blocking mode (file status flag)} -\entry {reading from a file descriptor}{202}{reading from a file descriptor} -\entry {end-of-file, on a file descriptor}{202}{end-of-file, on a file descriptor} -\entry {writing to a file descriptor}{203}{writing to a file descriptor} -\entry {file positioning on a file descriptor}{205}{file positioning on a file descriptor} -\entry {positioning a file descriptor}{205}{positioning a file descriptor} -\entry {seeking on a file descriptor}{205}{seeking on a file descriptor} -\entry {streams, and file descriptors}{207}{streams, and file descriptors} -\entry {converting file descriptor to stream}{207}{converting file descriptor to stream} -\entry {extracting file descriptor from stream}{207}{extracting file descriptor from stream} -\entry {standard file descriptors}{208}{standard file descriptors} -\entry {file descriptors, standard}{208}{file descriptors, standard} -\entry {standard input file descriptor}{208}{standard input file descriptor} -\entry {standard output file descriptor}{208}{standard output file descriptor} -\entry {standard error file descriptor}{208}{standard error file descriptor} -\entry {channels}{208}{channels} -\entry {streams and descriptors}{208}{streams and descriptors} -\entry {descriptors and streams}{208}{descriptors and streams} -\entry {mixing descriptors and streams}{208}{mixing descriptors and streams} -\entry {linked channels}{209}{linked channels} -\entry {cleaning up a stream}{209}{cleaning up a stream} -\entry {independent channels}{209}{independent channels} -\entry {waiting for input or output}{211}{waiting for input or output} -\entry {multiplexing input}{211}{multiplexing input} -\entry {input from multiple files}{211}{input from multiple files} -\entry {file descriptor sets, for select}{211}{file descriptor sets, for \code {select}} -\entry {control operations on files}{214}{control operations on files} -\entry {fcntl function}{214}{\code {fcntl} function} -\entry {duplicating file descriptors}{215}{duplicating file descriptors} -\entry {redirecting input and output}{215}{redirecting input and output} -\entry {file descriptor flags}{218}{file descriptor flags} -\entry {close-on-exec (file descriptor flag)}{219}{close-on-exec (file descriptor flag)} -\entry {file status flags}{219}{file status flags} -\entry {file locks}{222}{file locks} -\entry {record locking}{222}{record locking} -\entry {exclusive lock}{222}{exclusive lock} -\entry {write lock}{222}{write lock} -\entry {shared lock}{222}{shared lock} -\entry {read lock}{222}{read lock} -\entry {interrupt-driven input}{226}{interrupt-driven input} -\entry {current working directory}{229}{current working directory} -\entry {working directory}{229}{working directory} -\entry {change working directory}{229}{change working directory} -\entry {accessing directories}{231}{accessing directories} -\entry {reading from a directory}{231}{reading from a directory} -\entry {directories, accessing}{231}{directories, accessing} -\entry {directory stream}{231}{directory stream} -\entry {hard link}{235}{hard link} -\entry {link, hard}{235}{link, hard} -\entry {multiple names for one file}{235}{multiple names for one file} -\entry {file names, multiple}{235}{file names, multiple} -\entry {soft link}{236}{soft link} -\entry {link, soft}{236}{link, soft} -\entry {symbolic link}{236}{symbolic link} -\entry {link, symbolic}{236}{link, symbolic} -\entry {deleting a file}{238}{deleting a file} -\entry {removing a file}{238}{removing a file} -\entry {unlinking a file}{238}{unlinking a file} -\entry {directories, deleting}{239}{directories, deleting} -\entry {deleting a directory}{239}{deleting a directory} -\entry {renaming a file}{239}{renaming a file} -\entry {creating a directory}{241}{creating a directory} -\entry {directories, creating}{241}{directories, creating} -\entry {status of a file}{242}{status of a file} -\entry {attributes of a file}{242}{attributes of a file} -\entry {file attributes}{242}{file attributes} -\entry {inode number}{244}{inode number} -\entry {file owner}{247}{file owner} -\entry {owner of a file}{247}{owner of a file} -\entry {group owner of a file}{247}{group owner of a file} -\entry {file permission bits}{249}{file permission bits} -\entry {sticky bit}{250}{sticky bit} -\entry {permission to access a file}{251}{permission to access a file} -\entry {access permission for a file}{251}{access permission for a file} -\entry {file access permission}{251}{file access permission} -\entry {file creation mask}{251}{file creation mask} -\entry {umask}{251}{umask} -\entry {testing access permission}{253}{testing access permission} -\entry {access, testing for}{253}{access, testing for} -\entry {setuid programs and file access}{253}{setuid programs and file access} -\entry {file access time}{255}{file access time} -\entry {file modification time}{255}{file modification time} -\entry {file attribute modification time}{255}{file attribute modification time} -\entry {creating special files}{257}{creating special files} -\entry {special files}{257}{special files} -\entry {pipe}{259}{pipe} -\entry {FIFO special file}{259}{FIFO special file} -\entry {creating a pipe}{259}{creating a pipe} -\entry {opening a pipe}{259}{opening a pipe} -\entry {interprocess communication, with pipes}{259}{interprocess communication, with pipes} -\entry {creating a pipe to a subprocess}{261}{creating a pipe to a subprocess} -\entry {pipe to a subprocess}{261}{pipe to a subprocess} -\entry {filtering i/o through subprocess}{261}{filtering i/o through subprocess} -\entry {creating a FIFO special file}{263}{creating a FIFO special file} -\entry {interprocess communication, with FIFO}{263}{interprocess communication, with FIFO} -\entry {socket}{265}{socket} -\entry {interprocess communication, with sockets}{265}{interprocess communication, with sockets} -\entry {communication style (of a socket)}{265}{communication style (of a socket)} -\entry {style of communication (of a socket)}{265}{style of communication (of a socket)} -\entry {packet}{265}{packet} -\entry {byte stream}{265}{byte stream} -\entry {stream (sockets)}{265}{stream (sockets)} -\entry {loss of data on sockets}{265}{loss of data on sockets} -\entry {data loss on sockets}{265}{data loss on sockets} -\entry {namespace (of socket)}{266}{namespace (of socket)} -\entry {domain (of socket)}{266}{domain (of socket)} -\entry {socket namespace}{266}{socket namespace} -\entry {socket domain}{266}{socket domain} -\entry {network protocol}{266}{network protocol} -\entry {protocol (of socket)}{266}{protocol (of socket)} -\entry {socket protocol}{266}{socket protocol} -\entry {protocol family}{266}{protocol family} -\entry {address of socket}{267}{address of socket} -\entry {name of socket}{267}{name of socket} -\entry {binding a socket address}{267}{binding a socket address} -\entry {socket address (name) binding}{267}{socket address (name) binding} -\entry {file namespace, for sockets}{271}{file namespace, for sockets} -\entry {Internet namespace, for sockets}{274}{Internet namespace, for sockets} -\entry {host address, Internet}{276}{host address, Internet} -\entry {Internet host address}{276}{Internet host address} -\entry {network number}{276}{network number} -\entry {local network address number}{276}{local network address number} -\entry {standard dot notation, for Internet addresses}{276}{standard dot notation, for Internet addresses} -\entry {dot notation, for Internet addresses}{276}{dot notation, for Internet addresses} -\entry {hosts database}{278}{hosts database} -\entry {converting host name to address}{278}{converting host name to address} -\entry {converting host address to name}{278}{converting host address to name} -\entry {port number}{281}{port number} -\entry {services database}{282}{services database} -\entry {converting service name to port number}{282}{converting service name to port number} -\entry {converting port number to service name}{282}{converting port number to service name} -\entry {byte order conversion, for socket}{283}{byte order conversion, for socket} -\entry {converting byte order}{283}{converting byte order} -\entry {big-endian}{283}{big-endian} -\entry {little-endian}{283}{little-endian} -\entry {network byte order}{283}{network byte order} -\entry {protocols database}{284}{protocols database} -\entry {TCP (Internet protocol)}{284}{TCP (Internet protocol)} -\entry {creating a socket}{288}{creating a socket} -\entry {socket, creating}{288}{socket, creating} -\entry {opening a socket}{288}{opening a socket} -\entry {socket, closing}{289}{socket, closing} -\entry {closing a socket}{289}{closing a socket} -\entry {shutting down a socket}{289}{shutting down a socket} -\entry {socket shutdown}{289}{socket shutdown} -\entry {creating a socket pair}{290}{creating a socket pair} -\entry {socket pair}{290}{socket pair} -\entry {opening a socket pair}{290}{opening a socket pair} -\entry {connection}{291}{connection} -\entry {client}{291}{client} -\entry {server}{291}{server} -\entry {connecting a socket}{291}{connecting a socket} -\entry {socket, connecting}{291}{socket, connecting} -\entry {socket, initiating a connection}{291}{socket, initiating a connection} -\entry {socket, client actions}{291}{socket, client actions} -\entry {listening (sockets)}{292}{listening (sockets)} -\entry {sockets, server actions}{292}{sockets, server actions} -\entry {sockets, listening}{292}{sockets, listening} -\entry {sockets, accepting connections}{293}{sockets, accepting connections} -\entry {accepting connections}{293}{accepting connections} -\entry {reading from a socket}{295}{reading from a socket} -\entry {writing to a socket}{295}{writing to a socket} -\entry {out-of-band data}{301}{out-of-band data} -\entry {high-priority data}{301}{high-priority data} -\entry {urgent socket condition}{301}{urgent socket condition} -\entry {datagram socket}{305}{datagram socket} -\entry {sending a datagram}{305}{sending a datagram} -\entry {transmitting datagrams}{305}{transmitting datagrams} -\entry {datagrams, transmitting}{305}{datagrams, transmitting} -\entry {receiving datagrams}{306}{receiving datagrams} -\entry {socket options}{311}{socket options} -\entry {level, for socket options}{311}{level, for socket options} -\entry {socket option level}{311}{socket option level} -\entry {networks database}{314}{networks database} -\entry {converting network number to network name}{314}{converting network number to network name} -\entry {converting network name to network number}{314}{converting network name to network number} -\entry {terminal identification}{317}{terminal identification} -\entry {identifying terminals}{317}{identifying terminals} -\entry {terminal input queue}{318}{terminal input queue} -\entry {typeahead buffer}{318}{typeahead buffer} -\entry {terminal output queue}{318}{terminal output queue} -\entry {canonical input processing}{318}{canonical input processing} -\entry {noncanonical input processing}{319}{noncanonical input processing} -\entry {terminal mode data types}{319}{terminal mode data types} -\entry {terminal mode functions}{320}{terminal mode functions} -\entry {parity checking}{323}{parity checking} -\entry {break condition, detecting}{324}{break condition, detecting} -\entry {modem status lines}{326}{modem status lines} -\entry {carrier detect}{326}{carrier detect} -\entry {modem disconnect}{326}{modem disconnect} -\entry {echo of terminal input}{327}{echo of terminal input} -\entry {interactive signals, from terminal}{328}{interactive signals, from terminal} -\entry {line speed}{329}{line speed} -\entry {baud rate}{329}{baud rate} -\entry {terminal line speed}{329}{terminal line speed} -\entry {terminal line speed}{329}{terminal line speed} -\entry {EOF character}{332}{EOF character} -\entry {EOL character}{332}{EOL character} -\entry {ERASE character}{332}{ERASE character} -\entry {KILL character}{333}{KILL character} -\entry {EOL2 character}{333}{EOL2 character} -\entry {WERASE character}{333}{WERASE character} -\entry {REPRINT character}{334}{REPRINT character} -\entry {LNEXT character}{334}{LNEXT character} -\entry {INTR character}{334}{INTR character} -\entry {interrupt character}{334}{interrupt character} -\entry {QUIT character}{335}{QUIT character} -\entry {SUSP character}{335}{SUSP character} -\entry {suspend character}{335}{suspend character} -\entry {DSUSP character}{335}{DSUSP character} -\entry {delayed suspend character}{335}{delayed suspend character} -\entry {START character}{336}{START character} -\entry {STOP character}{336}{STOP character} -\entry {DISCARD character}{337}{DISCARD character} -\entry {STATUS character}{337}{STATUS character} -\entry {MIN termios slot}{338}{MIN termios slot} -\entry {TIME termios slot}{338}{TIME termios slot} -\entry {terminal line control functions}{339}{terminal line control functions} -\entry {break condition, generating}{339}{break condition, generating} -\entry {flushing terminal output queue}{339}{flushing terminal output queue} -\entry {terminal output queue, flushing}{339}{terminal output queue, flushing} -\entry {clearing terminal input queue}{340}{clearing terminal input queue} -\entry {terminal input queue, clearing}{340}{terminal input queue, clearing} -\entry {flow control, terminal}{340}{flow control, terminal} -\entry {terminal flow control}{340}{terminal flow control} -\entry {domain error}{345}{domain error} -\entry {range error}{345}{range error} -\entry {trigonometric functions}{346}{trigonometric functions} -\entry {pi (trigonometric constant)}{346}{pi (trigonometric constant)} -\entry {inverse trigonmetric functions}{347}{inverse trigonmetric functions} -\entry {exponentiation functions}{348}{exponentiation functions} -\entry {power functions}{348}{power functions} -\entry {logarithm functions}{348}{logarithm functions} -\entry {square root function}{349}{square root function} -\entry {cube root function}{349}{cube root function} -\entry {hyperbolic functions}{350}{hyperbolic functions} -\entry {inverse hyperbolic functions}{350}{inverse hyperbolic functions} -\entry {random numbers}{350}{random numbers} -\entry {pseudo-random numbers}{350}{pseudo-random numbers} -\entry {seed (for random numbers)}{350}{seed (for random numbers)} -\entry {NaN}{355}{NaN} -\entry {not a number}{355}{not a number} -\entry {IEEE floating point}{355}{IEEE floating point} -\entry {absolute value functions}{356}{absolute value functions} -\entry {normalization functions (floating-point)}{357}{normalization functions (floating-point)} -\entry {rounding functions}{359}{rounding functions} -\entry {remainder functions}{359}{remainder functions} -\entry {converting floats to integers}{359}{converting floats to integers} -\entry {integer division functions}{360}{integer division functions} -\entry {parsing numbers (in formatted input)}{361}{parsing numbers (in formatted input)} -\entry {converting strings to numbers}{361}{converting strings to numbers} -\entry {number syntax, parsing}{361}{number syntax, parsing} -\entry {syntax, for reading numbers}{361}{syntax, for reading numbers} -\entry {CPU time}{367}{CPU time} -\entry {processor time}{367}{processor time} -\entry {clock ticks}{367}{clock ticks} -\entry {ticks, clock}{367}{ticks, clock} -\entry {time, elapsed CPU}{367}{time, elapsed CPU} -\entry {Gregorian calendar}{370}{Gregorian calendar} -\entry {time, calendar}{370}{time, calendar} -\entry {date and time}{370}{date and time} -\entry {calendar time}{370}{calendar time} -\entry {high-resolution time}{370}{high-resolution time} -\entry {local time}{370}{local time} -\entry {broken-down time}{370}{broken-down time} -\entry {epoch}{370}{epoch} -\entry {broken-down time}{374}{broken-down time} -\entry {calendar time and broken-down time}{374}{calendar time and broken-down time} -\entry {leap second}{374}{leap second} -\entry {Daylight Saving Time}{375}{Daylight Saving Time} -\entry {summer time}{375}{summer time} -\entry {time zone}{378}{time zone} -\entry {setting an alarm}{382}{setting an alarm} -\entry {interval timer, setting}{382}{interval timer, setting} -\entry {alarms, setting}{382}{alarms, setting} -\entry {timers, setting}{382}{timers, setting} -\entry {real-time timer}{382}{real-time timer} -\entry {virtual timer}{382}{virtual timer} -\entry {profiling timer}{382}{profiling timer} -\entry {resource limits}{387}{resource limits} -\entry {limits on resource usage}{387}{limits on resource usage} -\entry {usage limits}{387}{usage limits} -\entry {process priority}{389}{process priority} -\entry {priority of a process}{389}{priority of a process} -\entry {non-local exits}{393}{non-local exits} -\entry {long jumps}{393}{long jumps} -\entry {signal}{399}{signal} -\entry {generation of signals}{400}{generation of signals} -\entry {delivery of signals}{401}{delivery of signals} -\entry {pending signals}{401}{pending signals} -\entry {blocked signals}{401}{blocked signals} -\entry {specified action (for a signal)}{401}{specified action (for a signal)} -\entry {default action (for a signal)}{401}{default action (for a signal)} -\entry {signal action}{401}{signal action} -\entry {catching signals}{401}{catching signals} -\entry {signal names}{402}{signal names} -\entry {names of signals}{402}{names of signals} -\entry {signal number}{402}{signal number} -\entry {program error signals}{402}{program error signals} -\entry {exception}{403}{exception} -\entry {floating-point exception}{403}{floating-point exception} -\entry {illegal instruction}{404}{illegal instruction} -\entry {segmentation violation}{404}{segmentation violation} -\entry {bus error}{405}{bus error} -\entry {abort signal}{405}{abort signal} -\entry {program termination signals}{405}{program termination signals} -\entry {hangup signal}{405}{hangup signal} -\entry {interrupt signal}{406}{interrupt signal} -\entry {quit signal}{406}{quit signal} -\entry {quit signal}{406}{quit signal} -\entry {termination signal}{406}{termination signal} -\entry {kill signal}{406}{kill signal} -\entry {alarm signal}{407}{alarm signal} -\entry {virtual time alarm signal}{407}{virtual time alarm signal} -\entry {profiling alarm signal}{407}{profiling alarm signal} -\entry {input available signal}{407}{input available signal} -\entry {output possible signal}{407}{output possible signal} -\entry {urgent data signal}{408}{urgent data signal} -\entry {job control signals}{408}{job control signals} -\entry {child process signal}{408}{child process signal} -\entry {continue signal}{408}{continue signal} -\entry {stop signal}{408}{stop signal} -\entry {interactive stop signal}{409}{interactive stop signal} -\entry {terminal input signal}{409}{terminal input signal} -\entry {terminal output signal}{409}{terminal output signal} -\entry {pipe signal}{410}{pipe signal} -\entry {broken pipe signal}{410}{broken pipe signal} -\entry {user signals}{410}{user signals} -\entry {signal messages}{411}{signal messages} -\entry {signal actions}{412}{signal actions} -\entry {establishing a handler}{412}{establishing a handler} -\entry {signal function}{412}{\code {signal} function} -\entry {default action for a signal}{413}{default action for a signal} -\entry {ignore action for a signal}{413}{ignore action for a signal} -\entry {sigaction function}{415}{\code {sigaction} function} -\entry {signal flags}{418}{signal flags} -\entry {flags for sigaction}{418}{flags for \code {sigaction}} -\entry {sigaction flags}{418}{\code {sigaction} flags} -\entry {initial signal actions}{419}{initial signal actions} -\entry {signal handler function}{420}{signal handler function} -\entry {non-local exit, from signal handler}{423}{non-local exit, from signal handler} -\entry {race conditions, relating to signals}{425}{race conditions, relating to signals} -\entry {handling multiple signals}{425}{handling multiple signals} -\entry {successive signals}{425}{successive signals} -\entry {merging of signals}{425}{merging of signals} -\entry {restrictions on signal handler functions}{428}{restrictions on signal handler functions} -\entry {volatile declarations}{429}{\code {volatile} declarations} -\entry {reentrant functions}{429}{reentrant functions} -\entry {sending signals}{434}{sending signals} -\entry {raising signals}{434}{raising signals} -\entry {signals, generating}{434}{signals, generating} -\entry {killing a process}{436}{killing a process} -\entry {interprocess communication, with signals}{438}{interprocess communication, with signals} -\entry {blocking signals}{440}{blocking signals} -\entry {signal set}{441}{signal set} -\entry {signal mask}{442}{signal mask} -\entry {process signal mask}{442}{process signal mask} -\entry {blocking signals, in a handler}{445}{blocking signals, in a handler} -\entry {pending signals, checking for}{446}{pending signals, checking for} -\entry {blocked signals, checking for}{446}{blocked signals, checking for} -\entry {checking for pending signals}{446}{checking for pending signals} -\entry {timing error in signal handling}{448}{timing error in signal handling} -\entry {waiting for a signal}{449}{waiting for a signal} -\entry {pause function}{449}{\code {pause} function} -\entry {signal stack}{452}{signal stack} -\entry {process}{457}{process} -\entry {program arguments}{457}{program arguments} -\entry {command line arguments}{457}{command line arguments} -\entry {main function}{457}{\code {main} function} -\entry {argc (program argument count)}{457}{argc (program argument count)} -\entry {argv (program argument vector)}{457}{argv (program argument vector)} -\entry {program argument syntax}{458}{program argument syntax} -\entry {syntax, for program arguments}{458}{syntax, for program arguments} -\entry {command argument syntax}{458}{command argument syntax} -\entry {long-named options}{458}{long-named options} -\entry {program arguments, parsing}{459}{program arguments, parsing} -\entry {command arguments, parsing}{459}{command arguments, parsing} -\entry {parsing program arguments}{459}{parsing program arguments} -\entry {environment variable}{466}{environment variable} -\entry {environment}{467}{environment} -\entry {environment access}{467}{environment access} -\entry {environment representation}{467}{environment representation} -\entry {standard environment variables}{468}{standard environment variables} -\entry {HOME environment variable}{468}{HOME environment variable} -\entry {home directory}{468}{home directory} -\entry {LOGNAME environment variable}{468}{LOGNAME environment variable} -\entry {PATH environment variable}{468}{PATH environment variable} -\entry {TERM environment variable}{469}{TERM environment variable} -\entry {TZ environment variable}{469}{TZ environment variable} -\entry {LANG environment variable}{469}{LANG environment variable} -\entry {LC{\_}COLLATE environment variable}{469}{LC{\_}COLLATE environment variable} -\entry {LC{\_}CTYPE environment variable}{469}{LC{\_}CTYPE environment variable} -\entry {LC{\_}MONETARY environment variable}{469}{LC{\_}MONETARY environment variable} -\entry {LC{\_}NUMERIC environment variable}{469}{LC{\_}NUMERIC environment variable} -\entry {LC{\_}TIME environment variable}{469}{LC{\_}TIME environment variable} -\entry {{\_}POSIX{\_}OPTION{\_}ORDER environment variable.}{469}{{\_}POSIX{\_}OPTION{\_}ORDER environment variable.} -\entry {program termination}{470}{program termination} -\entry {process termination}{470}{process termination} -\entry {exit status value}{470}{exit status value} -\entry {exit status}{470}{exit status} -\entry {aborting a program}{473}{aborting a program} -\entry {process}{475}{process} -\entry {child process}{475}{child process} -\entry {parent process}{475}{parent process} -\entry {running a command}{475}{running a command} -\entry {process ID}{476}{process ID} -\entry {process lifetime}{476}{process lifetime} -\entry {creating a process}{476}{creating a process} -\entry {forking a process}{476}{forking a process} -\entry {child process}{476}{child process} -\entry {parent process}{476}{parent process} -\entry {process image}{476}{process image} -\entry {executing a file}{479}{executing a file} -\entry {exec functions}{479}{\code {exec} functions} -\entry {process completion}{482}{process completion} -\entry {waiting for completion of child process}{482}{waiting for completion of child process} -\entry {testing exit status of child process}{482}{testing exit status of child process} -\entry {process groups}{489}{process groups} -\entry {job control}{489}{job control} -\entry {job}{489}{job} -\entry {session}{489}{session} -\entry {shell}{489}{shell} -\entry {session}{489}{session} -\entry {session leader}{489}{session leader} -\entry {controlling terminal}{490}{controlling terminal} -\entry {foreground job}{490}{foreground job} -\entry {background job}{490}{background job} -\entry {stopped job}{490}{stopped job} -\entry {job control is optional}{490}{job control is optional} -\entry {controlling process}{491}{controlling process} -\entry {controlling terminal, access to}{491}{controlling terminal, access to} -\entry {SIGTTIN, from background job}{491}{\code {SIGTTIN}, from background job} -\entry {SIGTTOU, from background job}{491}{\code {SIGTTOU}, from background job} -\entry {orphaned process group}{492}{orphaned process group} -\entry {job control, enabling}{495}{job control, enabling} -\entry {subshell}{495}{subshell} -\entry {job control, enabling}{495}{job control, enabling} -\entry {launching jobs}{497}{launching jobs} -\entry {process group leader}{497}{process group leader} -\entry {process group ID}{497}{process group ID} -\entry {race conditions, relating to job control}{497}{race conditions, relating to job control} -\entry {foreground job, launching}{501}{foreground job, launching} -\entry {background job, launching}{502}{background job, launching} -\entry {stopped jobs, detecting}{502}{stopped jobs, detecting} -\entry {terminated jobs, detecting}{502}{terminated jobs, detecting} -\entry {SIGCHLD, handling of}{503}{\code {SIGCHLD}, handling of} -\entry {stopped jobs, continuing}{507}{stopped jobs, continuing} -\entry {process group functions}{508}{process group functions} -\entry {job control functions}{508}{job control functions} -\entry {controlling terminal, determining}{509}{controlling terminal, determining} -\entry {BSD compatibility library}{510}{BSD compatibility library} -\entry {login name}{513}{login name} -\entry {user name}{513}{user name} -\entry {user ID}{513}{user ID} -\entry {group name}{513}{group name} -\entry {group ID}{513}{group ID} -\entry {persona}{513}{persona} -\entry {effective user ID}{513}{effective user ID} -\entry {effective group ID}{513}{effective group ID} -\entry {real user ID}{514}{real user ID} -\entry {real group ID}{514}{real group ID} -\entry {supplementary group IDs}{514}{supplementary group IDs} -\entry {setuid programs}{515}{\code {setuid} programs} -\entry {login name, determining}{524}{login name, determining} -\entry {user ID, determining}{524}{user ID, determining} -\entry {user database}{525}{user database} -\entry {password database}{525}{password database} -\entry {converting user ID to user name}{526}{converting user ID to user name} -\entry {converting user name to user ID}{526}{converting user name to user ID} -\entry {scanning the user list}{526}{scanning the user list} -\entry {group database}{528}{group database} -\entry {converting group name to group ID}{528}{converting group name to group ID} -\entry {converting group ID to group name}{528}{converting group ID to group name} -\entry {scanning the group list}{529}{scanning the group list} -\entry {POSIX capacity limits}{537}{POSIX capacity limits} -\entry {limits, POSIX}{537}{limits, POSIX} -\entry {capacity limits, POSIX}{537}{capacity limits, POSIX} -\entry {limits, program argument size}{537}{limits, program argument size} -\entry {limits, number of processes}{537}{limits, number of processes} -\entry {limits, number of open files}{537}{limits, number of open files} -\entry {limits, time zone name length}{538}{limits, time zone name length} -\entry {limits, number of supplementary group IDs}{538}{limits, number of supplementary group IDs} -\entry {POSIX optional features}{539}{POSIX optional features} -\entry {optional POSIX features}{539}{optional POSIX features} -\entry {limits, link count of files}{546}{limits, link count of files} -\entry {limits, terminal input queue}{546}{limits, terminal input queue} -\entry {limits, file name length}{546}{limits, file name length} -\entry {limits, pipe buffer size}{546}{limits, pipe buffer size} -\entry {consistency checking}{555}{consistency checking} -\entry {impossible events}{555}{impossible events} -\entry {assertions}{555}{assertions} -\entry {variable number of arguments}{556}{variable number of arguments} -\entry {variadic functions}{556}{variadic functions} -\entry {optional arguments}{556}{optional arguments} -\entry {function prototypes (variadic)}{558}{function prototypes (variadic)} -\entry {prototypes for variadic functions}{558}{prototypes for variadic functions} -\entry {variadic function prototypes}{558}{variadic function prototypes} -\entry {variadic function argument access}{558}{variadic function argument access} -\entry {arguments (variadic functions)}{558}{arguments (variadic functions)} -\entry {number of arguments passed}{559}{number of arguments passed} -\entry {how many arguments}{559}{how many arguments} -\entry {arguments, how many}{559}{arguments, how many} -\entry {variadic functions, calling}{560}{variadic functions, calling} -\entry {calling variadic functions}{560}{calling variadic functions} -\entry {declaring variadic functions}{560}{declaring variadic functions} -\entry {default argument promotions}{560}{default argument promotions} -\entry {argument promotion}{560}{argument promotion} -\entry {null pointer constant}{564}{null pointer constant} -\entry {integer type width}{565}{integer type width} -\entry {width of integer type}{565}{width of integer type} -\entry {type measurements, integer}{565}{type measurements, integer} -\entry {integer type range}{566}{integer type range} -\entry {range of integer type}{566}{range of integer type} -\entry {limits, integer types}{566}{limits, integer types} -\entry {floating type measurements}{568}{floating type measurements} -\entry {measurements of floating types}{568}{measurements of floating types} -\entry {type measurements, floating}{568}{type measurements, floating} -\entry {limits, floating types}{568}{limits, floating types} -\entry {sign (of floating point number)}{568}{sign (of floating point number)} -\entry {base (of floating point number)}{568}{base (of floating point number)} -\entry {radix (of floating point number)}{568}{radix (of floating point number)} -\entry {exponent (of floating point number)}{568}{exponent (of floating point number)} -\entry {bias (of floating point number exponent)}{568}{bias (of floating point number exponent)} -\entry {mantissa (of floating point number)}{569}{mantissa (of floating point number)} -\entry {significand (of floating point number)}{569}{significand (of floating point number)} -\entry {precision (of floating point number)}{569}{precision (of floating point number)} -\entry {hidden bit (of floating point number mantissa)}{569}{hidden bit (of floating point number mantissa)} -\entry {normalized floating point number}{569}{normalized floating point number} -\entry {IEEE floating point representation}{572}{IEEE floating point representation} -\entry {floating point, IEEE}{572}{floating point, IEEE} -\entry {installing the library}{631}{installing the library} -\entry {reporting bugs}{634}{reporting bugs} +\entry {program name}{23}{program name} +\entry {name of running program}{23}{name of running program} +\entry {memory allocation}{25}{memory allocation} +\entry {storage allocation}{25}{storage allocation} +\entry {dynamic allocation}{25}{dynamic allocation} +\entry {static allocation}{25}{static allocation} +\entry {automatic allocation}{25}{automatic allocation} +\entry {unconstrained storage allocation}{26}{unconstrained storage allocation} +\entry {malloc function}{26}{\code {malloc} function} +\entry {heap, dynamic allocation from}{26}{heap, dynamic allocation from} +\entry {allocation of memory with malloc}{26}{allocation of memory with \code {malloc}} +\entry {freeing memory allocated with malloc}{28}{freeing memory allocated with \code {malloc}} +\entry {heap, freeing memory from}{28}{heap, freeing memory from} +\entry {changing the size of a block (malloc)}{29}{changing the size of a block (\code {malloc})} +\entry {efficiency and malloc}{31}{efficiency and \code {malloc}} +\entry {page boundary}{31}{page boundary} +\entry {alignment (with malloc)}{31}{alignment (with \code {malloc})} +\entry {heap consistency checking}{32}{heap consistency checking} +\entry {consistency checking, of heap}{32}{consistency checking, of heap} +\entry {allocation hooks, for malloc}{32}{allocation hooks, for \code {malloc}} +\entry {allocation statistics}{33}{allocation statistics} +\entry {obstacks}{35}{obstacks} +\entry {allocation (obstacks)}{37}{allocation (obstacks)} +\entry {freeing (obstacks)}{38}{freeing (obstacks)} +\entry {macros}{38}{macros} +\entry {growing objects (in obstacks)}{39}{growing objects (in obstacks)} +\entry {changing the size of a block (obstacks)}{39}{changing the size of a block (obstacks)} +\entry {shrinking objects}{41}{shrinking objects} +\entry {efficiency and obstacks}{41}{efficiency and obstacks} +\entry {obstack status}{42}{obstack status} +\entry {status of obstack}{42}{status of obstack} +\entry {alignment (in obstacks)}{43}{alignment (in obstacks)} +\entry {efficiency of chunks}{44}{efficiency of chunks} +\entry {chunks}{44}{chunks} +\entry {automatic freeing}{46}{automatic freeing} +\entry {alloca function}{46}{\code {alloca} function} +\entry {automatic storage with variable size}{46}{automatic storage with variable size} +\entry {longjmp}{48}{longjmp} +\entry {alloca disadvantages}{48}{\code {alloca} disadvantages} +\entry {disadvantages of alloca}{48}{disadvantages of \code {alloca}} +\entry {variable-sized arrays}{49}{variable-sized arrays} +\entry {relocating memory allocator}{49}{relocating memory allocator} +\entry {handle}{49}{handle} +\entry {memory usage warnings}{50}{memory usage warnings} +\entry {warnings of memory almost full}{50}{warnings of memory almost full} +\entry {character testing}{53}{character testing} +\entry {classification of characters}{53}{classification of characters} +\entry {predicates on characters}{53}{predicates on characters} +\entry {character predicates}{53}{character predicates} +\entry {lower-case character}{53}{lower-case character} +\entry {upper-case character}{53}{upper-case character} +\entry {alphabetic character}{53}{alphabetic character} +\entry {digit character}{53}{digit character} +\entry {decimal digit character}{53}{decimal digit character} +\entry {alphanumeric character}{54}{alphanumeric character} +\entry {hexadecimal digit character}{54}{hexadecimal digit character} +\entry {punctuation character}{54}{punctuation character} +\entry {whitespace character}{54}{whitespace character} +\entry {blank character}{54}{blank character} +\entry {graphic character}{54}{graphic character} +\entry {printing character}{54}{printing character} +\entry {control character}{55}{control character} +\entry {ASCII character}{55}{ASCII character} +\entry {character case conversion}{55}{character case conversion} +\entry {case conversion of characters}{55}{case conversion of characters} +\entry {converting case of characters}{55}{converting case of characters} +\entry {string, representation of}{57}{string, representation of} +\entry {string}{57}{string} +\entry {null character}{57}{null character} +\entry {string literal}{57}{string literal} +\entry {length of string}{58}{length of string} +\entry {allocation size of string}{58}{allocation size of string} +\entry {size of string}{58}{size of string} +\entry {string length}{58}{string length} +\entry {string allocation}{58}{string allocation} +\entry {copying strings and arrays}{59}{copying strings and arrays} +\entry {string copy functions}{59}{string copy functions} +\entry {array copy functions}{59}{array copy functions} +\entry {concatenating strings}{59}{concatenating strings} +\entry {string concatenation functions}{59}{string concatenation functions} +\entry {comparing strings and arrays}{63}{comparing strings and arrays} +\entry {string comparison functions}{63}{string comparison functions} +\entry {array comparison functions}{63}{array comparison functions} +\entry {predicates on strings}{63}{predicates on strings} +\entry {predicates on arrays}{63}{predicates on arrays} +\entry {collating strings}{65}{collating strings} +\entry {string collation functions}{65}{string collation functions} +\entry {converting string to collation order}{66}{converting string to collation order} +\entry {search functions (for strings)}{68}{search functions (for strings)} +\entry {string search functions}{68}{string search functions} +\entry {tokenizing strings}{70}{tokenizing strings} +\entry {breaking a string into tokens}{70}{breaking a string into tokens} +\entry {parsing tokens from a string}{70}{parsing tokens from a string} +\entry {opening a file}{73}{opening a file} +\entry {file position}{75}{file position} +\entry {sequential-access files}{75}{sequential-access files} +\entry {random-access files}{75}{random-access files} +\entry {append-access files}{75}{append-access files} +\entry {file name}{75}{file name} +\entry {directory}{76}{directory} +\entry {link}{76}{link} +\entry {directory entry}{76}{directory entry} +\entry {file name component}{76}{file name component} +\entry {file name resolution}{76}{file name resolution} +\entry {root directory}{76}{root directory} +\entry {absolute file name}{76}{absolute file name} +\entry {relative file name}{76}{relative file name} +\entry {parent directory}{77}{parent directory} +\entry {file name syntax errors}{77}{file name syntax errors} +\entry {usual file name syntax errors}{77}{usual file name syntax errors} +\entry {file pointer}{81}{file pointer} +\entry {standard streams}{81}{standard streams} +\entry {streams, standard}{81}{streams, standard} +\entry {standard input stream}{81}{standard input stream} +\entry {standard output stream}{82}{standard output stream} +\entry {standard error stream}{82}{standard error stream} +\entry {opening a stream}{82}{opening a stream} +\entry {closing a stream}{84}{closing a stream} +\entry {writing to a stream, by characters}{85}{writing to a stream, by characters} +\entry {reading from a stream, by characters}{86}{reading from a stream, by characters} +\entry {peeking at input}{89}{peeking at input} +\entry {unreading characters}{89}{unreading characters} +\entry {pushing input back}{89}{pushing input back} +\entry {format string, for printf}{91}{format string, for \code {printf}} +\entry {template, for printf}{91}{template, for \code {printf}} +\entry {formatted output to a stream}{91}{formatted output to a stream} +\entry {writing to a stream, formatted}{91}{writing to a stream, formatted} +\entry {conversion specifications (printf)}{92}{conversion specifications (\code {printf})} +\entry {flag character (printf)}{93}{flag character (\code {printf})} +\entry {minimum field width (printf)}{93}{minimum field width (\code {printf})} +\entry {precision (printf)}{93}{precision (\code {printf})} +\entry {type modifier character (printf)}{94}{type modifier character (\code {printf})} +\entry {output conversions, for printf}{94}{output conversions, for \code {printf}} +\entry {parsing a template string}{104}{parsing a template string} +\entry {customizing printf}{107}{customizing \code {printf}} +\entry {defining new printf conversions}{107}{defining new \code {printf} conversions} +\entry {extending printf}{107}{extending \code {printf}} +\entry {formatted input from a stream}{112}{formatted input from a stream} +\entry {reading from a stream, formatted}{112}{reading from a stream, formatted} +\entry {format string, for scanf}{112}{format string, for \code {scanf}} +\entry {template, for scanf}{112}{template, for \code {scanf}} +\entry {conversion specifications (scanf)}{113}{conversion specifications (\code {scanf})} +\entry {matching failure, in scanf}{113}{matching failure, in \code {scanf}} +\entry {flag character (scanf)}{114}{flag character (\code {scanf})} +\entry {maximum field width (scanf)}{114}{maximum field width (\code {scanf})} +\entry {type modifier character (scanf)}{114}{type modifier character (\code {scanf})} +\entry {input conversions, for scanf}{114}{input conversions, for \code {scanf}} +\entry {binary I/O to a stream}{121}{binary I/O to a stream} +\entry {block I/O to a stream}{121}{block I/O to a stream} +\entry {reading from a stream, by blocks}{121}{reading from a stream, by blocks} +\entry {writing to a stream, by blocks}{121}{writing to a stream, by blocks} +\entry {end of file, on a stream}{121}{end of file, on a stream} +\entry {text stream}{122}{text stream} +\entry {binary stream}{122}{binary stream} +\entry {lines (in a text file)}{123}{lines (in a text file)} +\entry {file positioning on a stream}{123}{file positioning on a stream} +\entry {positioning a stream}{123}{positioning a stream} +\entry {seeking on a stream}{123}{seeking on a stream} +\entry {buffering of streams}{126}{buffering of streams} +\entry {unbuffered stream}{127}{unbuffered stream} +\entry {line buffered stream}{127}{line buffered stream} +\entry {fully buffered stream}{127}{fully buffered stream} +\entry {flushing a stream}{128}{flushing a stream} +\entry {buffering, controlling}{128}{buffering, controlling} +\entry {stream, for I/O to a string}{131}{stream, for I/O to a string} +\entry {string stream}{131}{string stream} +\entry {custom streams}{134}{custom streams} +\entry {programming your own streams}{134}{programming your own streams} +\entry {cookie, for custom stream}{134}{cookie, for custom stream} +\entry {hook functions (of custom streams)}{135}{hook functions (of custom streams)} +\entry {opening a file descriptor}{137}{opening a file descriptor} +\entry {closing a file descriptor}{137}{closing a file descriptor} +\entry {append mode (file status flag)}{138}{append mode (file status flag)} +\entry {create on open (file status flag)}{138}{create on open (file status flag)} +\entry {non-blocking mode (file status flag)}{138}{non-blocking mode (file status flag)} +\entry {reading from a file descriptor}{140}{reading from a file descriptor} +\entry {end-of-file, on a file descriptor}{140}{end-of-file, on a file descriptor} +\entry {writing to a file descriptor}{141}{writing to a file descriptor} +\entry {file positioning on a file descriptor}{143}{file positioning on a file descriptor} +\entry {positioning a file descriptor}{143}{positioning a file descriptor} +\entry {seeking on a file descriptor}{143}{seeking on a file descriptor} +\entry {streams, and file descriptors}{145}{streams, and file descriptors} +\entry {converting file descriptor to stream}{145}{converting file descriptor to stream} +\entry {extracting file descriptor from stream}{145}{extracting file descriptor from stream} +\entry {standard file descriptors}{146}{standard file descriptors} +\entry {file descriptors, standard}{146}{file descriptors, standard} +\entry {standard input file descriptor}{146}{standard input file descriptor} +\entry {standard output file descriptor}{146}{standard output file descriptor} +\entry {standard error file descriptor}{146}{standard error file descriptor} +\entry {channels}{146}{channels} +\entry {streams and descriptors}{146}{streams and descriptors} +\entry {descriptors and streams}{146}{descriptors and streams} +\entry {mixing descriptors and streams}{146}{mixing descriptors and streams} +\entry {linked channels}{147}{linked channels} +\entry {cleaning up a stream}{147}{cleaning up a stream} +\entry {independent channels}{147}{independent channels} +\entry {waiting for input or output}{148}{waiting for input or output} +\entry {multiplexing input}{148}{multiplexing input} +\entry {input from multiple files}{148}{input from multiple files} +\entry {file descriptor sets, for select}{149}{file descriptor sets, for \code {select}} +\entry {control operations on files}{152}{control operations on files} +\entry {fcntl function}{152}{\code {fcntl} function} +\entry {duplicating file descriptors}{153}{duplicating file descriptors} +\entry {redirecting input and output}{153}{redirecting input and output} +\entry {file descriptor flags}{155}{file descriptor flags} +\entry {close-on-exec (file descriptor flag)}{155}{close-on-exec (file descriptor flag)} +\entry {file status flags}{156}{file status flags} +\entry {file locks}{158}{file locks} +\entry {record locking}{158}{record locking} +\entry {exclusive lock}{158}{exclusive lock} +\entry {write lock}{158}{write lock} +\entry {shared lock}{158}{shared lock} +\entry {read lock}{158}{read lock} +\entry {interrupt-driven input}{162}{interrupt-driven input} +\entry {current working directory}{165}{current working directory} +\entry {working directory}{165}{working directory} +\entry {change working directory}{165}{change working directory} +\entry {accessing directories}{167}{accessing directories} +\entry {reading from a directory}{167}{reading from a directory} +\entry {directories, accessing}{167}{directories, accessing} +\entry {directory stream}{167}{directory stream} +\entry {hard link}{170}{hard link} +\entry {link, hard}{170}{link, hard} +\entry {multiple names for one file}{170}{multiple names for one file} +\entry {file names, multiple}{170}{file names, multiple} +\entry {soft link}{171}{soft link} +\entry {link, soft}{171}{link, soft} +\entry {symbolic link}{171}{symbolic link} +\entry {link, symbolic}{171}{link, symbolic} +\entry {deleting a file}{173}{deleting a file} +\entry {removing a file}{173}{removing a file} +\entry {unlinking a file}{173}{unlinking a file} +\entry {directories, deleting}{174}{directories, deleting} +\entry {deleting a directory}{174}{deleting a directory} +\entry {renaming a file}{174}{renaming a file} +\entry {creating a directory}{176}{creating a directory} +\entry {directories, creating}{176}{directories, creating} +\entry {status of a file}{177}{status of a file} +\entry {attributes of a file}{177}{attributes of a file} +\entry {file attributes}{177}{file attributes} +\entry {inode number}{179}{inode number} +\entry {file owner}{182}{file owner} +\entry {owner of a file}{182}{owner of a file} +\entry {group owner of a file}{182}{group owner of a file} +\entry {file permission bits}{184}{file permission bits} +\entry {sticky bit}{185}{sticky bit} +\entry {permission to access a file}{185}{permission to access a file} +\entry {access permission for a file}{185}{access permission for a file} +\entry {file access permission}{185}{file access permission} +\entry {file creation mask}{186}{file creation mask} +\entry {umask}{186}{umask} +\entry {testing access permission}{188}{testing access permission} +\entry {access, testing for}{188}{access, testing for} +\entry {setuid programs and file access}{188}{setuid programs and file access} +\entry {file access time}{189}{file access time} +\entry {file modification time}{189}{file modification time} +\entry {file attribute modification time}{189}{file attribute modification time} +\entry {creating special files}{191}{creating special files} +\entry {special files}{191}{special files} +\entry {TMPDIR environment variable}{193}{TMPDIR environment variable} +\entry {pipe}{195}{pipe} +\entry {FIFO special file}{195}{FIFO special file} +\entry {creating a pipe}{195}{creating a pipe} +\entry {opening a pipe}{195}{opening a pipe} +\entry {interprocess communication, with pipes}{195}{interprocess communication, with pipes} +\entry {creating a pipe to a subprocess}{197}{creating a pipe to a subprocess} +\entry {pipe to a subprocess}{197}{pipe to a subprocess} +\entry {filtering i/o through subprocess}{197}{filtering i/o through subprocess} +\entry {creating a FIFO special file}{199}{creating a FIFO special file} +\entry {interprocess communication, with FIFO}{199}{interprocess communication, with FIFO} +\entry {socket}{201}{socket} +\entry {interprocess communication, with sockets}{201}{interprocess communication, with sockets} +\entry {communication style (of a socket)}{201}{communication style (of a socket)} +\entry {style of communication (of a socket)}{201}{style of communication (of a socket)} +\entry {packet}{201}{packet} +\entry {byte stream}{201}{byte stream} +\entry {stream (sockets)}{201}{stream (sockets)} +\entry {loss of data on sockets}{201}{loss of data on sockets} +\entry {data loss on sockets}{201}{data loss on sockets} +\entry {namespace (of socket)}{201}{namespace (of socket)} +\entry {domain (of socket)}{201}{domain (of socket)} +\entry {socket namespace}{201}{socket namespace} +\entry {socket domain}{201}{socket domain} +\entry {network protocol}{202}{network protocol} +\entry {protocol (of socket)}{202}{protocol (of socket)} +\entry {socket protocol}{202}{socket protocol} +\entry {protocol family}{202}{protocol family} +\entry {address of socket}{203}{address of socket} +\entry {name of socket}{203}{name of socket} +\entry {binding a socket address}{203}{binding a socket address} +\entry {socket address (name) binding}{203}{socket address (name) binding} +\entry {file namespace, for sockets}{206}{file namespace, for sockets} +\entry {Internet namespace, for sockets}{209}{Internet namespace, for sockets} +\entry {host address, Internet}{210}{host address, Internet} +\entry {Internet host address}{210}{Internet host address} +\entry {network number}{210}{network number} +\entry {local network address number}{210}{local network address number} +\entry {standard dot notation, for Internet addresses}{211}{standard dot notation, for Internet addresses} +\entry {dot notation, for Internet addresses}{211}{dot notation, for Internet addresses} +\entry {hosts database}{213}{hosts database} +\entry {converting host name to address}{213}{converting host name to address} +\entry {converting host address to name}{213}{converting host address to name} +\entry {port number}{216}{port number} +\entry {services database}{217}{services database} +\entry {converting service name to port number}{217}{converting service name to port number} +\entry {converting port number to service name}{217}{converting port number to service name} +\entry {byte order conversion, for socket}{218}{byte order conversion, for socket} +\entry {converting byte order}{218}{converting byte order} +\entry {big-endian}{218}{big-endian} +\entry {little-endian}{218}{little-endian} +\entry {network byte order}{218}{network byte order} +\entry {protocols database}{219}{protocols database} +\entry {TCP (Internet protocol)}{219}{TCP (Internet protocol)} +\entry {creating a socket}{222}{creating a socket} +\entry {socket, creating}{222}{socket, creating} +\entry {opening a socket}{222}{opening a socket} +\entry {socket, closing}{223}{socket, closing} +\entry {closing a socket}{223}{closing a socket} +\entry {shutting down a socket}{223}{shutting down a socket} +\entry {socket shutdown}{223}{socket shutdown} +\entry {creating a socket pair}{224}{creating a socket pair} +\entry {socket pair}{224}{socket pair} +\entry {opening a socket pair}{224}{opening a socket pair} +\entry {connection}{225}{connection} +\entry {client}{225}{client} +\entry {server}{225}{server} +\entry {connecting a socket}{225}{connecting a socket} +\entry {socket, connecting}{225}{socket, connecting} +\entry {socket, initiating a connection}{225}{socket, initiating a connection} +\entry {socket, client actions}{225}{socket, client actions} +\entry {listening (sockets)}{226}{listening (sockets)} +\entry {sockets, server actions}{226}{sockets, server actions} +\entry {sockets, listening}{226}{sockets, listening} +\entry {sockets, accepting connections}{227}{sockets, accepting connections} +\entry {accepting connections}{227}{accepting connections} +\entry {reading from a socket}{229}{reading from a socket} +\entry {writing to a socket}{229}{writing to a socket} +\entry {out-of-band data}{235}{out-of-band data} +\entry {high-priority data}{235}{high-priority data} +\entry {urgent socket condition}{235}{urgent socket condition} +\entry {datagram socket}{238}{datagram socket} +\entry {sending a datagram}{239}{sending a datagram} +\entry {transmitting datagrams}{239}{transmitting datagrams} +\entry {datagrams, transmitting}{239}{datagrams, transmitting} +\entry {receiving datagrams}{239}{receiving datagrams} +\entry {socket options}{244}{socket options} +\entry {level, for socket options}{244}{level, for socket options} +\entry {socket option level}{244}{socket option level} +\entry {networks database}{247}{networks database} +\entry {converting network number to network name}{247}{converting network number to network name} +\entry {converting network name to network number}{247}{converting network name to network number} +\entry {terminal identification}{249}{terminal identification} +\entry {identifying terminals}{249}{identifying terminals} +\entry {terminal input queue}{249}{terminal input queue} +\entry {typeahead buffer}{249}{typeahead buffer} +\entry {terminal output queue}{250}{terminal output queue} +\entry {canonical input processing}{250}{canonical input processing} +\entry {noncanonical input processing}{250}{noncanonical input processing} +\entry {terminal mode data types}{251}{terminal mode data types} +\entry {terminal mode functions}{252}{terminal mode functions} +\entry {parity checking}{255}{parity checking} +\entry {break condition, detecting}{255}{break condition, detecting} +\entry {modem status lines}{257}{modem status lines} +\entry {carrier detect}{257}{carrier detect} +\entry {modem disconnect}{258}{modem disconnect} +\entry {echo of terminal input}{259}{echo of terminal input} +\entry {interactive signals, from terminal}{260}{interactive signals, from terminal} +\entry {line speed}{261}{line speed} +\entry {baud rate}{261}{baud rate} +\entry {terminal line speed}{261}{terminal line speed} +\entry {terminal line speed}{261}{terminal line speed} +\entry {EOF character}{263}{EOF character} +\entry {EOL character}{264}{EOL character} +\entry {ERASE character}{264}{ERASE character} +\entry {KILL character}{264}{KILL character} +\entry {EOL2 character}{264}{EOL2 character} +\entry {WERASE character}{265}{WERASE character} +\entry {REPRINT character}{265}{REPRINT character} +\entry {LNEXT character}{265}{LNEXT character} +\entry {INTR character}{265}{INTR character} +\entry {interrupt character}{265}{interrupt character} +\entry {QUIT character}{266}{QUIT character} +\entry {SUSP character}{266}{SUSP character} +\entry {suspend character}{266}{suspend character} +\entry {DSUSP character}{266}{DSUSP character} +\entry {delayed suspend character}{266}{delayed suspend character} +\entry {START character}{267}{START character} +\entry {STOP character}{267}{STOP character} +\entry {DISCARD character}{267}{DISCARD character} +\entry {STATUS character}{268}{STATUS character} +\entry {MIN termios slot}{268}{MIN termios slot} +\entry {TIME termios slot}{268}{TIME termios slot} +\entry {terminal line control functions}{269}{terminal line control functions} +\entry {break condition, generating}{270}{break condition, generating} +\entry {flushing terminal output queue}{270}{flushing terminal output queue} +\entry {terminal output queue, flushing}{270}{terminal output queue, flushing} +\entry {clearing terminal input queue}{270}{clearing terminal input queue} +\entry {terminal input queue, clearing}{270}{terminal input queue, clearing} +\entry {flow control, terminal}{271}{flow control, terminal} +\entry {terminal flow control}{271}{terminal flow control} +\entry {domain error}{275}{domain error} +\entry {range error}{275}{range error} +\entry {trigonometric functions}{276}{trigonometric functions} +\entry {pi (trigonometric constant)}{276}{pi (trigonometric constant)} +\entry {inverse trigonmetric functions}{277}{inverse trigonmetric functions} +\entry {exponentiation functions}{278}{exponentiation functions} +\entry {power functions}{278}{power functions} +\entry {logarithm functions}{278}{logarithm functions} +\entry {square root function}{278}{square root function} +\entry {cube root function}{278}{cube root function} +\entry {hyperbolic functions}{279}{hyperbolic functions} +\entry {inverse hyperbolic functions}{279}{inverse hyperbolic functions} +\entry {random numbers}{280}{random numbers} +\entry {pseudo-random numbers}{280}{pseudo-random numbers} +\entry {seed (for random numbers)}{280}{seed (for random numbers)} +\entry {NaN}{283}{NaN} +\entry {not a number}{283}{not a number} +\entry {IEEE floating point}{283}{IEEE floating point} +\entry {absolute value functions}{284}{absolute value functions} +\entry {normalization functions (floating-point)}{285}{normalization functions (floating-point)} +\entry {rounding functions}{286}{rounding functions} +\entry {remainder functions}{286}{remainder functions} +\entry {converting floats to integers}{286}{converting floats to integers} +\entry {integer division functions}{287}{integer division functions} +\entry {parsing numbers (in formatted input)}{288}{parsing numbers (in formatted input)} +\entry {converting strings to numbers}{288}{converting strings to numbers} +\entry {number syntax, parsing}{288}{number syntax, parsing} +\entry {syntax, for reading numbers}{288}{syntax, for reading numbers} +\entry {Comparison Function}{293}{Comparison Function} +\entry {search function (for arrays)}{293}{search function (for arrays)} +\entry {binary search function (for arrays)}{293}{binary search function (for arrays)} +\entry {array search function}{293}{array search function} +\entry {sort function (for arrays)}{294}{sort function (for arrays)} +\entry {quick sort function (for arrays)}{294}{quick sort function (for arrays)} +\entry {array sort function}{294}{array sort function} +\entry {stable sorting}{294}{stable sorting} +\entry {Kermit the frog}{296}{Kermit the frog} +\entry {globbing}{300}{globbing} +\entry {word expansion}{310}{word expansion} +\entry {expansion of shell words}{310}{expansion of shell words} +\entry {tilde expansion}{310}{tilde expansion} +\entry {variable substitution}{310}{variable substitution} +\entry {substitution of variables and commands}{310}{substitution of variables and commands} +\entry {command substitution}{310}{command substitution} +\entry {arithmetic expansion}{310}{arithmetic expansion} +\entry {field splitting}{310}{field splitting} +\entry {wildcard expansion}{310}{wildcard expansion} +\entry {quote removal}{310}{quote removal} +\entry {removal of quotes}{310}{removal of quotes} +\entry {CPU time}{315}{CPU time} +\entry {processor time}{315}{processor time} +\entry {clock ticks}{315}{clock ticks} +\entry {ticks, clock}{315}{ticks, clock} +\entry {time, elapsed CPU}{315}{time, elapsed CPU} +\entry {Gregorian calendar}{317}{Gregorian calendar} +\entry {time, calendar}{317}{time, calendar} +\entry {date and time}{317}{date and time} +\entry {calendar time}{317}{calendar time} +\entry {high-resolution time}{317}{high-resolution time} +\entry {local time}{317}{local time} +\entry {broken-down time}{317}{broken-down time} +\entry {epoch}{318}{epoch} +\entry {broken-down time}{321}{broken-down time} +\entry {calendar time and broken-down time}{321}{calendar time and broken-down time} +\entry {leap second}{321}{leap second} +\entry {Daylight Saving Time}{322}{Daylight Saving Time} +\entry {summer time}{322}{summer time} +\entry {time zone}{326}{time zone} +\entry {setting an alarm}{329}{setting an alarm} +\entry {interval timer, setting}{329}{interval timer, setting} +\entry {alarms, setting}{329}{alarms, setting} +\entry {timers, setting}{329}{timers, setting} +\entry {real-time timer}{329}{real-time timer} +\entry {virtual timer}{329}{virtual timer} +\entry {profiling timer}{329}{profiling timer} +\entry {resource limits}{334}{resource limits} +\entry {limits on resource usage}{334}{limits on resource usage} +\entry {usage limits}{334}{usage limits} +\entry {process priority}{335}{process priority} +\entry {priority of a process}{335}{priority of a process} +\entry {extended character sets}{339}{extended character sets} +\entry {wide characters}{339}{wide characters} +\entry {multibyte characters}{340}{multibyte characters} +\entry {basic byte sequence}{340}{basic byte sequence} +\entry {code, character}{343}{code, character} +\entry {character code}{343}{character code} +\entry {extended strings, converting representations}{344}{extended strings, converting representations} +\entry {converting extended strings}{344}{converting extended strings} +\entry {multibyte character, length of}{345}{multibyte character, length of} +\entry {length of multibyte character}{345}{length of multibyte character} +\entry {extended characters, converting}{346}{extended characters, converting} +\entry {converting extended characters}{346}{converting extended characters} +\entry {internationalization}{351}{internationalization} +\entry {locales}{351}{locales} +\entry {combining locales}{352}{combining locales} +\entry {categories for locales}{352}{categories for locales} +\entry {locale categories}{352}{locale categories} +\entry {changing the locale}{353}{changing the locale} +\entry {locale, changing}{353}{locale, changing} +\entry {monetary value formatting}{355}{monetary value formatting} +\entry {numeric value formatting}{355}{numeric value formatting} +\entry {decimal-point separator}{356}{decimal-point separator} +\entry {grouping of digits}{356}{grouping of digits} +\entry {currency symbols}{357}{currency symbols} +\entry {non-local exits}{361}{non-local exits} +\entry {long jumps}{361}{long jumps} +\entry {signal}{365}{signal} +\entry {generation of signals}{366}{generation of signals} +\entry {delivery of signals}{366}{delivery of signals} +\entry {pending signals}{366}{pending signals} +\entry {blocked signals}{366}{blocked signals} +\entry {specified action (for a signal)}{366}{specified action (for a signal)} +\entry {default action (for a signal)}{366}{default action (for a signal)} +\entry {signal action}{366}{signal action} +\entry {catching signals}{366}{catching signals} +\entry {signal names}{367}{signal names} +\entry {names of signals}{367}{names of signals} +\entry {signal number}{367}{signal number} +\entry {program error signals}{368}{program error signals} +\entry {exception}{369}{exception} +\entry {floating-point exception}{369}{floating-point exception} +\entry {illegal instruction}{370}{illegal instruction} +\entry {segmentation violation}{370}{segmentation violation} +\entry {bus error}{370}{bus error} +\entry {abort signal}{370}{abort signal} +\entry {program termination signals}{371}{program termination signals} +\entry {hangup signal}{371}{hangup signal} +\entry {interrupt signal}{371}{interrupt signal} +\entry {quit signal}{371}{quit signal} +\entry {quit signal}{371}{quit signal} +\entry {termination signal}{372}{termination signal} +\entry {kill signal}{372}{kill signal} +\entry {alarm signal}{372}{alarm signal} +\entry {virtual time alarm signal}{372}{virtual time alarm signal} +\entry {profiling alarm signal}{373}{profiling alarm signal} +\entry {input available signal}{373}{input available signal} +\entry {output possible signal}{373}{output possible signal} +\entry {urgent data signal}{373}{urgent data signal} +\entry {job control signals}{373}{job control signals} +\entry {child process signal}{373}{child process signal} +\entry {continue signal}{373}{continue signal} +\entry {stop signal}{374}{stop signal} +\entry {interactive stop signal}{374}{interactive stop signal} +\entry {terminal input signal}{374}{terminal input signal} +\entry {terminal output signal}{374}{terminal output signal} +\entry {pipe signal}{375}{pipe signal} +\entry {broken pipe signal}{375}{broken pipe signal} +\entry {user signals}{375}{user signals} +\entry {signal messages}{376}{signal messages} +\entry {signal actions}{377}{signal actions} +\entry {establishing a handler}{377}{establishing a handler} +\entry {signal function}{377}{\code {signal} function} +\entry {default action for a signal}{378}{default action for a signal} +\entry {ignore action for a signal}{378}{ignore action for a signal} +\entry {sigaction function}{380}{\code {sigaction} function} +\entry {signal flags}{383}{signal flags} +\entry {flags for sigaction}{383}{flags for \code {sigaction}} +\entry {sigaction flags}{383}{\code {sigaction} flags} +\entry {initial signal actions}{384}{initial signal actions} +\entry {signal handler function}{385}{signal handler function} +\entry {non-local exit, from signal handler}{387}{non-local exit, from signal handler} +\entry {race conditions, relating to signals}{388}{race conditions, relating to signals} +\entry {handling multiple signals}{389}{handling multiple signals} +\entry {successive signals}{389}{successive signals} +\entry {merging of signals}{389}{merging of signals} +\entry {restrictions on signal handler functions}{392}{restrictions on signal handler functions} +\entry {volatile declarations}{392}{\code {volatile} declarations} +\entry {reentrant functions}{392}{reentrant functions} +\entry {sending signals}{398}{sending signals} +\entry {raising signals}{398}{raising signals} +\entry {signals, generating}{398}{signals, generating} +\entry {killing a process}{399}{killing a process} +\entry {interprocess communication, with signals}{401}{interprocess communication, with signals} +\entry {blocking signals}{402}{blocking signals} +\entry {signal set}{403}{signal set} +\entry {signal mask}{405}{signal mask} +\entry {process signal mask}{405}{process signal mask} +\entry {blocking signals, in a handler}{407}{blocking signals, in a handler} +\entry {pending signals, checking for}{408}{pending signals, checking for} +\entry {blocked signals, checking for}{408}{blocked signals, checking for} +\entry {checking for pending signals}{408}{checking for pending signals} +\entry {timing error in signal handling}{410}{timing error in signal handling} +\entry {waiting for a signal}{411}{waiting for a signal} +\entry {pause function}{411}{\code {pause} function} +\entry {signal stack}{414}{signal stack} +\entry {process}{419}{process} +\entry {program arguments}{419}{program arguments} +\entry {command line arguments}{419}{command line arguments} +\entry {main function}{419}{\code {main} function} +\entry {argc (program argument count)}{419}{argc (program argument count)} +\entry {argv (program argument vector)}{419}{argv (program argument vector)} +\entry {program argument syntax}{420}{program argument syntax} +\entry {syntax, for program arguments}{420}{syntax, for program arguments} +\entry {command argument syntax}{420}{command argument syntax} +\entry {long-named options}{420}{long-named options} +\entry {program arguments, parsing}{421}{program arguments, parsing} +\entry {command arguments, parsing}{421}{command arguments, parsing} +\entry {parsing program arguments}{421}{parsing program arguments} +\entry {environment variable}{428}{environment variable} +\entry {environment}{428}{environment} +\entry {environment access}{428}{environment access} +\entry {environment representation}{428}{environment representation} +\entry {standard environment variables}{429}{standard environment variables} +\entry {HOME environment variable}{429}{HOME environment variable} +\entry {home directory}{429}{home directory} +\entry {LOGNAME environment variable}{429}{LOGNAME environment variable} +\entry {PATH environment variable}{430}{PATH environment variable} +\entry {TERM environment variable}{430}{TERM environment variable} +\entry {TZ environment variable}{430}{TZ environment variable} +\entry {LANG environment variable}{430}{LANG environment variable} +\entry {LC{\_}COLLATE environment variable}{431}{LC{\_}COLLATE environment variable} +\entry {LC{\_}CTYPE environment variable}{431}{LC{\_}CTYPE environment variable} +\entry {LC{\_}MONETARY environment variable}{431}{LC{\_}MONETARY environment variable} +\entry {LC{\_}NUMERIC environment variable}{431}{LC{\_}NUMERIC environment variable} +\entry {LC{\_}TIME environment variable}{431}{LC{\_}TIME environment variable} +\entry {{\_}POSIX{\_}OPTION{\_}ORDER environment variable.}{431}{{\_}POSIX{\_}OPTION{\_}ORDER environment variable.} +\entry {program termination}{431}{program termination} +\entry {process termination}{431}{process termination} +\entry {exit status value}{431}{exit status value} +\entry {exit status}{432}{exit status} +\entry {aborting a program}{434}{aborting a program} +\entry {process}{437}{process} +\entry {child process}{437}{child process} +\entry {parent process}{437}{parent process} +\entry {running a command}{437}{running a command} +\entry {process ID}{438}{process ID} +\entry {process lifetime}{438}{process lifetime} +\entry {creating a process}{438}{creating a process} +\entry {forking a process}{438}{forking a process} +\entry {child process}{438}{child process} +\entry {parent process}{438}{parent process} +\entry {process image}{438}{process image} +\entry {executing a file}{440}{executing a file} +\entry {exec functions}{440}{\code {exec} functions} +\entry {process completion}{443}{process completion} +\entry {waiting for completion of child process}{443}{waiting for completion of child process} +\entry {testing exit status of child process}{443}{testing exit status of child process} +\entry {process groups}{449}{process groups} +\entry {job control}{449}{job control} +\entry {job}{449}{job} +\entry {session}{449}{session} +\entry {shell}{449}{shell} +\entry {session}{449}{session} +\entry {session leader}{449}{session leader} +\entry {controlling terminal}{450}{controlling terminal} +\entry {foreground job}{450}{foreground job} +\entry {background job}{450}{background job} +\entry {stopped job}{450}{stopped job} +\entry {job control is optional}{450}{job control is optional} +\entry {controlling process}{451}{controlling process} +\entry {controlling terminal, access to}{451}{controlling terminal, access to} +\entry {SIGTTIN, from background job}{451}{\code {SIGTTIN}, from background job} +\entry {SIGTTOU, from background job}{451}{\code {SIGTTOU}, from background job} +\entry {orphaned process group}{451}{orphaned process group} +\entry {job control, enabling}{454}{job control, enabling} +\entry {subshell}{454}{subshell} +\entry {job control, enabling}{454}{job control, enabling} +\entry {launching jobs}{456}{launching jobs} +\entry {process group leader}{456}{process group leader} +\entry {process group ID}{456}{process group ID} +\entry {race conditions, relating to job control}{456}{race conditions, relating to job control} +\entry {foreground job, launching}{460}{foreground job, launching} +\entry {background job, launching}{461}{background job, launching} +\entry {stopped jobs, detecting}{461}{stopped jobs, detecting} +\entry {terminated jobs, detecting}{461}{terminated jobs, detecting} +\entry {SIGCHLD, handling of}{461}{\code {SIGCHLD}, handling of} +\entry {stopped jobs, continuing}{466}{stopped jobs, continuing} +\entry {process group functions}{467}{process group functions} +\entry {job control functions}{467}{job control functions} +\entry {controlling terminal, determining}{467}{controlling terminal, determining} +\entry {BSD compatibility library}{469}{BSD compatibility library} +\entry {login name}{473}{login name} +\entry {user name}{473}{user name} +\entry {user ID}{473}{user ID} +\entry {group name}{473}{group name} +\entry {group ID}{473}{group ID} +\entry {persona}{473}{persona} +\entry {effective user ID}{473}{effective user ID} +\entry {effective group ID}{473}{effective group ID} +\entry {real user ID}{474}{real user ID} +\entry {real group ID}{474}{real group ID} +\entry {supplementary group IDs}{474}{supplementary group IDs} +\entry {setuid programs}{475}{\code {setuid} programs} +\entry {login name, determining}{483}{login name, determining} +\entry {user ID, determining}{483}{user ID, determining} +\entry {user database}{484}{user database} +\entry {password database}{484}{password database} +\entry {converting user ID to user name}{484}{converting user ID to user name} +\entry {converting user name to user ID}{484}{converting user name to user ID} +\entry {scanning the user list}{485}{scanning the user list} +\entry {group database}{486}{group database} +\entry {converting group name to group ID}{487}{converting group name to group ID} +\entry {converting group ID to group name}{487}{converting group ID to group name} +\entry {scanning the group list}{487}{scanning the group list} +\entry {POSIX capacity limits}{495}{POSIX capacity limits} +\entry {limits, POSIX}{495}{limits, POSIX} +\entry {capacity limits, POSIX}{495}{capacity limits, POSIX} +\entry {limits, program argument size}{495}{limits, program argument size} +\entry {limits, number of processes}{495}{limits, number of processes} +\entry {limits, number of open files}{495}{limits, number of open files} +\entry {limits, time zone name length}{495}{limits, time zone name length} +\entry {limits, number of supplementary group IDs}{496}{limits, number of supplementary group IDs} +\entry {POSIX optional features}{496}{POSIX optional features} +\entry {optional POSIX features}{496}{optional POSIX features} +\entry {limits, link count of files}{503}{limits, link count of files} +\entry {limits, terminal input queue}{503}{limits, terminal input queue} +\entry {limits, file name length}{503}{limits, file name length} +\entry {limits, pipe buffer size}{504}{limits, pipe buffer size} +\entry {consistency checking}{511}{consistency checking} +\entry {impossible events}{511}{impossible events} +\entry {assertions}{511}{assertions} +\entry {variable number of arguments}{512}{variable number of arguments} +\entry {variadic functions}{512}{variadic functions} +\entry {optional arguments}{512}{optional arguments} +\entry {function prototypes (variadic)}{513}{function prototypes (variadic)} +\entry {prototypes for variadic functions}{513}{prototypes for variadic functions} +\entry {variadic function prototypes}{513}{variadic function prototypes} +\entry {variadic function argument access}{514}{variadic function argument access} +\entry {arguments (variadic functions)}{514}{arguments (variadic functions)} +\entry {number of arguments passed}{515}{number of arguments passed} +\entry {how many arguments}{515}{how many arguments} +\entry {arguments, how many}{515}{arguments, how many} +\entry {variadic functions, calling}{515}{variadic functions, calling} +\entry {calling variadic functions}{515}{calling variadic functions} +\entry {declaring variadic functions}{515}{declaring variadic functions} +\entry {default argument promotions}{516}{default argument promotions} +\entry {argument promotion}{516}{argument promotion} +\entry {null pointer constant}{519}{null pointer constant} +\entry {integer type width}{520}{integer type width} +\entry {width of integer type}{520}{width of integer type} +\entry {type measurements, integer}{520}{type measurements, integer} +\entry {integer type range}{521}{integer type range} +\entry {range of integer type}{521}{range of integer type} +\entry {limits, integer types}{521}{limits, integer types} +\entry {floating type measurements}{522}{floating type measurements} +\entry {measurements of floating types}{522}{measurements of floating types} +\entry {type measurements, floating}{522}{type measurements, floating} +\entry {limits, floating types}{522}{limits, floating types} +\entry {sign (of floating point number)}{523}{sign (of floating point number)} +\entry {base (of floating point number)}{523}{base (of floating point number)} +\entry {radix (of floating point number)}{523}{radix (of floating point number)} +\entry {exponent (of floating point number)}{523}{exponent (of floating point number)} +\entry {bias (of floating point number exponent)}{523}{bias (of floating point number exponent)} +\entry {mantissa (of floating point number)}{523}{mantissa (of floating point number)} +\entry {significand (of floating point number)}{523}{significand (of floating point number)} +\entry {precision (of floating point number)}{523}{precision (of floating point number)} +\entry {hidden bit (of floating point number mantissa)}{523}{hidden bit (of floating point number mantissa)} +\entry {normalized floating point number}{524}{normalized floating point number} +\entry {IEEE floating point representation}{527}{IEEE floating point representation} +\entry {floating point, IEEE}{527}{floating point, IEEE} +\entry {installing the library}{609}{installing the library} +\entry {reporting bugs}{612}{reporting bugs} diff -ruN glibc-1.06/manual/libc.cps glibc-1.07/manual/libc.cps --- glibc-1.06/manual/libc.cps Mon May 17 16:59:10 1993 +++ glibc-1.07/manual/libc.cps Wed Dec 29 18:34:47 1993 @@ -1,798 +1,799 @@ \initial {{\_}} -\entry {{\_}POSIX{\_}OPTION{\_}ORDER environment variable.}{469} +\entry {{\_}POSIX{\_}OPTION{\_}ORDER environment variable.}{431} \initial {4} -\entry {4.x BSD Unix}{3} +\entry {4.\var {n} BSD Unix}{3} \initial {A} -\entry {abort signal}{405} -\entry {aborting a program}{473} -\entry {absolute file name}{131} -\entry {absolute value functions}{356} -\entry {accepting connections}{293} -\entry {access permission for a file}{251} -\entry {access, testing for}{253} -\entry {accessing directories}{231} -\entry {address of socket}{267} -\entry {alarm signal}{407} -\entry {alarms, setting}{382} -\entry {alignment (in obstacks)}{47} -\entry {alignment (with \code {malloc})}{34} -\entry {\code {alloca} disadvantages}{53} -\entry {\code {alloca} function}{51} -\entry {allocation (obstacks)}{40} -\entry {allocation hooks, for \code {malloc}}{35} -\entry {allocation of memory with \code {malloc}}{29} -\entry {allocation size of string}{62} -\entry {allocation statistics}{36} -\entry {alphabetic character}{58} -\entry {alphanumeric character}{58} +\entry {abort signal}{370} +\entry {aborting a program}{434} +\entry {absolute file name}{76} +\entry {absolute value functions}{284} +\entry {accepting connections}{227} +\entry {access permission for a file}{185} +\entry {access, testing for}{188} +\entry {accessing directories}{167} +\entry {address of socket}{203} +\entry {alarm signal}{372} +\entry {alarms, setting}{329} +\entry {alignment (in obstacks)}{43} +\entry {alignment (with \code {malloc})}{31} +\entry {\code {alloca} disadvantages}{48} +\entry {\code {alloca} function}{46} +\entry {allocation (obstacks)}{37} +\entry {allocation hooks, for \code {malloc}}{32} +\entry {allocation of memory with \code {malloc}}{26} +\entry {allocation size of string}{58} +\entry {allocation statistics}{33} +\entry {alphabetic character}{53} +\entry {alphanumeric character}{54} \entry {ANSI C}{2} -\entry {append mode (file status flag)}{200} -\entry {append-access files}{129} -\entry {argc (program argument count)}{457} -\entry {argument promotion}{560} -\entry {arguments (variadic functions)}{558} -\entry {arguments, how many}{559} -\entry {argv (program argument vector)}{457} -\entry {arithmetic expansion}{121} -\entry {array comparison functions}{68} -\entry {array copy functions}{63} -\entry {array search function}{104} -\entry {array sort function}{104} -\entry {ASCII character}{59} -\entry {assertions}{555} -\entry {attributes of a file}{242} -\entry {automatic allocation}{27} -\entry {automatic freeing}{51} -\entry {automatic storage with variable size}{51} +\entry {append mode (file status flag)}{138} +\entry {append-access files}{75} +\entry {argc (program argument count)}{419} +\entry {argument promotion}{516} +\entry {arguments (variadic functions)}{514} +\entry {arguments, how many}{515} +\entry {argv (program argument vector)}{419} +\entry {arithmetic expansion}{310} +\entry {array comparison functions}{63} +\entry {array copy functions}{59} +\entry {array search function}{293} +\entry {array sort function}{294} +\entry {ASCII character}{55} +\entry {assertions}{511} +\entry {attributes of a file}{177} +\entry {automatic allocation}{25} +\entry {automatic freeing}{46} +\entry {automatic storage with variable size}{46} \initial {B} -\entry {background job}{490} -\entry {background job, launching}{502} -\entry {base (of floating point number)}{568} -\entry {basic byte sequence}{80} -\entry {baud rate}{329} +\entry {background job}{450} +\entry {background job, launching}{461} +\entry {base (of floating point number)}{523} +\entry {basic byte sequence}{340} +\entry {baud rate}{261} \entry {Berkeley Unix}{3} -\entry {bias (of floating point number exponent)}{568} -\entry {big-endian}{283} -\entry {binary I/O to a stream}{178} -\entry {binary search function (for arrays)}{104} -\entry {binary stream}{180} -\entry {binding a socket address}{267} -\entry {blank character}{58} -\entry {block I/O to a stream}{178} -\entry {blocked signals}{401} -\entry {blocked signals, checking for}{446} -\entry {blocking signals}{440} -\entry {blocking signals, in a handler}{445} -\entry {break condition, detecting}{324} -\entry {break condition, generating}{339} -\entry {breaking a string into tokens}{76} -\entry {broken pipe signal}{410} -\entry {broken-down time}{370, 374} -\entry {BSD compatibility library}{510} +\entry {bias (of floating point number exponent)}{523} +\entry {big-endian}{218} +\entry {binary I/O to a stream}{121} +\entry {binary search function (for arrays)}{293} +\entry {binary stream}{122} +\entry {binding a socket address}{203} +\entry {blank character}{54} +\entry {block I/O to a stream}{121} +\entry {blocked signals}{366} +\entry {blocked signals, checking for}{408} +\entry {blocking signals}{402} +\entry {blocking signals, in a handler}{407} +\entry {break condition, detecting}{255} +\entry {break condition, generating}{270} +\entry {breaking a string into tokens}{70} +\entry {broken pipe signal}{375} +\entry {broken-down time}{317, 321} +\entry {BSD compatibility library}{469} +\entry {BSD compatibility library.}{9} \entry {BSD Unix}{3} -\entry {buffering of streams}{185} -\entry {buffering, controlling}{187} -\entry {bus error}{405} -\entry {byte order conversion, for socket}{283} -\entry {byte stream}{265} +\entry {buffering of streams}{126} +\entry {buffering, controlling}{128} +\entry {bus error}{370} +\entry {byte order conversion, for socket}{218} +\entry {byte stream}{201} \initial {C} -\entry {calendar time}{370} -\entry {calendar time and broken-down time}{374} -\entry {calling variadic functions}{560} -\entry {canonical input processing}{318} -\entry {capacity limits, POSIX}{537} -\entry {carrier detect}{326} -\entry {case conversion of characters}{59} -\entry {catching signals}{401} -\entry {categories for locales}{94} -\entry {change working directory}{229} -\entry {changing the locale}{95} -\entry {changing the size of a block (\code {malloc})}{31} -\entry {changing the size of a block (obstacks)}{43} -\entry {channels}{209} -\entry {character case conversion}{59} -\entry {character code}{84} -\entry {character predicates}{57} -\entry {character testing}{57} -\entry {checking for pending signals}{446} -\entry {child process}{475, 476} -\entry {child process signal}{408} -\entry {chunks}{48} -\entry {classification of characters}{57} -\entry {cleaning up a stream}{209} -\entry {clearing terminal input queue}{340} -\entry {client}{291} -\entry {clock ticks}{367} -\entry {close-on-exec (file descriptor flag)}{219} -\entry {closing a file descriptor}{199} -\entry {closing a socket}{289} -\entry {closing a stream}{138} -\entry {code, character}{84} -\entry {collating strings}{70} -\entry {combining locales}{94} -\entry {command argument syntax}{458} -\entry {command arguments, parsing}{459} -\entry {command line arguments}{457} -\entry {command substitution}{121} -\entry {communication style (of a socket)}{265} -\entry {comparing strings and arrays}{68} -\entry {Comparison Function}{103} -\entry {concatenating strings}{63} -\entry {connecting a socket}{291} -\entry {connection}{291} -\entry {consistency checking}{555} -\entry {consistency checking, of heap}{34} -\entry {continue signal}{408} -\entry {control character}{59} -\entry {control operations on files}{214} -\entry {controlling process}{491} -\entry {controlling terminal}{490} -\entry {controlling terminal, access to}{491} -\entry {controlling terminal, determining}{509} -\entry {conversion specifications (\code {printf})}{146} -\entry {conversion specifications (\code {scanf})}{169} -\entry {converting byte order}{283} -\entry {converting case of characters}{59} -\entry {converting extended characters}{86} -\entry {converting extended strings}{84} -\entry {converting file descriptor to stream}{208} -\entry {converting floats to integers}{359} -\entry {converting group ID to group name}{528} -\entry {converting group name to group ID}{528} -\entry {converting host address to name}{278} -\entry {converting host name to address}{278} -\entry {converting network name to network number}{315} -\entry {converting network number to network name}{315} -\entry {converting port number to service name}{282} -\entry {converting service name to port number}{282} -\entry {converting string to collation order}{71} -\entry {converting strings to numbers}{361} -\entry {converting user ID to user name}{526} -\entry {converting user name to user ID}{526} -\entry {cookie, for custom stream}{195} -\entry {copying strings and arrays}{63} -\entry {CPU time}{367} -\entry {create on open (file status flag)}{200} -\entry {creating a directory}{241} -\entry {creating a FIFO special file}{263} -\entry {creating a pipe}{259} -\entry {creating a pipe to a subprocess}{261} -\entry {creating a process}{476} -\entry {creating a socket}{288} -\entry {creating a socket pair}{290} -\entry {creating special files}{257} -\entry {cube root function}{349} -\entry {currency symbols}{99} -\entry {current working directory}{229} -\entry {custom streams}{195} -\entry {customizing \code {printf}}{164} +\entry {calendar time}{317} +\entry {calendar time and broken-down time}{321} +\entry {calling variadic functions}{515} +\entry {canonical input processing}{250} +\entry {capacity limits, POSIX}{495} +\entry {carrier detect}{257} +\entry {case conversion of characters}{55} +\entry {catching signals}{366} +\entry {categories for locales}{352} +\entry {change working directory}{165} +\entry {changing the locale}{353} +\entry {changing the size of a block (\code {malloc})}{29} +\entry {changing the size of a block (obstacks)}{39} +\entry {channels}{146} +\entry {character case conversion}{55} +\entry {character code}{343} +\entry {character predicates}{53} +\entry {character testing}{53} +\entry {checking for pending signals}{408} +\entry {child process}{437, 438} +\entry {child process signal}{373} +\entry {chunks}{44} +\entry {classification of characters}{53} +\entry {cleaning up a stream}{147} +\entry {clearing terminal input queue}{270} +\entry {client}{225} +\entry {clock ticks}{315} +\entry {close-on-exec (file descriptor flag)}{155} +\entry {closing a file descriptor}{137} +\entry {closing a socket}{223} +\entry {closing a stream}{84} +\entry {code, character}{343} +\entry {collating strings}{65} +\entry {combining locales}{352} +\entry {command argument syntax}{420} +\entry {command arguments, parsing}{421} +\entry {command line arguments}{419} +\entry {command substitution}{310} +\entry {communication style (of a socket)}{201} +\entry {comparing strings and arrays}{63} +\entry {Comparison Function}{293} +\entry {concatenating strings}{59} +\entry {connecting a socket}{225} +\entry {connection}{225} +\entry {consistency checking}{511} +\entry {consistency checking, of heap}{32} +\entry {continue signal}{373} +\entry {control character}{55} +\entry {control operations on files}{152} +\entry {controlling process}{451} +\entry {controlling terminal}{450} +\entry {controlling terminal, access to}{451} +\entry {controlling terminal, determining}{467} +\entry {conversion specifications (\code {printf})}{92} +\entry {conversion specifications (\code {scanf})}{113} +\entry {converting byte order}{218} +\entry {converting case of characters}{55} +\entry {converting extended characters}{346} +\entry {converting extended strings}{344} +\entry {converting file descriptor to stream}{145} +\entry {converting floats to integers}{286} +\entry {converting group ID to group name}{487} +\entry {converting group name to group ID}{487} +\entry {converting host address to name}{213} +\entry {converting host name to address}{213} +\entry {converting network name to network number}{247} +\entry {converting network number to network name}{247} +\entry {converting port number to service name}{217} +\entry {converting service name to port number}{217} +\entry {converting string to collation order}{66} +\entry {converting strings to numbers}{288} +\entry {converting user ID to user name}{484} +\entry {converting user name to user ID}{484} +\entry {cookie, for custom stream}{134} +\entry {copying strings and arrays}{59} +\entry {CPU time}{315} +\entry {create on open (file status flag)}{138} +\entry {creating a directory}{176} +\entry {creating a FIFO special file}{199} +\entry {creating a pipe}{195} +\entry {creating a pipe to a subprocess}{197} +\entry {creating a process}{438} +\entry {creating a socket}{222} +\entry {creating a socket pair}{224} +\entry {creating special files}{191} +\entry {cube root function}{278} +\entry {currency symbols}{357} +\entry {current working directory}{165} +\entry {custom streams}{134} +\entry {customizing \code {printf}}{107} \initial {D} -\entry {data loss on sockets}{265} -\entry {datagram socket}{305} -\entry {datagrams, transmitting}{305} -\entry {date and time}{370} -\entry {Daylight Saving Time}{375} -\entry {decimal digit character}{58} -\entry {decimal-point separator}{98} +\entry {data loss on sockets}{201} +\entry {datagram socket}{238} +\entry {datagrams, transmitting}{239} +\entry {date and time}{317} +\entry {Daylight Saving Time}{322} +\entry {decimal digit character}{53} +\entry {decimal-point separator}{356} \entry {declaration (compared to definition)}{4} -\entry {declaring variadic functions}{560} -\entry {default action (for a signal)}{401} -\entry {default action for a signal}{413} -\entry {default argument promotions}{560} -\entry {defining new \code {printf} conversions}{164} +\entry {declaring variadic functions}{515} +\entry {default action (for a signal)}{366} +\entry {default action for a signal}{378} +\entry {default argument promotions}{516} +\entry {defining new \code {printf} conversions}{107} \entry {definition (compared to declaration)}{4} -\entry {delayed suspend character}{335} -\entry {deleting a directory}{239} -\entry {deleting a file}{238} -\entry {delivery of signals}{401} -\entry {descriptors and streams}{209} -\entry {digit character}{58} -\entry {directories, accessing}{231} -\entry {directories, creating}{241} -\entry {directories, deleting}{239} -\entry {directory}{130} -\entry {directory entry}{130} -\entry {directory stream}{231} -\entry {disadvantages of \code {alloca}}{53} -\entry {DISCARD character}{337} -\entry {domain (of socket)}{266} -\entry {domain error}{345} -\entry {dot notation, for Internet addresses}{276} -\entry {DSUSP character}{335} -\entry {duplicating file descriptors}{215} -\entry {dynamic allocation}{27} +\entry {delayed suspend character}{266} +\entry {deleting a directory}{174} +\entry {deleting a file}{173} +\entry {delivery of signals}{366} +\entry {descriptors and streams}{146} +\entry {digit character}{53} +\entry {directories, accessing}{167} +\entry {directories, creating}{176} +\entry {directories, deleting}{174} +\entry {directory}{76} +\entry {directory entry}{76} +\entry {directory stream}{167} +\entry {disadvantages of \code {alloca}}{48} +\entry {DISCARD character}{267} +\entry {domain (of socket)}{201} +\entry {domain error}{275} +\entry {dot notation, for Internet addresses}{211} +\entry {DSUSP character}{266} +\entry {duplicating file descriptors}{153} +\entry {dynamic allocation}{25} \initial {E} -\entry {echo of terminal input}{327} -\entry {effective group ID}{513} -\entry {effective user ID}{513} -\entry {efficiency and \code {malloc}}{33} -\entry {efficiency and obstacks}{45} -\entry {efficiency of chunks}{48} -\entry {end of file, on a stream}{179} -\entry {end-of-file, on a file descriptor}{202} -\entry {environment}{467} -\entry {environment access}{467} -\entry {environment representation}{467} -\entry {environment variable}{466} -\entry {EOF character}{332} -\entry {EOL character}{332} -\entry {EOL2 character}{333} -\entry {epoch}{370} -\entry {ERASE character}{332} +\entry {echo of terminal input}{259} +\entry {effective group ID}{473} +\entry {effective user ID}{473} +\entry {efficiency and \code {malloc}}{31} +\entry {efficiency and obstacks}{41} +\entry {efficiency of chunks}{44} +\entry {end of file, on a stream}{121} +\entry {end-of-file, on a file descriptor}{140} +\entry {environment}{428} +\entry {environment access}{428} +\entry {environment representation}{428} +\entry {environment variable}{428} +\entry {EOF character}{263} +\entry {EOL character}{264} +\entry {EOL2 character}{264} +\entry {epoch}{318} +\entry {ERASE character}{264} \entry {error codes}{13} \entry {error reporting}{13} -\entry {establishing a handler}{412} -\entry {exception}{403} -\entry {exclusive lock}{222} -\entry {\code {exec} functions}{479} -\entry {executing a file}{479} -\entry {exit status}{471} -\entry {exit status value}{470} -\entry {expansion of shell words}{120} -\entry {exponent (of floating point number)}{568} -\entry {exponentiation functions}{348} -\entry {extended character sets}{79} -\entry {extended characters, converting}{86} -\entry {extended strings, converting representations}{84} -\entry {extending \code {printf}}{164} -\entry {extracting file descriptor from stream}{208} +\entry {establishing a handler}{377} +\entry {exception}{369} +\entry {exclusive lock}{158} +\entry {\code {exec} functions}{440} +\entry {executing a file}{440} +\entry {exit status}{432} +\entry {exit status value}{431} +\entry {expansion of shell words}{310} +\entry {exponent (of floating point number)}{523} +\entry {exponentiation functions}{278} +\entry {extended character sets}{339} +\entry {extended characters, converting}{346} +\entry {extended strings, converting representations}{344} +\entry {extending \code {printf}}{107} +\entry {extracting file descriptor from stream}{145} \initial {F} -\entry {\code {fcntl} function}{214} -\entry {feature test macros}{9} -\entry {field splitting}{121} -\entry {FIFO special file}{259} -\entry {file access permission}{251} -\entry {file access time}{255} -\entry {file attribute modification time}{255} -\entry {file attributes}{242} -\entry {file creation mask}{251} -\entry {file descriptor flags}{218} -\entry {file descriptor sets, for \code {select}}{211} -\entry {file descriptors, standard}{208} -\entry {file locks}{222} -\entry {file modification time}{255} -\entry {file name}{130} -\entry {file name component}{130} -\entry {file name resolution}{131} -\entry {file name syntax errors}{132} -\entry {file names, multiple}{235} -\entry {file namespace, for sockets}{271} -\entry {file owner}{247} -\entry {file permission bits}{249} -\entry {file pointer}{135} -\entry {file position}{129} -\entry {file positioning on a file descriptor}{205} -\entry {file positioning on a stream}{181} -\entry {file status flags}{219} -\entry {filtering i/o through subprocess}{261} -\entry {flag character (\code {printf})}{148} -\entry {flag character (\code {scanf})}{171} -\entry {flags for \code {sigaction}}{419} -\entry {floating point, IEEE}{572} -\entry {floating type measurements}{568} -\entry {floating-point exception}{403} -\entry {flow control, terminal}{340} -\entry {flushing a stream}{186} -\entry {flushing terminal output queue}{339} -\entry {foreground job}{490} -\entry {foreground job, launching}{501} -\entry {forking a process}{476} -\entry {format string, for \code {printf}}{146} -\entry {format string, for \code {scanf}}{169} -\entry {formatted input from a stream}{169} -\entry {formatted output to a stream}{146} -\entry {freeing (obstacks)}{41} -\entry {freeing memory allocated with \code {malloc}}{30} -\entry {fully buffered stream}{185} -\entry {function prototypes (variadic)}{558} +\entry {\code {fcntl} function}{152} +\entry {feature test macros}{8} +\entry {field splitting}{310} +\entry {FIFO special file}{195} +\entry {file access permission}{185} +\entry {file access time}{189} +\entry {file attribute modification time}{189} +\entry {file attributes}{177} +\entry {file creation mask}{186} +\entry {file descriptor flags}{155} +\entry {file descriptor sets, for \code {select}}{149} +\entry {file descriptors, standard}{146} +\entry {file locks}{158} +\entry {file modification time}{189} +\entry {file name}{75} +\entry {file name component}{76} +\entry {file name resolution}{76} +\entry {file name syntax errors}{77} +\entry {file names, multiple}{170} +\entry {file namespace, for sockets}{206} +\entry {file owner}{182} +\entry {file permission bits}{184} +\entry {file pointer}{81} +\entry {file position}{75} +\entry {file positioning on a file descriptor}{143} +\entry {file positioning on a stream}{123} +\entry {file status flags}{156} +\entry {filtering i/o through subprocess}{197} +\entry {flag character (\code {printf})}{93} +\entry {flag character (\code {scanf})}{114} +\entry {flags for \code {sigaction}}{383} +\entry {floating point, IEEE}{527} +\entry {floating type measurements}{522} +\entry {floating-point exception}{369} +\entry {flow control, terminal}{271} +\entry {flushing a stream}{128} +\entry {flushing terminal output queue}{270} +\entry {foreground job}{450} +\entry {foreground job, launching}{460} +\entry {forking a process}{438} +\entry {format string, for \code {printf}}{91} +\entry {format string, for \code {scanf}}{112} +\entry {formatted input from a stream}{112} +\entry {formatted output to a stream}{91} +\entry {freeing (obstacks)}{38} +\entry {freeing memory allocated with \code {malloc}}{28} +\entry {fully buffered stream}{127} +\entry {function prototypes (variadic)}{513} \initial {G} -\entry {generation of signals}{400} -\entry {globbing}{110} -\entry {graphic character}{59} -\entry {Gregorian calendar}{370} -\entry {group database}{528} -\entry {group ID}{513} -\entry {group name}{513} -\entry {group owner of a file}{247} -\entry {grouping of digits}{99} -\entry {growing objects (in obstacks)}{43} +\entry {generation of signals}{366} +\entry {globbing}{300} +\entry {graphic character}{54} +\entry {Gregorian calendar}{317} +\entry {group database}{486} +\entry {group ID}{473} +\entry {group name}{473} +\entry {group owner of a file}{182} +\entry {grouping of digits}{356} +\entry {growing objects (in obstacks)}{39} \initial {H} -\entry {handle}{54} -\entry {handling multiple signals}{426} -\entry {hangup signal}{405} -\entry {hard link}{235} +\entry {handle}{49} +\entry {handling multiple signals}{389} +\entry {hangup signal}{371} +\entry {hard link}{170} \entry {header files}{4} -\entry {heap consistency checking}{34} -\entry {heap, dynamic allocation from}{28} -\entry {heap, freeing memory from}{30} -\entry {hexadecimal digit character}{58} -\entry {hidden bit (of floating point number mantissa)}{569} -\entry {high-priority data}{301} -\entry {high-resolution time}{370} -\entry {home directory}{468} -\entry {HOME environment variable}{468} -\entry {hook functions (of custom streams)}{196} -\entry {host address, Internet}{276} -\entry {hosts database}{278} -\entry {how many arguments}{559} -\entry {hyperbolic functions}{350} +\entry {heap consistency checking}{32} +\entry {heap, dynamic allocation from}{26} +\entry {heap, freeing memory from}{28} +\entry {hexadecimal digit character}{54} +\entry {hidden bit (of floating point number mantissa)}{523} +\entry {high-priority data}{235} +\entry {high-resolution time}{317} +\entry {home directory}{429} +\entry {HOME environment variable}{429} +\entry {hook functions (of custom streams)}{135} +\entry {host address, Internet}{210} +\entry {hosts database}{213} +\entry {how many arguments}{515} +\entry {hyperbolic functions}{279} \initial {I} -\entry {identifying terminals}{317} -\entry {IEEE floating point}{355} -\entry {IEEE floating point representation}{572} -\entry {IEEE Std 1003.1}{3} -\entry {IEEE Std 1003.2}{3} -\entry {ignore action for a signal}{413} -\entry {illegal instruction}{404} -\entry {impossible events}{555} -\entry {independent channels}{209} -\entry {initial signal actions}{420} -\entry {inode number}{244} -\entry {input available signal}{408} -\entry {input conversions, for \code {scanf}}{171} -\entry {input from multiple files}{211} -\entry {installing the library}{633} -\entry {integer division functions}{360} -\entry {integer type range}{566} -\entry {integer type width}{565} -\entry {interactive signals, from terminal}{328} -\entry {interactive stop signal}{409} -\entry {internationalization}{93} -\entry {Internet host address}{276} -\entry {Internet namespace, for sockets}{274} -\entry {interprocess communication, with FIFO}{263} -\entry {interprocess communication, with pipes}{259} -\entry {interprocess communication, with signals}{438} -\entry {interprocess communication, with sockets}{265} -\entry {interrupt character}{334} -\entry {interrupt signal}{406} -\entry {interrupt-driven input}{226} -\entry {interval timer, setting}{382} -\entry {INTR character}{334} -\entry {inverse hyperbolic functions}{350} -\entry {inverse trigonmetric functions}{347} +\entry {identifying terminals}{249} +\entry {IEEE floating point}{283} +\entry {IEEE floating point representation}{527} +\entry {IEEE Std 1003.1}{2} +\entry {IEEE Std 1003.2}{2} +\entry {ignore action for a signal}{378} +\entry {illegal instruction}{370} +\entry {impossible events}{511} +\entry {independent channels}{147} +\entry {initial signal actions}{384} +\entry {inode number}{179} +\entry {input available signal}{373} +\entry {input conversions, for \code {scanf}}{114} +\entry {input from multiple files}{148} +\entry {installing the library}{609} +\entry {integer division functions}{287} +\entry {integer type range}{521} +\entry {integer type width}{520} +\entry {interactive signals, from terminal}{260} +\entry {interactive stop signal}{374} +\entry {internationalization}{351} +\entry {Internet host address}{210} +\entry {Internet namespace, for sockets}{209} +\entry {interprocess communication, with FIFO}{199} +\entry {interprocess communication, with pipes}{195} +\entry {interprocess communication, with signals}{401} +\entry {interprocess communication, with sockets}{201} +\entry {interrupt character}{265} +\entry {interrupt signal}{371} +\entry {interrupt-driven input}{162} +\entry {interval timer, setting}{329} +\entry {INTR character}{265} +\entry {inverse hyperbolic functions}{279} +\entry {inverse trigonmetric functions}{277} \initial {J} -\entry {job}{489} -\entry {job control}{489} -\entry {job control functions}{508} -\entry {job control is optional}{490} -\entry {job control signals}{408} -\entry {job control, enabling}{495} +\entry {job}{449} +\entry {job control}{449} +\entry {job control functions}{467} +\entry {job control is optional}{450} +\entry {job control signals}{373} +\entry {job control, enabling}{454} \initial {K} -\entry {Kermit the frog}{107} -\entry {KILL character}{333} -\entry {kill signal}{407} -\entry {killing a process}{436} +\entry {Kermit the frog}{296} +\entry {KILL character}{264} +\entry {kill signal}{372} +\entry {killing a process}{399} \initial {L} -\entry {LANG environment variable}{469} -\entry {launching jobs}{497} -\entry {LC{\_}COLLATE environment variable}{469} -\entry {LC{\_}CTYPE environment variable}{469} -\entry {LC{\_}MONETARY environment variable}{469} -\entry {LC{\_}NUMERIC environment variable}{469} -\entry {LC{\_}TIME environment variable}{469} -\entry {leap second}{374} -\entry {length of multibyte character}{86} -\entry {length of string}{62} -\entry {level, for socket options}{312} +\entry {LANG environment variable}{430} +\entry {launching jobs}{456} +\entry {LC{\_}COLLATE environment variable}{431} +\entry {LC{\_}CTYPE environment variable}{431} +\entry {LC{\_}MONETARY environment variable}{431} +\entry {LC{\_}NUMERIC environment variable}{431} +\entry {LC{\_}TIME environment variable}{431} +\entry {leap second}{321} +\entry {length of multibyte character}{345} +\entry {length of string}{58} +\entry {level, for socket options}{244} \entry {library}{1} -\entry {limits on resource usage}{387} -\entry {limits, file name length}{546} -\entry {limits, floating types}{568} -\entry {limits, integer types}{566} -\entry {limits, link count of files}{546} -\entry {limits, number of open files}{537} -\entry {limits, number of processes}{537} -\entry {limits, number of supplementary group IDs}{538} -\entry {limits, pipe buffer size}{546} -\entry {limits, POSIX}{537} -\entry {limits, program argument size}{537} -\entry {limits, terminal input queue}{546} -\entry {limits, time zone name length}{538} -\entry {line buffered stream}{185} -\entry {line speed}{329} -\entry {lines (in a text file)}{181} -\entry {link}{130} -\entry {link, hard}{235} -\entry {link, soft}{236} -\entry {link, symbolic}{236} -\entry {linked channels}{209} -\entry {listening (sockets)}{292} -\entry {little-endian}{283} -\entry {LNEXT character}{334} -\entry {local network address number}{276} -\entry {local time}{370} -\entry {locale categories}{94} -\entry {locale, changing}{95} -\entry {locales}{93} -\entry {logarithm functions}{348} -\entry {login name}{513} -\entry {login name, determining}{524} -\entry {LOGNAME environment variable}{468} -\entry {long jumps}{393} -\entry {long-named options}{458} -\entry {longjmp}{52} -\entry {loss of data on sockets}{265} -\entry {lower-case character}{57} +\entry {limits on resource usage}{334} +\entry {limits, file name length}{503} +\entry {limits, floating types}{522} +\entry {limits, integer types}{521} +\entry {limits, link count of files}{503} +\entry {limits, number of open files}{495} +\entry {limits, number of processes}{495} +\entry {limits, number of supplementary group IDs}{496} +\entry {limits, pipe buffer size}{504} +\entry {limits, POSIX}{495} +\entry {limits, program argument size}{495} +\entry {limits, terminal input queue}{503} +\entry {limits, time zone name length}{495} +\entry {line buffered stream}{127} +\entry {line speed}{261} +\entry {lines (in a text file)}{123} +\entry {link}{76} +\entry {link, hard}{170} +\entry {link, soft}{171} +\entry {link, symbolic}{171} +\entry {linked channels}{147} +\entry {listening (sockets)}{226} +\entry {little-endian}{218} +\entry {LNEXT character}{265} +\entry {local network address number}{210} +\entry {local time}{317} +\entry {locale categories}{352} +\entry {locale, changing}{353} +\entry {locales}{351} +\entry {logarithm functions}{278} +\entry {login name}{473} +\entry {login name, determining}{483} +\entry {LOGNAME environment variable}{429} +\entry {long jumps}{361} +\entry {long-named options}{420} +\entry {longjmp}{48} +\entry {loss of data on sockets}{201} +\entry {lower-case character}{53} \initial {M} -\entry {macros}{42} -\entry {\code {main} function}{457} -\entry {\code {malloc} function}{28} -\entry {mantissa (of floating point number)}{569} -\entry {matching failure, in \code {scanf}}{170} -\entry {maximum field width (\code {scanf})}{171} -\entry {measurements of floating types}{568} -\entry {memory allocation}{27} -\entry {memory usage warnings}{55} -\entry {merging of signals}{426} -\entry {MIN termios slot}{338} -\entry {minimum field width (\code {printf})}{148} -\entry {mixing descriptors and streams}{209} -\entry {modem disconnect}{326} -\entry {modem status lines}{326} -\entry {monetary value formatting}{98} -\entry {multibyte character, length of}{86} -\entry {multibyte characters}{80} -\entry {multiple names for one file}{235} -\entry {multiplexing input}{211} +\entry {macros}{38} +\entry {\code {main} function}{419} +\entry {\code {malloc} function}{26} +\entry {mantissa (of floating point number)}{523} +\entry {matching failure, in \code {scanf}}{113} +\entry {maximum field width (\code {scanf})}{114} +\entry {measurements of floating types}{522} +\entry {memory allocation}{25} +\entry {memory usage warnings}{50} +\entry {merging of signals}{389} +\entry {MIN termios slot}{268} +\entry {minimum field width (\code {printf})}{93} +\entry {mixing descriptors and streams}{146} +\entry {modem disconnect}{258} +\entry {modem status lines}{257} +\entry {monetary value formatting}{355} +\entry {multibyte character, length of}{345} +\entry {multibyte characters}{340} +\entry {multiple names for one file}{170} +\entry {multiplexing input}{148} \initial {N} -\entry {name of running program}{24} -\entry {name of socket}{267} -\entry {name space}{7} -\entry {names of signals}{402} -\entry {namespace (of socket)}{266} -\entry {NaN}{355} -\entry {network byte order}{283} -\entry {network number}{276} -\entry {network protocol}{266} -\entry {networks database}{315} -\entry {non-blocking mode (file status flag)}{200} -\entry {non-local exit, from signal handler}{423} -\entry {non-local exits}{393} -\entry {noncanonical input processing}{319} -\entry {normalization functions (floating-point)}{357} -\entry {normalized floating point number}{569} -\entry {not a number}{355} -\entry {null character}{61} -\entry {null pointer constant}{564} -\entry {number of arguments passed}{559} -\entry {number syntax, parsing}{361} -\entry {numeric value formatting}{98} +\entry {name of running program}{23} +\entry {name of socket}{203} +\entry {name space}{6} +\entry {names of signals}{367} +\entry {namespace (of socket)}{201} +\entry {NaN}{283} +\entry {network byte order}{218} +\entry {network number}{210} +\entry {network protocol}{202} +\entry {networks database}{247} +\entry {non-blocking mode (file status flag)}{138} +\entry {non-local exit, from signal handler}{387} +\entry {non-local exits}{361} +\entry {noncanonical input processing}{250} +\entry {normalization functions (floating-point)}{285} +\entry {normalized floating point number}{524} +\entry {not a number}{283} +\entry {null character}{57} +\entry {null pointer constant}{519} +\entry {number of arguments passed}{515} +\entry {number syntax, parsing}{288} +\entry {numeric value formatting}{355} \initial {O} -\entry {obstack status}{47} -\entry {obstacks}{38} -\entry {opening a file}{127} -\entry {opening a file descriptor}{199} -\entry {opening a pipe}{259} -\entry {opening a socket}{288} -\entry {opening a socket pair}{290} -\entry {opening a stream}{136} -\entry {optional arguments}{556} -\entry {optional POSIX features}{539} -\entry {orphaned process group}{492} -\entry {out-of-band data}{301} -\entry {output conversions, for \code {printf}}{148} -\entry {output possible signal}{408} -\entry {owner of a file}{247} +\entry {obstack status}{42} +\entry {obstacks}{35} +\entry {opening a file}{73} +\entry {opening a file descriptor}{137} +\entry {opening a pipe}{195} +\entry {opening a socket}{222} +\entry {opening a socket pair}{224} +\entry {opening a stream}{82} +\entry {optional arguments}{512} +\entry {optional POSIX features}{496} +\entry {orphaned process group}{451} +\entry {out-of-band data}{235} +\entry {output conversions, for \code {printf}}{94} +\entry {output possible signal}{373} +\entry {owner of a file}{182} \initial {P} -\entry {packet}{265} -\entry {page boundary}{34} -\entry {parent directory}{131} -\entry {parent process}{475, 476} -\entry {parity checking}{323} -\entry {parsing a template string}{160} -\entry {parsing numbers (in formatted input)}{361} -\entry {parsing program arguments}{459} -\entry {parsing tokens from a string}{76} -\entry {password database}{525} -\entry {PATH environment variable}{468} -\entry {\code {pause} function}{449} -\entry {peeking at input}{144} -\entry {pending signals}{401} -\entry {pending signals, checking for}{446} -\entry {permission to access a file}{251} -\entry {persona}{513} -\entry {pi (trigonometric constant)}{346} -\entry {pipe}{259} -\entry {pipe signal}{410} -\entry {pipe to a subprocess}{261} -\entry {port number}{281} -\entry {positioning a file descriptor}{205} -\entry {positioning a stream}{181} -\entry {POSIX}{3} -\entry {POSIX capacity limits}{537} -\entry {POSIX optional features}{539} -\entry {POSIX.1}{3} -\entry {POSIX.2}{3} -\entry {power functions}{348} -\entry {precision (of floating point number)}{569} -\entry {precision (\code {printf})}{148} -\entry {predicates on arrays}{68} -\entry {predicates on characters}{57} -\entry {predicates on strings}{68} -\entry {printing character}{59} -\entry {priority of a process}{389} -\entry {process}{457, 475} -\entry {process completion}{482} -\entry {process group functions}{508} -\entry {process group ID}{497} -\entry {process group leader}{497} -\entry {process groups}{489} -\entry {process ID}{476} -\entry {process image}{476} -\entry {process lifetime}{476} -\entry {process priority}{389} -\entry {process signal mask}{442} -\entry {process termination}{470} -\entry {processor time}{367} -\entry {profiling alarm signal}{407} -\entry {profiling timer}{382} -\entry {program argument syntax}{458} -\entry {program arguments}{457} -\entry {program arguments, parsing}{459} -\entry {program error signals}{402} -\entry {program name}{24} -\entry {program termination}{470} -\entry {program termination signals}{405} -\entry {programming your own streams}{195} -\entry {protocol (of socket)}{266} -\entry {protocol family}{266} -\entry {protocols database}{284} -\entry {prototypes for variadic functions}{558} -\entry {pseudo-random numbers}{350} -\entry {punctuation character}{58} -\entry {pushing input back}{144} +\entry {packet}{201} +\entry {page boundary}{31} +\entry {parent directory}{77} +\entry {parent process}{437, 438} +\entry {parity checking}{255} +\entry {parsing a template string}{104} +\entry {parsing numbers (in formatted input)}{288} +\entry {parsing program arguments}{421} +\entry {parsing tokens from a string}{70} +\entry {password database}{484} +\entry {PATH environment variable}{430} +\entry {\code {pause} function}{411} +\entry {peeking at input}{89} +\entry {pending signals}{366} +\entry {pending signals, checking for}{408} +\entry {permission to access a file}{185} +\entry {persona}{473} +\entry {pi (trigonometric constant)}{276} +\entry {pipe}{195} +\entry {pipe signal}{375} +\entry {pipe to a subprocess}{197} +\entry {port number}{216} +\entry {positioning a file descriptor}{143} +\entry {positioning a stream}{123} +\entry {POSIX}{2} +\entry {POSIX capacity limits}{495} +\entry {POSIX optional features}{496} +\entry {POSIX.1}{2} +\entry {POSIX.2}{2} +\entry {power functions}{278} +\entry {precision (of floating point number)}{523} +\entry {precision (\code {printf})}{93} +\entry {predicates on arrays}{63} +\entry {predicates on characters}{53} +\entry {predicates on strings}{63} +\entry {printing character}{54} +\entry {priority of a process}{335} +\entry {process}{419, 437} +\entry {process completion}{443} +\entry {process group functions}{467} +\entry {process group ID}{456} +\entry {process group leader}{456} +\entry {process groups}{449} +\entry {process ID}{438} +\entry {process image}{438} +\entry {process lifetime}{438} +\entry {process priority}{335} +\entry {process signal mask}{405} +\entry {process termination}{431} +\entry {processor time}{315} +\entry {profiling alarm signal}{373} +\entry {profiling timer}{329} +\entry {program argument syntax}{420} +\entry {program arguments}{419} +\entry {program arguments, parsing}{421} +\entry {program error signals}{368} +\entry {program name}{23} +\entry {program termination}{431} +\entry {program termination signals}{371} +\entry {programming your own streams}{134} +\entry {protocol (of socket)}{202} +\entry {protocol family}{202} +\entry {protocols database}{219} +\entry {prototypes for variadic functions}{513} +\entry {pseudo-random numbers}{280} +\entry {punctuation character}{54} +\entry {pushing input back}{89} \initial {Q} -\entry {quick sort function (for arrays)}{104} -\entry {QUIT character}{335} -\entry {quit signal}{406} -\entry {quote removal}{121} +\entry {quick sort function (for arrays)}{294} +\entry {QUIT character}{266} +\entry {quit signal}{371} +\entry {quote removal}{310} \initial {R} -\entry {race conditions, relating to job control}{497} -\entry {race conditions, relating to signals}{425} -\entry {radix (of floating point number)}{568} -\entry {raising signals}{434} -\entry {random numbers}{350} -\entry {random-access files}{129} -\entry {range error}{345} -\entry {range of integer type}{566} -\entry {read lock}{222} -\entry {reading from a directory}{231} -\entry {reading from a file descriptor}{202} -\entry {reading from a socket}{295} -\entry {reading from a stream, by blocks}{178} -\entry {reading from a stream, by characters}{140} -\entry {reading from a stream, formatted}{169} -\entry {real group ID}{514} -\entry {real user ID}{514} -\entry {real-time timer}{382} -\entry {receiving datagrams}{306} -\entry {record locking}{222} -\entry {redirecting input and output}{215} -\entry {reentrant functions}{429} -\entry {relative file name}{131} -\entry {relocating memory allocator}{54} -\entry {remainder functions}{359} -\entry {removal of quotes}{121} -\entry {removing a file}{238} -\entry {removing macros that shadow functions}{6} -\entry {renaming a file}{239} -\entry {reporting bugs}{636} +\entry {race conditions, relating to job control}{456} +\entry {race conditions, relating to signals}{388} +\entry {radix (of floating point number)}{523} +\entry {raising signals}{398} +\entry {random numbers}{280} +\entry {random-access files}{75} +\entry {range error}{275} +\entry {range of integer type}{521} +\entry {read lock}{158} +\entry {reading from a directory}{167} +\entry {reading from a file descriptor}{140} +\entry {reading from a socket}{229} +\entry {reading from a stream, by blocks}{121} +\entry {reading from a stream, by characters}{86} +\entry {reading from a stream, formatted}{112} +\entry {real group ID}{474} +\entry {real user ID}{474} +\entry {real-time timer}{329} +\entry {receiving datagrams}{239} +\entry {record locking}{158} +\entry {redirecting input and output}{153} +\entry {reentrant functions}{392} +\entry {relative file name}{76} +\entry {relocating memory allocator}{49} +\entry {remainder functions}{286} +\entry {removal of quotes}{310} +\entry {removing a file}{173} +\entry {removing macros that shadow functions}{5} +\entry {renaming a file}{174} +\entry {reporting bugs}{612} \entry {reporting errors}{13} -\entry {REPRINT character}{334} -\entry {reserved names}{7} -\entry {resource limits}{387} -\entry {restrictions on signal handler functions}{429} -\entry {root directory}{131} -\entry {rounding functions}{359} -\entry {running a command}{475} +\entry {REPRINT character}{265} +\entry {reserved names}{6} +\entry {resource limits}{334} +\entry {restrictions on signal handler functions}{392} +\entry {root directory}{76} +\entry {rounding functions}{286} +\entry {running a command}{437} \initial {S} -\entry {scanning the group list}{529} -\entry {scanning the user list}{526} -\entry {search function (for arrays)}{104} -\entry {search functions (for strings)}{74} -\entry {seed (for random numbers)}{350} -\entry {seeking on a file descriptor}{205} -\entry {seeking on a stream}{181} -\entry {segmentation violation}{404} -\entry {sending a datagram}{305} -\entry {sending signals}{434} -\entry {sequential-access files}{129} -\entry {server}{291} -\entry {services database}{282} -\entry {session}{489} -\entry {session leader}{489} -\entry {setting an alarm}{382} -\entry {\code {setuid} programs}{515} -\entry {setuid programs and file access}{253} -\entry {shadowing functions with macros}{6} -\entry {shared lock}{222} -\entry {shell}{489} -\entry {shrinking objects}{45} -\entry {shutting down a socket}{289} -\entry {\code {sigaction} flags}{419} -\entry {\code {sigaction} function}{415} -\entry {\code {SIGCHLD}, handling of}{503} -\entry {sign (of floating point number)}{568} -\entry {signal}{399} -\entry {signal action}{401} -\entry {signal actions}{412} -\entry {signal flags}{419} -\entry {\code {signal} function}{413} -\entry {signal handler function}{421} -\entry {signal mask}{442} -\entry {signal messages}{411} -\entry {signal names}{402} -\entry {signal number}{402} -\entry {signal set}{441} -\entry {signal stack}{452} -\entry {signals, generating}{434} -\entry {significand (of floating point number)}{569} -\entry {\code {SIGTTIN}, from background job}{491} -\entry {\code {SIGTTOU}, from background job}{491} -\entry {size of string}{62} -\entry {socket}{265} -\entry {socket address (name) binding}{267} -\entry {socket domain}{266} -\entry {socket namespace}{266} -\entry {socket option level}{312} -\entry {socket options}{312} -\entry {socket pair}{290} -\entry {socket protocol}{266} -\entry {socket shutdown}{289} -\entry {socket, client actions}{291} -\entry {socket, closing}{289} -\entry {socket, connecting}{291} -\entry {socket, creating}{288} -\entry {socket, initiating a connection}{291} -\entry {sockets, accepting connections}{293} -\entry {sockets, listening}{292} -\entry {sockets, server actions}{292} -\entry {soft link}{236} -\entry {sort function (for arrays)}{104} -\entry {special files}{257} -\entry {specified action (for a signal)}{401} -\entry {square root function}{349} -\entry {stable sorting}{104} -\entry {standard dot notation, for Internet addresses}{276} -\entry {standard environment variables}{468} -\entry {standard error file descriptor}{209} -\entry {standard error stream}{136} -\entry {standard file descriptors}{208} -\entry {standard input file descriptor}{208} -\entry {standard input stream}{136} -\entry {standard output file descriptor}{208} -\entry {standard output stream}{136} -\entry {standard streams}{135} -\entry {standards}{2} -\entry {START character}{336} -\entry {static allocation}{27} -\entry {STATUS character}{337} +\entry {scanning the group list}{487} +\entry {scanning the user list}{485} +\entry {search function (for arrays)}{293} +\entry {search functions (for strings)}{68} +\entry {seed (for random numbers)}{280} +\entry {seeking on a file descriptor}{143} +\entry {seeking on a stream}{123} +\entry {segmentation violation}{370} +\entry {sending a datagram}{239} +\entry {sending signals}{398} +\entry {sequential-access files}{75} +\entry {server}{225} +\entry {services database}{217} +\entry {session}{449} +\entry {session leader}{449} +\entry {setting an alarm}{329} +\entry {\code {setuid} programs}{475} +\entry {setuid programs and file access}{188} +\entry {shadowing functions with macros}{5} +\entry {shared lock}{158} +\entry {shell}{449} +\entry {shrinking objects}{41} +\entry {shutting down a socket}{223} +\entry {\code {sigaction} flags}{383} +\entry {\code {sigaction} function}{380} +\entry {\code {SIGCHLD}, handling of}{461} +\entry {sign (of floating point number)}{523} +\entry {signal}{365} +\entry {signal action}{366} +\entry {signal actions}{377} +\entry {signal flags}{383} +\entry {\code {signal} function}{377} +\entry {signal handler function}{385} +\entry {signal mask}{405} +\entry {signal messages}{376} +\entry {signal names}{367} +\entry {signal number}{367} +\entry {signal set}{403} +\entry {signal stack}{414} +\entry {signals, generating}{398} +\entry {significand (of floating point number)}{523} +\entry {\code {SIGTTIN}, from background job}{451} +\entry {\code {SIGTTOU}, from background job}{451} +\entry {size of string}{58} +\entry {socket}{201} +\entry {socket address (name) binding}{203} +\entry {socket domain}{201} +\entry {socket namespace}{201} +\entry {socket option level}{244} +\entry {socket options}{244} +\entry {socket pair}{224} +\entry {socket protocol}{202} +\entry {socket shutdown}{223} +\entry {socket, client actions}{225} +\entry {socket, closing}{223} +\entry {socket, connecting}{225} +\entry {socket, creating}{222} +\entry {socket, initiating a connection}{225} +\entry {sockets, accepting connections}{227} +\entry {sockets, listening}{226} +\entry {sockets, server actions}{226} +\entry {soft link}{171} +\entry {sort function (for arrays)}{294} +\entry {special files}{191} +\entry {specified action (for a signal)}{366} +\entry {square root function}{278} +\entry {stable sorting}{294} +\entry {standard dot notation, for Internet addresses}{211} +\entry {standard environment variables}{429} +\entry {standard error file descriptor}{146} +\entry {standard error stream}{82} +\entry {standard file descriptors}{146} +\entry {standard input file descriptor}{146} +\entry {standard input stream}{81} +\entry {standard output file descriptor}{146} +\entry {standard output stream}{82} +\entry {standard streams}{81} +\entry {standards}{1} +\entry {START character}{267} +\entry {static allocation}{25} +\entry {STATUS character}{268} \entry {status codes}{13} -\entry {status of a file}{242} -\entry {status of obstack}{47} -\entry {sticky bit}{250} -\entry {STOP character}{336} -\entry {stop signal}{409} -\entry {stopped job}{490} -\entry {stopped jobs, continuing}{507} -\entry {stopped jobs, detecting}{503} -\entry {storage allocation}{27} -\entry {stream (sockets)}{265} -\entry {stream, for I/O to a string}{191} -\entry {streams and descriptors}{209} -\entry {streams, and file descriptors}{208} -\entry {streams, standard}{135} -\entry {string}{61} -\entry {string allocation}{62} -\entry {string collation functions}{70} -\entry {string comparison functions}{68} -\entry {string concatenation functions}{63} -\entry {string copy functions}{63} -\entry {string length}{62} -\entry {string literal}{61} -\entry {string search functions}{74} -\entry {string stream}{191} -\entry {string, representation of}{61} -\entry {style of communication (of a socket)}{265} -\entry {subshell}{495} -\entry {substitution of variables and commands}{121} -\entry {successive signals}{426} -\entry {summer time}{375} +\entry {status of a file}{177} +\entry {status of obstack}{42} +\entry {sticky bit}{185} +\entry {STOP character}{267} +\entry {stop signal}{374} +\entry {stopped job}{450} +\entry {stopped jobs, continuing}{466} +\entry {stopped jobs, detecting}{461} +\entry {storage allocation}{25} +\entry {stream (sockets)}{201} +\entry {stream, for I/O to a string}{131} +\entry {streams and descriptors}{146} +\entry {streams, and file descriptors}{145} +\entry {streams, standard}{81} +\entry {string}{57} +\entry {string allocation}{58} +\entry {string collation functions}{65} +\entry {string comparison functions}{63} +\entry {string concatenation functions}{59} +\entry {string copy functions}{59} +\entry {string length}{58} +\entry {string literal}{57} +\entry {string search functions}{68} +\entry {string stream}{131} +\entry {string, representation of}{57} +\entry {style of communication (of a socket)}{201} +\entry {subshell}{454} +\entry {substitution of variables and commands}{310} +\entry {successive signals}{389} +\entry {summer time}{322} \entry {SunOS}{3} -\entry {supplementary group IDs}{514} -\entry {SUSP character}{335} -\entry {suspend character}{335} -\entry {SVID}{4} -\entry {symbolic link}{236} -\entry {syntax, for program arguments}{458} -\entry {syntax, for reading numbers}{361} -\entry {System V Unix}{4} +\entry {supplementary group IDs}{474} +\entry {SUSP character}{266} +\entry {suspend character}{266} +\entry {SVID}{3} +\entry {symbolic link}{171} +\entry {syntax, for program arguments}{420} +\entry {syntax, for reading numbers}{288} +\entry {System V Unix}{3} \initial {T} -\entry {TCP (Internet protocol)}{284} -\entry {template, for \code {printf}}{146} -\entry {template, for \code {scanf}}{169} -\entry {TERM environment variable}{469} -\entry {terminal flow control}{340} -\entry {terminal identification}{317} -\entry {terminal input queue}{318} -\entry {terminal input queue, clearing}{340} -\entry {terminal input signal}{409} -\entry {terminal line control functions}{339} -\entry {terminal line speed}{329} -\entry {terminal mode data types}{319} -\entry {terminal mode functions}{320} -\entry {terminal output queue}{318} -\entry {terminal output queue, flushing}{339} -\entry {terminal output signal}{409} -\entry {terminated jobs, detecting}{503} -\entry {termination signal}{406} -\entry {testing access permission}{253} -\entry {testing exit status of child process}{482} -\entry {text stream}{180} -\entry {ticks, clock}{367} -\entry {tilde expansion}{121} -\entry {TIME termios slot}{338} -\entry {time zone}{378} -\entry {time, calendar}{370} -\entry {time, elapsed CPU}{367} -\entry {timers, setting}{382} -\entry {timing error in signal handling}{448} -\entry {TMPDIR environment variable}{190} -\entry {tokenizing strings}{76} -\entry {transmitting datagrams}{305} -\entry {trigonometric functions}{346} -\entry {type measurements, floating}{568} -\entry {type measurements, integer}{565} -\entry {type modifier character (\code {printf})}{148} -\entry {type modifier character (\code {scanf})}{171} -\entry {typeahead buffer}{318} -\entry {TZ environment variable}{469} +\entry {TCP (Internet protocol)}{219} +\entry {template, for \code {printf}}{91} +\entry {template, for \code {scanf}}{112} +\entry {TERM environment variable}{430} +\entry {terminal flow control}{271} +\entry {terminal identification}{249} +\entry {terminal input queue}{249} +\entry {terminal input queue, clearing}{270} +\entry {terminal input signal}{374} +\entry {terminal line control functions}{269} +\entry {terminal line speed}{261} +\entry {terminal mode data types}{251} +\entry {terminal mode functions}{252} +\entry {terminal output queue}{250} +\entry {terminal output queue, flushing}{270} +\entry {terminal output signal}{374} +\entry {terminated jobs, detecting}{461} +\entry {termination signal}{372} +\entry {testing access permission}{188} +\entry {testing exit status of child process}{443} +\entry {text stream}{122} +\entry {ticks, clock}{315} +\entry {tilde expansion}{310} +\entry {TIME termios slot}{268} +\entry {time zone}{326} +\entry {time, calendar}{317} +\entry {time, elapsed CPU}{315} +\entry {timers, setting}{329} +\entry {timing error in signal handling}{410} +\entry {TMPDIR environment variable}{193} +\entry {tokenizing strings}{70} +\entry {transmitting datagrams}{239} +\entry {trigonometric functions}{276} +\entry {type measurements, floating}{522} +\entry {type measurements, integer}{520} +\entry {type modifier character (\code {printf})}{94} +\entry {type modifier character (\code {scanf})}{114} +\entry {typeahead buffer}{249} +\entry {TZ environment variable}{430} \initial {U} -\entry {umask}{251} -\entry {unbuffered stream}{185} -\entry {unconstrained storage allocation}{28} -\entry {undefining macros that shadow functions}{6} +\entry {umask}{186} +\entry {unbuffered stream}{127} +\entry {unconstrained storage allocation}{26} +\entry {undefining macros that shadow functions}{5} \entry {Unix, Berkeley}{3} -\entry {Unix, System V}{4} -\entry {unlinking a file}{238} -\entry {unreading characters}{144} -\entry {upper-case character}{57} -\entry {urgent data signal}{408} -\entry {urgent socket condition}{302} -\entry {usage limits}{387} -\entry {user database}{525} -\entry {user ID}{513} -\entry {user ID, determining}{524} -\entry {user name}{513} -\entry {user signals}{410} -\entry {usual file name syntax errors}{132} +\entry {Unix, System V}{3} +\entry {unlinking a file}{173} +\entry {unreading characters}{89} +\entry {upper-case character}{53} +\entry {urgent data signal}{373} +\entry {urgent socket condition}{235} +\entry {usage limits}{334} +\entry {user database}{484} +\entry {user ID}{473} +\entry {user ID, determining}{483} +\entry {user name}{473} +\entry {user signals}{375} +\entry {usual file name syntax errors}{77} \initial {V} -\entry {variable number of arguments}{556} -\entry {variable substitution}{121} -\entry {variable-sized arrays}{53} -\entry {variadic function argument access}{558} -\entry {variadic function prototypes}{558} -\entry {variadic functions}{556} -\entry {variadic functions, calling}{560} -\entry {virtual time alarm signal}{407} -\entry {virtual timer}{382} -\entry {\code {volatile} declarations}{429} +\entry {variable number of arguments}{512} +\entry {variable substitution}{310} +\entry {variable-sized arrays}{49} +\entry {variadic function argument access}{514} +\entry {variadic function prototypes}{513} +\entry {variadic functions}{512} +\entry {variadic functions, calling}{515} +\entry {virtual time alarm signal}{372} +\entry {virtual timer}{329} +\entry {\code {volatile} declarations}{392} \initial {W} -\entry {waiting for a signal}{449} -\entry {waiting for completion of child process}{482} -\entry {waiting for input or output}{211} -\entry {warnings of memory almost full}{55} -\entry {WERASE character}{333} -\entry {whitespace character}{58} -\entry {wide characters}{79} -\entry {width of integer type}{565} -\entry {wildcard expansion}{121} -\entry {word expansion}{120} -\entry {working directory}{229} -\entry {write lock}{222} -\entry {writing to a file descriptor}{204} -\entry {writing to a socket}{295} -\entry {writing to a stream, by blocks}{178} -\entry {writing to a stream, by characters}{139} -\entry {writing to a stream, formatted}{146} +\entry {waiting for a signal}{411} +\entry {waiting for completion of child process}{443} +\entry {waiting for input or output}{148} +\entry {warnings of memory almost full}{50} +\entry {WERASE character}{265} +\entry {whitespace character}{54} +\entry {wide characters}{339} +\entry {width of integer type}{520} +\entry {wildcard expansion}{310} +\entry {word expansion}{310} +\entry {working directory}{165} +\entry {write lock}{158} +\entry {writing to a file descriptor}{141} +\entry {writing to a socket}{229} +\entry {writing to a stream, by blocks}{121} +\entry {writing to a stream, by characters}{85} +\entry {writing to a stream, formatted}{91} diff -ruN glibc-1.06/manual/libc.fn glibc-1.07/manual/libc.fn --- glibc-1.06/manual/libc.fn Mon May 17 17:03:25 1993 +++ glibc-1.07/manual/libc.fn Wed Dec 29 18:38:49 1993 @@ -1,475 +1,479 @@ -\entry {strerror}{23}{\code {strerror}} -\entry {perror}{23}{\code {perror}} -\entry {malloc}{29}{\code {malloc}} -\entry {free}{31}{\code {free}} -\entry {cfree}{31}{\code {cfree}} -\entry {realloc}{32}{\code {realloc}} -\entry {calloc}{33}{\code {calloc}} -\entry {memalign}{34}{\code {memalign}} -\entry {valloc}{34}{\code {valloc}} -\entry {mcheck}{34}{\code {mcheck}} -\entry {mstats}{37}{\code {mstats}} -\entry {obstack{\_}chunk{\_}alloc}{39}{\code {obstack{\_}chunk{\_}alloc}} -\entry {obstack{\_}chunk{\_}free}{39}{\code {obstack{\_}chunk{\_}free}} -\entry {obstack{\_}init}{40}{\code {obstack{\_}init}} -\entry {obstack{\_}alloc}{40}{\code {obstack{\_}alloc}} -\entry {obstack{\_}copy}{41}{\code {obstack{\_}copy}} -\entry {obstack{\_}copy0}{41}{\code {obstack{\_}copy0}} -\entry {obstack{\_}free}{42}{\code {obstack{\_}free}} -\entry {obstack{\_}blank}{44}{\code {obstack{\_}blank}} -\entry {obstack{\_}grow}{44}{\code {obstack{\_}grow}} -\entry {obstack{\_}grow0}{44}{\code {obstack{\_}grow0}} -\entry {obstack{\_}1grow}{44}{\code {obstack{\_}1grow}} -\entry {obstack{\_}finish}{44}{\code {obstack{\_}finish}} -\entry {obstack{\_}object{\_}size}{44}{\code {obstack{\_}object{\_}size}} -\entry {obstack{\_}room}{45}{\code {obstack{\_}room}} -\entry {obstack{\_}1grow{\_}fast}{46}{\code {obstack{\_}1grow{\_}fast}} -\entry {obstack{\_}blank{\_}fast}{46}{\code {obstack{\_}blank{\_}fast}} -\entry {obstack{\_}base}{47}{\code {obstack{\_}base}} -\entry {obstack{\_}next{\_}free}{47}{\code {obstack{\_}next{\_}free}} -\entry {obstack{\_}object{\_}size}{47}{\code {obstack{\_}object{\_}size}} -\entry {obstack{\_}alignment{\_}mask}{47}{\code {obstack{\_}alignment{\_}mask}} -\entry {obstack{\_}chunk{\_}size}{49}{\code {obstack{\_}chunk{\_}size}} -\entry {alloca}{51}{\code {alloca}} -\entry {r{\_}alloc}{54}{\code {r{\_}alloc}} -\entry {r{\_}alloc{\_}free}{55}{\code {r{\_}alloc{\_}free}} -\entry {r{\_}re{\_}alloc}{55}{\code {r{\_}re{\_}alloc}} -\entry {memory{\_}warnings}{55}{\code {memory{\_}warnings}} -\entry {islower}{57}{\code {islower}} -\entry {isupper}{57}{\code {isupper}} -\entry {isalpha}{58}{\code {isalpha}} -\entry {isdigit}{58}{\code {isdigit}} -\entry {isalnum}{58}{\code {isalnum}} -\entry {isxdigit}{58}{\code {isxdigit}} -\entry {ispunct}{58}{\code {ispunct}} -\entry {isspace}{58}{\code {isspace}} -\entry {isblank}{59}{\code {isblank}} -\entry {isgraph}{59}{\code {isgraph}} -\entry {isprint}{59}{\code {isprint}} -\entry {iscntrl}{59}{\code {iscntrl}} -\entry {isascii}{59}{\code {isascii}} -\entry {tolower}{60}{\code {tolower}} -\entry {toupper}{60}{\code {toupper}} -\entry {toascii}{60}{\code {toascii}} -\entry {{\_}tolower}{60}{\code {{\_}tolower}} -\entry {{\_}toupper}{60}{\code {{\_}toupper}} -\entry {strlen}{63}{\code {strlen}} -\entry {memcpy}{64}{\code {memcpy}} -\entry {memmove}{64}{\code {memmove}} -\entry {memccpy}{64}{\code {memccpy}} -\entry {memset}{65}{\code {memset}} -\entry {strcpy}{65}{\code {strcpy}} -\entry {strncpy}{65}{\code {strncpy}} -\entry {strdup}{65}{\code {strdup}} -\entry {stpcpy}{65}{\code {stpcpy}} -\entry {strcat}{66}{\code {strcat}} -\entry {strncat}{66}{\code {strncat}} -\entry {bcopy}{67}{\code {bcopy}} -\entry {bzero}{67}{\code {bzero}} -\entry {memcmp}{68}{\code {memcmp}} -\entry {strcmp}{69}{\code {strcmp}} -\entry {strcasecmp}{69}{\code {strcasecmp}} -\entry {strncasecmp}{69}{\code {strncasecmp}} -\entry {strncmp}{69}{\code {strncmp}} -\entry {bcmp}{70}{\code {bcmp}} -\entry {strcoll}{71}{\code {strcoll}} -\entry {strxfrm}{71}{\code {strxfrm}} -\entry {memchr}{74}{\code {memchr}} -\entry {strchr}{74}{\code {strchr}} -\entry {strrchr}{74}{\code {strrchr}} -\entry {strstr}{74}{\code {strstr}} -\entry {memmem}{75}{\code {memmem}} -\entry {strspn}{75}{\code {strspn}} -\entry {strcspn}{75}{\code {strcspn}} -\entry {strpbrk}{75}{\code {strpbrk}} -\entry {strtok}{76}{\code {strtok}} -\entry {mbstowcs}{84}{\code {mbstowcs}} -\entry {wcstombs}{85}{\code {wcstombs}} -\entry {mblen}{86}{\code {mblen}} -\entry {mbtowc}{86}{\code {mbtowc}} -\entry {wctomb}{87}{\code {wctomb}} -\entry {setlocale}{95}{\code {setlocale}} -\entry {localeconv}{98}{\code {localeconv}} -\entry {bsearch}{104}{\code {bsearch}} -\entry {qsort}{104}{\code {qsort}} -\entry {fnmatch}{109}{\code {fnmatch}} -\entry {glob}{111}{\code {glob}} -\entry {regcomp}{114}{\code {regcomp}} -\entry {regexec}{116}{\code {regexec}} -\entry {regfree}{119}{\code {regfree}} -\entry {regerror}{119}{\code {regerror}} -\entry {wordexp}{122}{\code {wordexp}} -\entry {wordfree}{123}{\code {wordfree}} -\entry {fopen}{136}{\code {fopen}} -\entry {freopen}{138}{\code {freopen}} -\entry {fclose}{138}{\code {fclose}} -\entry {fputc}{139}{\code {fputc}} -\entry {putc}{139}{\code {putc}} -\entry {putchar}{139}{\code {putchar}} -\entry {fputs}{140}{\code {fputs}} -\entry {puts}{140}{\code {puts}} -\entry {putw}{140}{\code {putw}} -\entry {fgetc}{140}{\code {fgetc}} -\entry {getc}{141}{\code {getc}} -\entry {getchar}{141}{\code {getchar}} -\entry {getw}{141}{\code {getw}} -\entry {getline}{142}{\code {getline}} -\entry {getdelim}{142}{\code {getdelim}} -\entry {fgets}{143}{\code {fgets}} -\entry {gets}{143}{\code {gets}} -\entry {ungetc}{145}{\code {ungetc}} -\entry {printf}{155}{\code {printf}} -\entry {fprintf}{155}{\code {fprintf}} -\entry {sprintf}{155}{\code {sprintf}} -\entry {snprintf}{156}{\code {snprintf}} -\entry {asprintf}{157}{\code {asprintf}} -\entry {obstack{\_}printf}{157}{\code {obstack{\_}printf}} -\entry {vprintf}{158}{\code {vprintf}} -\entry {vfprintf}{158}{\code {vfprintf}} -\entry {vsprintf}{158}{\code {vsprintf}} -\entry {vsnprintf}{159}{\code {vsnprintf}} -\entry {vasprintf}{159}{\code {vasprintf}} -\entry {obstack{\_}vprintf}{159}{\code {obstack{\_}vprintf}} -\entry {parse{\_}printf{\_}format}{160}{\code {parse{\_}printf{\_}format}} -\entry {register{\_}printf{\_}function}{164}{\code {register{\_}printf{\_}function}} -\entry {scanf}{177}{\code {scanf}} -\entry {fscanf}{177}{\code {fscanf}} -\entry {sscanf}{177}{\code {sscanf}} -\entry {vscanf}{177}{\code {vscanf}} -\entry {vfscanf}{177}{\code {vfscanf}} -\entry {vsscanf}{178}{\code {vsscanf}} -\entry {fread}{178}{\code {fread}} -\entry {fwrite}{179}{\code {fwrite}} -\entry {clearerr}{179}{\code {clearerr}} -\entry {feof}{179}{\code {feof}} -\entry {ferror}{179}{\code {ferror}} -\entry {ftell}{181}{\code {ftell}} -\entry {fseek}{181}{\code {fseek}} -\entry {rewind}{182}{\code {rewind}} -\entry {fgetpos}{184}{\code {fgetpos}} -\entry {fsetpos}{184}{\code {fsetpos}} -\entry {fflush}{186}{\code {fflush}} -\entry {setvbuf}{186}{\code {setvbuf}} -\entry {setbuf}{188}{\code {setbuf}} -\entry {setbuffer}{188}{\code {setbuffer}} -\entry {setlinebuf}{188}{\code {setlinebuf}} -\entry {tmpfile}{189}{\code {tmpfile}} -\entry {tmpnam}{189}{\code {tmpnam}} -\entry {tempnam}{190}{\code {tempnam}} -\entry {fmemopen}{191}{\code {fmemopen}} -\entry {open{\_}memstream}{192}{\code {open{\_}memstream}} -\entry {open{\_}obstack{\_}stream}{193}{\code {open{\_}obstack{\_}stream}} -\entry {fopencookie}{195}{\code {fopencookie}} -\entry {open}{199}{\code {open}} -\entry {creat}{201}{\code {creat}} -\entry {close}{201}{\code {close}} -\entry {read}{202}{\code {read}} -\entry {write}{204}{\code {write}} -\entry {lseek}{205}{\code {lseek}} -\entry {fdopen}{208}{\code {fdopen}} -\entry {fileno}{208}{\code {fileno}} -\entry {fclean}{210}{\code {fclean}} -\entry {FD{\_}ZERO}{212}{\code {FD{\_}ZERO}} -\entry {FD{\_}SET}{212}{\code {FD{\_}SET}} -\entry {FD{\_}CLR}{212}{\code {FD{\_}CLR}} -\entry {FD{\_}ISSET}{212}{\code {FD{\_}ISSET}} -\entry {select}{212}{\code {select}} -\entry {fcntl}{214}{\code {fcntl}} -\entry {dup}{216}{\code {dup}} -\entry {dup2}{216}{\code {dup2}} -\entry {getcwd}{229}{\code {getcwd}} -\entry {getwd}{230}{\code {getwd}} -\entry {chdir}{230}{\code {chdir}} -\entry {opendir}{232}{\code {opendir}} -\entry {readdir}{233}{\code {readdir}} -\entry {closedir}{233}{\code {closedir}} -\entry {rewinddir}{234}{\code {rewinddir}} -\entry {telldir}{234}{\code {telldir}} -\entry {seekdir}{235}{\code {seekdir}} -\entry {link}{235}{\code {link}} -\entry {symlink}{237}{\code {symlink}} -\entry {readlink}{237}{\code {readlink}} -\entry {unlink}{238}{\code {unlink}} -\entry {remove}{239}{\code {remove}} -\entry {rmdir}{239}{\code {rmdir}} -\entry {rename}{240}{\code {rename}} -\entry {mkdir}{241}{\code {mkdir}} -\entry {stat}{245}{\code {stat}} -\entry {fstat}{245}{\code {fstat}} -\entry {lstat}{245}{\code {lstat}} -\entry {S{\_}ISDIR}{246}{\code {S{\_}ISDIR}} -\entry {S{\_}ISCHR}{246}{\code {S{\_}ISCHR}} -\entry {S{\_}ISBLK}{246}{\code {S{\_}ISBLK}} -\entry {S{\_}ISREG}{246}{\code {S{\_}ISREG}} -\entry {S{\_}ISFIFO}{246}{\code {S{\_}ISFIFO}} -\entry {S{\_}ISLNK}{246}{\code {S{\_}ISLNK}} -\entry {S{\_}ISSOCK}{247}{\code {S{\_}ISSOCK}} -\entry {chown}{248}{\code {chown}} -\entry {fchown}{249}{\code {fchown}} -\entry {umask}{252}{\code {umask}} -\entry {getumask}{252}{\code {getumask}} -\entry {chmod}{252}{\code {chmod}} -\entry {fchmod}{253}{\code {fchmod}} -\entry {access}{254}{\code {access}} -\entry {utime}{256}{\code {utime}} -\entry {utimes}{257}{\code {utimes}} -\entry {mknod}{257}{\code {mknod}} -\entry {pipe}{259}{\code {pipe}} -\entry {popen}{261}{\code {popen}} -\entry {pclose}{262}{\code {pclose}} -\entry {mkfifo}{263}{\code {mkfifo}} -\entry {bind}{269}{\code {bind}} -\entry {getsockname}{270}{\code {getsockname}} -\entry {inet{\_}addr}{277}{\code {inet{\_}addr}} -\entry {inet{\_}network}{278}{\code {inet{\_}network}} -\entry {inet{\_}ntoa}{278}{\code {inet{\_}ntoa}} -\entry {inet{\_}makeaddr}{278}{\code {inet{\_}makeaddr}} -\entry {inet{\_}lnaof}{278}{\code {inet{\_}lnaof}} -\entry {inet{\_}netof}{278}{\code {inet{\_}netof}} -\entry {gethostbyname}{279}{\code {gethostbyname}} -\entry {gethostbyaddr}{279}{\code {gethostbyaddr}} -\entry {sethostent}{280}{\code {sethostent}} -\entry {gethostent}{280}{\code {gethostent}} -\entry {endhostent}{281}{\code {endhostent}} -\entry {getservbyname}{282}{\code {getservbyname}} -\entry {getservbyport}{282}{\code {getservbyport}} -\entry {setservent}{283}{\code {setservent}} -\entry {getservent}{283}{\code {getservent}} -\entry {endservent}{283}{\code {endservent}} -\entry {htons}{284}{\code {htons}} -\entry {ntohs}{284}{\code {ntohs}} -\entry {htonl}{284}{\code {htonl}} -\entry {ntohl}{284}{\code {ntohl}} -\entry {getprotobyname}{285}{\code {getprotobyname}} -\entry {getprotobynumber}{285}{\code {getprotobynumber}} -\entry {setprotoent}{285}{\code {setprotoent}} -\entry {getprotoent}{286}{\code {getprotoent}} -\entry {endprotoent}{286}{\code {endprotoent}} -\entry {socket}{288}{\code {socket}} -\entry {shutdown}{289}{\code {shutdown}} -\entry {socketpair}{290}{\code {socketpair}} -\entry {connect}{291}{\code {connect}} -\entry {listen}{293}{\code {listen}} -\entry {accept}{293}{\code {accept}} -\entry {getpeername}{294}{\code {getpeername}} -\entry {send}{295}{\code {send}} -\entry {recv}{296}{\code {recv}} -\entry {sendto}{305}{\code {sendto}} -\entry {recvfrom}{306}{\code {recvfrom}} -\entry {getsockopt}{312}{\code {getsockopt}} -\entry {setsockopt}{312}{\code {setsockopt}} -\entry {getnetbyname}{315}{\code {getnetbyname}} -\entry {getnetbyaddr}{315}{\code {getnetbyaddr}} -\entry {setnetent}{315}{\code {setnetent}} -\entry {getnetent}{315}{\code {getnetent}} -\entry {endnetent}{316}{\code {endnetent}} -\entry {isatty}{317}{\code {isatty}} -\entry {ttyname}{317}{\code {ttyname}} -\entry {tcgetattr}{320}{\code {tcgetattr}} -\entry {tcsetattr}{321}{\code {tcsetattr}} -\entry {cfgetospeed}{330}{\code {cfgetospeed}} -\entry {cfgetispeed}{330}{\code {cfgetispeed}} -\entry {cfsetospeed}{330}{\code {cfsetospeed}} -\entry {cfsetispeed}{330}{\code {cfsetispeed}} -\entry {cfsetspeed}{330}{\code {cfsetspeed}} -\entry {cfmakeraw}{331}{\code {cfmakeraw}} -\entry {tcsendbreak}{339}{\code {tcsendbreak}} -\entry {tcdrain}{339}{\code {tcdrain}} -\entry {tcflush}{340}{\code {tcflush}} -\entry {tcflow}{340}{\code {tcflow}} -\entry {sin}{346}{\code {sin}} -\entry {cos}{346}{\code {cos}} -\entry {tan}{347}{\code {tan}} -\entry {asin}{347}{\code {asin}} -\entry {acos}{347}{\code {acos}} -\entry {atan}{347}{\code {atan}} -\entry {atan2}{347}{\code {atan2}} -\entry {exp}{348}{\code {exp}} -\entry {log}{348}{\code {log}} -\entry {log10}{348}{\code {log10}} -\entry {pow}{349}{\code {pow}} -\entry {sqrt}{349}{\code {sqrt}} -\entry {cbrt}{349}{\code {cbrt}} -\entry {hypot}{349}{\code {hypot}} -\entry {expm1}{349}{\code {expm1}} -\entry {log1p}{349}{\code {log1p}} -\entry {sinh}{350}{\code {sinh}} -\entry {cosh}{350}{\code {cosh}} -\entry {tanh}{350}{\code {tanh}} -\entry {asinh}{350}{\code {asinh}} -\entry {acosh}{350}{\code {acosh}} -\entry {atanh}{350}{\code {atanh}} -\entry {rand}{351}{\code {rand}} -\entry {srand}{351}{\code {srand}} -\entry {random}{352}{\code {random}} -\entry {srandom}{352}{\code {srandom}} -\entry {initstate}{352}{\code {initstate}} -\entry {setstate}{352}{\code {setstate}} -\entry {isinf}{356}{\code {isinf}} -\entry {isnan}{356}{\code {isnan}} -\entry {finite}{356}{\code {finite}} -\entry {infnan}{356}{\code {infnan}} -\entry {abs}{356}{\code {abs}} -\entry {labs}{357}{\code {labs}} -\entry {fabs}{357}{\code {fabs}} -\entry {cabs}{357}{\code {cabs}} -\entry {frexp}{357}{\code {frexp}} -\entry {ldexp}{358}{\code {ldexp}} -\entry {scalb}{358}{\code {scalb}} -\entry {logb}{358}{\code {logb}} -\entry {copysign}{358}{\code {copysign}} -\entry {ceil}{359}{\code {ceil}} -\entry {floor}{359}{\code {floor}} -\entry {rint}{359}{\code {rint}} -\entry {modf}{359}{\code {modf}} -\entry {fmod}{359}{\code {fmod}} -\entry {drem}{360}{\code {drem}} -\entry {div}{361}{\code {div}} -\entry {ldiv}{361}{\code {ldiv}} -\entry {strtol}{362}{\code {strtol}} -\entry {strtoul}{363}{\code {strtoul}} -\entry {atol}{363}{\code {atol}} -\entry {atoi}{363}{\code {atoi}} -\entry {strtod}{364}{\code {strtod}} -\entry {atof}{365}{\code {atof}} -\entry {clock}{368}{\code {clock}} -\entry {times}{369}{\code {times}} -\entry {difftime}{371}{\code {difftime}} -\entry {time}{371}{\code {time}} -\entry {gettimeofday}{372}{\code {gettimeofday}} -\entry {settimeofday}{373}{\code {settimeofday}} -\entry {adjtime}{373}{\code {adjtime}} -\entry {localtime}{375}{\code {localtime}} -\entry {gmtime}{375}{\code {gmtime}} -\entry {mktime}{376}{\code {mktime}} -\entry {asctime}{376}{\code {asctime}} -\entry {ctime}{377}{\code {ctime}} -\entry {strftime}{377}{\code {strftime}} -\entry {tzset}{381}{\code {tzset}} -\entry {setitimer}{383}{\code {setitimer}} -\entry {getitimer}{384}{\code {getitimer}} -\entry {ITIMER{\_}REAL}{384}{\code {ITIMER{\_}REAL}} -\entry {ITIMER{\_}VIRTUAL}{384}{\code {ITIMER{\_}VIRTUAL}} -\entry {ITIMER{\_}PROF}{384}{\code {ITIMER{\_}PROF}} -\entry {alarm}{384}{\code {alarm}} -\entry {sleep}{385}{\code {sleep}} -\entry {getrusage}{386}{\code {getrusage}} -\entry {getrlimit}{388}{\code {getrlimit}} -\entry {setrlimit}{388}{\code {setrlimit}} -\entry {getpriority}{390}{\code {getpriority}} -\entry {setpriority}{390}{\code {setpriority}} -\entry {nice}{391}{\code {nice}} -\entry {setjmp}{395}{\code {setjmp}} -\entry {longjmp}{395}{\code {longjmp}} -\entry {sigsetjmp}{396}{\code {sigsetjmp}} -\entry {siglongjmp}{396}{\code {siglongjmp}} -\entry {strsignal}{411}{\code {strsignal}} -\entry {psignal}{412}{\code {psignal}} -\entry {signal}{413}{\code {signal}} -\entry {ssignal}{414}{\code {ssignal}} -\entry {sigaction}{416}{\code {sigaction}} -\entry {TEMP{\_}FAILURE{\_}RETRY}{433}{\code {TEMP{\_}FAILURE{\_}RETRY}} -\entry {raise}{434}{\code {raise}} -\entry {gsignal}{435}{\code {gsignal}} -\entry {kill}{436}{\code {kill}} -\entry {killpg}{437}{\code {killpg}} -\entry {sigemptyset}{441}{\code {sigemptyset}} -\entry {sigfillset}{441}{\code {sigfillset}} -\entry {sigaddset}{442}{\code {sigaddset}} -\entry {sigdelset}{442}{\code {sigdelset}} -\entry {sigismember}{442}{\code {sigismember}} -\entry {sigprocmask}{442}{\code {sigprocmask}} -\entry {sigpending}{446}{\code {sigpending}} -\entry {pause}{449}{\code {pause}} -\entry {sigsuspend}{451}{\code {sigsuspend}} -\entry {sigvec}{454}{\code {sigvec}} -\entry {siginterrupt}{454}{\code {siginterrupt}} -\entry {sigmask}{454}{\code {sigmask}} -\entry {sigblock}{454}{\code {sigblock}} -\entry {sigsetmask}{454}{\code {sigsetmask}} -\entry {sigpause}{454}{\code {sigpause}} -\entry {sigstack}{455}{\code {sigstack}} -\entry {getopt}{459}{\code {getopt}} -\entry {getopt{\_}long}{463}{\code {getopt{\_}long}} -\entry {getenv}{467}{\code {getenv}} -\entry {putenv}{467}{\code {putenv}} -\entry {exit}{470}{\code {exit}} -\entry {atexit}{472}{\code {atexit}} -\entry {on{\_}exit}{472}{\code {on{\_}exit}} -\entry {abort}{473}{\code {abort}} -\entry {{\_}exit}{473}{\code {{\_}exit}} -\entry {system}{475}{\code {system}} -\entry {getpid}{477}{\code {getpid}} -\entry {getppid}{477}{\code {getppid}} -\entry {fork}{477}{\code {fork}} -\entry {vfork}{478}{\code {vfork}} -\entry {execv}{479}{\code {execv}} -\entry {execl}{479}{\code {execl}} -\entry {execve}{479}{\code {execve}} -\entry {execle}{479}{\code {execle}} -\entry {execvp}{479}{\code {execvp}} -\entry {execlp}{480}{\code {execlp}} -\entry {waitpid}{482}{\code {waitpid}} -\entry {wait}{483}{\code {wait}} -\entry {WIFEXITED}{484}{\code {WIFEXITED}} -\entry {WEXITSTATUS}{484}{\code {WEXITSTATUS}} -\entry {WIFSIGNALED}{484}{\code {WIFSIGNALED}} -\entry {WTERMSIG}{485}{\code {WTERMSIG}} -\entry {WCOREDUMP}{485}{\code {WCOREDUMP}} -\entry {WIFSTOPPED}{485}{\code {WIFSTOPPED}} -\entry {WSTOPSIG}{485}{\code {WSTOPSIG}} -\entry {wait3}{486}{\code {wait3}} -\entry {wait4}{486}{\code {wait4}} -\entry {ctermid}{509}{\code {ctermid}} -\entry {setsid}{509}{\code {setsid}} -\entry {-lbsd-compat}{510}{\code {-lbsd-compat}} -\entry {bsd-compat}{510}{\code {bsd-compat}} -\entry {getpgrp}{510}{\code {getpgrp}} -\entry {getpgrp}{510}{\code {getpgrp}} -\entry {setpgid}{510}{\code {setpgid}} -\entry {setpgrp}{511}{\code {setpgrp}} -\entry {tcgetpgrp}{511}{\code {tcgetpgrp}} -\entry {tcsetpgrp}{512}{\code {tcsetpgrp}} -\entry {getuid}{516}{\code {getuid}} -\entry {getgid}{516}{\code {getgid}} -\entry {geteuid}{516}{\code {geteuid}} -\entry {getegid}{516}{\code {getegid}} -\entry {getgroups}{516}{\code {getgroups}} -\entry {setuid}{517}{\code {setuid}} -\entry {setreuid}{517}{\code {setreuid}} -\entry {setgid}{518}{\code {setgid}} -\entry {setregid}{518}{\code {setregid}} -\entry {setgroups}{519}{\code {setgroups}} -\entry {initgroups}{519}{\code {initgroups}} -\entry {getlogin}{524}{\code {getlogin}} -\entry {cuserid}{524}{\code {cuserid}} -\entry {getpwuid}{526}{\code {getpwuid}} -\entry {getpwnam}{526}{\code {getpwnam}} -\entry {fgetpwent}{527}{\code {fgetpwent}} -\entry {setpwent}{527}{\code {setpwent}} -\entry {getpwent}{527}{\code {getpwent}} -\entry {endpwent}{527}{\code {endpwent}} -\entry {putpwent}{527}{\code {putpwent}} -\entry {getgrgid}{528}{\code {getgrgid}} -\entry {getgrnam}{529}{\code {getgrnam}} -\entry {fgetgrent}{529}{\code {fgetgrent}} -\entry {setgrent}{529}{\code {setgrent}} -\entry {getgrent}{529}{\code {getgrent}} -\entry {endgrent}{530}{\code {endgrent}} -\entry {gethostname}{533}{\code {gethostname}} -\entry {sethostname}{533}{\code {sethostname}} -\entry {gethostid}{534}{\code {gethostid}} -\entry {sethostid}{534}{\code {sethostid}} -\entry {uname}{535}{\code {uname}} -\entry {sysconf}{541}{\code {sysconf}} -\entry {pathconf}{549}{\code {pathconf}} -\entry {fpathconf}{549}{\code {fpathconf}} -\entry {confstr}{552}{\code {confstr}} -\entry {assert}{555}{\code {assert}} -\entry {va{\_}start}{561}{\code {va{\_}start}} -\entry {va{\_}arg}{561}{\code {va{\_}arg}} -\entry {va{\_}end}{561}{\code {va{\_}end}} -\entry {va{\_}alist}{563}{\code {va{\_}alist}} -\entry {va{\_}dcl}{563}{\code {va{\_}dcl}} -\entry {va{\_}start}{563}{\code {va{\_}start}} -\entry {offsetof}{573}{\code {offsetof}} +\entry {strerror}{22}{\code {strerror}} +\entry {perror}{22}{\code {perror}} +\entry {malloc}{26}{\code {malloc}} +\entry {free}{28}{\code {free}} +\entry {cfree}{28}{\code {cfree}} +\entry {realloc}{29}{\code {realloc}} +\entry {calloc}{30}{\code {calloc}} +\entry {memalign}{31}{\code {memalign}} +\entry {valloc}{31}{\code {valloc}} +\entry {mcheck}{32}{\code {mcheck}} +\entry {mstats}{34}{\code {mstats}} +\entry {obstack{\_}chunk{\_}alloc}{36}{\code {obstack{\_}chunk{\_}alloc}} +\entry {obstack{\_}chunk{\_}free}{36}{\code {obstack{\_}chunk{\_}free}} +\entry {obstack{\_}init}{37}{\code {obstack{\_}init}} +\entry {obstack{\_}alloc}{37}{\code {obstack{\_}alloc}} +\entry {obstack{\_}copy}{37}{\code {obstack{\_}copy}} +\entry {obstack{\_}copy0}{38}{\code {obstack{\_}copy0}} +\entry {obstack{\_}free}{38}{\code {obstack{\_}free}} +\entry {obstack{\_}blank}{40}{\code {obstack{\_}blank}} +\entry {obstack{\_}grow}{40}{\code {obstack{\_}grow}} +\entry {obstack{\_}grow0}{40}{\code {obstack{\_}grow0}} +\entry {obstack{\_}1grow}{40}{\code {obstack{\_}1grow}} +\entry {obstack{\_}finish}{40}{\code {obstack{\_}finish}} +\entry {obstack{\_}object{\_}size}{40}{\code {obstack{\_}object{\_}size}} +\entry {obstack{\_}room}{41}{\code {obstack{\_}room}} +\entry {obstack{\_}1grow{\_}fast}{41}{\code {obstack{\_}1grow{\_}fast}} +\entry {obstack{\_}blank{\_}fast}{41}{\code {obstack{\_}blank{\_}fast}} +\entry {obstack{\_}base}{42}{\code {obstack{\_}base}} +\entry {obstack{\_}next{\_}free}{43}{\code {obstack{\_}next{\_}free}} +\entry {obstack{\_}object{\_}size}{43}{\code {obstack{\_}object{\_}size}} +\entry {obstack{\_}alignment{\_}mask}{43}{\code {obstack{\_}alignment{\_}mask}} +\entry {obstack{\_}chunk{\_}size}{44}{\code {obstack{\_}chunk{\_}size}} +\entry {alloca}{47}{\code {alloca}} +\entry {r{\_}alloc}{50}{\code {r{\_}alloc}} +\entry {r{\_}alloc{\_}free}{50}{\code {r{\_}alloc{\_}free}} +\entry {r{\_}re{\_}alloc}{50}{\code {r{\_}re{\_}alloc}} +\entry {memory{\_}warnings}{50}{\code {memory{\_}warnings}} +\entry {islower}{53}{\code {islower}} +\entry {isupper}{53}{\code {isupper}} +\entry {isalpha}{53}{\code {isalpha}} +\entry {isdigit}{54}{\code {isdigit}} +\entry {isalnum}{54}{\code {isalnum}} +\entry {isxdigit}{54}{\code {isxdigit}} +\entry {ispunct}{54}{\code {ispunct}} +\entry {isspace}{54}{\code {isspace}} +\entry {isblank}{54}{\code {isblank}} +\entry {isgraph}{54}{\code {isgraph}} +\entry {isprint}{54}{\code {isprint}} +\entry {iscntrl}{55}{\code {iscntrl}} +\entry {isascii}{55}{\code {isascii}} +\entry {tolower}{55}{\code {tolower}} +\entry {toupper}{55}{\code {toupper}} +\entry {toascii}{55}{\code {toascii}} +\entry {{\_}tolower}{55}{\code {{\_}tolower}} +\entry {{\_}toupper}{55}{\code {{\_}toupper}} +\entry {strlen}{59}{\code {strlen}} +\entry {memcpy}{60}{\code {memcpy}} +\entry {memmove}{60}{\code {memmove}} +\entry {memccpy}{60}{\code {memccpy}} +\entry {memset}{60}{\code {memset}} +\entry {strcpy}{60}{\code {strcpy}} +\entry {strncpy}{60}{\code {strncpy}} +\entry {strdup}{61}{\code {strdup}} +\entry {stpcpy}{61}{\code {stpcpy}} +\entry {strcat}{62}{\code {strcat}} +\entry {strncat}{62}{\code {strncat}} +\entry {bcopy}{63}{\code {bcopy}} +\entry {bzero}{63}{\code {bzero}} +\entry {memcmp}{63}{\code {memcmp}} +\entry {strcmp}{64}{\code {strcmp}} +\entry {strcasecmp}{64}{\code {strcasecmp}} +\entry {strncasecmp}{64}{\code {strncasecmp}} +\entry {strncmp}{65}{\code {strncmp}} +\entry {bcmp}{65}{\code {bcmp}} +\entry {strcoll}{66}{\code {strcoll}} +\entry {strxfrm}{66}{\code {strxfrm}} +\entry {memchr}{68}{\code {memchr}} +\entry {strchr}{68}{\code {strchr}} +\entry {index}{69}{\code {index}} +\entry {strrchr}{69}{\code {strrchr}} +\entry {rindex}{69}{\code {rindex}} +\entry {strstr}{69}{\code {strstr}} +\entry {memmem}{69}{\code {memmem}} +\entry {strspn}{70}{\code {strspn}} +\entry {strcspn}{70}{\code {strcspn}} +\entry {strpbrk}{70}{\code {strpbrk}} +\entry {strtok}{71}{\code {strtok}} +\entry {fopen}{82}{\code {fopen}} +\entry {freopen}{84}{\code {freopen}} +\entry {fclose}{84}{\code {fclose}} +\entry {fputc}{85}{\code {fputc}} +\entry {putc}{85}{\code {putc}} +\entry {putchar}{85}{\code {putchar}} +\entry {fputs}{85}{\code {fputs}} +\entry {puts}{86}{\code {puts}} +\entry {putw}{86}{\code {putw}} +\entry {fgetc}{86}{\code {fgetc}} +\entry {getc}{86}{\code {getc}} +\entry {getchar}{86}{\code {getchar}} +\entry {getw}{87}{\code {getw}} +\entry {getline}{87}{\code {getline}} +\entry {getdelim}{88}{\code {getdelim}} +\entry {fgets}{89}{\code {fgets}} +\entry {gets}{89}{\code {gets}} +\entry {ungetc}{90}{\code {ungetc}} +\entry {printf}{100}{\code {printf}} +\entry {fprintf}{100}{\code {fprintf}} +\entry {sprintf}{100}{\code {sprintf}} +\entry {snprintf}{100}{\code {snprintf}} +\entry {asprintf}{101}{\code {asprintf}} +\entry {obstack{\_}printf}{102}{\code {obstack{\_}printf}} +\entry {vprintf}{103}{\code {vprintf}} +\entry {vfprintf}{103}{\code {vfprintf}} +\entry {vsprintf}{103}{\code {vsprintf}} +\entry {vsnprintf}{103}{\code {vsnprintf}} +\entry {vasprintf}{103}{\code {vasprintf}} +\entry {obstack{\_}vprintf}{103}{\code {obstack{\_}vprintf}} +\entry {parse{\_}printf{\_}format}{104}{\code {parse{\_}printf{\_}format}} +\entry {register{\_}printf{\_}function}{108}{\code {register{\_}printf{\_}function}} +\entry {scanf}{119}{\code {scanf}} +\entry {fscanf}{120}{\code {fscanf}} +\entry {sscanf}{120}{\code {sscanf}} +\entry {vscanf}{120}{\code {vscanf}} +\entry {vfscanf}{120}{\code {vfscanf}} +\entry {vsscanf}{120}{\code {vsscanf}} +\entry {fread}{121}{\code {fread}} +\entry {fwrite}{121}{\code {fwrite}} +\entry {clearerr}{122}{\code {clearerr}} +\entry {feof}{122}{\code {feof}} +\entry {ferror}{122}{\code {ferror}} +\entry {ftell}{124}{\code {ftell}} +\entry {fseek}{124}{\code {fseek}} +\entry {rewind}{125}{\code {rewind}} +\entry {fgetpos}{126}{\code {fgetpos}} +\entry {fsetpos}{126}{\code {fsetpos}} +\entry {fflush}{128}{\code {fflush}} +\entry {setvbuf}{129}{\code {setvbuf}} +\entry {setbuf}{130}{\code {setbuf}} +\entry {setbuffer}{130}{\code {setbuffer}} +\entry {setlinebuf}{130}{\code {setlinebuf}} +\entry {fmemopen}{131}{\code {fmemopen}} +\entry {open{\_}memstream}{132}{\code {open{\_}memstream}} +\entry {open{\_}obstack{\_}stream}{133}{\code {open{\_}obstack{\_}stream}} +\entry {fopencookie}{135}{\code {fopencookie}} +\entry {open}{137}{\code {open}} +\entry {creat}{139}{\code {creat}} +\entry {close}{139}{\code {close}} +\entry {read}{140}{\code {read}} +\entry {write}{141}{\code {write}} +\entry {lseek}{143}{\code {lseek}} +\entry {fdopen}{145}{\code {fdopen}} +\entry {fileno}{146}{\code {fileno}} +\entry {fclean}{148}{\code {fclean}} +\entry {FD{\_}ZERO}{149}{\code {FD{\_}ZERO}} +\entry {FD{\_}SET}{149}{\code {FD{\_}SET}} +\entry {FD{\_}CLR}{149}{\code {FD{\_}CLR}} +\entry {FD{\_}ISSET}{149}{\code {FD{\_}ISSET}} +\entry {select}{150}{\code {select}} +\entry {fcntl}{152}{\code {fcntl}} +\entry {dup}{153}{\code {dup}} +\entry {dup2}{153}{\code {dup2}} +\entry {getcwd}{165}{\code {getcwd}} +\entry {getwd}{166}{\code {getwd}} +\entry {chdir}{166}{\code {chdir}} +\entry {opendir}{168}{\code {opendir}} +\entry {readdir}{168}{\code {readdir}} +\entry {closedir}{169}{\code {closedir}} +\entry {rewinddir}{170}{\code {rewinddir}} +\entry {telldir}{170}{\code {telldir}} +\entry {seekdir}{170}{\code {seekdir}} +\entry {link}{170}{\code {link}} +\entry {symlink}{172}{\code {symlink}} +\entry {readlink}{172}{\code {readlink}} +\entry {unlink}{173}{\code {unlink}} +\entry {remove}{174}{\code {remove}} +\entry {rmdir}{174}{\code {rmdir}} +\entry {rename}{174}{\code {rename}} +\entry {mkdir}{176}{\code {mkdir}} +\entry {stat}{180}{\code {stat}} +\entry {fstat}{180}{\code {fstat}} +\entry {lstat}{180}{\code {lstat}} +\entry {S{\_}ISDIR}{181}{\code {S{\_}ISDIR}} +\entry {S{\_}ISCHR}{181}{\code {S{\_}ISCHR}} +\entry {S{\_}ISBLK}{181}{\code {S{\_}ISBLK}} +\entry {S{\_}ISREG}{181}{\code {S{\_}ISREG}} +\entry {S{\_}ISFIFO}{181}{\code {S{\_}ISFIFO}} +\entry {S{\_}ISLNK}{181}{\code {S{\_}ISLNK}} +\entry {S{\_}ISSOCK}{181}{\code {S{\_}ISSOCK}} +\entry {chown}{183}{\code {chown}} +\entry {fchown}{183}{\code {fchown}} +\entry {umask}{186}{\code {umask}} +\entry {getumask}{187}{\code {getumask}} +\entry {chmod}{187}{\code {chmod}} +\entry {fchmod}{187}{\code {fchmod}} +\entry {access}{188}{\code {access}} +\entry {utime}{190}{\code {utime}} +\entry {utimes}{191}{\code {utimes}} +\entry {mknod}{191}{\code {mknod}} +\entry {tmpfile}{192}{\code {tmpfile}} +\entry {tmpnam}{192}{\code {tmpnam}} +\entry {tempnam}{193}{\code {tempnam}} +\entry {mktemp}{193}{\code {mktemp}} +\entry {mkstemp}{194}{\code {mkstemp}} +\entry {pipe}{195}{\code {pipe}} +\entry {popen}{197}{\code {popen}} +\entry {pclose}{198}{\code {pclose}} +\entry {mkfifo}{199}{\code {mkfifo}} +\entry {bind}{205}{\code {bind}} +\entry {getsockname}{206}{\code {getsockname}} +\entry {inet{\_}aton}{212}{\code {inet{\_}aton}} +\entry {inet{\_}addr}{213}{\code {inet{\_}addr}} +\entry {inet{\_}network}{213}{\code {inet{\_}network}} +\entry {inet{\_}ntoa}{213}{\code {inet{\_}ntoa}} +\entry {inet{\_}makeaddr}{213}{\code {inet{\_}makeaddr}} +\entry {inet{\_}lnaof}{213}{\code {inet{\_}lnaof}} +\entry {inet{\_}netof}{213}{\code {inet{\_}netof}} +\entry {gethostbyname}{215}{\code {gethostbyname}} +\entry {gethostbyaddr}{215}{\code {gethostbyaddr}} +\entry {sethostent}{215}{\code {sethostent}} +\entry {gethostent}{216}{\code {gethostent}} +\entry {endhostent}{216}{\code {endhostent}} +\entry {getservbyname}{217}{\code {getservbyname}} +\entry {getservbyport}{217}{\code {getservbyport}} +\entry {setservent}{218}{\code {setservent}} +\entry {getservent}{218}{\code {getservent}} +\entry {endservent}{218}{\code {endservent}} +\entry {htons}{218}{\code {htons}} +\entry {ntohs}{219}{\code {ntohs}} +\entry {htonl}{219}{\code {htonl}} +\entry {ntohl}{219}{\code {ntohl}} +\entry {getprotobyname}{220}{\code {getprotobyname}} +\entry {getprotobynumber}{220}{\code {getprotobynumber}} +\entry {setprotoent}{220}{\code {setprotoent}} +\entry {getprotoent}{220}{\code {getprotoent}} +\entry {endprotoent}{220}{\code {endprotoent}} +\entry {socket}{222}{\code {socket}} +\entry {shutdown}{223}{\code {shutdown}} +\entry {socketpair}{224}{\code {socketpair}} +\entry {connect}{225}{\code {connect}} +\entry {listen}{227}{\code {listen}} +\entry {accept}{227}{\code {accept}} +\entry {getpeername}{228}{\code {getpeername}} +\entry {send}{229}{\code {send}} +\entry {recv}{230}{\code {recv}} +\entry {sendto}{239}{\code {sendto}} +\entry {recvfrom}{239}{\code {recvfrom}} +\entry {getsockopt}{245}{\code {getsockopt}} +\entry {setsockopt}{245}{\code {setsockopt}} +\entry {getnetbyname}{248}{\code {getnetbyname}} +\entry {getnetbyaddr}{248}{\code {getnetbyaddr}} +\entry {setnetent}{248}{\code {setnetent}} +\entry {getnetent}{248}{\code {getnetent}} +\entry {endnetent}{248}{\code {endnetent}} +\entry {isatty}{249}{\code {isatty}} +\entry {ttyname}{249}{\code {ttyname}} +\entry {tcgetattr}{252}{\code {tcgetattr}} +\entry {tcsetattr}{252}{\code {tcsetattr}} +\entry {cfgetospeed}{261}{\code {cfgetospeed}} +\entry {cfgetispeed}{261}{\code {cfgetispeed}} +\entry {cfsetospeed}{262}{\code {cfsetospeed}} +\entry {cfsetispeed}{262}{\code {cfsetispeed}} +\entry {cfsetspeed}{262}{\code {cfsetspeed}} +\entry {cfmakeraw}{262}{\code {cfmakeraw}} +\entry {tcsendbreak}{270}{\code {tcsendbreak}} +\entry {tcdrain}{270}{\code {tcdrain}} +\entry {tcflush}{270}{\code {tcflush}} +\entry {tcflow}{271}{\code {tcflow}} +\entry {sin}{276}{\code {sin}} +\entry {cos}{276}{\code {cos}} +\entry {tan}{276}{\code {tan}} +\entry {asin}{277}{\code {asin}} +\entry {acos}{277}{\code {acos}} +\entry {atan}{277}{\code {atan}} +\entry {atan2}{277}{\code {atan2}} +\entry {exp}{278}{\code {exp}} +\entry {log}{278}{\code {log}} +\entry {log10}{278}{\code {log10}} +\entry {pow}{278}{\code {pow}} +\entry {sqrt}{278}{\code {sqrt}} +\entry {cbrt}{278}{\code {cbrt}} +\entry {hypot}{279}{\code {hypot}} +\entry {expm1}{279}{\code {expm1}} +\entry {log1p}{279}{\code {log1p}} +\entry {sinh}{279}{\code {sinh}} +\entry {cosh}{279}{\code {cosh}} +\entry {tanh}{279}{\code {tanh}} +\entry {asinh}{279}{\code {asinh}} +\entry {acosh}{279}{\code {acosh}} +\entry {atanh}{280}{\code {atanh}} +\entry {rand}{280}{\code {rand}} +\entry {srand}{281}{\code {srand}} +\entry {random}{281}{\code {random}} +\entry {srandom}{281}{\code {srandom}} +\entry {initstate}{281}{\code {initstate}} +\entry {setstate}{281}{\code {setstate}} +\entry {isinf}{283}{\code {isinf}} +\entry {isnan}{283}{\code {isnan}} +\entry {finite}{284}{\code {finite}} +\entry {infnan}{284}{\code {infnan}} +\entry {abs}{284}{\code {abs}} +\entry {labs}{284}{\code {labs}} +\entry {fabs}{284}{\code {fabs}} +\entry {cabs}{284}{\code {cabs}} +\entry {frexp}{285}{\code {frexp}} +\entry {ldexp}{285}{\code {ldexp}} +\entry {scalb}{285}{\code {scalb}} +\entry {logb}{285}{\code {logb}} +\entry {copysign}{286}{\code {copysign}} +\entry {ceil}{286}{\code {ceil}} +\entry {floor}{286}{\code {floor}} +\entry {rint}{286}{\code {rint}} +\entry {modf}{286}{\code {modf}} +\entry {fmod}{287}{\code {fmod}} +\entry {drem}{287}{\code {drem}} +\entry {div}{288}{\code {div}} +\entry {ldiv}{288}{\code {ldiv}} +\entry {strtol}{289}{\code {strtol}} +\entry {strtoul}{289}{\code {strtoul}} +\entry {atol}{290}{\code {atol}} +\entry {atoi}{290}{\code {atoi}} +\entry {strtod}{291}{\code {strtod}} +\entry {atof}{291}{\code {atof}} +\entry {bsearch}{293}{\code {bsearch}} +\entry {qsort}{294}{\code {qsort}} +\entry {fnmatch}{299}{\code {fnmatch}} +\entry {glob}{301}{\code {glob}} +\entry {regcomp}{304}{\code {regcomp}} +\entry {regexec}{306}{\code {regexec}} +\entry {regfree}{309}{\code {regfree}} +\entry {regerror}{309}{\code {regerror}} +\entry {wordexp}{311}{\code {wordexp}} +\entry {wordfree}{312}{\code {wordfree}} +\entry {clock}{316}{\code {clock}} +\entry {times}{317}{\code {times}} +\entry {difftime}{318}{\code {difftime}} +\entry {time}{318}{\code {time}} +\entry {gettimeofday}{320}{\code {gettimeofday}} +\entry {settimeofday}{320}{\code {settimeofday}} +\entry {adjtime}{320}{\code {adjtime}} +\entry {localtime}{322}{\code {localtime}} +\entry {gmtime}{323}{\code {gmtime}} +\entry {mktime}{323}{\code {mktime}} +\entry {asctime}{323}{\code {asctime}} +\entry {ctime}{324}{\code {ctime}} +\entry {strftime}{324}{\code {strftime}} +\entry {tzset}{328}{\code {tzset}} +\entry {setitimer}{330}{\code {setitimer}} +\entry {getitimer}{330}{\code {getitimer}} +\entry {ITIMER{\_}REAL}{330}{\code {ITIMER{\_}REAL}} +\entry {ITIMER{\_}VIRTUAL}{330}{\code {ITIMER{\_}VIRTUAL}} +\entry {ITIMER{\_}PROF}{330}{\code {ITIMER{\_}PROF}} +\entry {alarm}{331}{\code {alarm}} +\entry {sleep}{331}{\code {sleep}} +\entry {getrusage}{332}{\code {getrusage}} +\entry {getrlimit}{334}{\code {getrlimit}} +\entry {setrlimit}{334}{\code {setrlimit}} +\entry {getpriority}{336}{\code {getpriority}} +\entry {setpriority}{336}{\code {setpriority}} +\entry {nice}{337}{\code {nice}} +\entry {mbstowcs}{344}{\code {mbstowcs}} +\entry {wcstombs}{345}{\code {wcstombs}} +\entry {mblen}{345}{\code {mblen}} +\entry {mbtowc}{346}{\code {mbtowc}} +\entry {wctomb}{346}{\code {wctomb}} +\entry {setlocale}{353}{\code {setlocale}} +\entry {localeconv}{355}{\code {localeconv}} +\entry {setjmp}{363}{\code {setjmp}} +\entry {longjmp}{363}{\code {longjmp}} +\entry {sigsetjmp}{364}{\code {sigsetjmp}} +\entry {siglongjmp}{364}{\code {siglongjmp}} +\entry {strsignal}{377}{\code {strsignal}} +\entry {psignal}{377}{\code {psignal}} +\entry {signal}{378}{\code {signal}} +\entry {ssignal}{380}{\code {ssignal}} +\entry {sigaction}{380}{\code {sigaction}} +\entry {TEMP{\_}FAILURE{\_}RETRY}{397}{\code {TEMP{\_}FAILURE{\_}RETRY}} +\entry {raise}{398}{\code {raise}} +\entry {gsignal}{398}{\code {gsignal}} +\entry {kill}{399}{\code {kill}} +\entry {killpg}{400}{\code {killpg}} +\entry {sigemptyset}{404}{\code {sigemptyset}} +\entry {sigfillset}{404}{\code {sigfillset}} +\entry {sigaddset}{404}{\code {sigaddset}} +\entry {sigdelset}{404}{\code {sigdelset}} +\entry {sigismember}{404}{\code {sigismember}} +\entry {sigprocmask}{405}{\code {sigprocmask}} +\entry {sigpending}{408}{\code {sigpending}} +\entry {pause}{411}{\code {pause}} +\entry {sigsuspend}{412}{\code {sigsuspend}} +\entry {sigvec}{415}{\code {sigvec}} +\entry {siginterrupt}{415}{\code {siginterrupt}} +\entry {sigmask}{415}{\code {sigmask}} +\entry {sigblock}{415}{\code {sigblock}} +\entry {sigsetmask}{415}{\code {sigsetmask}} +\entry {sigpause}{416}{\code {sigpause}} +\entry {sigaltstack}{417}{\code {sigaltstack}} +\entry {sigstack}{418}{\code {sigstack}} +\entry {getopt}{421}{\code {getopt}} +\entry {getopt{\_}long}{425}{\code {getopt{\_}long}} +\entry {getenv}{428}{\code {getenv}} +\entry {putenv}{429}{\code {putenv}} +\entry {exit}{431}{\code {exit}} +\entry {atexit}{433}{\code {atexit}} +\entry {on{\_}exit}{433}{\code {on{\_}exit}} +\entry {abort}{434}{\code {abort}} +\entry {{\_}exit}{434}{\code {{\_}exit}} +\entry {system}{437}{\code {system}} +\entry {getpid}{439}{\code {getpid}} +\entry {getppid}{439}{\code {getppid}} +\entry {fork}{439}{\code {fork}} +\entry {vfork}{440}{\code {vfork}} +\entry {execv}{440}{\code {execv}} +\entry {execl}{441}{\code {execl}} +\entry {execve}{441}{\code {execve}} +\entry {execle}{441}{\code {execle}} +\entry {execvp}{441}{\code {execvp}} +\entry {execlp}{441}{\code {execlp}} +\entry {waitpid}{443}{\code {waitpid}} +\entry {wait}{445}{\code {wait}} +\entry {WIFEXITED}{446}{\code {WIFEXITED}} +\entry {WEXITSTATUS}{446}{\code {WEXITSTATUS}} +\entry {WIFSIGNALED}{446}{\code {WIFSIGNALED}} +\entry {WTERMSIG}{446}{\code {WTERMSIG}} +\entry {WCOREDUMP}{446}{\code {WCOREDUMP}} +\entry {WIFSTOPPED}{446}{\code {WIFSTOPPED}} +\entry {WSTOPSIG}{446}{\code {WSTOPSIG}} +\entry {wait3}{447}{\code {wait3}} +\entry {wait4}{447}{\code {wait4}} +\entry {ctermid}{468}{\code {ctermid}} +\entry {setsid}{468}{\code {setsid}} +\entry {getpgrp}{469}{\code {getpgrp}} +\entry {getpgrp}{469}{\code {getpgrp}} +\entry {setpgid}{469}{\code {setpgid}} +\entry {setpgrp}{469}{\code {setpgrp}} +\entry {tcgetpgrp}{470}{\code {tcgetpgrp}} +\entry {tcsetpgrp}{470}{\code {tcsetpgrp}} +\entry {getuid}{475}{\code {getuid}} +\entry {getgid}{475}{\code {getgid}} +\entry {geteuid}{476}{\code {geteuid}} +\entry {getegid}{476}{\code {getegid}} +\entry {getgroups}{476}{\code {getgroups}} +\entry {setuid}{476}{\code {setuid}} +\entry {setreuid}{477}{\code {setreuid}} +\entry {setgid}{477}{\code {setgid}} +\entry {setregid}{478}{\code {setregid}} +\entry {setgroups}{478}{\code {setgroups}} +\entry {initgroups}{478}{\code {initgroups}} +\entry {getlogin}{483}{\code {getlogin}} +\entry {cuserid}{483}{\code {cuserid}} +\entry {getpwuid}{485}{\code {getpwuid}} +\entry {getpwnam}{485}{\code {getpwnam}} +\entry {fgetpwent}{485}{\code {fgetpwent}} +\entry {setpwent}{485}{\code {setpwent}} +\entry {getpwent}{485}{\code {getpwent}} +\entry {endpwent}{486}{\code {endpwent}} +\entry {putpwent}{486}{\code {putpwent}} +\entry {getgrgid}{487}{\code {getgrgid}} +\entry {getgrnam}{487}{\code {getgrnam}} +\entry {fgetgrent}{487}{\code {fgetgrent}} +\entry {setgrent}{488}{\code {setgrent}} +\entry {getgrent}{488}{\code {getgrent}} +\entry {endgrent}{488}{\code {endgrent}} +\entry {gethostname}{491}{\code {gethostname}} +\entry {sethostname}{491}{\code {sethostname}} +\entry {gethostid}{492}{\code {gethostid}} +\entry {sethostid}{492}{\code {sethostid}} +\entry {uname}{493}{\code {uname}} +\entry {sysconf}{499}{\code {sysconf}} +\entry {pathconf}{506}{\code {pathconf}} +\entry {fpathconf}{507}{\code {fpathconf}} +\entry {confstr}{509}{\code {confstr}} +\entry {assert}{511}{\code {assert}} +\entry {va{\_}start}{516}{\code {va{\_}start}} +\entry {va{\_}arg}{516}{\code {va{\_}arg}} +\entry {va{\_}end}{517}{\code {va{\_}end}} +\entry {va{\_}alist}{518}{\code {va{\_}alist}} +\entry {va{\_}dcl}{518}{\code {va{\_}dcl}} +\entry {va{\_}start}{518}{\code {va{\_}start}} +\entry {offsetof}{528}{\code {offsetof}} diff -ruN glibc-1.06/manual/libc.fns glibc-1.07/manual/libc.fns --- glibc-1.06/manual/libc.fns Mon May 17 16:59:13 1993 +++ glibc-1.07/manual/libc.fns Wed Dec 29 18:34:48 1993 @@ -1,496 +1,499 @@ -\initial {-} -\entry {\code {-lbsd-compat}}{510} \initial {{\_}} -\entry {\code {{\_}exit}}{474} -\entry {\code {{\_}tolower}}{60} -\entry {\code {{\_}toupper}}{60} +\entry {\code {{\_}exit}}{434} +\entry {\code {{\_}tolower}}{55} +\entry {\code {{\_}toupper}}{55} \initial {A} -\entry {\code {abort}}{473} -\entry {\code {abs}}{356} -\entry {\code {accept}}{293} -\entry {\code {access}}{254} -\entry {\code {acos}}{347} -\entry {\code {acosh}}{350} -\entry {\code {adjtime}}{373} -\entry {\code {alarm}}{384} -\entry {\code {alloca}}{51} -\entry {\code {asctime}}{376} -\entry {\code {asin}}{347} -\entry {\code {asinh}}{350} -\entry {\code {asprintf}}{157} -\entry {\code {assert}}{555} -\entry {\code {atan}}{347} -\entry {\code {atan2}}{347} -\entry {\code {atanh}}{350} -\entry {\code {atexit}}{472} -\entry {\code {atof}}{365} -\entry {\code {atoi}}{363} -\entry {\code {atol}}{363} +\entry {\code {abort}}{434} +\entry {\code {abs}}{284} +\entry {\code {accept}}{227} +\entry {\code {access}}{188} +\entry {\code {acos}}{277} +\entry {\code {acosh}}{279} +\entry {\code {adjtime}}{320} +\entry {\code {alarm}}{331} +\entry {\code {alloca}}{47} +\entry {\code {asctime}}{323} +\entry {\code {asin}}{277} +\entry {\code {asinh}}{279} +\entry {\code {asprintf}}{101} +\entry {\code {assert}}{511} +\entry {\code {atan}}{277} +\entry {\code {atan2}}{277} +\entry {\code {atanh}}{280} +\entry {\code {atexit}}{433} +\entry {\code {atof}}{291} +\entry {\code {atoi}}{290} +\entry {\code {atol}}{290} \initial {B} -\entry {\code {bcmp}}{70} -\entry {\code {bcopy}}{67} -\entry {\code {bind}}{269} -\entry {\code {bsd-compat}}{510} -\entry {\code {bsearch}}{104} -\entry {\code {bzero}}{67} +\entry {\code {bcmp}}{65} +\entry {\code {bcopy}}{63} +\entry {\code {bind}}{205} +\entry {\code {bsearch}}{293} +\entry {\code {bzero}}{63} \initial {C} -\entry {\code {cabs}}{357} -\entry {\code {calloc}}{33} -\entry {\code {cbrt}}{349} -\entry {\code {ceil}}{359} -\entry {\code {cfgetispeed}}{330} -\entry {\code {cfgetospeed}}{330} -\entry {\code {cfmakeraw}}{331} -\entry {\code {cfree}}{31} -\entry {\code {cfsetispeed}}{330} -\entry {\code {cfsetospeed}}{330} -\entry {\code {cfsetspeed}}{330} -\entry {\code {chdir}}{230} -\entry {\code {chmod}}{252} -\entry {\code {chown}}{248} -\entry {\code {clearerr}}{180} -\entry {\code {clock}}{368} -\entry {\code {close}}{201} -\entry {\code {closedir}}{233} -\entry {\code {confstr}}{552} -\entry {\code {connect}}{291} -\entry {\code {copysign}}{358} -\entry {\code {cos}}{346} -\entry {\code {cosh}}{350} -\entry {\code {creat}}{201} -\entry {\code {ctermid}}{509} -\entry {\code {ctime}}{377} -\entry {\code {cuserid}}{524} +\entry {\code {cabs}}{284} +\entry {\code {calloc}}{30} +\entry {\code {cbrt}}{278} +\entry {\code {ceil}}{286} +\entry {\code {cfgetispeed}}{261} +\entry {\code {cfgetospeed}}{261} +\entry {\code {cfmakeraw}}{262} +\entry {\code {cfree}}{28} +\entry {\code {cfsetispeed}}{262} +\entry {\code {cfsetospeed}}{262} +\entry {\code {cfsetspeed}}{262} +\entry {\code {chdir}}{166} +\entry {\code {chmod}}{187} +\entry {\code {chown}}{183} +\entry {\code {clearerr}}{122} +\entry {\code {clock}}{316} +\entry {\code {close}}{139} +\entry {\code {closedir}}{169} +\entry {\code {confstr}}{509} +\entry {\code {connect}}{225} +\entry {\code {copysign}}{286} +\entry {\code {cos}}{276} +\entry {\code {cosh}}{279} +\entry {\code {creat}}{139} +\entry {\code {ctermid}}{468} +\entry {\code {ctime}}{324} +\entry {\code {cuserid}}{483} \initial {D} -\entry {\code {difftime}}{371} -\entry {\code {div}}{361} -\entry {\code {drem}}{360} -\entry {\code {dup}}{216} -\entry {\code {dup2}}{216} +\entry {\code {difftime}}{318} +\entry {\code {div}}{288} +\entry {\code {drem}}{287} +\entry {\code {dup}}{153} +\entry {\code {dup2}}{153} \initial {E} -\entry {\code {endgrent}}{530} -\entry {\code {endhostent}}{281} -\entry {\code {endnetent}}{316} -\entry {\code {endprotoent}}{286} -\entry {\code {endpwent}}{527} -\entry {\code {endservent}}{283} -\entry {\code {execl}}{479} -\entry {\code {execle}}{479} -\entry {\code {execlp}}{480} -\entry {\code {execv}}{479} -\entry {\code {execve}}{479} -\entry {\code {execvp}}{480} -\entry {\code {exit}}{470} -\entry {\code {exp}}{348} -\entry {\code {expm1}}{349} +\entry {\code {endgrent}}{488} +\entry {\code {endhostent}}{216} +\entry {\code {endnetent}}{248} +\entry {\code {endprotoent}}{220} +\entry {\code {endpwent}}{486} +\entry {\code {endservent}}{218} +\entry {\code {execl}}{441} +\entry {\code {execle}}{441} +\entry {\code {execlp}}{441} +\entry {\code {execv}}{440} +\entry {\code {execve}}{441} +\entry {\code {execvp}}{441} +\entry {\code {exit}}{431} +\entry {\code {exp}}{278} +\entry {\code {expm1}}{279} \initial {F} -\entry {\code {fabs}}{357} -\entry {\code {fchmod}}{253} -\entry {\code {fchown}}{249} -\entry {\code {fclean}}{210} -\entry {\code {fclose}}{138} -\entry {\code {fcntl}}{214} -\entry {\code {FD{\_}CLR}}{212} -\entry {\code {FD{\_}ISSET}}{212} -\entry {\code {FD{\_}SET}}{212} -\entry {\code {FD{\_}ZERO}}{212} -\entry {\code {fdopen}}{208} -\entry {\code {feof}}{180} -\entry {\code {ferror}}{180} -\entry {\code {fflush}}{186} -\entry {\code {fgetc}}{140} -\entry {\code {fgetgrent}}{529} -\entry {\code {fgetpos}}{184} -\entry {\code {fgetpwent}}{527} -\entry {\code {fgets}}{143} -\entry {\code {fileno}}{208} -\entry {\code {finite}}{356} -\entry {\code {floor}}{359} -\entry {\code {fmemopen}}{191} -\entry {\code {fmod}}{359} -\entry {\code {fnmatch}}{109} -\entry {\code {fopen}}{136} -\entry {\code {fopencookie}}{196} -\entry {\code {fork}}{477} -\entry {\code {fpathconf}}{549} -\entry {\code {fprintf}}{155} -\entry {\code {fputc}}{139} -\entry {\code {fputs}}{140} -\entry {\code {fread}}{179} -\entry {\code {free}}{31} -\entry {\code {freopen}}{138} -\entry {\code {frexp}}{357} -\entry {\code {fscanf}}{177} -\entry {\code {fseek}}{182} -\entry {\code {fsetpos}}{184} -\entry {\code {fstat}}{245} -\entry {\code {ftell}}{182} -\entry {\code {fwrite}}{179} +\entry {\code {fabs}}{284} +\entry {\code {fchmod}}{187} +\entry {\code {fchown}}{183} +\entry {\code {fclean}}{148} +\entry {\code {fclose}}{84} +\entry {\code {fcntl}}{152} +\entry {\code {FD{\_}CLR}}{149} +\entry {\code {FD{\_}ISSET}}{149} +\entry {\code {FD{\_}SET}}{149} +\entry {\code {FD{\_}ZERO}}{149} +\entry {\code {fdopen}}{145} +\entry {\code {feof}}{122} +\entry {\code {ferror}}{122} +\entry {\code {fflush}}{128} +\entry {\code {fgetc}}{86} +\entry {\code {fgetgrent}}{487} +\entry {\code {fgetpos}}{126} +\entry {\code {fgetpwent}}{485} +\entry {\code {fgets}}{89} +\entry {\code {fileno}}{146} +\entry {\code {finite}}{284} +\entry {\code {floor}}{286} +\entry {\code {fmemopen}}{131} +\entry {\code {fmod}}{287} +\entry {\code {fnmatch}}{299} +\entry {\code {fopen}}{82} +\entry {\code {fopencookie}}{135} +\entry {\code {fork}}{439} +\entry {\code {fpathconf}}{507} +\entry {\code {fprintf}}{100} +\entry {\code {fputc}}{85} +\entry {\code {fputs}}{85} +\entry {\code {fread}}{121} +\entry {\code {free}}{28} +\entry {\code {freopen}}{84} +\entry {\code {frexp}}{285} +\entry {\code {fscanf}}{120} +\entry {\code {fseek}}{124} +\entry {\code {fsetpos}}{126} +\entry {\code {fstat}}{180} +\entry {\code {ftell}}{124} +\entry {\code {fwrite}}{121} \initial {G} -\entry {\code {getc}}{141} -\entry {\code {getchar}}{141} -\entry {\code {getcwd}}{229} -\entry {\code {getdelim}}{142} -\entry {\code {getegid}}{516} -\entry {\code {getenv}}{467} -\entry {\code {geteuid}}{516} -\entry {\code {getgid}}{516} -\entry {\code {getgrent}}{529} -\entry {\code {getgrgid}}{528} -\entry {\code {getgrnam}}{529} -\entry {\code {getgroups}}{516} -\entry {\code {gethostbyaddr}}{279} -\entry {\code {gethostbyname}}{279} -\entry {\code {gethostent}}{281} -\entry {\code {gethostid}}{534} -\entry {\code {gethostname}}{533} -\entry {\code {getitimer}}{384} -\entry {\code {getline}}{142} -\entry {\code {getlogin}}{524} -\entry {\code {getnetbyaddr}}{315} -\entry {\code {getnetbyname}}{315} -\entry {\code {getnetent}}{316} -\entry {\code {getopt}}{459} -\entry {\code {getopt{\_}long}}{463} -\entry {\code {getpeername}}{294} -\entry {\code {getpgrp}}{510} -\entry {\code {getpid}}{477} -\entry {\code {getppid}}{477} -\entry {\code {getpriority}}{390} -\entry {\code {getprotobyname}}{285} -\entry {\code {getprotobynumber}}{285} -\entry {\code {getprotoent}}{286} -\entry {\code {getpwent}}{527} -\entry {\code {getpwnam}}{526} -\entry {\code {getpwuid}}{526} -\entry {\code {getrlimit}}{388} -\entry {\code {getrusage}}{386} -\entry {\code {gets}}{143} -\entry {\code {getservbyname}}{282} -\entry {\code {getservbyport}}{283} -\entry {\code {getservent}}{283} -\entry {\code {getsockname}}{270} -\entry {\code {getsockopt}}{312} -\entry {\code {gettimeofday}}{372} -\entry {\code {getuid}}{516} -\entry {\code {getumask}}{252} -\entry {\code {getw}}{141} -\entry {\code {getwd}}{230} -\entry {\code {glob}}{111} -\entry {\code {gmtime}}{375} -\entry {\code {gsignal}}{435} +\entry {\code {getc}}{86} +\entry {\code {getchar}}{86} +\entry {\code {getcwd}}{165} +\entry {\code {getdelim}}{88} +\entry {\code {getegid}}{476} +\entry {\code {getenv}}{428} +\entry {\code {geteuid}}{476} +\entry {\code {getgid}}{475} +\entry {\code {getgrent}}{488} +\entry {\code {getgrgid}}{487} +\entry {\code {getgrnam}}{487} +\entry {\code {getgroups}}{476} +\entry {\code {gethostbyaddr}}{215} +\entry {\code {gethostbyname}}{215} +\entry {\code {gethostent}}{216} +\entry {\code {gethostid}}{492} +\entry {\code {gethostname}}{491} +\entry {\code {getitimer}}{330} +\entry {\code {getline}}{87} +\entry {\code {getlogin}}{483} +\entry {\code {getnetbyaddr}}{248} +\entry {\code {getnetbyname}}{248} +\entry {\code {getnetent}}{248} +\entry {\code {getopt}}{421} +\entry {\code {getopt{\_}long}}{425} +\entry {\code {getpeername}}{228} +\entry {\code {getpgrp}}{469} +\entry {\code {getpid}}{439} +\entry {\code {getppid}}{439} +\entry {\code {getpriority}}{336} +\entry {\code {getprotobyname}}{220} +\entry {\code {getprotobynumber}}{220} +\entry {\code {getprotoent}}{220} +\entry {\code {getpwent}}{485} +\entry {\code {getpwnam}}{485} +\entry {\code {getpwuid}}{485} +\entry {\code {getrlimit}}{334} +\entry {\code {getrusage}}{332} +\entry {\code {gets}}{89} +\entry {\code {getservbyname}}{217} +\entry {\code {getservbyport}}{217} +\entry {\code {getservent}}{218} +\entry {\code {getsockname}}{206} +\entry {\code {getsockopt}}{245} +\entry {\code {gettimeofday}}{320} +\entry {\code {getuid}}{475} +\entry {\code {getumask}}{187} +\entry {\code {getw}}{87} +\entry {\code {getwd}}{166} +\entry {\code {glob}}{301} +\entry {\code {gmtime}}{323} +\entry {\code {gsignal}}{398} \initial {H} -\entry {\code {htonl}}{284} -\entry {\code {htons}}{284} -\entry {\code {hypot}}{349} +\entry {\code {htonl}}{219} +\entry {\code {htons}}{218} +\entry {\code {hypot}}{279} \initial {I} -\entry {\code {inet{\_}addr}}{277} -\entry {\code {inet{\_}lnaof}}{278} -\entry {\code {inet{\_}makeaddr}}{278} -\entry {\code {inet{\_}netof}}{278} -\entry {\code {inet{\_}network}}{278} -\entry {\code {inet{\_}ntoa}}{278} -\entry {\code {infnan}}{356} -\entry {\code {initgroups}}{519} -\entry {\code {initstate}}{352} -\entry {\code {isalnum}}{58} -\entry {\code {isalpha}}{58} -\entry {\code {isascii}}{59} -\entry {\code {isatty}}{317} -\entry {\code {isblank}}{59} -\entry {\code {iscntrl}}{59} -\entry {\code {isdigit}}{58} -\entry {\code {isgraph}}{59} -\entry {\code {isinf}}{356} -\entry {\code {islower}}{57} -\entry {\code {isnan}}{356} -\entry {\code {isprint}}{59} -\entry {\code {ispunct}}{58} -\entry {\code {isspace}}{58} -\entry {\code {isupper}}{57} -\entry {\code {isxdigit}}{58} -\entry {\code {ITIMER{\_}PROF}}{384} -\entry {\code {ITIMER{\_}REAL}}{384} -\entry {\code {ITIMER{\_}VIRTUAL}}{384} +\entry {\code {index}}{69} +\entry {\code {inet{\_}addr}}{213} +\entry {\code {inet{\_}aton}}{212} +\entry {\code {inet{\_}lnaof}}{213} +\entry {\code {inet{\_}makeaddr}}{213} +\entry {\code {inet{\_}netof}}{213} +\entry {\code {inet{\_}network}}{213} +\entry {\code {inet{\_}ntoa}}{213} +\entry {\code {infnan}}{284} +\entry {\code {initgroups}}{478} +\entry {\code {initstate}}{281} +\entry {\code {isalnum}}{54} +\entry {\code {isalpha}}{53} +\entry {\code {isascii}}{55} +\entry {\code {isatty}}{249} +\entry {\code {isblank}}{54} +\entry {\code {iscntrl}}{55} +\entry {\code {isdigit}}{54} +\entry {\code {isgraph}}{54} +\entry {\code {isinf}}{283} +\entry {\code {islower}}{53} +\entry {\code {isnan}}{283} +\entry {\code {isprint}}{54} +\entry {\code {ispunct}}{54} +\entry {\code {isspace}}{54} +\entry {\code {isupper}}{53} +\entry {\code {isxdigit}}{54} +\entry {\code {ITIMER{\_}PROF}}{330} +\entry {\code {ITIMER{\_}REAL}}{330} +\entry {\code {ITIMER{\_}VIRTUAL}}{330} \initial {K} -\entry {\code {kill}}{436} -\entry {\code {killpg}}{437} +\entry {\code {kill}}{399} +\entry {\code {killpg}}{400} \initial {L} -\entry {\code {labs}}{357} -\entry {\code {ldexp}}{358} -\entry {\code {ldiv}}{361} -\entry {\code {link}}{235} -\entry {\code {listen}}{293} -\entry {\code {localeconv}}{98} -\entry {\code {localtime}}{375} -\entry {\code {log}}{348} -\entry {\code {log10}}{348} -\entry {\code {log1p}}{349} -\entry {\code {logb}}{358} -\entry {\code {longjmp}}{395} -\entry {\code {lseek}}{205} -\entry {\code {lstat}}{245} +\entry {\code {labs}}{284} +\entry {\code {ldexp}}{285} +\entry {\code {ldiv}}{288} +\entry {\code {link}}{170} +\entry {\code {listen}}{227} +\entry {\code {localeconv}}{355} +\entry {\code {localtime}}{322} +\entry {\code {log}}{278} +\entry {\code {log10}}{278} +\entry {\code {log1p}}{279} +\entry {\code {logb}}{285} +\entry {\code {longjmp}}{363} +\entry {\code {lseek}}{143} +\entry {\code {lstat}}{180} \initial {M} -\entry {\code {malloc}}{29} -\entry {\code {mblen}}{86} -\entry {\code {mbstowcs}}{84} -\entry {\code {mbtowc}}{86} -\entry {\code {mcheck}}{34} -\entry {\code {memalign}}{34} -\entry {\code {memccpy}}{64} -\entry {\code {memchr}}{74} -\entry {\code {memcmp}}{68} -\entry {\code {memcpy}}{64} -\entry {\code {memmem}}{75} -\entry {\code {memmove}}{64} -\entry {\code {memory{\_}warnings}}{55} -\entry {\code {memset}}{65} -\entry {\code {mkdir}}{241} -\entry {\code {mkfifo}}{263} -\entry {\code {mknod}}{257} -\entry {\code {mktime}}{376} -\entry {\code {modf}}{359} -\entry {\code {mstats}}{37} +\entry {\code {malloc}}{26} +\entry {\code {mblen}}{345} +\entry {\code {mbstowcs}}{344} +\entry {\code {mbtowc}}{346} +\entry {\code {mcheck}}{32} +\entry {\code {memalign}}{31} +\entry {\code {memccpy}}{60} +\entry {\code {memchr}}{68} +\entry {\code {memcmp}}{63} +\entry {\code {memcpy}}{60} +\entry {\code {memmem}}{69} +\entry {\code {memmove}}{60} +\entry {\code {memory{\_}warnings}}{50} +\entry {\code {memset}}{60} +\entry {\code {mkdir}}{176} +\entry {\code {mkfifo}}{199} +\entry {\code {mknod}}{191} +\entry {\code {mkstemp}}{194} +\entry {\code {mktemp}}{193} +\entry {\code {mktime}}{323} +\entry {\code {modf}}{286} +\entry {\code {mstats}}{34} \initial {N} -\entry {\code {nice}}{391} -\entry {\code {ntohl}}{284} -\entry {\code {ntohs}}{284} +\entry {\code {nice}}{337} +\entry {\code {ntohl}}{219} +\entry {\code {ntohs}}{219} \initial {O} -\entry {\code {obstack{\_}1grow}}{44} -\entry {\code {obstack{\_}1grow{\_}fast}}{46} -\entry {\code {obstack{\_}alignment{\_}mask}}{47} -\entry {\code {obstack{\_}alloc}}{40} -\entry {\code {obstack{\_}base}}{47} -\entry {\code {obstack{\_}blank}}{44} -\entry {\code {obstack{\_}blank{\_}fast}}{46} -\entry {\code {obstack{\_}chunk{\_}alloc}}{39} -\entry {\code {obstack{\_}chunk{\_}free}}{39} -\entry {\code {obstack{\_}chunk{\_}size}}{49} -\entry {\code {obstack{\_}copy}}{41} -\entry {\code {obstack{\_}copy0}}{41} -\entry {\code {obstack{\_}finish}}{44} -\entry {\code {obstack{\_}free}}{42} -\entry {\code {obstack{\_}grow}}{44} -\entry {\code {obstack{\_}grow0}}{44} -\entry {\code {obstack{\_}init}}{40} -\entry {\code {obstack{\_}next{\_}free}}{47} -\entry {\code {obstack{\_}object{\_}size}}{44, 47} -\entry {\code {obstack{\_}printf}}{158} -\entry {\code {obstack{\_}room}}{45} -\entry {\code {obstack{\_}vprintf}}{159} -\entry {\code {offsetof}}{573} -\entry {\code {on{\_}exit}}{472} -\entry {\code {open}}{199} -\entry {\code {open{\_}memstream}}{192} -\entry {\code {open{\_}obstack{\_}stream}}{194} -\entry {\code {opendir}}{232} +\entry {\code {obstack{\_}1grow}}{40} +\entry {\code {obstack{\_}1grow{\_}fast}}{41} +\entry {\code {obstack{\_}alignment{\_}mask}}{43} +\entry {\code {obstack{\_}alloc}}{37} +\entry {\code {obstack{\_}base}}{42} +\entry {\code {obstack{\_}blank}}{40} +\entry {\code {obstack{\_}blank{\_}fast}}{41} +\entry {\code {obstack{\_}chunk{\_}alloc}}{36} +\entry {\code {obstack{\_}chunk{\_}free}}{36} +\entry {\code {obstack{\_}chunk{\_}size}}{44} +\entry {\code {obstack{\_}copy}}{37} +\entry {\code {obstack{\_}copy0}}{38} +\entry {\code {obstack{\_}finish}}{40} +\entry {\code {obstack{\_}free}}{38} +\entry {\code {obstack{\_}grow}}{40} +\entry {\code {obstack{\_}grow0}}{40} +\entry {\code {obstack{\_}init}}{37} +\entry {\code {obstack{\_}next{\_}free}}{43} +\entry {\code {obstack{\_}object{\_}size}}{40, 43} +\entry {\code {obstack{\_}printf}}{102} +\entry {\code {obstack{\_}room}}{41} +\entry {\code {obstack{\_}vprintf}}{103} +\entry {\code {offsetof}}{528} +\entry {\code {on{\_}exit}}{433} +\entry {\code {open}}{137} +\entry {\code {open{\_}memstream}}{132} +\entry {\code {open{\_}obstack{\_}stream}}{133} +\entry {\code {opendir}}{168} \initial {P} -\entry {\code {parse{\_}printf{\_}format}}{160} -\entry {\code {pathconf}}{549} -\entry {\code {pause}}{449} -\entry {\code {pclose}}{262} -\entry {\code {perror}}{23} -\entry {\code {pipe}}{259} -\entry {\code {popen}}{261} -\entry {\code {pow}}{349} -\entry {\code {printf}}{155} -\entry {\code {psignal}}{412} -\entry {\code {putc}}{139} -\entry {\code {putchar}}{139} -\entry {\code {putenv}}{467} -\entry {\code {putpwent}}{527} -\entry {\code {puts}}{140} -\entry {\code {putw}}{140} +\entry {\code {parse{\_}printf{\_}format}}{104} +\entry {\code {pathconf}}{506} +\entry {\code {pause}}{411} +\entry {\code {pclose}}{198} +\entry {\code {perror}}{22} +\entry {\code {pipe}}{195} +\entry {\code {popen}}{197} +\entry {\code {pow}}{278} +\entry {\code {printf}}{100} +\entry {\code {psignal}}{377} +\entry {\code {putc}}{85} +\entry {\code {putchar}}{85} +\entry {\code {putenv}}{429} +\entry {\code {putpwent}}{486} +\entry {\code {puts}}{86} +\entry {\code {putw}}{86} \initial {Q} -\entry {\code {qsort}}{104} +\entry {\code {qsort}}{294} \initial {R} -\entry {\code {r{\_}alloc}}{54} -\entry {\code {r{\_}alloc{\_}free}}{55} -\entry {\code {r{\_}re{\_}alloc}}{55} -\entry {\code {raise}}{435} -\entry {\code {rand}}{351} -\entry {\code {random}}{352} -\entry {\code {read}}{202} -\entry {\code {readdir}}{233} -\entry {\code {readlink}}{237} -\entry {\code {realloc}}{32} -\entry {\code {recv}}{296} -\entry {\code {recvfrom}}{306} -\entry {\code {regcomp}}{114} -\entry {\code {regerror}}{119} -\entry {\code {regexec}}{116} -\entry {\code {regfree}}{119} -\entry {\code {register{\_}printf{\_}function}}{164} -\entry {\code {remove}}{239} -\entry {\code {rename}}{240} -\entry {\code {rewind}}{183} -\entry {\code {rewinddir}}{234} -\entry {\code {rint}}{359} -\entry {\code {rmdir}}{239} +\entry {\code {r{\_}alloc}}{50} +\entry {\code {r{\_}alloc{\_}free}}{50} +\entry {\code {r{\_}re{\_}alloc}}{50} +\entry {\code {raise}}{398} +\entry {\code {rand}}{280} +\entry {\code {random}}{281} +\entry {\code {read}}{140} +\entry {\code {readdir}}{168} +\entry {\code {readlink}}{172} +\entry {\code {realloc}}{29} +\entry {\code {recv}}{230} +\entry {\code {recvfrom}}{239} +\entry {\code {regcomp}}{304} +\entry {\code {regerror}}{309} +\entry {\code {regexec}}{306} +\entry {\code {regfree}}{309} +\entry {\code {register{\_}printf{\_}function}}{108} +\entry {\code {remove}}{174} +\entry {\code {rename}}{174} +\entry {\code {rewind}}{125} +\entry {\code {rewinddir}}{170} +\entry {\code {rindex}}{69} +\entry {\code {rint}}{286} +\entry {\code {rmdir}}{174} \initial {S} -\entry {\code {S{\_}ISBLK}}{246} -\entry {\code {S{\_}ISCHR}}{246} -\entry {\code {S{\_}ISDIR}}{246} -\entry {\code {S{\_}ISFIFO}}{246} -\entry {\code {S{\_}ISLNK}}{246} -\entry {\code {S{\_}ISREG}}{246} -\entry {\code {S{\_}ISSOCK}}{247} -\entry {\code {scalb}}{358} -\entry {\code {scanf}}{177} -\entry {\code {seekdir}}{235} -\entry {\code {select}}{212} -\entry {\code {send}}{295} -\entry {\code {sendto}}{305} -\entry {\code {setbuf}}{188} -\entry {\code {setbuffer}}{189} -\entry {\code {setgid}}{518} -\entry {\code {setgrent}}{529} -\entry {\code {setgroups}}{519} -\entry {\code {sethostent}}{280} -\entry {\code {sethostid}}{534} -\entry {\code {sethostname}}{533} -\entry {\code {setitimer}}{383} -\entry {\code {setjmp}}{395} -\entry {\code {setlinebuf}}{189} -\entry {\code {setlocale}}{95} -\entry {\code {setnetent}}{316} -\entry {\code {setpgid}}{510} -\entry {\code {setpgrp}}{511} -\entry {\code {setpriority}}{390} -\entry {\code {setprotoent}}{286} -\entry {\code {setpwent}}{527} -\entry {\code {setregid}}{518} -\entry {\code {setreuid}}{517} -\entry {\code {setrlimit}}{388} -\entry {\code {setservent}}{283} -\entry {\code {setsid}}{509} -\entry {\code {setsockopt}}{313} -\entry {\code {setstate}}{352} -\entry {\code {settimeofday}}{373} -\entry {\code {setuid}}{517} -\entry {\code {setvbuf}}{187} -\entry {\code {shutdown}}{289} -\entry {\code {sigaction}}{416} -\entry {\code {sigaddset}}{442} -\entry {\code {sigblock}}{454} -\entry {\code {sigdelset}}{442} -\entry {\code {sigemptyset}}{441} -\entry {\code {sigfillset}}{441} -\entry {\code {siginterrupt}}{454} -\entry {\code {sigismember}}{442} -\entry {\code {siglongjmp}}{396} -\entry {\code {sigmask}}{454} -\entry {\code {signal}}{413} -\entry {\code {sigpause}}{454} -\entry {\code {sigpending}}{446} -\entry {\code {sigprocmask}}{442} -\entry {\code {sigsetjmp}}{396} -\entry {\code {sigsetmask}}{454} -\entry {\code {sigstack}}{455} -\entry {\code {sigsuspend}}{451} -\entry {\code {sigvec}}{454} -\entry {\code {sin}}{346} -\entry {\code {sinh}}{350} -\entry {\code {sleep}}{385} -\entry {\code {snprintf}}{156} -\entry {\code {socket}}{288} -\entry {\code {socketpair}}{290} -\entry {\code {sprintf}}{155} -\entry {\code {sqrt}}{349} -\entry {\code {srand}}{351} -\entry {\code {srandom}}{352} -\entry {\code {sscanf}}{177} -\entry {\code {ssignal}}{415} -\entry {\code {stat}}{245} -\entry {\code {stpcpy}}{65} -\entry {\code {strcasecmp}}{69} -\entry {\code {strcat}}{66} -\entry {\code {strchr}}{74} -\entry {\code {strcmp}}{69} -\entry {\code {strcoll}}{71} -\entry {\code {strcpy}}{65} -\entry {\code {strcspn}}{75} -\entry {\code {strdup}}{65} -\entry {\code {strerror}}{23} -\entry {\code {strftime}}{377} -\entry {\code {strlen}}{63} -\entry {\code {strncasecmp}}{69} -\entry {\code {strncat}}{66} -\entry {\code {strncmp}}{69} -\entry {\code {strncpy}}{65} -\entry {\code {strpbrk}}{75} -\entry {\code {strrchr}}{74} -\entry {\code {strsignal}}{412} -\entry {\code {strspn}}{75} -\entry {\code {strstr}}{74} -\entry {\code {strtod}}{364} -\entry {\code {strtok}}{76} -\entry {\code {strtol}}{362} -\entry {\code {strtoul}}{363} -\entry {\code {strxfrm}}{71} -\entry {\code {symlink}}{237} -\entry {\code {sysconf}}{541} -\entry {\code {system}}{475} +\entry {\code {S{\_}ISBLK}}{181} +\entry {\code {S{\_}ISCHR}}{181} +\entry {\code {S{\_}ISDIR}}{181} +\entry {\code {S{\_}ISFIFO}}{181} +\entry {\code {S{\_}ISLNK}}{181} +\entry {\code {S{\_}ISREG}}{181} +\entry {\code {S{\_}ISSOCK}}{181} +\entry {\code {scalb}}{285} +\entry {\code {scanf}}{119} +\entry {\code {seekdir}}{170} +\entry {\code {select}}{150} +\entry {\code {send}}{229} +\entry {\code {sendto}}{239} +\entry {\code {setbuf}}{130} +\entry {\code {setbuffer}}{130} +\entry {\code {setgid}}{477} +\entry {\code {setgrent}}{488} +\entry {\code {setgroups}}{478} +\entry {\code {sethostent}}{215} +\entry {\code {sethostid}}{492} +\entry {\code {sethostname}}{491} +\entry {\code {setitimer}}{330} +\entry {\code {setjmp}}{363} +\entry {\code {setlinebuf}}{130} +\entry {\code {setlocale}}{353} +\entry {\code {setnetent}}{248} +\entry {\code {setpgid}}{469} +\entry {\code {setpgrp}}{469} +\entry {\code {setpriority}}{336} +\entry {\code {setprotoent}}{220} +\entry {\code {setpwent}}{485} +\entry {\code {setregid}}{478} +\entry {\code {setreuid}}{477} +\entry {\code {setrlimit}}{334} +\entry {\code {setservent}}{218} +\entry {\code {setsid}}{468} +\entry {\code {setsockopt}}{245} +\entry {\code {setstate}}{281} +\entry {\code {settimeofday}}{320} +\entry {\code {setuid}}{476} +\entry {\code {setvbuf}}{129} +\entry {\code {shutdown}}{223} +\entry {\code {sigaction}}{380} +\entry {\code {sigaddset}}{404} +\entry {\code {sigaltstack}}{417} +\entry {\code {sigblock}}{415} +\entry {\code {sigdelset}}{404} +\entry {\code {sigemptyset}}{404} +\entry {\code {sigfillset}}{404} +\entry {\code {siginterrupt}}{415} +\entry {\code {sigismember}}{404} +\entry {\code {siglongjmp}}{364} +\entry {\code {sigmask}}{415} +\entry {\code {signal}}{378} +\entry {\code {sigpause}}{416} +\entry {\code {sigpending}}{408} +\entry {\code {sigprocmask}}{405} +\entry {\code {sigsetjmp}}{364} +\entry {\code {sigsetmask}}{415} +\entry {\code {sigstack}}{418} +\entry {\code {sigsuspend}}{412} +\entry {\code {sigvec}}{415} +\entry {\code {sin}}{276} +\entry {\code {sinh}}{279} +\entry {\code {sleep}}{331} +\entry {\code {snprintf}}{100} +\entry {\code {socket}}{222} +\entry {\code {socketpair}}{224} +\entry {\code {sprintf}}{100} +\entry {\code {sqrt}}{278} +\entry {\code {srand}}{281} +\entry {\code {srandom}}{281} +\entry {\code {sscanf}}{120} +\entry {\code {ssignal}}{380} +\entry {\code {stat}}{180} +\entry {\code {stpcpy}}{61} +\entry {\code {strcasecmp}}{64} +\entry {\code {strcat}}{62} +\entry {\code {strchr}}{68} +\entry {\code {strcmp}}{64} +\entry {\code {strcoll}}{66} +\entry {\code {strcpy}}{60} +\entry {\code {strcspn}}{70} +\entry {\code {strdup}}{61} +\entry {\code {strerror}}{22} +\entry {\code {strftime}}{324} +\entry {\code {strlen}}{59} +\entry {\code {strncasecmp}}{64} +\entry {\code {strncat}}{62} +\entry {\code {strncmp}}{65} +\entry {\code {strncpy}}{60} +\entry {\code {strpbrk}}{70} +\entry {\code {strrchr}}{69} +\entry {\code {strsignal}}{377} +\entry {\code {strspn}}{70} +\entry {\code {strstr}}{69} +\entry {\code {strtod}}{291} +\entry {\code {strtok}}{71} +\entry {\code {strtol}}{289} +\entry {\code {strtoul}}{289} +\entry {\code {strxfrm}}{66} +\entry {\code {symlink}}{172} +\entry {\code {sysconf}}{499} +\entry {\code {system}}{437} \initial {T} -\entry {\code {tan}}{347} -\entry {\code {tanh}}{350} -\entry {\code {tcdrain}}{339} -\entry {\code {tcflow}}{340} -\entry {\code {tcflush}}{340} -\entry {\code {tcgetattr}}{320} -\entry {\code {tcgetpgrp}}{511} -\entry {\code {tcsendbreak}}{339} -\entry {\code {tcsetattr}}{321} -\entry {\code {tcsetpgrp}}{512} -\entry {\code {telldir}}{234} -\entry {\code {TEMP{\_}FAILURE{\_}RETRY}}{433} -\entry {\code {tempnam}}{190} -\entry {\code {time}}{371} -\entry {\code {times}}{369} -\entry {\code {tmpfile}}{189} -\entry {\code {tmpnam}}{189} -\entry {\code {toascii}}{60} -\entry {\code {tolower}}{60} -\entry {\code {toupper}}{60} -\entry {\code {ttyname}}{317} -\entry {\code {tzset}}{381} +\entry {\code {tan}}{276} +\entry {\code {tanh}}{279} +\entry {\code {tcdrain}}{270} +\entry {\code {tcflow}}{271} +\entry {\code {tcflush}}{270} +\entry {\code {tcgetattr}}{252} +\entry {\code {tcgetpgrp}}{470} +\entry {\code {tcsendbreak}}{270} +\entry {\code {tcsetattr}}{252} +\entry {\code {tcsetpgrp}}{470} +\entry {\code {telldir}}{170} +\entry {\code {TEMP{\_}FAILURE{\_}RETRY}}{397} +\entry {\code {tempnam}}{193} +\entry {\code {time}}{318} +\entry {\code {times}}{317} +\entry {\code {tmpfile}}{192} +\entry {\code {tmpnam}}{192} +\entry {\code {toascii}}{55} +\entry {\code {tolower}}{55} +\entry {\code {toupper}}{55} +\entry {\code {ttyname}}{249} +\entry {\code {tzset}}{328} \initial {U} -\entry {\code {umask}}{252} -\entry {\code {uname}}{535} -\entry {\code {ungetc}}{145} -\entry {\code {unlink}}{238} -\entry {\code {utime}}{256} -\entry {\code {utimes}}{257} +\entry {\code {umask}}{186} +\entry {\code {uname}}{493} +\entry {\code {ungetc}}{90} +\entry {\code {unlink}}{173} +\entry {\code {utime}}{190} +\entry {\code {utimes}}{191} \initial {V} -\entry {\code {va{\_}alist}}{563} -\entry {\code {va{\_}arg}}{561} -\entry {\code {va{\_}dcl}}{563} -\entry {\code {va{\_}end}}{561} -\entry {\code {va{\_}start}}{561, 563} -\entry {\code {valloc}}{34} -\entry {\code {vasprintf}}{159} -\entry {\code {vfork}}{478} -\entry {\code {vfprintf}}{159} -\entry {\code {vfscanf}}{178} -\entry {\code {vprintf}}{159} -\entry {\code {vscanf}}{178} -\entry {\code {vsnprintf}}{159} -\entry {\code {vsprintf}}{159} -\entry {\code {vsscanf}}{178} +\entry {\code {va{\_}alist}}{518} +\entry {\code {va{\_}arg}}{516} +\entry {\code {va{\_}dcl}}{518} +\entry {\code {va{\_}end}}{517} +\entry {\code {va{\_}start}}{516, 518} +\entry {\code {valloc}}{31} +\entry {\code {vasprintf}}{103} +\entry {\code {vfork}}{440} +\entry {\code {vfprintf}}{103} +\entry {\code {vfscanf}}{120} +\entry {\code {vprintf}}{103} +\entry {\code {vscanf}}{120} +\entry {\code {vsnprintf}}{103} +\entry {\code {vsprintf}}{103} +\entry {\code {vsscanf}}{120} \initial {W} -\entry {\code {wait}}{483} -\entry {\code {wait3}}{486} -\entry {\code {wait4}}{486} -\entry {\code {waitpid}}{482} -\entry {\code {WCOREDUMP}}{485} -\entry {\code {wcstombs}}{85} -\entry {\code {wctomb}}{87} -\entry {\code {WEXITSTATUS}}{484} -\entry {\code {WIFEXITED}}{484} -\entry {\code {WIFSIGNALED}}{484} -\entry {\code {WIFSTOPPED}}{485} -\entry {\code {wordexp}}{122} -\entry {\code {wordfree}}{123} -\entry {\code {write}}{204} -\entry {\code {WSTOPSIG}}{485} -\entry {\code {WTERMSIG}}{485} +\entry {\code {wait}}{445} +\entry {\code {wait3}}{447} +\entry {\code {wait4}}{447} +\entry {\code {waitpid}}{443} +\entry {\code {WCOREDUMP}}{446} +\entry {\code {wcstombs}}{345} +\entry {\code {wctomb}}{346} +\entry {\code {WEXITSTATUS}}{446} +\entry {\code {WIFEXITED}}{446} +\entry {\code {WIFSIGNALED}}{446} +\entry {\code {WIFSTOPPED}}{446} +\entry {\code {wordexp}}{311} +\entry {\code {wordfree}}{312} +\entry {\code {write}}{141} +\entry {\code {WSTOPSIG}}{446} +\entry {\code {WTERMSIG}}{446} diff -ruN glibc-1.06/manual/libc.pg glibc-1.07/manual/libc.pg --- glibc-1.06/manual/libc.pg Mon May 17 17:03:26 1993 +++ glibc-1.07/manual/libc.pg Wed Dec 29 18:38:49 1993 @@ -1,5 +1,5 @@ \entry {gcc}{2}{\code {gcc}} -\entry {dirent.h}{8}{\code {dirent.h}} +\entry {dirent.h}{7}{\code {dirent.h}} \entry {fcntl.h}{8}{\code {fcntl.h}} \entry {grp.h}{8}{\code {grp.h}} \entry {limits.h}{8}{\code {limits.h}} @@ -8,219 +8,223 @@ \entry {sys/stat.h}{8}{\code {sys/stat.h}} \entry {sys/times.h}{8}{\code {sys/times.h}} \entry {termios.h}{8}{\code {termios.h}} +\entry {-lbsd-compat}{9}{\code {-lbsd-compat}} +\entry {bsd-compat}{9}{\code {bsd-compat}} \entry {errno.h}{13}{\code {errno.h}} \entry {errno.h}{13}{\code {errno.h}} \entry {errno.h}{14}{\code {errno.h}} -\entry {errno.h}{15}{\code {errno.h}} +\entry {errno.h}{14}{\code {errno.h}} +\entry {stdlib.h}{26}{\code {stdlib.h}} +\entry {stdlib.h}{28}{\code {stdlib.h}} \entry {stdlib.h}{29}{\code {stdlib.h}} \entry {stdlib.h}{30}{\code {stdlib.h}} -\entry {stdlib.h}{32}{\code {stdlib.h}} -\entry {stdlib.h}{33}{\code {stdlib.h}} -\entry {stdlib.h}{34}{\code {stdlib.h}} -\entry {malloc.h}{34}{\code {malloc.h}} -\entry {malloc.h}{35}{\code {malloc.h}} -\entry {malloc.h}{36}{\code {malloc.h}} -\entry {obstack.h}{38}{\code {obstack.h}} -\entry {stdlib.h}{51}{\code {stdlib.h}} -\entry {malloc.h}{54}{\code {malloc.h}} -\entry {malloc.c}{55}{\code {malloc.c}} -\entry {ctype.h}{57}{\code {ctype.h}} -\entry {ctype.h}{57}{\code {ctype.h}} -\entry {ctype.h}{59}{\code {ctype.h}} -\entry {string.h}{63}{\code {string.h}} +\entry {stdlib.h}{31}{\code {stdlib.h}} +\entry {malloc.h}{32}{\code {malloc.h}} +\entry {malloc.h}{32}{\code {malloc.h}} +\entry {malloc.h}{33}{\code {malloc.h}} +\entry {obstack.h}{35}{\code {obstack.h}} +\entry {stdlib.h}{47}{\code {stdlib.h}} +\entry {malloc.h}{50}{\code {malloc.h}} +\entry {malloc.c}{50}{\code {malloc.c}} +\entry {ctype.h}{53}{\code {ctype.h}} +\entry {ctype.h}{53}{\code {ctype.h}} +\entry {ctype.h}{55}{\code {ctype.h}} +\entry {string.h}{59}{\code {string.h}} +\entry {string.h}{59}{\code {string.h}} \entry {string.h}{63}{\code {string.h}} +\entry {string.h}{65}{\code {string.h}} \entry {string.h}{68}{\code {string.h}} -\entry {string.h}{70}{\code {string.h}} -\entry {string.h}{73}{\code {string.h}} -\entry {string.h}{76}{\code {string.h}} -\entry {limits.h}{83}{\code {limits.h}} -\entry {stdlib.h}{83}{\code {stdlib.h}} -\entry {stddef.h}{84}{\code {stddef.h}} -\entry {stdlib.h}{84}{\code {stdlib.h}} -\entry {stdlib.h}{86}{\code {stdlib.h}} -\entry {stdlib.h}{86}{\code {stdlib.h}} -\entry {locale.h}{95}{\code {locale.h}} -\entry {locale.h}{98}{\code {locale.h}} -\entry {stdlib.h}{104}{\code {stdlib.h}} -\entry {stdlib.h}{104}{\code {stdlib.h}} -\entry {fnmatch.h}{109}{\code {fnmatch.h}} -\entry {stdio.h}{135}{\code {stdio.h}} +\entry {string.h}{71}{\code {string.h}} +\entry {stdio.h}{81}{\code {stdio.h}} +\entry {stdio.h}{81}{\code {stdio.h}} +\entry {stdio.h}{82}{\code {stdio.h}} +\entry {stdio.h}{85}{\code {stdio.h}} +\entry {stdio.h}{86}{\code {stdio.h}} +\entry {stdio.h}{100}{\code {stdio.h}} +\entry {stdio.h}{103}{\code {stdio.h}} +\entry {printf.h}{108}{\code {printf.h}} +\entry {printf.h}{108}{\code {printf.h}} +\entry {stdio.h}{119}{\code {stdio.h}} +\entry {stdio.h}{121}{\code {stdio.h}} +\entry {stdio.h}{122}{\code {stdio.h}} +\entry {stdio.h}{124}{\code {stdio.h}} +\entry {stdio.h}{126}{\code {stdio.h}} +\entry {stdio.h}{128}{\code {stdio.h}} +\entry {stdio.h}{129}{\code {stdio.h}} +\entry {stdio.h}{131}{\code {stdio.h}} \entry {stdio.h}{135}{\code {stdio.h}} -\entry {stdio.h}{136}{\code {stdio.h}} -\entry {stdio.h}{139}{\code {stdio.h}} -\entry {stdio.h}{140}{\code {stdio.h}} -\entry {stdio.h}{155}{\code {stdio.h}} -\entry {stdio.h}{158}{\code {stdio.h}} -\entry {printf.h}{164}{\code {printf.h}} -\entry {printf.h}{165}{\code {printf.h}} -\entry {stdio.h}{176}{\code {stdio.h}} -\entry {stdio.h}{178}{\code {stdio.h}} -\entry {stdio.h}{179}{\code {stdio.h}} -\entry {stdio.h}{181}{\code {stdio.h}} -\entry {stdio.h}{183}{\code {stdio.h}} -\entry {stdio.h}{186}{\code {stdio.h}} -\entry {stdio.h}{186}{\code {stdio.h}} -\entry {stdio.h}{189}{\code {stdio.h}} -\entry {stdio.h}{191}{\code {stdio.h}} -\entry {stdio.h}{195}{\code {stdio.h}} -\entry {unistd.h}{199}{\code {unistd.h}} -\entry {fcntl.h}{199}{\code {fcntl.h}} -\entry {unistd.h}{202}{\code {unistd.h}} -\entry {stdio.h}{207}{\code {stdio.h}} -\entry {unistd.h}{208}{\code {unistd.h}} -\entry {sys/types.h}{211}{\code {sys/types.h}} -\entry {fcntl.h}{214}{\code {fcntl.h}} -\entry {unistd.h}{216}{\code {unistd.h}} -\entry {fcntl.h}{216}{\code {fcntl.h}} -\entry {fcntl.h}{218}{\code {fcntl.h}} -\entry {fcntl.h}{220}{\code {fcntl.h}} -\entry {fcntl.h}{223}{\code {fcntl.h}} -\entry {fcntl.h}{226}{\code {fcntl.h}} -\entry {cd}{229}{\code {cd}} -\entry {unistd.h}{229}{\code {unistd.h}} -\entry {dirent.h}{231}{\code {dirent.h}} -\entry {dirent.h}{232}{\code {dirent.h}} -\entry {dirent.h}{233}{\code {dirent.h}} -\entry {dirent.h}{234}{\code {dirent.h}} -\entry {unistd.h}{235}{\code {unistd.h}} -\entry {unistd.h}{237}{\code {unistd.h}} -\entry {unistd.h}{238}{\code {unistd.h}} -\entry {stdio.h}{239}{\code {stdio.h}} -\entry {unistd.h}{239}{\code {unistd.h}} -\entry {mkdir}{241}{\code {mkdir}} -\entry {sys/stat.h}{242}{\code {sys/stat.h}} -\entry {ls}{242}{\code {ls}} -\entry {sys/stat.h}{242}{\code {sys/stat.h}} -\entry {sys/stat.h}{246}{\code {sys/stat.h}} -\entry {chown}{248}{\code {chown}} -\entry {chgrp}{248}{\code {chgrp}} -\entry {unistd.h}{248}{\code {unistd.h}} -\entry {sys/stat.h}{249}{\code {sys/stat.h}} -\entry {chmod}{251}{\code {chmod}} -\entry {umask}{251}{\code {umask}} -\entry {sys/stat.h}{252}{\code {sys/stat.h}} -\entry {unistd.h}{254}{\code {unistd.h}} -\entry {unistd.h}{255}{\code {unistd.h}} -\entry {time.h}{255}{\code {time.h}} -\entry {utime.h}{256}{\code {utime.h}} -\entry {sys/time.h}{257}{\code {sys/time.h}} -\entry {sys/stat.h}{257}{\code {sys/stat.h}} -\entry {unistd.h}{259}{\code {unistd.h}} -\entry {sys/stat.h}{263}{\code {sys/stat.h}} -\entry {sys/socket.h}{266}{\code {sys/socket.h}} -\entry {sys/socket.h}{268}{\code {sys/socket.h}} -\entry {sys/socket.h}{269}{\code {sys/socket.h}} -\entry {sys/socket.h}{270}{\code {sys/socket.h}} -\entry {sys/socket.h}{272}{\code {sys/socket.h}} -\entry {sys/un.h}{272}{\code {sys/un.h}} -\entry {sys/socket.h}{274}{\code {sys/socket.h}} -\entry {netinet/in.h}{275}{\code {netinet/in.h}} -\entry {netinet/in.h}{277}{\code {netinet/in.h}} -\entry {arpa/inet.h}{277}{\code {arpa/inet.h}} -\entry {/etc/hosts}{278}{\code {/etc/hosts}} -\entry {netdb.h}{278}{\code {netdb.h}} -\entry {netinet/in.h}{281}{\code {netinet/in.h}} -\entry {/etc/services}{282}{\code {/etc/services}} -\entry {netdb.h}{282}{\code {netdb.h}} -\entry {netinet/in.h}{284}{\code {netinet/in.h}} -\entry {/etc/protocols}{284}{\code {/etc/protocols}} -\entry {netdb.h}{285}{\code {netdb.h}} -\entry {sys/socket.h}{288}{\code {sys/socket.h}} -\entry {sys/socket.h}{289}{\code {sys/socket.h}} -\entry {sys/socket.h}{290}{\code {sys/socket.h}} -\entry {sys/socket.h}{295}{\code {sys/socket.h}} -\entry {sys/socket.h}{296}{\code {sys/socket.h}} -\entry {sys/socket.h}{297}{\code {sys/socket.h}} -\entry {sys/socket.h}{305}{\code {sys/socket.h}} -\entry {sys/socket.h}{312}{\code {sys/socket.h}} -\entry {sys/socket.h}{313}{\code {sys/socket.h}} -\entry {/etc/networks}{314}{\code {/etc/networks}} -\entry {netdb.h}{314}{\code {netdb.h}} -\entry {unistd.h}{317}{\code {unistd.h}} -\entry {termios.h}{319}{\code {termios.h}} -\entry {math.h}{345}{\code {math.h}} -\entry {stdlib.h}{351}{\code {stdlib.h}} -\entry {stdlib.h}{352}{\code {stdlib.h}} -\entry {math.h}{355}{\code {math.h}} -\entry {math.h}{356}{\code {math.h}} -\entry {stdlib.h}{356}{\code {stdlib.h}} -\entry {math.h}{357}{\code {math.h}} -\entry {math.h}{359}{\code {math.h}} -\entry {stdlib.h}{360}{\code {stdlib.h}} -\entry {stdlib.h}{362}{\code {stdlib.h}} -\entry {stdlib.h}{364}{\code {stdlib.h}} -\entry {time.h}{367}{\code {time.h}} -\entry {sys/times.h}{369}{\code {sys/times.h}} -\entry {time.h}{370}{\code {time.h}} -\entry {sys/time.h}{371}{\code {sys/time.h}} -\entry {time.h}{376}{\code {time.h}} -\entry {time.h}{378}{\code {time.h}} -\entry {unistd.h}{383}{\code {unistd.h}} -\entry {sys/time.h}{383}{\code {sys/time.h}} -\entry {sys/resource.h}{386}{\code {sys/resource.h}} -\entry {sys/resource.h}{387}{\code {sys/resource.h}} -\entry {sys/resource.h}{389}{\code {sys/resource.h}} -\entry {setjmp.h}{395}{\code {setjmp.h}} -\entry {setjmp.h}{396}{\code {setjmp.h}} -\entry {signal.h}{402}{\code {signal.h}} -\entry {kill}{406}{\code {kill}} -\entry {string.h}{411}{\code {string.h}} -\entry {stdio.h}{412}{\code {stdio.h}} -\entry {signal.h}{412}{\code {signal.h}} -\entry {signal.h}{415}{\code {signal.h}} -\entry {signal.h}{418}{\code {signal.h}} -\entry {signal.h}{434}{\code {signal.h}} -\entry {signal.h}{436}{\code {signal.h}} -\entry {signal.h}{441}{\code {signal.h}} -\entry {signal.h}{442}{\code {signal.h}} -\entry {signal.h}{446}{\code {signal.h}} -\entry {signal.h}{453}{\code {signal.h}} -\entry {unistd.h}{459}{\code {unistd.h}} -\entry {stdlib.h}{467}{\code {stdlib.h}} -\entry {stdlib.h}{471}{\code {stdlib.h}} -\entry {stdlib.h}{473}{\code {stdlib.h}} -\entry {unistd.h}{473}{\code {unistd.h}} -\entry {sh}{475}{\code {sh}} -\entry {stdlib.h}{475}{\code {stdlib.h}} -\entry {sys/types.h}{477}{\code {sys/types.h}} -\entry {unistd.h}{477}{\code {unistd.h}} +\entry {unistd.h}{137}{\code {unistd.h}} +\entry {fcntl.h}{137}{\code {fcntl.h}} +\entry {unistd.h}{140}{\code {unistd.h}} +\entry {stdio.h}{145}{\code {stdio.h}} +\entry {unistd.h}{146}{\code {unistd.h}} +\entry {sys/types.h}{149}{\code {sys/types.h}} +\entry {fcntl.h}{152}{\code {fcntl.h}} +\entry {unistd.h}{153}{\code {unistd.h}} +\entry {fcntl.h}{153}{\code {fcntl.h}} +\entry {fcntl.h}{155}{\code {fcntl.h}} +\entry {fcntl.h}{156}{\code {fcntl.h}} +\entry {fcntl.h}{159}{\code {fcntl.h}} +\entry {fcntl.h}{162}{\code {fcntl.h}} +\entry {cd}{165}{\code {cd}} +\entry {unistd.h}{165}{\code {unistd.h}} +\entry {dirent.h}{167}{\code {dirent.h}} +\entry {dirent.h}{168}{\code {dirent.h}} +\entry {dirent.h}{168}{\code {dirent.h}} +\entry {dirent.h}{170}{\code {dirent.h}} +\entry {unistd.h}{170}{\code {unistd.h}} +\entry {unistd.h}{172}{\code {unistd.h}} +\entry {unistd.h}{173}{\code {unistd.h}} +\entry {stdio.h}{174}{\code {stdio.h}} +\entry {unistd.h}{174}{\code {unistd.h}} +\entry {mkdir}{176}{\code {mkdir}} +\entry {sys/stat.h}{177}{\code {sys/stat.h}} +\entry {ls}{177}{\code {ls}} +\entry {sys/stat.h}{177}{\code {sys/stat.h}} +\entry {sys/stat.h}{181}{\code {sys/stat.h}} +\entry {chown}{182}{\code {chown}} +\entry {chgrp}{182}{\code {chgrp}} +\entry {unistd.h}{183}{\code {unistd.h}} +\entry {sys/stat.h}{184}{\code {sys/stat.h}} +\entry {chmod}{186}{\code {chmod}} +\entry {umask}{186}{\code {umask}} +\entry {sys/stat.h}{186}{\code {sys/stat.h}} +\entry {unistd.h}{188}{\code {unistd.h}} +\entry {unistd.h}{189}{\code {unistd.h}} +\entry {time.h}{189}{\code {time.h}} +\entry {utime.h}{190}{\code {utime.h}} +\entry {sys/time.h}{191}{\code {sys/time.h}} +\entry {sys/stat.h}{191}{\code {sys/stat.h}} +\entry {stdio.h}{192}{\code {stdio.h}} +\entry {unistd.h}{195}{\code {unistd.h}} +\entry {sys/stat.h}{199}{\code {sys/stat.h}} +\entry {sys/socket.h}{202}{\code {sys/socket.h}} +\entry {sys/socket.h}{204}{\code {sys/socket.h}} +\entry {sys/socket.h}{205}{\code {sys/socket.h}} +\entry {sys/socket.h}{206}{\code {sys/socket.h}} +\entry {sys/socket.h}{207}{\code {sys/socket.h}} +\entry {sys/un.h}{207}{\code {sys/un.h}} +\entry {sys/socket.h}{209}{\code {sys/socket.h}} +\entry {netinet/in.h}{210}{\code {netinet/in.h}} +\entry {netinet/in.h}{212}{\code {netinet/in.h}} +\entry {arpa/inet.h}{212}{\code {arpa/inet.h}} +\entry {/etc/hosts}{213}{\code {/etc/hosts}} +\entry {netdb.h}{213}{\code {netdb.h}} +\entry {netinet/in.h}{216}{\code {netinet/in.h}} +\entry {/etc/services}{217}{\code {/etc/services}} +\entry {netdb.h}{217}{\code {netdb.h}} +\entry {netinet/in.h}{218}{\code {netinet/in.h}} +\entry {/etc/protocols}{219}{\code {/etc/protocols}} +\entry {netdb.h}{219}{\code {netdb.h}} +\entry {sys/socket.h}{222}{\code {sys/socket.h}} +\entry {sys/socket.h}{223}{\code {sys/socket.h}} +\entry {sys/socket.h}{224}{\code {sys/socket.h}} +\entry {sys/socket.h}{229}{\code {sys/socket.h}} +\entry {sys/socket.h}{230}{\code {sys/socket.h}} +\entry {sys/socket.h}{231}{\code {sys/socket.h}} +\entry {sys/socket.h}{239}{\code {sys/socket.h}} +\entry {sys/socket.h}{244}{\code {sys/socket.h}} +\entry {sys/socket.h}{245}{\code {sys/socket.h}} +\entry {/etc/networks}{247}{\code {/etc/networks}} +\entry {netdb.h}{247}{\code {netdb.h}} +\entry {unistd.h}{249}{\code {unistd.h}} +\entry {termios.h}{251}{\code {termios.h}} +\entry {math.h}{275}{\code {math.h}} +\entry {stdlib.h}{280}{\code {stdlib.h}} +\entry {stdlib.h}{281}{\code {stdlib.h}} +\entry {math.h}{283}{\code {math.h}} +\entry {math.h}{284}{\code {math.h}} +\entry {stdlib.h}{284}{\code {stdlib.h}} +\entry {math.h}{285}{\code {math.h}} +\entry {math.h}{286}{\code {math.h}} +\entry {stdlib.h}{287}{\code {stdlib.h}} +\entry {stdlib.h}{289}{\code {stdlib.h}} +\entry {stdlib.h}{290}{\code {stdlib.h}} +\entry {stdlib.h}{293}{\code {stdlib.h}} +\entry {stdlib.h}{294}{\code {stdlib.h}} +\entry {fnmatch.h}{299}{\code {fnmatch.h}} +\entry {time.h}{315}{\code {time.h}} +\entry {sys/times.h}{316}{\code {sys/times.h}} +\entry {time.h}{318}{\code {time.h}} +\entry {sys/time.h}{318}{\code {sys/time.h}} +\entry {time.h}{323}{\code {time.h}} +\entry {time.h}{326}{\code {time.h}} +\entry {unistd.h}{329}{\code {unistd.h}} +\entry {sys/time.h}{329}{\code {sys/time.h}} +\entry {sys/resource.h}{332}{\code {sys/resource.h}} +\entry {sys/resource.h}{334}{\code {sys/resource.h}} +\entry {sys/resource.h}{335}{\code {sys/resource.h}} +\entry {limits.h}{342}{\code {limits.h}} +\entry {stdlib.h}{342}{\code {stdlib.h}} +\entry {stddef.h}{343}{\code {stddef.h}} +\entry {stdlib.h}{344}{\code {stdlib.h}} +\entry {stdlib.h}{345}{\code {stdlib.h}} +\entry {stdlib.h}{346}{\code {stdlib.h}} +\entry {locale.h}{353}{\code {locale.h}} +\entry {locale.h}{355}{\code {locale.h}} +\entry {setjmp.h}{362}{\code {setjmp.h}} +\entry {setjmp.h}{364}{\code {setjmp.h}} +\entry {signal.h}{367}{\code {signal.h}} +\entry {kill}{372}{\code {kill}} +\entry {string.h}{377}{\code {string.h}} +\entry {stdio.h}{377}{\code {stdio.h}} +\entry {signal.h}{377}{\code {signal.h}} +\entry {signal.h}{380}{\code {signal.h}} +\entry {signal.h}{383}{\code {signal.h}} +\entry {signal.h}{398}{\code {signal.h}} +\entry {signal.h}{399}{\code {signal.h}} +\entry {signal.h}{403}{\code {signal.h}} +\entry {signal.h}{405}{\code {signal.h}} +\entry {signal.h}{408}{\code {signal.h}} +\entry {signal.h}{414}{\code {signal.h}} +\entry {unistd.h}{421}{\code {unistd.h}} +\entry {stdlib.h}{428}{\code {stdlib.h}} +\entry {stdlib.h}{432}{\code {stdlib.h}} +\entry {stdlib.h}{434}{\code {stdlib.h}} +\entry {unistd.h}{434}{\code {unistd.h}} +\entry {sh}{437}{\code {sh}} +\entry {stdlib.h}{437}{\code {stdlib.h}} +\entry {sys/types.h}{438}{\code {sys/types.h}} +\entry {unistd.h}{438}{\code {unistd.h}} +\entry {unistd.h}{439}{\code {unistd.h}} +\entry {unistd.h}{440}{\code {unistd.h}} +\entry {sys/wait.h}{443}{\code {sys/wait.h}} +\entry {sys/wait.h}{446}{\code {sys/wait.h}} +\entry {sys/wait.h}{447}{\code {sys/wait.h}} +\entry {stdio.h}{467}{\code {stdio.h}} +\entry {unistd.h}{468}{\code {unistd.h}} +\entry {sys/types.h}{468}{\code {sys/types.h}} +\entry {-lbsd-compat}{469}{\code {-lbsd-compat}} +\entry {bsd-compat}{469}{\code {bsd-compat}} +\entry {unistd.h}{470}{\code {unistd.h}} +\entry {sys/types.h}{470}{\code {sys/types.h}} +\entry {unistd.h}{475}{\code {unistd.h}} +\entry {sys/types.h}{475}{\code {sys/types.h}} +\entry {unistd.h}{476}{\code {unistd.h}} +\entry {sys/types.h}{476}{\code {sys/types.h}} \entry {unistd.h}{477}{\code {unistd.h}} -\entry {unistd.h}{479}{\code {unistd.h}} -\entry {sys/wait.h}{482}{\code {sys/wait.h}} -\entry {sys/wait.h}{484}{\code {sys/wait.h}} -\entry {sys/wait.h}{485}{\code {sys/wait.h}} -\entry {stdio.h}{509}{\code {stdio.h}} -\entry {unistd.h}{509}{\code {unistd.h}} -\entry {sys/types.h}{509}{\code {sys/types.h}} -\entry {unistd.h}{511}{\code {unistd.h}} -\entry {sys/types.h}{511}{\code {sys/types.h}} -\entry {unistd.h}{515}{\code {unistd.h}} -\entry {sys/types.h}{515}{\code {sys/types.h}} -\entry {unistd.h}{517}{\code {unistd.h}} -\entry {sys/types.h}{517}{\code {sys/types.h}} -\entry {unistd.h}{518}{\code {unistd.h}} -\entry {sys/types.h}{518}{\code {sys/types.h}} -\entry {grp.h}{519}{\code {grp.h}} -\entry {stdio.h}{524}{\code {stdio.h}} -\entry {unistd.h}{524}{\code {unistd.h}} -\entry {/etc/passwd}{525}{\code {/etc/passwd}} -\entry {pwd.h}{525}{\code {pwd.h}} -\entry {/etc/group}{528}{\code {/etc/group}} -\entry {grp.h}{528}{\code {grp.h}} -\entry {hostname}{533}{\code {hostname}} -\entry {hostid}{533}{\code {hostid}} -\entry {unistd.h}{533}{\code {unistd.h}} -\entry {sys/param.h}{533}{\code {sys/param.h}} -\entry {sys/utsname.h}{534}{\code {sys/utsname.h}} -\entry {limits.h}{537}{\code {limits.h}} -\entry {unistd.h}{539}{\code {unistd.h}} -\entry {limits.h}{545}{\code {limits.h}} -\entry {unistd.h}{547}{\code {unistd.h}} -\entry {unistd.h}{548}{\code {unistd.h}} -\entry {assert.h}{555}{\code {assert.h}} -\entry {stdarg.h}{558}{\code {stdarg.h}} -\entry {stdarg.h}{561}{\code {stdarg.h}} -\entry {varargs.h}{563}{\code {varargs.h}} -\entry {stddef.h}{564}{\code {stddef.h}} -\entry {limits.h}{565}{\code {limits.h}} -\entry {float.h}{569}{\code {float.h}} +\entry {sys/types.h}{477}{\code {sys/types.h}} +\entry {grp.h}{478}{\code {grp.h}} +\entry {stdio.h}{483}{\code {stdio.h}} +\entry {unistd.h}{483}{\code {unistd.h}} +\entry {/etc/passwd}{484}{\code {/etc/passwd}} +\entry {pwd.h}{484}{\code {pwd.h}} +\entry {/etc/group}{486}{\code {/etc/group}} +\entry {grp.h}{486}{\code {grp.h}} +\entry {hostname}{491}{\code {hostname}} +\entry {hostid}{491}{\code {hostid}} +\entry {unistd.h}{491}{\code {unistd.h}} +\entry {sys/param.h}{491}{\code {sys/param.h}} +\entry {sys/utsname.h}{492}{\code {sys/utsname.h}} +\entry {limits.h}{495}{\code {limits.h}} +\entry {unistd.h}{496}{\code {unistd.h}} +\entry {limits.h}{503}{\code {limits.h}} +\entry {unistd.h}{504}{\code {unistd.h}} +\entry {unistd.h}{505}{\code {unistd.h}} +\entry {assert.h}{511}{\code {assert.h}} +\entry {stdarg.h}{514}{\code {stdarg.h}} +\entry {stdarg.h}{516}{\code {stdarg.h}} +\entry {varargs.h}{518}{\code {varargs.h}} +\entry {stddef.h}{519}{\code {stddef.h}} +\entry {limits.h}{520}{\code {limits.h}} +\entry {float.h}{524}{\code {float.h}} diff -ruN glibc-1.06/manual/libc.pgs glibc-1.07/manual/libc.pgs --- glibc-1.06/manual/libc.pgs Mon May 17 16:59:14 1993 +++ glibc-1.07/manual/libc.pgs Wed Dec 29 18:34:48 1993 @@ -1,77 +1,81 @@ +\initial {-} +\entry {\code {-lbsd-compat}}{9, 469} \initial {/} -\entry {\code {/etc/group}}{528} -\entry {\code {/etc/hosts}}{278} -\entry {\code {/etc/networks}}{315} -\entry {\code {/etc/passwd}}{525} -\entry {\code {/etc/protocols}}{285} -\entry {\code {/etc/services}}{282} +\entry {\code {/etc/group}}{486} +\entry {\code {/etc/hosts}}{213} +\entry {\code {/etc/networks}}{247} +\entry {\code {/etc/passwd}}{484} +\entry {\code {/etc/protocols}}{219} +\entry {\code {/etc/services}}{217} \initial {A} -\entry {\code {arpa/inet.h}}{277} -\entry {\code {assert.h}}{555} +\entry {\code {arpa/inet.h}}{212} +\entry {\code {assert.h}}{511} +\initial {B} +\entry {\code {bsd-compat}}{9, 469} \initial {C} -\entry {\code {cd}}{229} -\entry {\code {chgrp}}{248} -\entry {\code {chmod}}{251} -\entry {\code {chown}}{248} -\entry {\code {ctype.h}}{57, 59} +\entry {\code {cd}}{165} +\entry {\code {chgrp}}{182} +\entry {\code {chmod}}{186} +\entry {\code {chown}}{182} +\entry {\code {ctype.h}}{53, 55} \initial {D} -\entry {\code {dirent.h}}{8, 231, 232, 233, 234} +\entry {\code {dirent.h}}{7, 167, 168, 170} \initial {E} -\entry {\code {errno.h}}{13, 14, 15} +\entry {\code {errno.h}}{13, 14} \initial {F} -\entry {\code {fcntl.h}}{8, 199, 214, 216, 218, 220, 223, 226} -\entry {\code {float.h}}{569} -\entry {\code {fnmatch.h}}{109} +\entry {\code {fcntl.h}}{8, 137, 152, 153, 155, 156, 159, 162} +\entry {\code {float.h}}{524} +\entry {\code {fnmatch.h}}{299} \initial {G} \entry {\code {gcc}}{2} -\entry {\code {grp.h}}{8, 519, 528} +\entry {\code {grp.h}}{8, 478, 486} \initial {H} -\entry {\code {hostid}}{533} -\entry {\code {hostname}}{533} +\entry {\code {hostid}}{491} +\entry {\code {hostname}}{491} \initial {K} -\entry {\code {kill}}{406} +\entry {\code {kill}}{372} \initial {L} -\entry {\code {limits.h}}{8, 83, 537, 545, 565} -\entry {\code {locale.h}}{95, 98} -\entry {\code {ls}}{242} +\entry {\code {limits.h}}{8, 342, 495, 503, 520} +\entry {\code {locale.h}}{353, 355} +\entry {\code {ls}}{177} \initial {M} -\entry {\code {malloc.c}}{55} -\entry {\code {malloc.h}}{34, 35, 36, 54} -\entry {\code {math.h}}{345, 355, 356, 357, 359} -\entry {\code {mkdir}}{241} +\entry {\code {malloc.c}}{50} +\entry {\code {malloc.h}}{32, 33, 50} +\entry {\code {math.h}}{275, 283, 284, 285, 286} +\entry {\code {mkdir}}{176} \initial {N} -\entry {\code {netdb.h}}{278, 282, 285, 315} -\entry {\code {netinet/in.h}}{275, 277, 281, 284} +\entry {\code {netdb.h}}{213, 217, 219, 247} +\entry {\code {netinet/in.h}}{210, 212, 216, 218} \initial {O} -\entry {\code {obstack.h}}{38} +\entry {\code {obstack.h}}{35} \initial {P} -\entry {\code {printf.h}}{164, 165} -\entry {\code {pwd.h}}{8, 525} +\entry {\code {printf.h}}{108} +\entry {\code {pwd.h}}{8, 484} \initial {S} -\entry {\code {setjmp.h}}{395, 396} -\entry {\code {sh}}{475} -\entry {\code {signal.h}}{8, 402, 413, 415, 419, 435, 436, 441, 442, 446, 453} -\entry {\code {stdarg.h}}{558, 561} -\entry {\code {stddef.h}}{84, 564} -\entry {\code {stdio.h}}{135, 136, 139, 140, 155, 159, 177, 179, 180, 182, 184, 186, 187, 189, 191, 195, 208, 239, 412, 509, 524} -\entry {\code {stdlib.h}}{29, 30, 32, 33, 34, 51, 83, 84, 86, 104, 351, 352, 356, 360, 362, 364, 467, 471, 473, 475} -\entry {\code {string.h}}{63, 68, 70, 74, 76, 412} -\entry {\code {sys/param.h}}{533} -\entry {\code {sys/resource.h}}{386, 387, 389} -\entry {\code {sys/socket.h}}{266, 268, 269, 270, 272, 274, 288, 289, 290, 295, 296, 297, 305, 312, 313} -\entry {\code {sys/stat.h}}{8, 242, 246, 249, 252, 257, 263} -\entry {\code {sys/time.h}}{257, 371, 383} -\entry {\code {sys/times.h}}{9, 369} -\entry {\code {sys/types.h}}{211, 477, 509, 511, 515, 517, 518} -\entry {\code {sys/un.h}}{272} -\entry {\code {sys/utsname.h}}{534} -\entry {\code {sys/wait.h}}{482, 484, 485} +\entry {\code {setjmp.h}}{362, 364} +\entry {\code {sh}}{437} +\entry {\code {signal.h}}{8, 367, 377, 380, 383, 398, 399, 403, 405, 408, 414} +\entry {\code {stdarg.h}}{514, 516} +\entry {\code {stddef.h}}{343, 519} +\entry {\code {stdio.h}}{81, 82, 85, 86, 100, 103, 119, 121, 122, 124, 126, 128, 129, 131, 135, 145, 174, 192, 377, 467, 483} +\entry {\code {stdlib.h}}{26, 28, 29, 30, 31, 47, 280, 281, 284, 287, 289, 290, 293, 294, 342, 344, 345, 346, 428, 432, 434, 437} +\entry {\code {string.h}}{59, 63, 65, 68, 71, 377} +\entry {\code {sys/param.h}}{491} +\entry {\code {sys/resource.h}}{332, 334, 335} +\entry {\code {sys/socket.h}}{202, 204, 205, 206, 207, 209, 222, 223, 224, 229, 230, 231, 239, 244, 245} +\entry {\code {sys/stat.h}}{8, 177, 181, 184, 186, 191, 199} +\entry {\code {sys/time.h}}{191, 318, 329} +\entry {\code {sys/times.h}}{8, 316} +\entry {\code {sys/types.h}}{149, 438, 468, 470, 475, 476, 477} +\entry {\code {sys/un.h}}{207} +\entry {\code {sys/utsname.h}}{492} +\entry {\code {sys/wait.h}}{443, 446, 447} \initial {T} -\entry {\code {termios.h}}{9, 319} -\entry {\code {time.h}}{255, 367, 370, 376, 378} +\entry {\code {termios.h}}{8, 251} +\entry {\code {time.h}}{189, 315, 318, 323, 326} \initial {U} -\entry {\code {umask}}{251} -\entry {\code {unistd.h}}{199, 202, 208, 216, 229, 235, 237, 238, 239, 248, 254, 255, 259, 317, 383, 459, 473, 477, 479, 509, 511, 515, 517, 518, 524, 533, 539, 547, 548} -\entry {\code {utime.h}}{256} +\entry {\code {umask}}{186} +\entry {\code {unistd.h}}{137, 140, 146, 153, 165, 170, 172, 173, 174, 183, 188, 189, 195, 249, 329, 421, 434, 438, 439, 440, 468, 470, 475, 476, 477, 483, 491, 496, 504, 505} +\entry {\code {utime.h}}{190} \initial {V} -\entry {\code {varargs.h}}{563} +\entry {\code {varargs.h}}{518} diff -ruN glibc-1.06/manual/libc.texinfo glibc-1.07/manual/libc.texinfo --- glibc-1.06/manual/libc.texinfo Wed May 19 19:51:59 1993 +++ glibc-1.07/manual/libc.texinfo Mon Aug 30 15:25:47 1993 @@ -5,9 +5,14 @@ @setchapternewpage odd @comment %**end of header (This is for running Texinfo on a region.) -@set EDITION 0.03 -@set VERSION 1.06 Beta -@set UPDATED 19 May 1993 +@c This tells texinfo.tex to use the real section titles in xrefs in +@c place of the node name, when no section title is explicitly given. +@set xref-automatic-section-title +@smallbook + +@set EDITION 0.05 +@set VERSION 1.07 Beta +@set UPDATED 30 August 1993 @ifinfo This file documents the GNU C library. @@ -54,6 +59,8 @@ @center with @center Roland McGrath, Andrew Oram, and Richard M. Stallman @sp 3 +@center Edition @value{EDITION} +@sp 1 @center last updated @value{UPDATED} @sp 1 @center for version @value{VERSION} @@ -60,6 +67,28 @@ @page @vskip 0pt plus 1filll Copyright @copyright{} 1993 Free Software Foundation, Inc. +@sp 2 +Published by the Free Software Foundation @* +675 Massachusetts Avenue, @* +Cambridge, MA 02139 USA @* +Printed copies are available for $50 each. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided also that the +section entitled ``GNU Library General Public License'' is included +exactly as in the original, and provided that the entire resulting +derived work is distributed under the terms of a permission notice +identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that the text of the translation of the section entitled ``GNU +Library General Public License'' must be approved for accuracy by the +Foundation. @end titlepage @page @@ -914,10 +943,6 @@ @include memory.texi @include ctype.texi @include string.texi -@include mbyte.texi -@include locale.texi -@include search.texi -@include pattern.texi @include io.texi @include stdio.texi @include llio.texi @@ -927,7 +952,11 @@ @include terminal.texi @include math.texi @include arith.texi +@include search.texi +@include pattern.texi @include time.texi +@include mbyte.texi +@include locale.texi @include setjmp.texi @include signal.texi @include startup.texi diff -ruN glibc-1.06/manual/libc.tp glibc-1.07/manual/libc.tp --- glibc-1.06/manual/libc.tp Mon May 17 17:03:26 1993 +++ glibc-1.07/manual/libc.tp Wed Dec 29 18:38:49 1993 @@ -1,75 +1,76 @@ -\entry {struct}{36}{\code {struct}} -\entry {struct}{38}{\code {struct}} -\entry {wchar{\_}t}{84}{\code {wchar{\_}t}} -\entry {struct}{98}{\code {struct}} -\entry {comparison{\_}fn{\_}t}{103}{\code {comparison{\_}fn{\_}t}} -\entry {glob{\_}t}{110}{\code {glob{\_}t}} -\entry {regex{\_}t}{114}{\code {regex{\_}t}} -\entry {regmatch{\_}t}{117}{\code {regmatch{\_}t}} -\entry {regoff{\_}t}{118}{\code {regoff{\_}t}} -\entry {wordexp{\_}t}{121}{\code {wordexp{\_}t}} -\entry {FILE}{135}{\code {FILE}} -\entry {struct}{165}{\code {struct}} -\entry {printf{\_}function}{167}{\code {printf{\_}function}} -\entry {printf{\_}arginfo{\_}function}{167}{\code {printf{\_}arginfo{\_}function}} -\entry {fpos{\_}t}{183}{\code {fpos{\_}t}} -\entry {struct}{195}{\code {struct}} -\entry {cookie{\_}read{\_}function}{197}{\code {cookie{\_}read{\_}function}} -\entry {cookie{\_}write{\_}function}{197}{\code {cookie{\_}write{\_}function}} -\entry {cookie{\_}seek{\_}function}{197}{\code {cookie{\_}seek{\_}function}} -\entry {cookie{\_}close{\_}function}{197}{\code {cookie{\_}close{\_}function}} -\entry {ssize{\_}t}{202}{\code {ssize{\_}t}} -\entry {off{\_}t}{207}{\code {off{\_}t}} -\entry {fd{\_}set}{211}{\code {fd{\_}set}} -\entry {flock}{223}{\code {flock}} -\entry {struct}{231}{\code {struct}} -\entry {DIR}{232}{\code {DIR}} -\entry {struct}{242}{\code {struct}} -\entry {mode{\_}t}{244}{\code {mode{\_}t}} -\entry {ino{\_}t}{244}{\code {ino{\_}t}} -\entry {dev{\_}t}{244}{\code {dev{\_}t}} -\entry {nlink{\_}t}{245}{\code {nlink{\_}t}} -\entry {struct}{256}{\code {struct}} -\entry {struct}{268}{\code {struct}} -\entry {struct}{272}{\code {struct}} -\entry {struct}{275}{\code {struct}} -\entry {struct}{277}{\code {struct}} -\entry {struct}{278}{\code {struct}} -\entry {struct}{282}{\code {struct}} -\entry {struct}{285}{\code {struct}} -\entry {struct}{313}{\code {struct}} -\entry {struct}{314}{\code {struct}} -\entry {struct}{319}{\code {struct}} -\entry {tcflag{\_}t}{320}{\code {tcflag{\_}t}} -\entry {cc{\_}t}{320}{\code {cc{\_}t}} -\entry {speed{\_}t}{330}{\code {speed{\_}t}} -\entry {div{\_}t}{360}{\code {div{\_}t}} -\entry {ldiv{\_}t}{361}{\code {ldiv{\_}t}} -\entry {clock{\_}t}{368}{\code {clock{\_}t}} -\entry {struct}{369}{\code {struct}} -\entry {time{\_}t}{370}{\code {time{\_}t}} -\entry {struct}{371}{\code {struct}} -\entry {struct}{371}{\code {struct}} -\entry {struct}{374}{\code {struct}} -\entry {struct}{383}{\code {struct}} -\entry {struct}{387}{\code {struct}} -\entry {struct}{388}{\code {struct}} -\entry {jmp{\_}buf}{395}{\code {jmp{\_}buf}} -\entry {sigjmp{\_}buf}{396}{\code {sigjmp{\_}buf}} -\entry {sighandler{\_}t}{412}{\code {sighandler{\_}t}} -\entry {struct}{415}{\code {struct}} -\entry {sig{\_}atomic{\_}t}{432}{\code {sig{\_}atomic{\_}t}} -\entry {sigset{\_}t}{441}{\code {sigset{\_}t}} -\entry {struct}{453}{\code {struct}} -\entry {struct}{455}{\code {struct}} -\entry {struct}{463}{\code {struct}} -\entry {pid{\_}t}{477}{\code {pid{\_}t}} -\entry {union}{485}{\code {union}} -\entry {uid{\_}t}{516}{\code {uid{\_}t}} -\entry {gid{\_}t}{516}{\code {gid{\_}t}} -\entry {struct}{525}{\code {struct}} -\entry {struct}{528}{\code {struct}} -\entry {struct}{534}{\code {struct}} -\entry {va{\_}list}{561}{\code {va{\_}list}} -\entry {ptrdiff{\_}t}{564}{\code {ptrdiff{\_}t}} -\entry {size{\_}t}{564}{\code {size{\_}t}} +\entry {struct mstats}{33}{\code {struct mstats}} +\entry {struct obstack}{35}{\code {struct obstack}} +\entry {FILE}{81}{\code {FILE}} +\entry {struct printf{\_}info}{108}{\code {struct printf{\_}info}} +\entry {printf{\_}function}{110}{\code {printf{\_}function}} +\entry {printf{\_}arginfo{\_}function}{111}{\code {printf{\_}arginfo{\_}function}} +\entry {fpos{\_}t}{126}{\code {fpos{\_}t}} +\entry {struct cookie{\_}io{\_}functions}{135}{\code {struct cookie{\_}io{\_}functions}} +\entry {cookie{\_}read{\_}function}{136}{\code {cookie{\_}read{\_}function}} +\entry {cookie{\_}write{\_}function}{136}{\code {cookie{\_}write{\_}function}} +\entry {cookie{\_}seek{\_}function}{136}{\code {cookie{\_}seek{\_}function}} +\entry {cookie{\_}close{\_}function}{136}{\code {cookie{\_}close{\_}function}} +\entry {ssize{\_}t}{140}{\code {ssize{\_}t}} +\entry {off{\_}t}{145}{\code {off{\_}t}} +\entry {fd{\_}set}{149}{\code {fd{\_}set}} +\entry {struct flock}{159}{\code {struct flock}} +\entry {struct dirent}{167}{\code {struct dirent}} +\entry {DIR}{168}{\code {DIR}} +\entry {struct stat}{177}{\code {struct stat}} +\entry {mode{\_}t}{179}{\code {mode{\_}t}} +\entry {ino{\_}t}{179}{\code {ino{\_}t}} +\entry {dev{\_}t}{179}{\code {dev{\_}t}} +\entry {nlink{\_}t}{180}{\code {nlink{\_}t}} +\entry {struct utimbuf}{190}{\code {struct utimbuf}} +\entry {struct sockaddr}{204}{\code {struct sockaddr}} +\entry {struct sockaddr{\_}un}{207}{\code {struct sockaddr{\_}un}} +\entry {struct sockaddr{\_}in}{210}{\code {struct sockaddr{\_}in}} +\entry {struct in{\_}addr}{212}{\code {struct in{\_}addr}} +\entry {struct hostent}{214}{\code {struct hostent}} +\entry {struct servent}{217}{\code {struct servent}} +\entry {struct protoent}{219}{\code {struct protoent}} +\entry {struct linger}{246}{\code {struct linger}} +\entry {struct netent}{247}{\code {struct netent}} +\entry {struct termios}{251}{\code {struct termios}} +\entry {tcflag{\_}t}{252}{\code {tcflag{\_}t}} +\entry {cc{\_}t}{252}{\code {cc{\_}t}} +\entry {speed{\_}t}{262}{\code {speed{\_}t}} +\entry {div{\_}t}{288}{\code {div{\_}t}} +\entry {ldiv{\_}t}{288}{\code {ldiv{\_}t}} +\entry {comparison{\_}fn{\_}t}{293}{\code {comparison{\_}fn{\_}t}} +\entry {glob{\_}t}{300}{\code {glob{\_}t}} +\entry {regex{\_}t}{304}{\code {regex{\_}t}} +\entry {regmatch{\_}t}{307}{\code {regmatch{\_}t}} +\entry {regoff{\_}t}{307}{\code {regoff{\_}t}} +\entry {wordexp{\_}t}{311}{\code {wordexp{\_}t}} +\entry {clock{\_}t}{316}{\code {clock{\_}t}} +\entry {struct tms}{316}{\code {struct tms}} +\entry {time{\_}t}{318}{\code {time{\_}t}} +\entry {struct timeval}{318}{\code {struct timeval}} +\entry {struct timezone}{319}{\code {struct timezone}} +\entry {struct tm}{321}{\code {struct tm}} +\entry {struct itimerval}{329}{\code {struct itimerval}} +\entry {struct rusage}{333}{\code {struct rusage}} +\entry {struct rlimit}{334}{\code {struct rlimit}} +\entry {wchar{\_}t}{343}{\code {wchar{\_}t}} +\entry {struct lconv}{356}{\code {struct lconv}} +\entry {jmp{\_}buf}{363}{\code {jmp{\_}buf}} +\entry {sigjmp{\_}buf}{364}{\code {sigjmp{\_}buf}} +\entry {sighandler{\_}t}{377}{\code {sighandler{\_}t}} +\entry {struct sigaction}{380}{\code {struct sigaction}} +\entry {sig{\_}atomic{\_}t}{395}{\code {sig{\_}atomic{\_}t}} +\entry {sigset{\_}t}{403}{\code {sigset{\_}t}} +\entry {struct sigvec}{414}{\code {struct sigvec}} +\entry {struct sigaltstack}{416}{\code {struct sigaltstack}} +\entry {struct sigstack}{418}{\code {struct sigstack}} +\entry {struct option}{424}{\code {struct option}} +\entry {pid{\_}t}{438}{\code {pid{\_}t}} +\entry {union wait}{447}{\code {union wait}} +\entry {uid{\_}t}{475}{\code {uid{\_}t}} +\entry {gid{\_}t}{475}{\code {gid{\_}t}} +\entry {struct passwd}{484}{\code {struct passwd}} +\entry {struct group}{486}{\code {struct group}} +\entry {struct utsname}{492}{\code {struct utsname}} +\entry {va{\_}list}{516}{\code {va{\_}list}} +\entry {ptrdiff{\_}t}{519}{\code {ptrdiff{\_}t}} +\entry {size{\_}t}{519}{\code {size{\_}t}} diff -ruN glibc-1.06/manual/libc.tps glibc-1.07/manual/libc.tps --- glibc-1.06/manual/libc.tps Mon May 17 16:59:14 1993 +++ glibc-1.07/manual/libc.tps Wed Dec 29 18:34:49 1993 @@ -1,61 +1,93 @@ \initial {C} -\entry {\code {cc{\_}t}}{320} -\entry {\code {clock{\_}t}}{368} -\entry {\code {comparison{\_}fn{\_}t}}{103} -\entry {\code {cookie{\_}close{\_}function}}{197} -\entry {\code {cookie{\_}read{\_}function}}{197} -\entry {\code {cookie{\_}seek{\_}function}}{197} -\entry {\code {cookie{\_}write{\_}function}}{197} +\entry {\code {cc{\_}t}}{252} +\entry {\code {clock{\_}t}}{316} +\entry {\code {comparison{\_}fn{\_}t}}{293} +\entry {\code {cookie{\_}close{\_}function}}{136} +\entry {\code {cookie{\_}read{\_}function}}{136} +\entry {\code {cookie{\_}seek{\_}function}}{136} +\entry {\code {cookie{\_}write{\_}function}}{136} \initial {D} -\entry {\code {dev{\_}t}}{244} -\entry {\code {DIR}}{232} -\entry {\code {div{\_}t}}{360} +\entry {\code {dev{\_}t}}{179} +\entry {\code {DIR}}{168} +\entry {\code {div{\_}t}}{288} \initial {F} -\entry {\code {fd{\_}set}}{211} -\entry {\code {FILE}}{135} -\entry {\code {flock}}{223} -\entry {\code {fpos{\_}t}}{184} +\entry {\code {fd{\_}set}}{149} +\entry {\code {FILE}}{81} +\entry {\code {fpos{\_}t}}{126} \initial {G} -\entry {\code {gid{\_}t}}{516} -\entry {\code {glob{\_}t}}{110} +\entry {\code {gid{\_}t}}{475} +\entry {\code {glob{\_}t}}{300} \initial {I} -\entry {\code {ino{\_}t}}{244} +\entry {\code {ino{\_}t}}{179} \initial {J} -\entry {\code {jmp{\_}buf}}{395} +\entry {\code {jmp{\_}buf}}{363} \initial {L} -\entry {\code {ldiv{\_}t}}{361} +\entry {\code {ldiv{\_}t}}{288} \initial {M} -\entry {\code {mode{\_}t}}{244} +\entry {\code {mode{\_}t}}{179} \initial {N} -\entry {\code {nlink{\_}t}}{245} +\entry {\code {nlink{\_}t}}{180} \initial {O} -\entry {\code {off{\_}t}}{207} +\entry {\code {off{\_}t}}{145} \initial {P} -\entry {\code {pid{\_}t}}{477} -\entry {\code {printf{\_}arginfo{\_}function}}{167} -\entry {\code {printf{\_}function}}{167} -\entry {\code {ptrdiff{\_}t}}{564} +\entry {\code {pid{\_}t}}{438} +\entry {\code {printf{\_}arginfo{\_}function}}{111} +\entry {\code {printf{\_}function}}{110} +\entry {\code {ptrdiff{\_}t}}{519} \initial {R} -\entry {\code {regex{\_}t}}{114} -\entry {\code {regmatch{\_}t}}{117} -\entry {\code {regoff{\_}t}}{118} +\entry {\code {regex{\_}t}}{304} +\entry {\code {regmatch{\_}t}}{307} +\entry {\code {regoff{\_}t}}{307} \initial {S} -\entry {\code {sig{\_}atomic{\_}t}}{432} -\entry {\code {sighandler{\_}t}}{413} -\entry {\code {sigjmp{\_}buf}}{396} -\entry {\code {sigset{\_}t}}{441} -\entry {\code {size{\_}t}}{564} -\entry {\code {speed{\_}t}}{330} -\entry {\code {ssize{\_}t}}{202} -\entry {\code {struct}}{36, 38, 98, 165, 195, 231, 242, 256, 268, 272, 275, 277, 278, 282, 285, 314, 315, 319, 369, 371, 374, 383, 387, 388, 415, 453, 455, 463, 525, 528, 534} +\entry {\code {sig{\_}atomic{\_}t}}{395} +\entry {\code {sighandler{\_}t}}{377} +\entry {\code {sigjmp{\_}buf}}{364} +\entry {\code {sigset{\_}t}}{403} +\entry {\code {size{\_}t}}{519} +\entry {\code {speed{\_}t}}{262} +\entry {\code {ssize{\_}t}}{140} +\entry {\code {struct cookie{\_}io{\_}functions}}{135} +\entry {\code {struct dirent}}{167} +\entry {\code {struct flock}}{159} +\entry {\code {struct group}}{486} +\entry {\code {struct hostent}}{214} +\entry {\code {struct in{\_}addr}}{212} +\entry {\code {struct itimerval}}{329} +\entry {\code {struct lconv}}{356} +\entry {\code {struct linger}}{246} +\entry {\code {struct mstats}}{33} +\entry {\code {struct netent}}{247} +\entry {\code {struct obstack}}{35} +\entry {\code {struct option}}{424} +\entry {\code {struct passwd}}{484} +\entry {\code {struct printf{\_}info}}{108} +\entry {\code {struct protoent}}{219} +\entry {\code {struct rlimit}}{334} +\entry {\code {struct rusage}}{333} +\entry {\code {struct servent}}{217} +\entry {\code {struct sigaction}}{380} +\entry {\code {struct sigaltstack}}{416} +\entry {\code {struct sigstack}}{418} +\entry {\code {struct sigvec}}{414} +\entry {\code {struct sockaddr}}{204} +\entry {\code {struct sockaddr{\_}in}}{210} +\entry {\code {struct sockaddr{\_}un}}{207} +\entry {\code {struct stat}}{177} +\entry {\code {struct termios}}{251} +\entry {\code {struct timeval}}{318} +\entry {\code {struct timezone}}{319} +\entry {\code {struct tm}}{321} +\entry {\code {struct tms}}{316} +\entry {\code {struct utimbuf}}{190} +\entry {\code {struct utsname}}{492} \initial {T} -\entry {\code {tcflag{\_}t}}{320} -\entry {\code {time{\_}t}}{370} +\entry {\code {tcflag{\_}t}}{252} +\entry {\code {time{\_}t}}{318} \initial {U} -\entry {\code {uid{\_}t}}{516} -\entry {\code {union}}{485} +\entry {\code {uid{\_}t}}{475} +\entry {\code {union wait}}{447} \initial {V} -\entry {\code {va{\_}list}}{561} +\entry {\code {va{\_}list}}{516} \initial {W} -\entry {\code {wchar{\_}t}}{84} -\entry {\code {wordexp{\_}t}}{121} +\entry {\code {wchar{\_}t}}{343} +\entry {\code {wordexp{\_}t}}{311} diff -ruN glibc-1.06/manual/libc.vr glibc-1.07/manual/libc.vr --- glibc-1.06/manual/libc.vr Mon May 17 17:03:26 1993 +++ glibc-1.07/manual/libc.vr Wed Dec 29 18:38:49 1993 @@ -1,19 +1,19 @@ -\entry {{\_}POSIX{\_}SOURCE}{9}{\code {{\_}POSIX{\_}SOURCE}} -\entry {{\_}POSIX{\_}C{\_}SOURCE}{9}{\code {{\_}POSIX{\_}C{\_}SOURCE}} -\entry {{\_}BSD{\_}SOURCE}{9}{\code {{\_}BSD{\_}SOURCE}} +\entry {{\_}POSIX{\_}SOURCE}{8}{\code {{\_}POSIX{\_}SOURCE}} +\entry {{\_}POSIX{\_}C{\_}SOURCE}{8}{\code {{\_}POSIX{\_}C{\_}SOURCE}} +\entry {{\_}BSD{\_}SOURCE}{8}{\code {{\_}BSD{\_}SOURCE}} \entry {{\_}SVID{\_}SOURCE}{9}{\code {{\_}SVID{\_}SOURCE}} \entry {{\_}GNU{\_}SOURCE}{9}{\code {{\_}GNU{\_}SOURCE}} \entry {errno \relax }{13}{\code {errno \relax }} -\entry {EPERM \relax }{15}{\code {EPERM \relax }} -\entry {ENOENT \relax }{15}{\code {ENOENT \relax }} +\entry {EPERM \relax }{14}{\code {EPERM \relax }} +\entry {ENOENT \relax }{14}{\code {ENOENT \relax }} \entry {ESRCH \relax }{15}{\code {ESRCH \relax }} \entry {EINTR \relax }{15}{\code {EINTR \relax }} \entry {EIO \relax }{15}{\code {EIO \relax }} \entry {ENXIO \relax }{15}{\code {ENXIO \relax }} \entry {E2BIG \relax }{15}{\code {E2BIG \relax }} -\entry {ENOEXEC \relax }{16}{\code {ENOEXEC \relax }} -\entry {EBADF \relax }{16}{\code {EBADF \relax }} -\entry {ECHILD \relax }{16}{\code {ECHILD \relax }} +\entry {ENOEXEC \relax }{15}{\code {ENOEXEC \relax }} +\entry {EBADF \relax }{15}{\code {EBADF \relax }} +\entry {ECHILD \relax }{15}{\code {ECHILD \relax }} \entry {EDEADLK \relax }{16}{\code {EDEADLK \relax }} \entry {ENOMEM \relax }{16}{\code {ENOMEM \relax }} \entry {EACCES \relax }{16}{\code {EACCES \relax }} @@ -21,402 +21,413 @@ \entry {ENOTBLK \relax }{16}{\code {ENOTBLK \relax }} \entry {EBUSY \relax }{16}{\code {EBUSY \relax }} \entry {EEXIST \relax }{16}{\code {EEXIST \relax }} -\entry {EXDEV \relax }{17}{\code {EXDEV \relax }} -\entry {ENODEV \relax }{17}{\code {ENODEV \relax }} -\entry {ENOTDIR \relax }{17}{\code {ENOTDIR \relax }} +\entry {EXDEV \relax }{16}{\code {EXDEV \relax }} +\entry {ENODEV \relax }{16}{\code {ENODEV \relax }} +\entry {ENOTDIR \relax }{16}{\code {ENOTDIR \relax }} \entry {EISDIR \relax }{17}{\code {EISDIR \relax }} \entry {EINVAL \relax }{17}{\code {EINVAL \relax }} -\entry {ENFILE \relax }{17}{\code {ENFILE \relax }} \entry {EMFILE \relax }{17}{\code {EMFILE \relax }} +\entry {ENFILE \relax }{17}{\code {ENFILE \relax }} \entry {ENOTTY \relax }{17}{\code {ENOTTY \relax }} \entry {ETXTBSY \relax }{17}{\code {ETXTBSY \relax }} -\entry {EFBIG \relax }{18}{\code {EFBIG \relax }} -\entry {ENOSPC \relax }{18}{\code {ENOSPC \relax }} -\entry {ESPIPE \relax }{18}{\code {ESPIPE \relax }} -\entry {EROFS \relax }{18}{\code {EROFS \relax }} -\entry {EMLINK \relax }{18}{\code {EMLINK \relax }} +\entry {EFBIG \relax }{17}{\code {EFBIG \relax }} +\entry {ENOSPC \relax }{17}{\code {ENOSPC \relax }} +\entry {ESPIPE \relax }{17}{\code {ESPIPE \relax }} +\entry {EROFS \relax }{17}{\code {EROFS \relax }} +\entry {EMLINK \relax }{17}{\code {EMLINK \relax }} \entry {EPIPE \relax }{18}{\code {EPIPE \relax }} \entry {EDOM \relax }{18}{\code {EDOM \relax }} \entry {ERANGE \relax }{18}{\code {ERANGE \relax }} \entry {EAGAIN \relax }{18}{\code {EAGAIN \relax }} -\entry {EWOULDBLOCK \relax }{19}{\code {EWOULDBLOCK \relax }} -\entry {EINPROGRESS \relax }{19}{\code {EINPROGRESS \relax }} -\entry {EALREADY \relax }{19}{\code {EALREADY \relax }} -\entry {ENOTSOCK \relax }{19}{\code {ENOTSOCK \relax }} +\entry {EWOULDBLOCK \relax }{18}{\code {EWOULDBLOCK \relax }} +\entry {EINPROGRESS \relax }{18}{\code {EINPROGRESS \relax }} +\entry {EALREADY \relax }{18}{\code {EALREADY \relax }} +\entry {ENOTSOCK \relax }{18}{\code {ENOTSOCK \relax }} \entry {EDESTADDRREQ \relax }{19}{\code {EDESTADDRREQ \relax }} \entry {EMSGSIZE \relax }{19}{\code {EMSGSIZE \relax }} \entry {EPROTOTYPE \relax }{19}{\code {EPROTOTYPE \relax }} \entry {ENOPROTOOPT \relax }{19}{\code {ENOPROTOOPT \relax }} -\entry {EPROTONOSUPPORT \relax }{20}{\code {EPROTONOSUPPORT \relax }} -\entry {ESOCKTNOSUPPORT \relax }{20}{\code {ESOCKTNOSUPPORT \relax }} -\entry {EOPNOTSUPP \relax }{20}{\code {EOPNOTSUPP \relax }} -\entry {EPFNOSUPPORT \relax }{20}{\code {EPFNOSUPPORT \relax }} -\entry {EAFNOSUPPORT \relax }{20}{\code {EAFNOSUPPORT \relax }} -\entry {EADDRINUSE \relax }{20}{\code {EADDRINUSE \relax }} -\entry {EADDRNOTAVAIL \relax }{20}{\code {EADDRNOTAVAIL \relax }} +\entry {EPROTONOSUPPORT \relax }{19}{\code {EPROTONOSUPPORT \relax }} +\entry {ESOCKTNOSUPPORT \relax }{19}{\code {ESOCKTNOSUPPORT \relax }} +\entry {EOPNOTSUPP \relax }{19}{\code {EOPNOTSUPP \relax }} +\entry {EPFNOSUPPORT \relax }{19}{\code {EPFNOSUPPORT \relax }} +\entry {EAFNOSUPPORT \relax }{19}{\code {EAFNOSUPPORT \relax }} +\entry {EADDRINUSE \relax }{19}{\code {EADDRINUSE \relax }} +\entry {EADDRNOTAVAIL \relax }{19}{\code {EADDRNOTAVAIL \relax }} \entry {ENETDOWN \relax }{20}{\code {ENETDOWN \relax }} \entry {ENETUNREACH \relax }{20}{\code {ENETUNREACH \relax }} \entry {ENETRESET \relax }{20}{\code {ENETRESET \relax }} -\entry {ECONNABORTED \relax }{21}{\code {ECONNABORTED \relax }} -\entry {ECONNRESET \relax }{21}{\code {ECONNRESET \relax }} -\entry {ENOBUFS \relax }{21}{\code {ENOBUFS \relax }} -\entry {EISCONN \relax }{21}{\code {EISCONN \relax }} -\entry {ENOTCONN \relax }{21}{\code {ENOTCONN \relax }} -\entry {ESHUTDOWN \relax }{21}{\code {ESHUTDOWN \relax }} -\entry {ETIMEDOUT \relax }{21}{\code {ETIMEDOUT \relax }} -\entry {ECONNREFUSED \relax }{21}{\code {ECONNREFUSED \relax }} -\entry {ELOOP \relax }{21}{\code {ELOOP \relax }} -\entry {ENAMETOOLONG \relax }{22}{\code {ENAMETOOLONG \relax }} -\entry {EHOSTDOWN \relax }{22}{\code {EHOSTDOWN \relax }} -\entry {EHOSTUNREACH \relax }{22}{\code {EHOSTUNREACH \relax }} -\entry {ENOTEMPTY \relax }{22}{\code {ENOTEMPTY \relax }} -\entry {EUSERS \relax }{22}{\code {EUSERS \relax }} -\entry {EDQUOT \relax }{22}{\code {EDQUOT \relax }} -\entry {ESTALE \relax }{22}{\code {ESTALE \relax }} -\entry {EREMOTE \relax }{22}{\code {EREMOTE \relax }} -\entry {ENOLCK \relax }{22}{\code {ENOLCK \relax }} -\entry {ENOSYS \relax }{22}{\code {ENOSYS \relax }} -\entry {ED \relax }{23}{\code {ED \relax }} -\entry {EGRATUITOUS \relax }{23}{\code {EGRATUITOUS \relax }} -\entry {program{\_}invocation{\_}name \relax }{24}{\code {program{\_}invocation{\_}name \relax }} -\entry {program{\_}invocation{\_}short{\_}name \relax }{24}{\code {program{\_}invocation{\_}short{\_}name \relax }} -\entry {{\_}{\_}malloc{\_}hook}{35}{\code {{\_}{\_}malloc{\_}hook}} -\entry {{\_}{\_}realloc{\_}hook}{35}{\code {{\_}{\_}realloc{\_}hook}} -\entry {{\_}{\_}free{\_}hook}{35}{\code {{\_}{\_}free{\_}hook}} -\entry {MB{\_}LEN{\_}MAX \relax }{82}{\code {MB{\_}LEN{\_}MAX \relax }} -\entry {MB{\_}CUR{\_}MAX \relax }{83}{\code {MB{\_}CUR{\_}MAX \relax }} -\entry {LC{\_}COLLATE}{95}{\code {LC{\_}COLLATE}} -\entry {LC{\_}CTYPE}{95}{\code {LC{\_}CTYPE}} -\entry {LC{\_}MONETARY}{95}{\code {LC{\_}MONETARY}} -\entry {LC{\_}NUMERIC}{95}{\code {LC{\_}NUMERIC}} -\entry {LC{\_}TIME}{95}{\code {LC{\_}TIME}} -\entry {LC{\_}ALL}{95}{\code {LC{\_}ALL}} -\entry {LANG}{95}{\code {LANG}} -\entry {stdin \relax }{136}{\code {stdin \relax }} -\entry {stdout \relax }{136}{\code {stdout \relax }} -\entry {stderr \relax }{136}{\code {stderr \relax }} -\entry {FOPEN{\_}MAX \relax }{138}{\code {FOPEN{\_}MAX \relax }} -\entry {PA{\_}FLAG{\_}MASK \relax }{160}{\code {PA{\_}FLAG{\_}MASK \relax }} -\entry {PA{\_}INT}{160}{\code {PA{\_}INT}} -\entry {PA{\_}CHAR}{161}{\code {PA{\_}CHAR}} -\entry {PA{\_}STRING}{161}{\code {PA{\_}STRING}} -\entry {PA{\_}POINTER}{161}{\code {PA{\_}POINTER}} -\entry {PA{\_}FLOAT}{161}{\code {PA{\_}FLOAT}} -\entry {PA{\_}DOUBLE}{161}{\code {PA{\_}DOUBLE}} -\entry {PA{\_}LAST}{161}{\code {PA{\_}LAST}} -\entry {PA{\_}FLAG{\_}PTR}{161}{\code {PA{\_}FLAG{\_}PTR}} -\entry {PA{\_}FLAG{\_}SHORT}{161}{\code {PA{\_}FLAG{\_}SHORT}} -\entry {PA{\_}FLAG{\_}LONG}{161}{\code {PA{\_}FLAG{\_}LONG}} -\entry {PA{\_}FLAG{\_}LONG{\_}LONG}{161}{\code {PA{\_}FLAG{\_}LONG{\_}LONG}} -\entry {PA{\_}FLAG{\_}LONG{\_}DOUBLE}{161}{\code {PA{\_}FLAG{\_}LONG{\_}DOUBLE}} -\entry {EOF \relax }{179}{\code {EOF \relax }} -\entry {SEEK{\_}SET \relax }{182}{\code {SEEK{\_}SET \relax }} -\entry {SEEK{\_}CUR \relax }{182}{\code {SEEK{\_}CUR \relax }} -\entry {SEEK{\_}END \relax }{182}{\code {SEEK{\_}END \relax }} -\entry {L{\_}SET}{182}{\code {L{\_}SET}} -\entry {L{\_}INCR}{182}{\code {L{\_}INCR}} -\entry {L{\_}XTND}{182}{\code {L{\_}XTND}} -\entry {{\_}IOFBF \relax }{187}{\code {{\_}IOFBF \relax }} -\entry {{\_}IOLBF \relax }{187}{\code {{\_}IOLBF \relax }} -\entry {{\_}IONBF \relax }{187}{\code {{\_}IONBF \relax }} -\entry {BUFSIZ \relax }{187}{\code {BUFSIZ \relax }} -\entry {L{\_}tmpnam \relax }{189}{\code {L{\_}tmpnam \relax }} -\entry {TMP{\_}MAX \relax }{189}{\code {TMP{\_}MAX \relax }} -\entry {P{\_}tmpdir \relax }{190}{\code {P{\_}tmpdir \relax }} -\entry {O{\_}RDONLY}{200}{\code {O{\_}RDONLY}} -\entry {O{\_}WRONLY}{200}{\code {O{\_}WRONLY}} -\entry {O{\_}RDWR}{200}{\code {O{\_}RDWR}} -\entry {O{\_}APPEND}{200}{\code {O{\_}APPEND}} -\entry {O{\_}CREAT}{200}{\code {O{\_}CREAT}} -\entry {O{\_}EXCL}{200}{\code {O{\_}EXCL}} -\entry {O{\_}NOCTTY}{200}{\code {O{\_}NOCTTY}} -\entry {O{\_}NONBLOCK}{200}{\code {O{\_}NONBLOCK}} -\entry {O{\_}TRUNC}{200}{\code {O{\_}TRUNC}} -\entry {STDIN{\_}FILENO}{208}{\code {STDIN{\_}FILENO}} -\entry {STDOUT{\_}FILENO}{208}{\code {STDOUT{\_}FILENO}} -\entry {STDERR{\_}FILENO}{208}{\code {STDERR{\_}FILENO}} -\entry {FD{\_}SETSIZE \relax }{211}{\code {FD{\_}SETSIZE \relax }} -\entry {F{\_}DUPFD \relax }{216}{\code {F{\_}DUPFD \relax }} -\entry {F{\_}GETFD \relax }{218}{\code {F{\_}GETFD \relax }} -\entry {F{\_}SETFD \relax }{218}{\code {F{\_}SETFD \relax }} -\entry {FD{\_}CLOEXEC \relax }{219}{\code {FD{\_}CLOEXEC \relax }} -\entry {F{\_}GETFL \relax }{220}{\code {F{\_}GETFL \relax }} -\entry {F{\_}SETFL \relax }{220}{\code {F{\_}SETFL \relax }} -\entry {O{\_}ACCMODE \relax }{221}{\code {O{\_}ACCMODE \relax }} -\entry {F{\_}GETLK \relax }{223}{\code {F{\_}GETLK \relax }} -\entry {F{\_}SETLK \relax }{224}{\code {F{\_}SETLK \relax }} -\entry {F{\_}SETLKW \relax }{225}{\code {F{\_}SETLKW \relax }} -\entry {F{\_}RDLCK}{225}{\code {F{\_}RDLCK}} -\entry {F{\_}WRLCK}{226}{\code {F{\_}WRLCK}} -\entry {F{\_}UNLCK}{226}{\code {F{\_}UNLCK}} -\entry {F{\_}GETOWN \relax }{226}{\code {F{\_}GETOWN \relax }} -\entry {F{\_}SETOWN \relax }{227}{\code {F{\_}SETOWN \relax }} -\entry {S{\_}IFMT \relax }{247}{\code {S{\_}IFMT \relax }} -\entry {S{\_}IFDIR}{247}{\code {S{\_}IFDIR}} -\entry {S{\_}IFCHR}{247}{\code {S{\_}IFCHR}} -\entry {S{\_}IFBLK}{247}{\code {S{\_}IFBLK}} -\entry {S{\_}IFREG}{247}{\code {S{\_}IFREG}} -\entry {S{\_}IFLNK}{247}{\code {S{\_}IFLNK}} -\entry {S{\_}IFSOCK}{247}{\code {S{\_}IFSOCK}} -\entry {S{\_}IFIFO}{247}{\code {S{\_}IFIFO}} -\entry {S{\_}IRUSR}{249}{\code {S{\_}IRUSR}} -\entry {S{\_}IREAD}{249}{\code {S{\_}IREAD}} -\entry {S{\_}IWUSR}{249}{\code {S{\_}IWUSR}} -\entry {S{\_}IWRITE}{249}{\code {S{\_}IWRITE}} -\entry {S{\_}IXUSR}{249}{\code {S{\_}IXUSR}} -\entry {S{\_}IEXEC}{249}{\code {S{\_}IEXEC}} -\entry {S{\_}IRWXU}{250}{\code {S{\_}IRWXU}} -\entry {S{\_}IRGRP}{250}{\code {S{\_}IRGRP}} -\entry {S{\_}IWGRP}{250}{\code {S{\_}IWGRP}} -\entry {S{\_}IXGRP}{250}{\code {S{\_}IXGRP}} -\entry {S{\_}IRWXG}{250}{\code {S{\_}IRWXG}} -\entry {S{\_}IROTH}{250}{\code {S{\_}IROTH}} -\entry {S{\_}IWOTH}{250}{\code {S{\_}IWOTH}} -\entry {S{\_}IXOTH}{250}{\code {S{\_}IXOTH}} -\entry {S{\_}IRWXO}{250}{\code {S{\_}IRWXO}} -\entry {S{\_}ISUID}{250}{\code {S{\_}ISUID}} -\entry {S{\_}ISGID}{250}{\code {S{\_}ISGID}} -\entry {S{\_}ISVTX}{250}{\code {S{\_}ISVTX}} -\entry {R{\_}OK \relax }{255}{\code {R{\_}OK \relax }} -\entry {W{\_}OK \relax }{255}{\code {W{\_}OK \relax }} -\entry {X{\_}OK \relax }{255}{\code {X{\_}OK \relax }} -\entry {F{\_}OK \relax }{255}{\code {F{\_}OK \relax }} -\entry {SOCK{\_}STREAM \relax }{266}{\code {SOCK{\_}STREAM \relax }} -\entry {SOCK{\_}DGRAM \relax }{266}{\code {SOCK{\_}DGRAM \relax }} -\entry {SOCK{\_}RAW \relax }{267}{\code {SOCK{\_}RAW \relax }} -\entry {AF{\_}FILE}{269}{\code {AF{\_}FILE}} -\entry {AF{\_}UNIX}{269}{\code {AF{\_}UNIX}} -\entry {AF{\_}INET}{269}{\code {AF{\_}INET}} -\entry {AF{\_}UNSPEC}{269}{\code {AF{\_}UNSPEC}} -\entry {PF{\_}FILE \relax }{272}{\code {PF{\_}FILE \relax }} -\entry {PF{\_}UNIX \relax }{272}{\code {PF{\_}UNIX \relax }} -\entry {PF{\_}INET \relax }{274}{\code {PF{\_}INET \relax }} -\entry {INADDR{\_}ANY \relax }{277}{\code {INADDR{\_}ANY \relax }} -\entry {h{\_}errno}{280}{\code {h{\_}errno}} -\entry {HOST{\_}NOT{\_}FOUND}{280}{\code {HOST{\_}NOT{\_}FOUND}} -\entry {TRY{\_}AGAIN}{280}{\code {TRY{\_}AGAIN}} -\entry {NO{\_}RECOVERY}{280}{\code {NO{\_}RECOVERY}} -\entry {NO{\_}ADDRESS}{280}{\code {NO{\_}ADDRESS}} -\entry {IPPORT{\_}RESERVED \relax }{281}{\code {IPPORT{\_}RESERVED \relax }} -\entry {IPPORT{\_}USERRESERVED \relax }{281}{\code {IPPORT{\_}USERRESERVED \relax }} -\entry {PF{\_}NS}{287}{\code {PF{\_}NS}} -\entry {PF{\_}ISO}{287}{\code {PF{\_}ISO}} -\entry {PF{\_}CCITT}{287}{\code {PF{\_}CCITT}} -\entry {PF{\_}IMPLINK}{287}{\code {PF{\_}IMPLINK}} -\entry {PF{\_}ROUTE}{287}{\code {PF{\_}ROUTE}} -\entry {MSG{\_}OOB \relax }{297}{\code {MSG{\_}OOB \relax }} -\entry {MSG{\_}PEEK \relax }{297}{\code {MSG{\_}PEEK \relax }} -\entry {MSG{\_}DONTROUTE \relax }{297}{\code {MSG{\_}DONTROUTE \relax }} -\entry {SOL{\_}SOCKET \relax }{313}{\code {SOL{\_}SOCKET \relax }} -\entry {NCCS \relax }{320}{\code {NCCS \relax }} -\entry {TCSANOW}{321}{\code {TCSANOW}} -\entry {TCSADRAIN}{321}{\code {TCSADRAIN}} -\entry {TCSAFLUSH}{321}{\code {TCSAFLUSH}} -\entry {TCSASOFT}{321}{\code {TCSASOFT}} -\entry {INPCK}{323}{\code {INPCK}} -\entry {IGNPAR}{324}{\code {IGNPAR}} -\entry {PARMRK}{324}{\code {PARMRK}} -\entry {ISTRIP}{324}{\code {ISTRIP}} -\entry {IGNBRK}{324}{\code {IGNBRK}} -\entry {BRKINT}{324}{\code {BRKINT}} -\entry {IGNCR}{324}{\code {IGNCR}} -\entry {ICRNL}{324}{\code {ICRNL}} -\entry {INLCR}{324}{\code {INLCR}} -\entry {IXOFF}{324}{\code {IXOFF}} -\entry {IXON}{325}{\code {IXON}} -\entry {OPOST \relax }{325}{\code {OPOST \relax }} -\entry {ONLCR \relax }{325}{\code {ONLCR \relax }} -\entry {OXTABS \relax }{326}{\code {OXTABS \relax }} -\entry {ONOEOT \relax }{326}{\code {ONOEOT \relax }} -\entry {CLOCAL}{326}{\code {CLOCAL}} -\entry {HUPCL}{326}{\code {HUPCL}} -\entry {CREAD}{326}{\code {CREAD}} -\entry {CSTOPB}{326}{\code {CSTOPB}} -\entry {PARENB}{326}{\code {PARENB}} -\entry {PARODD}{327}{\code {PARODD}} -\entry {CSIZE}{327}{\code {CSIZE}} -\entry {CS5}{327}{\code {CS5}} -\entry {CS6}{327}{\code {CS6}} -\entry {CS7}{327}{\code {CS7}} -\entry {CS8}{327}{\code {CS8}} -\entry {CCTS{\_}OFLOW}{327}{\code {CCTS{\_}OFLOW}} -\entry {CRTS{\_}IFLOW}{327}{\code {CRTS{\_}IFLOW}} -\entry {MDMBUF}{327}{\code {MDMBUF}} -\entry {ICANON}{327}{\code {ICANON}} -\entry {ECHO}{327}{\code {ECHO}} -\entry {ECHOE}{327}{\code {ECHOE}} -\entry {ECHOK}{328}{\code {ECHOK}} -\entry {ECHONL}{328}{\code {ECHONL}} -\entry {ISIG}{328}{\code {ISIG}} -\entry {IEXTEN}{328}{\code {IEXTEN}} -\entry {NOFLSH}{328}{\code {NOFLSH}} -\entry {TOSTOP}{328}{\code {TOSTOP}} -\entry {ECHOKE}{329}{\code {ECHOKE}} -\entry {ECHOPRT}{329}{\code {ECHOPRT}} -\entry {ECHOCTL}{329}{\code {ECHOCTL}} -\entry {ALTWERASE}{329}{\code {ALTWERASE}} -\entry {FLUSHO}{329}{\code {FLUSHO}} -\entry {NOKERNINFO}{329}{\code {NOKERNINFO}} -\entry {PENDIN}{329}{\code {PENDIN}} -\entry {B0}{331}{\code {B0}} -\entry {B50}{331}{\code {B50}} -\entry {B75}{331}{\code {B75}} -\entry {B110}{331}{\code {B110}} -\entry {B134}{331}{\code {B134}} -\entry {B150}{331}{\code {B150}} -\entry {B200}{331}{\code {B200}} -\entry {B300}{331}{\code {B300}} -\entry {B600}{331}{\code {B600}} -\entry {B1200}{331}{\code {B1200}} -\entry {B1800}{331}{\code {B1800}} -\entry {B2400}{331}{\code {B2400}} -\entry {B4800}{331}{\code {B4800}} -\entry {B9600}{331}{\code {B9600}} -\entry {B19200}{331}{\code {B19200}} -\entry {B38400}{331}{\code {B38400}} -\entry {EXTA}{331}{\code {EXTA}} -\entry {EXTB}{331}{\code {EXTB}} -\entry {{\_}POSIX{\_}VDISABLE}{331}{\code {{\_}POSIX{\_}VDISABLE}} -\entry {VEOF \relax }{332}{\code {VEOF \relax }} -\entry {VEOL \relax }{332}{\code {VEOL \relax }} -\entry {VERASE \relax }{332}{\code {VERASE \relax }} -\entry {VKILL \relax }{333}{\code {VKILL \relax }} -\entry {VEOL2 \relax }{333}{\code {VEOL2 \relax }} -\entry {VWERASE \relax }{333}{\code {VWERASE \relax }} -\entry {VREPRINT \relax }{334}{\code {VREPRINT \relax }} -\entry {VLNEXT \relax }{334}{\code {VLNEXT \relax }} -\entry {VINTR \relax }{334}{\code {VINTR \relax }} -\entry {VQUIT \relax }{334}{\code {VQUIT \relax }} -\entry {VSUSP \relax }{335}{\code {VSUSP \relax }} -\entry {VDSUSP \relax }{335}{\code {VDSUSP \relax }} -\entry {VSTART \relax }{336}{\code {VSTART \relax }} -\entry {VSTOP \relax }{336}{\code {VSTOP \relax }} -\entry {VDISCARD \relax }{337}{\code {VDISCARD \relax }} -\entry {VSTATUS \relax }{337}{\code {VSTATUS \relax }} -\entry {VMIN \relax }{337}{\code {VMIN \relax }} -\entry {VTIME \relax }{338}{\code {VTIME \relax }} -\entry {TCIFLUSH}{340}{\code {TCIFLUSH}} -\entry {TCOFLUSH}{340}{\code {TCOFLUSH}} -\entry {TCIOFLUSH}{340}{\code {TCIOFLUSH}} -\entry {TCOOFF}{341}{\code {TCOOFF}} -\entry {TCOON}{341}{\code {TCOON}} -\entry {TCIOFF}{341}{\code {TCIOFF}} -\entry {TCION}{341}{\code {TCION}} -\entry {EBADF}{341}{\code {EBADF}} -\entry {ENOTTY}{341}{\code {ENOTTY}} -\entry {EINVAL}{341}{\code {EINVAL}} -\entry {HUGE{\_}VAL \relax }{346}{\code {HUGE{\_}VAL \relax }} -\entry {RAND{\_}MAX \relax }{351}{\code {RAND{\_}MAX \relax }} -\entry {NAN \relax }{355}{\code {NAN \relax }} -\entry {CLOCKS{\_}PER{\_}SEC \relax }{368}{\code {CLOCKS{\_}PER{\_}SEC \relax }} -\entry {CLK{\_}TCK \relax }{368}{\code {CLK{\_}TCK \relax }} -\entry {*tzname[2] \relax }{380}{\code {*tzname[2] \relax }} -\entry {timezone \relax }{381}{\code {timezone \relax }} -\entry {daylight \relax }{381}{\code {daylight \relax }} -\entry {RLIMIT{\_}CPU}{388}{\code {RLIMIT{\_}CPU}} -\entry {RLIMIT{\_}FSIZE}{389}{\code {RLIMIT{\_}FSIZE}} -\entry {RLIMIT{\_}DATA}{389}{\code {RLIMIT{\_}DATA}} -\entry {RLIMIT{\_}STACK}{389}{\code {RLIMIT{\_}STACK}} -\entry {RLIMIT{\_}CORE}{389}{\code {RLIMIT{\_}CORE}} -\entry {RLIMIT{\_}RSS}{389}{\code {RLIMIT{\_}RSS}} -\entry {RLIMIT{\_}OPEN{\_}FILES}{389}{\code {RLIMIT{\_}OPEN{\_}FILES}} -\entry {RLIM{\_}NLIMITS}{389}{\code {RLIM{\_}NLIMITS}} -\entry {int}{389}{\code {int}} -\entry {PRIO{\_}MIN}{390}{\code {PRIO{\_}MIN}} -\entry {PRIO{\_}MAX}{390}{\code {PRIO{\_}MAX}} -\entry {PRIO{\_}PROCESS}{391}{\code {PRIO{\_}PROCESS}} -\entry {PRIO{\_}PGRP}{391}{\code {PRIO{\_}PGRP}} -\entry {PRIO{\_}USER}{391}{\code {PRIO{\_}USER}} -\entry {NSIG \relax }{402}{\code {NSIG \relax }} -\entry {COREFILE}{402}{\code {COREFILE}} -\entry {SIGFPE \relax }{403}{\code {SIGFPE \relax }} -\entry {FPE{\_}INTOVF{\_}TRAP}{403}{\code {FPE{\_}INTOVF{\_}TRAP}} -\entry {FPE{\_}INTDIV{\_}TRAP}{403}{\code {FPE{\_}INTDIV{\_}TRAP}} -\entry {FPE{\_}SUBRNG{\_}TRAP}{403}{\code {FPE{\_}SUBRNG{\_}TRAP}} -\entry {FPE{\_}FLTOVF{\_}TRAP}{403}{\code {FPE{\_}FLTOVF{\_}TRAP}} -\entry {FPE{\_}FLTDIV{\_}TRAP}{404}{\code {FPE{\_}FLTDIV{\_}TRAP}} -\entry {FPE{\_}FLTUND{\_}TRAP}{404}{\code {FPE{\_}FLTUND{\_}TRAP}} -\entry {FPE{\_}DECOVF{\_}TRAP}{404}{\code {FPE{\_}DECOVF{\_}TRAP}} -\entry {SIGILL \relax }{404}{\code {SIGILL \relax }} -\entry {SIGSEGV \relax }{404}{\code {SIGSEGV \relax }} -\entry {SIGBUS \relax }{404}{\code {SIGBUS \relax }} -\entry {SIGABRT \relax }{405}{\code {SIGABRT \relax }} -\entry {SIGHUP \relax }{405}{\code {SIGHUP \relax }} -\entry {SIGINT \relax }{406}{\code {SIGINT \relax }} -\entry {SIGQUIT \relax }{406}{\code {SIGQUIT \relax }} -\entry {SIGTERM \relax }{406}{\code {SIGTERM \relax }} -\entry {SIGKILL \relax }{406}{\code {SIGKILL \relax }} -\entry {SIGALRM \relax }{407}{\code {SIGALRM \relax }} -\entry {SIGVTALRM \relax }{407}{\code {SIGVTALRM \relax }} -\entry {SIGPROF \relax }{407}{\code {SIGPROF \relax }} -\entry {SIGIO \relax }{407}{\code {SIGIO \relax }} -\entry {SIGURG \relax }{408}{\code {SIGURG \relax }} -\entry {SIGCHLD \relax }{408}{\code {SIGCHLD \relax }} -\entry {SIGCONT \relax }{408}{\code {SIGCONT \relax }} -\entry {SIGSTOP \relax }{408}{\code {SIGSTOP \relax }} -\entry {SIGTSTP \relax }{408}{\code {SIGTSTP \relax }} -\entry {SIGTTIN \relax }{409}{\code {SIGTTIN \relax }} -\entry {SIGTTOU \relax }{409}{\code {SIGTTOU \relax }} -\entry {SIGPIPE \relax }{410}{\code {SIGPIPE \relax }} -\entry {SIGUSR1 \relax }{410}{\code {SIGUSR1 \relax }} -\entry {SIGUSR2 \relax }{410}{\code {SIGUSR2 \relax }} -\entry {sys{\_}siglist}{412}{\code {sys{\_}siglist}} -\entry {SIG{\_}DFL}{413}{\code {SIG{\_}DFL}} -\entry {SIG{\_}IGN}{413}{\code {SIG{\_}IGN}} -\entry {SIG{\_}ERR \relax }{415}{\code {SIG{\_}ERR \relax }} -\entry {SA{\_}NOCLDSTOP \relax }{419}{\code {SA{\_}NOCLDSTOP \relax }} -\entry {SA{\_}ONSTACK \relax }{419}{\code {SA{\_}ONSTACK \relax }} -\entry {SA{\_}RESTART \relax }{419}{\code {SA{\_}RESTART \relax }} -\entry {SIG{\_}BLOCK}{443}{\code {SIG{\_}BLOCK}} -\entry {SIG{\_}UNBLOCK}{443}{\code {SIG{\_}UNBLOCK}} -\entry {SIG{\_}SETMASK}{443}{\code {SIG{\_}SETMASK}} -\entry {SV{\_}ONSTACK \relax }{453}{\code {SV{\_}ONSTACK \relax }} -\entry {SV{\_}INTERRUPT \relax }{453}{\code {SV{\_}INTERRUPT \relax }} -\entry {SV{\_}RESETHAND \relax }{453}{\code {SV{\_}RESETHAND \relax }} -\entry {opterr \relax }{459}{\code {opterr \relax }} -\entry {optopt \relax }{459}{\code {optopt \relax }} -\entry {optind \relax }{459}{\code {optind \relax }} -\entry {optarg \relax }{459}{\code {optarg \relax }} -\entry {environ \relax }{468}{\code {environ \relax }} -\entry {EXIT{\_}SUCCESS \relax }{471}{\code {EXIT{\_}SUCCESS \relax }} -\entry {EXIT{\_}FAILURE \relax }{471}{\code {EXIT{\_}FAILURE \relax }} -\entry {L{\_}ctermid \relax }{509}{\code {L{\_}ctermid \relax }} -\entry {L{\_}cuserid \relax }{524}{\code {L{\_}cuserid \relax }} -\entry {ARG{\_}MAX \relax }{537}{\code {ARG{\_}MAX \relax }} -\entry {CHILD{\_}MAX \relax }{537}{\code {CHILD{\_}MAX \relax }} -\entry {OPEN{\_}MAX \relax }{537}{\code {OPEN{\_}MAX \relax }} -\entry {STREAM{\_}MAX \relax }{538}{\code {STREAM{\_}MAX \relax }} -\entry {TZNAME{\_}MAX \relax }{538}{\code {TZNAME{\_}MAX \relax }} -\entry {NGROUPS{\_}MAX \relax }{538}{\code {NGROUPS{\_}MAX \relax }} -\entry {SSIZE{\_}MAX \relax }{538}{\code {SSIZE{\_}MAX \relax }} -\entry {RE{\_}DUP{\_}MAX \relax }{538}{\code {RE{\_}DUP{\_}MAX \relax }} -\entry {{\_}POSIX{\_}JOB{\_}CONTROL \relax }{539}{\code {{\_}POSIX{\_}JOB{\_}CONTROL \relax }} -\entry {{\_}POSIX{\_}SAVED{\_}IDS \relax }{539}{\code {{\_}POSIX{\_}SAVED{\_}IDS \relax }} -\entry {{\_}POSIX2{\_}C{\_}DEV \relax }{539}{\code {{\_}POSIX2{\_}C{\_}DEV \relax }} -\entry {{\_}POSIX2{\_}FORT{\_}DEV \relax }{539}{\code {{\_}POSIX2{\_}FORT{\_}DEV \relax }} -\entry {{\_}POSIX2{\_}FORT{\_}RUN \relax }{540}{\code {{\_}POSIX2{\_}FORT{\_}RUN \relax }} -\entry {{\_}POSIX2{\_}LOCALEDEF \relax }{540}{\code {{\_}POSIX2{\_}LOCALEDEF \relax }} -\entry {{\_}POSIX2{\_}SW{\_}DEV \relax }{540}{\code {{\_}POSIX2{\_}SW{\_}DEV \relax }} -\entry {{\_}POSIX{\_}VERSION \relax }{540}{\code {{\_}POSIX{\_}VERSION \relax }} -\entry {{\_}POSIX2{\_}C{\_}VERSION \relax }{541}{\code {{\_}POSIX2{\_}C{\_}VERSION \relax }} -\entry {LINK{\_}MAX \relax }{546}{\code {LINK{\_}MAX \relax }} -\entry {MAX{\_}CANON \relax }{546}{\code {MAX{\_}CANON \relax }} -\entry {MAX{\_}INPUT \relax }{546}{\code {MAX{\_}INPUT \relax }} -\entry {NAME{\_}MAX \relax }{546}{\code {NAME{\_}MAX \relax }} -\entry {PATH{\_}MAX \relax }{546}{\code {PATH{\_}MAX \relax }} -\entry {PIPE{\_}BUF \relax }{546}{\code {PIPE{\_}BUF \relax }} -\entry {MAXNAMLEN \relax }{546}{\code {MAXNAMLEN \relax }} -\entry {FILENAME{\_}MAX \relax }{547}{\code {FILENAME{\_}MAX \relax }} -\entry {{\_}POSIX{\_}CHOWN{\_}RESTRICTED \relax }{547}{\code {{\_}POSIX{\_}CHOWN{\_}RESTRICTED \relax }} -\entry {{\_}POSIX{\_}NO{\_}TRUNC \relax }{547}{\code {{\_}POSIX{\_}NO{\_}TRUNC \relax }} -\entry {{\_}POSIX{\_}VDISABLE \relax }{548}{\code {{\_}POSIX{\_}VDISABLE \relax }} -\entry {BC{\_}BASE{\_}MAX \relax }{550}{\code {BC{\_}BASE{\_}MAX \relax }} -\entry {BC{\_}SCALE{\_}MAX \relax }{551}{\code {BC{\_}SCALE{\_}MAX \relax }} -\entry {BC{\_}DIM{\_}MAX \relax }{551}{\code {BC{\_}DIM{\_}MAX \relax }} -\entry {BC{\_}STRING{\_}MAX \relax }{551}{\code {BC{\_}STRING{\_}MAX \relax }} -\entry {BC{\_}DIM{\_}MAX \relax }{551}{\code {BC{\_}DIM{\_}MAX \relax }} -\entry {COLL{\_}WEIGHTS{\_}MAX \relax }{551}{\code {COLL{\_}WEIGHTS{\_}MAX \relax }} -\entry {EXPR{\_}NEST{\_}MAX \relax }{551}{\code {EXPR{\_}NEST{\_}MAX \relax }} -\entry {LINE{\_}MAX \relax }{551}{\code {LINE{\_}MAX \relax }} -\entry {NDEBUG}{555}{\code {NDEBUG}} -\entry {NULL \relax }{564}{\code {NULL \relax }} +\entry {ECONNABORTED \relax }{20}{\code {ECONNABORTED \relax }} +\entry {ECONNRESET \relax }{20}{\code {ECONNRESET \relax }} +\entry {ENOBUFS \relax }{20}{\code {ENOBUFS \relax }} +\entry {EISCONN \relax }{20}{\code {EISCONN \relax }} +\entry {ENOTCONN \relax }{20}{\code {ENOTCONN \relax }} +\entry {ESHUTDOWN \relax }{20}{\code {ESHUTDOWN \relax }} +\entry {ETIMEDOUT \relax }{20}{\code {ETIMEDOUT \relax }} +\entry {ECONNREFUSED \relax }{20}{\code {ECONNREFUSED \relax }} +\entry {ELOOP \relax }{20}{\code {ELOOP \relax }} +\entry {ENAMETOOLONG \relax }{20}{\code {ENAMETOOLONG \relax }} +\entry {EHOSTDOWN \relax }{21}{\code {EHOSTDOWN \relax }} +\entry {EHOSTUNREACH \relax }{21}{\code {EHOSTUNREACH \relax }} +\entry {ENOTEMPTY \relax }{21}{\code {ENOTEMPTY \relax }} +\entry {EUSERS \relax }{21}{\code {EUSERS \relax }} +\entry {EDQUOT \relax }{21}{\code {EDQUOT \relax }} +\entry {ESTALE \relax }{21}{\code {ESTALE \relax }} +\entry {EREMOTE \relax }{21}{\code {EREMOTE \relax }} +\entry {ENOLCK \relax }{21}{\code {ENOLCK \relax }} +\entry {ENOSYS \relax }{21}{\code {ENOSYS \relax }} +\entry {EBACKGROUND \relax }{21}{\code {EBACKGROUND \relax }} +\entry {ED \relax }{22}{\code {ED \relax }} +\entry {EGREGIOUS \relax }{22}{\code {EGREGIOUS \relax }} +\entry {EIEIO \relax }{22}{\code {EIEIO \relax }} +\entry {EGRATUITOUS \relax }{22}{\code {EGRATUITOUS \relax }} +\entry {program{\_}invocation{\_}name \relax }{23}{\code {program{\_}invocation{\_}name \relax }} +\entry {program{\_}invocation{\_}short{\_}name \relax }{23}{\code {program{\_}invocation{\_}short{\_}name \relax }} +\entry {{\_}{\_}malloc{\_}hook}{32}{\code {{\_}{\_}malloc{\_}hook}} +\entry {{\_}{\_}realloc{\_}hook}{32}{\code {{\_}{\_}realloc{\_}hook}} +\entry {{\_}{\_}free{\_}hook}{33}{\code {{\_}{\_}free{\_}hook}} +\entry {stdin \relax }{81}{\code {stdin \relax }} +\entry {stdout \relax }{82}{\code {stdout \relax }} +\entry {stderr \relax }{82}{\code {stderr \relax }} +\entry {FOPEN{\_}MAX \relax }{84}{\code {FOPEN{\_}MAX \relax }} +\entry {PA{\_}FLAG{\_}MASK \relax }{105}{\code {PA{\_}FLAG{\_}MASK \relax }} +\entry {PA{\_}INT}{105}{\code {PA{\_}INT}} +\entry {PA{\_}CHAR}{105}{\code {PA{\_}CHAR}} +\entry {PA{\_}STRING}{105}{\code {PA{\_}STRING}} +\entry {PA{\_}POINTER}{105}{\code {PA{\_}POINTER}} +\entry {PA{\_}FLOAT}{105}{\code {PA{\_}FLOAT}} +\entry {PA{\_}DOUBLE}{105}{\code {PA{\_}DOUBLE}} +\entry {PA{\_}LAST}{105}{\code {PA{\_}LAST}} +\entry {PA{\_}FLAG{\_}PTR}{105}{\code {PA{\_}FLAG{\_}PTR}} +\entry {PA{\_}FLAG{\_}SHORT}{105}{\code {PA{\_}FLAG{\_}SHORT}} +\entry {PA{\_}FLAG{\_}LONG}{105}{\code {PA{\_}FLAG{\_}LONG}} +\entry {PA{\_}FLAG{\_}LONG{\_}LONG}{106}{\code {PA{\_}FLAG{\_}LONG{\_}LONG}} +\entry {PA{\_}FLAG{\_}LONG{\_}DOUBLE}{106}{\code {PA{\_}FLAG{\_}LONG{\_}DOUBLE}} +\entry {EOF \relax }{122}{\code {EOF \relax }} +\entry {SEEK{\_}SET \relax }{124}{\code {SEEK{\_}SET \relax }} +\entry {SEEK{\_}CUR \relax }{124}{\code {SEEK{\_}CUR \relax }} +\entry {SEEK{\_}END \relax }{125}{\code {SEEK{\_}END \relax }} +\entry {L{\_}SET}{125}{\code {L{\_}SET}} +\entry {L{\_}INCR}{125}{\code {L{\_}INCR}} +\entry {L{\_}XTND}{125}{\code {L{\_}XTND}} +\entry {{\_}IOFBF \relax }{129}{\code {{\_}IOFBF \relax }} +\entry {{\_}IOLBF \relax }{129}{\code {{\_}IOLBF \relax }} +\entry {{\_}IONBF \relax }{129}{\code {{\_}IONBF \relax }} +\entry {BUFSIZ \relax }{129}{\code {BUFSIZ \relax }} +\entry {O{\_}RDONLY}{137}{\code {O{\_}RDONLY}} +\entry {O{\_}WRONLY}{137}{\code {O{\_}WRONLY}} +\entry {O{\_}RDWR}{137}{\code {O{\_}RDWR}} +\entry {O{\_}APPEND}{138}{\code {O{\_}APPEND}} +\entry {O{\_}CREAT}{138}{\code {O{\_}CREAT}} +\entry {O{\_}EXCL}{138}{\code {O{\_}EXCL}} +\entry {O{\_}NOCTTY}{138}{\code {O{\_}NOCTTY}} +\entry {O{\_}NONBLOCK}{138}{\code {O{\_}NONBLOCK}} +\entry {O{\_}TRUNC}{138}{\code {O{\_}TRUNC}} +\entry {STDIN{\_}FILENO}{146}{\code {STDIN{\_}FILENO}} +\entry {STDOUT{\_}FILENO}{146}{\code {STDOUT{\_}FILENO}} +\entry {STDERR{\_}FILENO}{146}{\code {STDERR{\_}FILENO}} +\entry {FD{\_}SETSIZE \relax }{149}{\code {FD{\_}SETSIZE \relax }} +\entry {F{\_}DUPFD \relax }{153}{\code {F{\_}DUPFD \relax }} +\entry {F{\_}GETFD \relax }{155}{\code {F{\_}GETFD \relax }} +\entry {F{\_}SETFD \relax }{155}{\code {F{\_}SETFD \relax }} +\entry {FD{\_}CLOEXEC \relax }{155}{\code {FD{\_}CLOEXEC \relax }} +\entry {F{\_}GETFL \relax }{156}{\code {F{\_}GETFL \relax }} +\entry {F{\_}SETFL \relax }{157}{\code {F{\_}SETFL \relax }} +\entry {O{\_}ACCMODE \relax }{157}{\code {O{\_}ACCMODE \relax }} +\entry {F{\_}GETLK \relax }{159}{\code {F{\_}GETLK \relax }} +\entry {F{\_}SETLK \relax }{160}{\code {F{\_}SETLK \relax }} +\entry {F{\_}SETLKW \relax }{161}{\code {F{\_}SETLKW \relax }} +\entry {F{\_}RDLCK}{161}{\code {F{\_}RDLCK}} +\entry {F{\_}WRLCK}{161}{\code {F{\_}WRLCK}} +\entry {F{\_}UNLCK}{161}{\code {F{\_}UNLCK}} +\entry {F{\_}GETOWN \relax }{162}{\code {F{\_}GETOWN \relax }} +\entry {F{\_}SETOWN \relax }{163}{\code {F{\_}SETOWN \relax }} +\entry {S{\_}IFMT \relax }{182}{\code {S{\_}IFMT \relax }} +\entry {S{\_}IFDIR}{182}{\code {S{\_}IFDIR}} +\entry {S{\_}IFCHR}{182}{\code {S{\_}IFCHR}} +\entry {S{\_}IFBLK}{182}{\code {S{\_}IFBLK}} +\entry {S{\_}IFREG}{182}{\code {S{\_}IFREG}} +\entry {S{\_}IFLNK}{182}{\code {S{\_}IFLNK}} +\entry {S{\_}IFSOCK}{182}{\code {S{\_}IFSOCK}} +\entry {S{\_}IFIFO}{182}{\code {S{\_}IFIFO}} +\entry {S{\_}IRUSR}{184}{\code {S{\_}IRUSR}} +\entry {S{\_}IREAD}{184}{\code {S{\_}IREAD}} +\entry {S{\_}IWUSR}{184}{\code {S{\_}IWUSR}} +\entry {S{\_}IWRITE}{184}{\code {S{\_}IWRITE}} +\entry {S{\_}IXUSR}{184}{\code {S{\_}IXUSR}} +\entry {S{\_}IEXEC}{184}{\code {S{\_}IEXEC}} +\entry {S{\_}IRWXU}{184}{\code {S{\_}IRWXU}} +\entry {S{\_}IRGRP}{184}{\code {S{\_}IRGRP}} +\entry {S{\_}IWGRP}{184}{\code {S{\_}IWGRP}} +\entry {S{\_}IXGRP}{184}{\code {S{\_}IXGRP}} +\entry {S{\_}IRWXG}{184}{\code {S{\_}IRWXG}} +\entry {S{\_}IROTH}{184}{\code {S{\_}IROTH}} +\entry {S{\_}IWOTH}{184}{\code {S{\_}IWOTH}} +\entry {S{\_}IXOTH}{184}{\code {S{\_}IXOTH}} +\entry {S{\_}IRWXO}{184}{\code {S{\_}IRWXO}} +\entry {S{\_}ISUID}{184}{\code {S{\_}ISUID}} +\entry {S{\_}ISGID}{185}{\code {S{\_}ISGID}} +\entry {S{\_}ISVTX}{185}{\code {S{\_}ISVTX}} +\entry {R{\_}OK \relax }{189}{\code {R{\_}OK \relax }} +\entry {W{\_}OK \relax }{189}{\code {W{\_}OK \relax }} +\entry {X{\_}OK \relax }{189}{\code {X{\_}OK \relax }} +\entry {F{\_}OK \relax }{189}{\code {F{\_}OK \relax }} +\entry {L{\_}tmpnam \relax }{192}{\code {L{\_}tmpnam \relax }} +\entry {TMP{\_}MAX \relax }{193}{\code {TMP{\_}MAX \relax }} +\entry {P{\_}tmpdir \relax }{193}{\code {P{\_}tmpdir \relax }} +\entry {SOCK{\_}STREAM \relax }{202}{\code {SOCK{\_}STREAM \relax }} +\entry {SOCK{\_}DGRAM \relax }{202}{\code {SOCK{\_}DGRAM \relax }} +\entry {SOCK{\_}RAW \relax }{203}{\code {SOCK{\_}RAW \relax }} +\entry {AF{\_}FILE}{204}{\code {AF{\_}FILE}} +\entry {AF{\_}UNIX}{204}{\code {AF{\_}UNIX}} +\entry {AF{\_}INET}{205}{\code {AF{\_}INET}} +\entry {AF{\_}UNSPEC}{205}{\code {AF{\_}UNSPEC}} +\entry {PF{\_}FILE \relax }{207}{\code {PF{\_}FILE \relax }} +\entry {PF{\_}UNIX \relax }{207}{\code {PF{\_}UNIX \relax }} +\entry {PF{\_}INET \relax }{209}{\code {PF{\_}INET \relax }} +\entry {INADDR{\_}LOOPBACK \relax }{212}{\code {INADDR{\_}LOOPBACK \relax }} +\entry {INADDR{\_}ANY \relax }{212}{\code {INADDR{\_}ANY \relax }} +\entry {INADDR{\_}BROADCAST \relax }{212}{\code {INADDR{\_}BROADCAST \relax }} +\entry {INADDR{\_}NONE \relax }{212}{\code {INADDR{\_}NONE \relax }} +\entry {h{\_}errno}{215}{\code {h{\_}errno}} +\entry {HOST{\_}NOT{\_}FOUND}{215}{\code {HOST{\_}NOT{\_}FOUND}} +\entry {TRY{\_}AGAIN}{215}{\code {TRY{\_}AGAIN}} +\entry {NO{\_}RECOVERY}{215}{\code {NO{\_}RECOVERY}} +\entry {NO{\_}ADDRESS}{215}{\code {NO{\_}ADDRESS}} +\entry {IPPORT{\_}RESERVED \relax }{216}{\code {IPPORT{\_}RESERVED \relax }} +\entry {IPPORT{\_}USERRESERVED \relax }{216}{\code {IPPORT{\_}USERRESERVED \relax }} +\entry {PF{\_}NS}{222}{\code {PF{\_}NS}} +\entry {PF{\_}ISO}{222}{\code {PF{\_}ISO}} +\entry {PF{\_}CCITT}{222}{\code {PF{\_}CCITT}} +\entry {PF{\_}IMPLINK}{222}{\code {PF{\_}IMPLINK}} +\entry {PF{\_}ROUTE}{222}{\code {PF{\_}ROUTE}} +\entry {MSG{\_}OOB \relax }{231}{\code {MSG{\_}OOB \relax }} +\entry {MSG{\_}PEEK \relax }{231}{\code {MSG{\_}PEEK \relax }} +\entry {MSG{\_}DONTROUTE \relax }{231}{\code {MSG{\_}DONTROUTE \relax }} +\entry {SOL{\_}SOCKET \relax }{245}{\code {SOL{\_}SOCKET \relax }} +\entry {NCCS \relax }{252}{\code {NCCS \relax }} +\entry {TCSANOW}{252}{\code {TCSANOW}} +\entry {TCSADRAIN}{252}{\code {TCSADRAIN}} +\entry {TCSAFLUSH}{252}{\code {TCSAFLUSH}} +\entry {TCSASOFT}{253}{\code {TCSASOFT}} +\entry {INPCK}{255}{\code {INPCK}} +\entry {IGNPAR}{255}{\code {IGNPAR}} +\entry {PARMRK}{255}{\code {PARMRK}} +\entry {ISTRIP}{255}{\code {ISTRIP}} +\entry {IGNBRK}{255}{\code {IGNBRK}} +\entry {BRKINT}{255}{\code {BRKINT}} +\entry {IGNCR}{256}{\code {IGNCR}} +\entry {ICRNL}{256}{\code {ICRNL}} +\entry {INLCR}{256}{\code {INLCR}} +\entry {IXOFF}{256}{\code {IXOFF}} +\entry {IXON}{256}{\code {IXON}} +\entry {OPOST \relax }{257}{\code {OPOST \relax }} +\entry {ONLCR \relax }{257}{\code {ONLCR \relax }} +\entry {OXTABS \relax }{257}{\code {OXTABS \relax }} +\entry {ONOEOT \relax }{257}{\code {ONOEOT \relax }} +\entry {CLOCAL}{257}{\code {CLOCAL}} +\entry {HUPCL}{258}{\code {HUPCL}} +\entry {CREAD}{258}{\code {CREAD}} +\entry {CSTOPB}{258}{\code {CSTOPB}} +\entry {PARENB}{258}{\code {PARENB}} +\entry {PARODD}{258}{\code {PARODD}} +\entry {CSIZE}{258}{\code {CSIZE}} +\entry {CS5}{258}{\code {CS5}} +\entry {CS6}{258}{\code {CS6}} +\entry {CS7}{258}{\code {CS7}} +\entry {CS8}{258}{\code {CS8}} +\entry {CCTS{\_}OFLOW}{258}{\code {CCTS{\_}OFLOW}} +\entry {CRTS{\_}IFLOW}{258}{\code {CRTS{\_}IFLOW}} +\entry {MDMBUF}{258}{\code {MDMBUF}} +\entry {ICANON}{259}{\code {ICANON}} +\entry {ECHO}{259}{\code {ECHO}} +\entry {ECHOE}{259}{\code {ECHOE}} +\entry {ECHOK}{259}{\code {ECHOK}} +\entry {ECHONL}{259}{\code {ECHONL}} +\entry {ISIG}{259}{\code {ISIG}} +\entry {IEXTEN}{260}{\code {IEXTEN}} +\entry {NOFLSH}{260}{\code {NOFLSH}} +\entry {TOSTOP}{260}{\code {TOSTOP}} +\entry {ECHOKE}{260}{\code {ECHOKE}} +\entry {ECHOPRT}{260}{\code {ECHOPRT}} +\entry {ECHOCTL}{260}{\code {ECHOCTL}} +\entry {ALTWERASE}{260}{\code {ALTWERASE}} +\entry {FLUSHO}{260}{\code {FLUSHO}} +\entry {NOKERNINFO}{261}{\code {NOKERNINFO}} +\entry {PENDIN}{261}{\code {PENDIN}} +\entry {B0}{262}{\code {B0}} +\entry {B50}{262}{\code {B50}} +\entry {B75}{262}{\code {B75}} +\entry {B110}{262}{\code {B110}} +\entry {B134}{262}{\code {B134}} +\entry {B150}{262}{\code {B150}} +\entry {B200}{262}{\code {B200}} +\entry {B300}{262}{\code {B300}} +\entry {B600}{262}{\code {B600}} +\entry {B1200}{262}{\code {B1200}} +\entry {B1800}{262}{\code {B1800}} +\entry {B2400}{262}{\code {B2400}} +\entry {B4800}{262}{\code {B4800}} +\entry {B9600}{262}{\code {B9600}} +\entry {B19200}{262}{\code {B19200}} +\entry {B38400}{262}{\code {B38400}} +\entry {EXTA}{262}{\code {EXTA}} +\entry {EXTB}{262}{\code {EXTB}} +\entry {{\_}POSIX{\_}VDISABLE}{263}{\code {{\_}POSIX{\_}VDISABLE}} +\entry {VEOF \relax }{263}{\code {VEOF \relax }} +\entry {VEOL \relax }{264}{\code {VEOL \relax }} +\entry {VERASE \relax }{264}{\code {VERASE \relax }} +\entry {VKILL \relax }{264}{\code {VKILL \relax }} +\entry {VEOL2 \relax }{264}{\code {VEOL2 \relax }} +\entry {VWERASE \relax }{265}{\code {VWERASE \relax }} +\entry {VREPRINT \relax }{265}{\code {VREPRINT \relax }} +\entry {VLNEXT \relax }{265}{\code {VLNEXT \relax }} +\entry {VINTR \relax }{265}{\code {VINTR \relax }} +\entry {VQUIT \relax }{266}{\code {VQUIT \relax }} +\entry {VSUSP \relax }{266}{\code {VSUSP \relax }} +\entry {VDSUSP \relax }{266}{\code {VDSUSP \relax }} +\entry {VSTART \relax }{267}{\code {VSTART \relax }} +\entry {VSTOP \relax }{267}{\code {VSTOP \relax }} +\entry {VDISCARD \relax }{267}{\code {VDISCARD \relax }} +\entry {VSTATUS \relax }{268}{\code {VSTATUS \relax }} +\entry {VMIN \relax }{268}{\code {VMIN \relax }} +\entry {VTIME \relax }{268}{\code {VTIME \relax }} +\entry {TCIFLUSH}{270}{\code {TCIFLUSH}} +\entry {TCOFLUSH}{270}{\code {TCOFLUSH}} +\entry {TCIOFLUSH}{270}{\code {TCIOFLUSH}} +\entry {TCOOFF}{271}{\code {TCOOFF}} +\entry {TCOON}{271}{\code {TCOON}} +\entry {TCIOFF}{271}{\code {TCIOFF}} +\entry {TCION}{271}{\code {TCION}} +\entry {EBADF}{271}{\code {EBADF}} +\entry {ENOTTY}{271}{\code {ENOTTY}} +\entry {EINVAL}{271}{\code {EINVAL}} +\entry {HUGE{\_}VAL \relax }{276}{\code {HUGE{\_}VAL \relax }} +\entry {RAND{\_}MAX \relax }{280}{\code {RAND{\_}MAX \relax }} +\entry {NAN \relax }{283}{\code {NAN \relax }} +\entry {CLOCKS{\_}PER{\_}SEC \relax }{316}{\code {CLOCKS{\_}PER{\_}SEC \relax }} +\entry {CLK{\_}TCK \relax }{316}{\code {CLK{\_}TCK \relax }} +\entry {* tzname [2] \relax }{327}{\code {* tzname [2] \relax }} +\entry {timezone \relax }{328}{\code {timezone \relax }} +\entry {daylight \relax }{328}{\code {daylight \relax }} +\entry {RLIMIT{\_}CPU}{334}{\code {RLIMIT{\_}CPU}} +\entry {RLIMIT{\_}FSIZE}{335}{\code {RLIMIT{\_}FSIZE}} +\entry {RLIMIT{\_}DATA}{335}{\code {RLIMIT{\_}DATA}} +\entry {RLIMIT{\_}STACK}{335}{\code {RLIMIT{\_}STACK}} +\entry {RLIMIT{\_}CORE}{335}{\code {RLIMIT{\_}CORE}} +\entry {RLIMIT{\_}RSS}{335}{\code {RLIMIT{\_}RSS}} +\entry {RLIMIT{\_}OPEN{\_}FILES}{335}{\code {RLIMIT{\_}OPEN{\_}FILES}} +\entry {RLIM{\_}NLIMITS}{335}{\code {RLIM{\_}NLIMITS}} +\entry {int}{335}{\code {int}} +\entry {PRIO{\_}MIN}{336}{\code {PRIO{\_}MIN}} +\entry {PRIO{\_}MAX}{336}{\code {PRIO{\_}MAX}} +\entry {PRIO{\_}PROCESS}{336}{\code {PRIO{\_}PROCESS}} +\entry {PRIO{\_}PGRP}{337}{\code {PRIO{\_}PGRP}} +\entry {PRIO{\_}USER}{337}{\code {PRIO{\_}USER}} +\entry {MB{\_}LEN{\_}MAX \relax }{342}{\code {MB{\_}LEN{\_}MAX \relax }} +\entry {MB{\_}CUR{\_}MAX \relax }{342}{\code {MB{\_}CUR{\_}MAX \relax }} +\entry {LC{\_}COLLATE}{352}{\code {LC{\_}COLLATE}} +\entry {LC{\_}CTYPE}{352}{\code {LC{\_}CTYPE}} +\entry {LC{\_}MONETARY}{353}{\code {LC{\_}MONETARY}} +\entry {LC{\_}NUMERIC}{353}{\code {LC{\_}NUMERIC}} +\entry {LC{\_}TIME}{353}{\code {LC{\_}TIME}} +\entry {LC{\_}ALL}{353}{\code {LC{\_}ALL}} +\entry {LANG}{353}{\code {LANG}} +\entry {NSIG \relax }{368}{\code {NSIG \relax }} +\entry {COREFILE}{368}{\code {COREFILE}} +\entry {SIGFPE \relax }{368}{\code {SIGFPE \relax }} +\entry {FPE{\_}INTOVF{\_}TRAP}{369}{\code {FPE{\_}INTOVF{\_}TRAP}} +\entry {FPE{\_}INTDIV{\_}TRAP}{369}{\code {FPE{\_}INTDIV{\_}TRAP}} +\entry {FPE{\_}SUBRNG{\_}TRAP}{369}{\code {FPE{\_}SUBRNG{\_}TRAP}} +\entry {FPE{\_}FLTOVF{\_}TRAP}{369}{\code {FPE{\_}FLTOVF{\_}TRAP}} +\entry {FPE{\_}FLTDIV{\_}TRAP}{369}{\code {FPE{\_}FLTDIV{\_}TRAP}} +\entry {FPE{\_}FLTUND{\_}TRAP}{369}{\code {FPE{\_}FLTUND{\_}TRAP}} +\entry {FPE{\_}DECOVF{\_}TRAP}{369}{\code {FPE{\_}DECOVF{\_}TRAP}} +\entry {SIGILL \relax }{369}{\code {SIGILL \relax }} +\entry {SIGSEGV \relax }{370}{\code {SIGSEGV \relax }} +\entry {SIGBUS \relax }{370}{\code {SIGBUS \relax }} +\entry {SIGABRT \relax }{370}{\code {SIGABRT \relax }} +\entry {SIGHUP \relax }{371}{\code {SIGHUP \relax }} +\entry {SIGINT \relax }{371}{\code {SIGINT \relax }} +\entry {SIGQUIT \relax }{371}{\code {SIGQUIT \relax }} +\entry {SIGTERM \relax }{372}{\code {SIGTERM \relax }} +\entry {SIGKILL \relax }{372}{\code {SIGKILL \relax }} +\entry {SIGALRM \relax }{372}{\code {SIGALRM \relax }} +\entry {SIGVTALRM \relax }{372}{\code {SIGVTALRM \relax }} +\entry {SIGPROF \relax }{372}{\code {SIGPROF \relax }} +\entry {SIGIO \relax }{373}{\code {SIGIO \relax }} +\entry {SIGURG \relax }{373}{\code {SIGURG \relax }} +\entry {SIGCHLD \relax }{373}{\code {SIGCHLD \relax }} +\entry {SIGCONT \relax }{373}{\code {SIGCONT \relax }} +\entry {SIGSTOP \relax }{374}{\code {SIGSTOP \relax }} +\entry {SIGTSTP \relax }{374}{\code {SIGTSTP \relax }} +\entry {SIGTTIN \relax }{374}{\code {SIGTTIN \relax }} +\entry {SIGTTOU \relax }{374}{\code {SIGTTOU \relax }} +\entry {SIGPIPE \relax }{375}{\code {SIGPIPE \relax }} +\entry {SIGUSR1 \relax }{375}{\code {SIGUSR1 \relax }} +\entry {SIGUSR2 \relax }{375}{\code {SIGUSR2 \relax }} +\entry {sys{\_}siglist}{377}{\code {sys{\_}siglist}} +\entry {SIG{\_}DFL}{378}{\code {SIG{\_}DFL}} +\entry {SIG{\_}IGN}{378}{\code {SIG{\_}IGN}} +\entry {SIG{\_}ERR \relax }{380}{\code {SIG{\_}ERR \relax }} +\entry {SA{\_}NOCLDSTOP \relax }{383}{\code {SA{\_}NOCLDSTOP \relax }} +\entry {SA{\_}ONSTACK \relax }{383}{\code {SA{\_}ONSTACK \relax }} +\entry {SA{\_}RESTART \relax }{383}{\code {SA{\_}RESTART \relax }} +\entry {SIG{\_}BLOCK}{405}{\code {SIG{\_}BLOCK}} +\entry {SIG{\_}UNBLOCK}{405}{\code {SIG{\_}UNBLOCK}} +\entry {SIG{\_}SETMASK}{405}{\code {SIG{\_}SETMASK}} +\entry {SV{\_}ONSTACK \relax }{414}{\code {SV{\_}ONSTACK \relax }} +\entry {SV{\_}INTERRUPT \relax }{415}{\code {SV{\_}INTERRUPT \relax }} +\entry {SV{\_}RESETHAND \relax }{415}{\code {SV{\_}RESETHAND \relax }} +\entry {SIGSTKSZ}{417}{\code {SIGSTKSZ}} +\entry {MINSIGSTKSZ}{417}{\code {MINSIGSTKSZ}} +\entry {SA{\_}DISABLE}{417}{\code {SA{\_}DISABLE}} +\entry {SA{\_}ONSTACK}{417}{\code {SA{\_}ONSTACK}} +\entry {opterr \relax }{421}{\code {opterr \relax }} +\entry {optopt \relax }{421}{\code {optopt \relax }} +\entry {optind \relax }{421}{\code {optind \relax }} +\entry {optarg \relax }{421}{\code {optarg \relax }} +\entry {environ \relax }{429}{\code {environ \relax }} +\entry {EXIT{\_}SUCCESS \relax }{432}{\code {EXIT{\_}SUCCESS \relax }} +\entry {EXIT{\_}FAILURE \relax }{433}{\code {EXIT{\_}FAILURE \relax }} +\entry {L{\_}ctermid \relax }{468}{\code {L{\_}ctermid \relax }} +\entry {L{\_}cuserid \relax }{483}{\code {L{\_}cuserid \relax }} +\entry {ARG{\_}MAX \relax }{495}{\code {ARG{\_}MAX \relax }} +\entry {CHILD{\_}MAX \relax }{495}{\code {CHILD{\_}MAX \relax }} +\entry {OPEN{\_}MAX \relax }{495}{\code {OPEN{\_}MAX \relax }} +\entry {STREAM{\_}MAX \relax }{495}{\code {STREAM{\_}MAX \relax }} +\entry {TZNAME{\_}MAX \relax }{496}{\code {TZNAME{\_}MAX \relax }} +\entry {NGROUPS{\_}MAX \relax }{496}{\code {NGROUPS{\_}MAX \relax }} +\entry {SSIZE{\_}MAX \relax }{496}{\code {SSIZE{\_}MAX \relax }} +\entry {RE{\_}DUP{\_}MAX \relax }{496}{\code {RE{\_}DUP{\_}MAX \relax }} +\entry {{\_}POSIX{\_}JOB{\_}CONTROL \relax }{497}{\code {{\_}POSIX{\_}JOB{\_}CONTROL \relax }} +\entry {{\_}POSIX{\_}SAVED{\_}IDS \relax }{497}{\code {{\_}POSIX{\_}SAVED{\_}IDS \relax }} +\entry {{\_}POSIX2{\_}C{\_}DEV \relax }{497}{\code {{\_}POSIX2{\_}C{\_}DEV \relax }} +\entry {{\_}POSIX2{\_}FORT{\_}DEV \relax }{497}{\code {{\_}POSIX2{\_}FORT{\_}DEV \relax }} +\entry {{\_}POSIX2{\_}FORT{\_}RUN \relax }{497}{\code {{\_}POSIX2{\_}FORT{\_}RUN \relax }} +\entry {{\_}POSIX2{\_}LOCALEDEF \relax }{498}{\code {{\_}POSIX2{\_}LOCALEDEF \relax }} +\entry {{\_}POSIX2{\_}SW{\_}DEV \relax }{498}{\code {{\_}POSIX2{\_}SW{\_}DEV \relax }} +\entry {{\_}POSIX{\_}VERSION \relax }{498}{\code {{\_}POSIX{\_}VERSION \relax }} +\entry {{\_}POSIX2{\_}C{\_}VERSION \relax }{498}{\code {{\_}POSIX2{\_}C{\_}VERSION \relax }} +\entry {LINK{\_}MAX \relax }{503}{\code {LINK{\_}MAX \relax }} +\entry {MAX{\_}CANON \relax }{503}{\code {MAX{\_}CANON \relax }} +\entry {MAX{\_}INPUT \relax }{503}{\code {MAX{\_}INPUT \relax }} +\entry {NAME{\_}MAX \relax }{503}{\code {NAME{\_}MAX \relax }} +\entry {PATH{\_}MAX \relax }{504}{\code {PATH{\_}MAX \relax }} +\entry {PIPE{\_}BUF \relax }{504}{\code {PIPE{\_}BUF \relax }} +\entry {MAXNAMLEN \relax }{504}{\code {MAXNAMLEN \relax }} +\entry {FILENAME{\_}MAX \relax }{504}{\code {FILENAME{\_}MAX \relax }} +\entry {{\_}POSIX{\_}CHOWN{\_}RESTRICTED \relax }{505}{\code {{\_}POSIX{\_}CHOWN{\_}RESTRICTED \relax }} +\entry {{\_}POSIX{\_}NO{\_}TRUNC \relax }{505}{\code {{\_}POSIX{\_}NO{\_}TRUNC \relax }} +\entry {{\_}POSIX{\_}VDISABLE \relax }{505}{\code {{\_}POSIX{\_}VDISABLE \relax }} +\entry {BC{\_}BASE{\_}MAX \relax }{508}{\code {BC{\_}BASE{\_}MAX \relax }} +\entry {BC{\_}SCALE{\_}MAX \relax }{508}{\code {BC{\_}SCALE{\_}MAX \relax }} +\entry {BC{\_}DIM{\_}MAX \relax }{508}{\code {BC{\_}DIM{\_}MAX \relax }} +\entry {BC{\_}STRING{\_}MAX \relax }{508}{\code {BC{\_}STRING{\_}MAX \relax }} +\entry {BC{\_}DIM{\_}MAX \relax }{508}{\code {BC{\_}DIM{\_}MAX \relax }} +\entry {COLL{\_}WEIGHTS{\_}MAX \relax }{508}{\code {COLL{\_}WEIGHTS{\_}MAX \relax }} +\entry {EXPR{\_}NEST{\_}MAX \relax }{508}{\code {EXPR{\_}NEST{\_}MAX \relax }} +\entry {LINE{\_}MAX \relax }{508}{\code {LINE{\_}MAX \relax }} +\entry {EQUIV{\_}CLASS{\_}MAX \relax }{508}{\code {EQUIV{\_}CLASS{\_}MAX \relax }} +\entry {NDEBUG}{511}{\code {NDEBUG}} +\entry {NULL \relax }{519}{\code {NULL \relax }} diff -ruN glibc-1.06/manual/libc.vrs glibc-1.07/manual/libc.vrs --- glibc-1.06/manual/libc.vrs Mon May 17 16:59:15 1993 +++ glibc-1.07/manual/libc.vrs Wed Dec 29 18:34:49 1993 @@ -1,442 +1,453 @@ \initial {*} -\entry {\code {*tzname[2] \relax }}{380} +\entry {\code {* tzname [2] \relax }}{327} \initial {{\_}} -\entry {\code {{\_}{\_}free{\_}hook}}{35} -\entry {\code {{\_}{\_}malloc{\_}hook}}{35} -\entry {\code {{\_}{\_}realloc{\_}hook}}{35} -\entry {\code {{\_}BSD{\_}SOURCE}}{9} -\entry {\code {{\_}GNU{\_}SOURCE}}{10} -\entry {\code {{\_}IOFBF \relax }}{188} -\entry {\code {{\_}IOLBF \relax }}{188} -\entry {\code {{\_}IONBF \relax }}{188} -\entry {\code {{\_}POSIX{\_}C{\_}SOURCE}}{9} -\entry {\code {{\_}POSIX{\_}CHOWN{\_}RESTRICTED \relax }}{547} -\entry {\code {{\_}POSIX{\_}JOB{\_}CONTROL \relax }}{539} -\entry {\code {{\_}POSIX{\_}NO{\_}TRUNC \relax }}{547} -\entry {\code {{\_}POSIX{\_}SAVED{\_}IDS \relax }}{539} -\entry {\code {{\_}POSIX{\_}SOURCE}}{9} -\entry {\code {{\_}POSIX{\_}VDISABLE}}{331} -\entry {\code {{\_}POSIX{\_}VDISABLE \relax }}{548} -\entry {\code {{\_}POSIX{\_}VERSION \relax }}{540} -\entry {\code {{\_}POSIX2{\_}C{\_}DEV \relax }}{539} -\entry {\code {{\_}POSIX2{\_}C{\_}VERSION \relax }}{541} -\entry {\code {{\_}POSIX2{\_}FORT{\_}DEV \relax }}{539} -\entry {\code {{\_}POSIX2{\_}FORT{\_}RUN \relax }}{540} -\entry {\code {{\_}POSIX2{\_}LOCALEDEF \relax }}{540} -\entry {\code {{\_}POSIX2{\_}SW{\_}DEV \relax }}{540} +\entry {\code {{\_}{\_}free{\_}hook}}{33} +\entry {\code {{\_}{\_}malloc{\_}hook}}{32} +\entry {\code {{\_}{\_}realloc{\_}hook}}{32} +\entry {\code {{\_}BSD{\_}SOURCE}}{8} +\entry {\code {{\_}GNU{\_}SOURCE}}{9} +\entry {\code {{\_}IOFBF \relax }}{129} +\entry {\code {{\_}IOLBF \relax }}{129} +\entry {\code {{\_}IONBF \relax }}{129} +\entry {\code {{\_}POSIX{\_}C{\_}SOURCE}}{8} +\entry {\code {{\_}POSIX{\_}CHOWN{\_}RESTRICTED \relax }}{505} +\entry {\code {{\_}POSIX{\_}JOB{\_}CONTROL \relax }}{497} +\entry {\code {{\_}POSIX{\_}NO{\_}TRUNC \relax }}{505} +\entry {\code {{\_}POSIX{\_}SAVED{\_}IDS \relax }}{497} +\entry {\code {{\_}POSIX{\_}SOURCE}}{8} +\entry {\code {{\_}POSIX{\_}VDISABLE}}{263} +\entry {\code {{\_}POSIX{\_}VDISABLE \relax }}{505} +\entry {\code {{\_}POSIX{\_}VERSION \relax }}{498} +\entry {\code {{\_}POSIX2{\_}C{\_}DEV \relax }}{497} +\entry {\code {{\_}POSIX2{\_}C{\_}VERSION \relax }}{498} +\entry {\code {{\_}POSIX2{\_}FORT{\_}DEV \relax }}{497} +\entry {\code {{\_}POSIX2{\_}FORT{\_}RUN \relax }}{497} +\entry {\code {{\_}POSIX2{\_}LOCALEDEF \relax }}{498} +\entry {\code {{\_}POSIX2{\_}SW{\_}DEV \relax }}{498} \entry {\code {{\_}SVID{\_}SOURCE}}{9} \initial {A} -\entry {\code {AF{\_}FILE}}{269} -\entry {\code {AF{\_}INET}}{269} -\entry {\code {AF{\_}UNIX}}{269} -\entry {\code {AF{\_}UNSPEC}}{269} -\entry {\code {ALTWERASE}}{329} -\entry {\code {ARG{\_}MAX \relax }}{537} +\entry {\code {AF{\_}FILE}}{204} +\entry {\code {AF{\_}INET}}{205} +\entry {\code {AF{\_}UNIX}}{204} +\entry {\code {AF{\_}UNSPEC}}{205} +\entry {\code {ALTWERASE}}{260} +\entry {\code {ARG{\_}MAX \relax }}{495} \initial {B} -\entry {\code {B0}}{331} -\entry {\code {B110}}{331} -\entry {\code {B1200}}{331} -\entry {\code {B134}}{331} -\entry {\code {B150}}{331} -\entry {\code {B1800}}{331} -\entry {\code {B19200}}{331} -\entry {\code {B200}}{331} -\entry {\code {B2400}}{331} -\entry {\code {B300}}{331} -\entry {\code {B38400}}{331} -\entry {\code {B4800}}{331} -\entry {\code {B50}}{331} -\entry {\code {B600}}{331} -\entry {\code {B75}}{331} -\entry {\code {B9600}}{331} -\entry {\code {BC{\_}BASE{\_}MAX \relax }}{550} -\entry {\code {BC{\_}DIM{\_}MAX \relax }}{551} -\entry {\code {BC{\_}SCALE{\_}MAX \relax }}{551} -\entry {\code {BC{\_}STRING{\_}MAX \relax }}{551} -\entry {\code {BRKINT}}{324} -\entry {\code {BUFSIZ \relax }}{188} +\entry {\code {B0}}{262} +\entry {\code {B110}}{262} +\entry {\code {B1200}}{262} +\entry {\code {B134}}{262} +\entry {\code {B150}}{262} +\entry {\code {B1800}}{262} +\entry {\code {B19200}}{262} +\entry {\code {B200}}{262} +\entry {\code {B2400}}{262} +\entry {\code {B300}}{262} +\entry {\code {B38400}}{262} +\entry {\code {B4800}}{262} +\entry {\code {B50}}{262} +\entry {\code {B600}}{262} +\entry {\code {B75}}{262} +\entry {\code {B9600}}{262} +\entry {\code {BC{\_}BASE{\_}MAX \relax }}{508} +\entry {\code {BC{\_}DIM{\_}MAX \relax }}{508} +\entry {\code {BC{\_}SCALE{\_}MAX \relax }}{508} +\entry {\code {BC{\_}STRING{\_}MAX \relax }}{508} +\entry {\code {BRKINT}}{255} +\entry {\code {BUFSIZ \relax }}{129} \initial {C} -\entry {\code {CCTS{\_}OFLOW}}{327} -\entry {\code {CHILD{\_}MAX \relax }}{537} -\entry {\code {CLK{\_}TCK \relax }}{368} -\entry {\code {CLOCAL}}{326} -\entry {\code {CLOCKS{\_}PER{\_}SEC \relax }}{368} -\entry {\code {COLL{\_}WEIGHTS{\_}MAX \relax }}{551} -\entry {\code {COREFILE}}{403} -\entry {\code {CREAD}}{326} -\entry {\code {CRTS{\_}IFLOW}}{327} -\entry {\code {CS5}}{327} -\entry {\code {CS6}}{327} -\entry {\code {CS7}}{327} -\entry {\code {CS8}}{327} -\entry {\code {CSIZE}}{327} -\entry {\code {CSTOPB}}{326} +\entry {\code {CCTS{\_}OFLOW}}{258} +\entry {\code {CHILD{\_}MAX \relax }}{495} +\entry {\code {CLK{\_}TCK \relax }}{316} +\entry {\code {CLOCAL}}{257} +\entry {\code {CLOCKS{\_}PER{\_}SEC \relax }}{316} +\entry {\code {COLL{\_}WEIGHTS{\_}MAX \relax }}{508} +\entry {\code {COREFILE}}{368} +\entry {\code {CREAD}}{258} +\entry {\code {CRTS{\_}IFLOW}}{258} +\entry {\code {CS5}}{258} +\entry {\code {CS6}}{258} +\entry {\code {CS7}}{258} +\entry {\code {CS8}}{258} +\entry {\code {CSIZE}}{258} +\entry {\code {CSTOPB}}{258} \initial {D} -\entry {\code {daylight \relax }}{381} +\entry {\code {daylight \relax }}{328} \initial {E} \entry {\code {E2BIG \relax }}{15} \entry {\code {EACCES \relax }}{16} -\entry {\code {EADDRINUSE \relax }}{20} -\entry {\code {EADDRNOTAVAIL \relax }}{20} -\entry {\code {EAFNOSUPPORT \relax }}{20} +\entry {\code {EADDRINUSE \relax }}{19} +\entry {\code {EADDRNOTAVAIL \relax }}{19} +\entry {\code {EAFNOSUPPORT \relax }}{19} \entry {\code {EAGAIN \relax }}{18} -\entry {\code {EALREADY \relax }}{19} -\entry {\code {EBADF}}{341} -\entry {\code {EBADF \relax }}{16} +\entry {\code {EALREADY \relax }}{18} +\entry {\code {EBACKGROUND \relax }}{21} +\entry {\code {EBADF}}{271} +\entry {\code {EBADF \relax }}{15} \entry {\code {EBUSY \relax }}{16} -\entry {\code {ECHILD \relax }}{16} -\entry {\code {ECHO}}{327} -\entry {\code {ECHOCTL}}{329} -\entry {\code {ECHOE}}{327} -\entry {\code {ECHOK}}{328} -\entry {\code {ECHOKE}}{329} -\entry {\code {ECHONL}}{328} -\entry {\code {ECHOPRT}}{329} -\entry {\code {ECONNABORTED \relax }}{21} -\entry {\code {ECONNREFUSED \relax }}{21} -\entry {\code {ECONNRESET \relax }}{21} -\entry {\code {ED \relax }}{23} +\entry {\code {ECHILD \relax }}{15} +\entry {\code {ECHO}}{259} +\entry {\code {ECHOCTL}}{260} +\entry {\code {ECHOE}}{259} +\entry {\code {ECHOK}}{259} +\entry {\code {ECHOKE}}{260} +\entry {\code {ECHONL}}{259} +\entry {\code {ECHOPRT}}{260} +\entry {\code {ECONNABORTED \relax }}{20} +\entry {\code {ECONNREFUSED \relax }}{20} +\entry {\code {ECONNRESET \relax }}{20} +\entry {\code {ED \relax }}{22} \entry {\code {EDEADLK \relax }}{16} \entry {\code {EDESTADDRREQ \relax }}{19} \entry {\code {EDOM \relax }}{18} -\entry {\code {EDQUOT \relax }}{22} +\entry {\code {EDQUOT \relax }}{21} \entry {\code {EEXIST \relax }}{16} \entry {\code {EFAULT \relax }}{16} -\entry {\code {EFBIG \relax }}{18} -\entry {\code {EGRATUITOUS \relax }}{23} -\entry {\code {EHOSTDOWN \relax }}{22} -\entry {\code {EHOSTUNREACH \relax }}{22} -\entry {\code {EINPROGRESS \relax }}{19} +\entry {\code {EFBIG \relax }}{17} +\entry {\code {EGRATUITOUS \relax }}{22} +\entry {\code {EGREGIOUS \relax }}{22} +\entry {\code {EHOSTDOWN \relax }}{21} +\entry {\code {EHOSTUNREACH \relax }}{21} +\entry {\code {EIEIO \relax }}{22} +\entry {\code {EINPROGRESS \relax }}{18} \entry {\code {EINTR \relax }}{15} -\entry {\code {EINVAL}}{341} +\entry {\code {EINVAL}}{271} \entry {\code {EINVAL \relax }}{17} \entry {\code {EIO \relax }}{15} -\entry {\code {EISCONN \relax }}{21} +\entry {\code {EISCONN \relax }}{20} \entry {\code {EISDIR \relax }}{17} -\entry {\code {ELOOP \relax }}{21} +\entry {\code {ELOOP \relax }}{20} \entry {\code {EMFILE \relax }}{17} -\entry {\code {EMLINK \relax }}{18} +\entry {\code {EMLINK \relax }}{17} \entry {\code {EMSGSIZE \relax }}{19} -\entry {\code {ENAMETOOLONG \relax }}{22} +\entry {\code {ENAMETOOLONG \relax }}{20} \entry {\code {ENETDOWN \relax }}{20} \entry {\code {ENETRESET \relax }}{20} \entry {\code {ENETUNREACH \relax }}{20} \entry {\code {ENFILE \relax }}{17} -\entry {\code {ENOBUFS \relax }}{21} -\entry {\code {ENODEV \relax }}{17} -\entry {\code {ENOENT \relax }}{15} -\entry {\code {ENOEXEC \relax }}{16} -\entry {\code {ENOLCK \relax }}{22} +\entry {\code {ENOBUFS \relax }}{20} +\entry {\code {ENODEV \relax }}{16} +\entry {\code {ENOENT \relax }}{14} +\entry {\code {ENOEXEC \relax }}{15} +\entry {\code {ENOLCK \relax }}{21} \entry {\code {ENOMEM \relax }}{16} \entry {\code {ENOPROTOOPT \relax }}{19} -\entry {\code {ENOSPC \relax }}{18} -\entry {\code {ENOSYS \relax }}{22} +\entry {\code {ENOSPC \relax }}{17} +\entry {\code {ENOSYS \relax }}{21} \entry {\code {ENOTBLK \relax }}{16} -\entry {\code {ENOTCONN \relax }}{21} -\entry {\code {ENOTDIR \relax }}{17} -\entry {\code {ENOTEMPTY \relax }}{22} -\entry {\code {ENOTSOCK \relax }}{19} -\entry {\code {ENOTTY}}{341} +\entry {\code {ENOTCONN \relax }}{20} +\entry {\code {ENOTDIR \relax }}{16} +\entry {\code {ENOTEMPTY \relax }}{21} +\entry {\code {ENOTSOCK \relax }}{18} +\entry {\code {ENOTTY}}{271} \entry {\code {ENOTTY \relax }}{17} -\entry {\code {environ \relax }}{468} +\entry {\code {environ \relax }}{429} \entry {\code {ENXIO \relax }}{15} -\entry {\code {EOF \relax }}{180} -\entry {\code {EOPNOTSUPP \relax }}{20} -\entry {\code {EPERM \relax }}{15} -\entry {\code {EPFNOSUPPORT \relax }}{20} +\entry {\code {EOF \relax }}{122} +\entry {\code {EOPNOTSUPP \relax }}{19} +\entry {\code {EPERM \relax }}{14} +\entry {\code {EPFNOSUPPORT \relax }}{19} \entry {\code {EPIPE \relax }}{18} -\entry {\code {EPROTONOSUPPORT \relax }}{20} +\entry {\code {EPROTONOSUPPORT \relax }}{19} \entry {\code {EPROTOTYPE \relax }}{19} +\entry {\code {EQUIV{\_}CLASS{\_}MAX \relax }}{508} \entry {\code {ERANGE \relax }}{18} -\entry {\code {EREMOTE \relax }}{22} -\entry {\code {EROFS \relax }}{18} +\entry {\code {EREMOTE \relax }}{21} +\entry {\code {EROFS \relax }}{17} \entry {\code {errno \relax }}{13} -\entry {\code {ESHUTDOWN \relax }}{21} -\entry {\code {ESOCKTNOSUPPORT \relax }}{20} -\entry {\code {ESPIPE \relax }}{18} +\entry {\code {ESHUTDOWN \relax }}{20} +\entry {\code {ESOCKTNOSUPPORT \relax }}{19} +\entry {\code {ESPIPE \relax }}{17} \entry {\code {ESRCH \relax }}{15} -\entry {\code {ESTALE \relax }}{22} -\entry {\code {ETIMEDOUT \relax }}{21} +\entry {\code {ESTALE \relax }}{21} +\entry {\code {ETIMEDOUT \relax }}{20} \entry {\code {ETXTBSY \relax }}{17} -\entry {\code {EUSERS \relax }}{22} -\entry {\code {EWOULDBLOCK \relax }}{19} -\entry {\code {EXDEV \relax }}{17} -\entry {\code {EXIT{\_}FAILURE \relax }}{471} -\entry {\code {EXIT{\_}SUCCESS \relax }}{471} -\entry {\code {EXPR{\_}NEST{\_}MAX \relax }}{551} -\entry {\code {EXTA}}{331} -\entry {\code {EXTB}}{331} +\entry {\code {EUSERS \relax }}{21} +\entry {\code {EWOULDBLOCK \relax }}{18} +\entry {\code {EXDEV \relax }}{16} +\entry {\code {EXIT{\_}FAILURE \relax }}{433} +\entry {\code {EXIT{\_}SUCCESS \relax }}{432} +\entry {\code {EXPR{\_}NEST{\_}MAX \relax }}{508} +\entry {\code {EXTA}}{262} +\entry {\code {EXTB}}{262} \initial {F} -\entry {\code {F{\_}DUPFD \relax }}{216} -\entry {\code {F{\_}GETFD \relax }}{218} -\entry {\code {F{\_}GETFL \relax }}{220} -\entry {\code {F{\_}GETLK \relax }}{223} -\entry {\code {F{\_}GETOWN \relax }}{226} -\entry {\code {F{\_}OK \relax }}{255} -\entry {\code {F{\_}RDLCK}}{225} -\entry {\code {F{\_}SETFD \relax }}{218} -\entry {\code {F{\_}SETFL \relax }}{220} -\entry {\code {F{\_}SETLK \relax }}{224} -\entry {\code {F{\_}SETLKW \relax }}{225} -\entry {\code {F{\_}SETOWN \relax }}{227} -\entry {\code {F{\_}UNLCK}}{226} -\entry {\code {F{\_}WRLCK}}{226} -\entry {\code {FD{\_}CLOEXEC \relax }}{219} -\entry {\code {FD{\_}SETSIZE \relax }}{212} -\entry {\code {FILENAME{\_}MAX \relax }}{547} -\entry {\code {FLUSHO}}{329} -\entry {\code {FOPEN{\_}MAX \relax }}{138} -\entry {\code {FPE{\_}DECOVF{\_}TRAP}}{404} -\entry {\code {FPE{\_}FLTDIV{\_}TRAP}}{404} -\entry {\code {FPE{\_}FLTOVF{\_}TRAP}}{404} -\entry {\code {FPE{\_}FLTUND{\_}TRAP}}{404} -\entry {\code {FPE{\_}INTDIV{\_}TRAP}}{403} -\entry {\code {FPE{\_}INTOVF{\_}TRAP}}{403} -\entry {\code {FPE{\_}SUBRNG{\_}TRAP}}{404} +\entry {\code {F{\_}DUPFD \relax }}{153} +\entry {\code {F{\_}GETFD \relax }}{155} +\entry {\code {F{\_}GETFL \relax }}{156} +\entry {\code {F{\_}GETLK \relax }}{159} +\entry {\code {F{\_}GETOWN \relax }}{162} +\entry {\code {F{\_}OK \relax }}{189} +\entry {\code {F{\_}RDLCK}}{161} +\entry {\code {F{\_}SETFD \relax }}{155} +\entry {\code {F{\_}SETFL \relax }}{157} +\entry {\code {F{\_}SETLK \relax }}{160} +\entry {\code {F{\_}SETLKW \relax }}{161} +\entry {\code {F{\_}SETOWN \relax }}{163} +\entry {\code {F{\_}UNLCK}}{161} +\entry {\code {F{\_}WRLCK}}{161} +\entry {\code {FD{\_}CLOEXEC \relax }}{155} +\entry {\code {FD{\_}SETSIZE \relax }}{149} +\entry {\code {FILENAME{\_}MAX \relax }}{504} +\entry {\code {FLUSHO}}{260} +\entry {\code {FOPEN{\_}MAX \relax }}{84} +\entry {\code {FPE{\_}DECOVF{\_}TRAP}}{369} +\entry {\code {FPE{\_}FLTDIV{\_}TRAP}}{369} +\entry {\code {FPE{\_}FLTOVF{\_}TRAP}}{369} +\entry {\code {FPE{\_}FLTUND{\_}TRAP}}{369} +\entry {\code {FPE{\_}INTDIV{\_}TRAP}}{369} +\entry {\code {FPE{\_}INTOVF{\_}TRAP}}{369} +\entry {\code {FPE{\_}SUBRNG{\_}TRAP}}{369} \initial {H} -\entry {\code {h{\_}errno}}{280} -\entry {\code {HOST{\_}NOT{\_}FOUND}}{280} -\entry {\code {HUGE{\_}VAL \relax }}{346} -\entry {\code {HUPCL}}{326} +\entry {\code {h{\_}errno}}{215} +\entry {\code {HOST{\_}NOT{\_}FOUND}}{215} +\entry {\code {HUGE{\_}VAL \relax }}{276} +\entry {\code {HUPCL}}{258} \initial {I} -\entry {\code {ICANON}}{327} -\entry {\code {ICRNL}}{324} -\entry {\code {IEXTEN}}{328} -\entry {\code {IGNBRK}}{324} -\entry {\code {IGNCR}}{324} -\entry {\code {IGNPAR}}{324} -\entry {\code {INADDR{\_}ANY \relax }}{277} -\entry {\code {INLCR}}{324} -\entry {\code {INPCK}}{323} -\entry {\code {int}}{389} -\entry {\code {IPPORT{\_}RESERVED \relax }}{282} -\entry {\code {IPPORT{\_}USERRESERVED \relax }}{282} -\entry {\code {ISIG}}{328} -\entry {\code {ISTRIP}}{324} -\entry {\code {IXOFF}}{324} -\entry {\code {IXON}}{325} +\entry {\code {ICANON}}{259} +\entry {\code {ICRNL}}{256} +\entry {\code {IEXTEN}}{260} +\entry {\code {IGNBRK}}{255} +\entry {\code {IGNCR}}{256} +\entry {\code {IGNPAR}}{255} +\entry {\code {INADDR{\_}ANY \relax }}{212} +\entry {\code {INADDR{\_}BROADCAST \relax }}{212} +\entry {\code {INADDR{\_}LOOPBACK \relax }}{212} +\entry {\code {INADDR{\_}NONE \relax }}{212} +\entry {\code {INLCR}}{256} +\entry {\code {INPCK}}{255} +\entry {\code {int}}{335} +\entry {\code {IPPORT{\_}RESERVED \relax }}{216} +\entry {\code {IPPORT{\_}USERRESERVED \relax }}{216} +\entry {\code {ISIG}}{259} +\entry {\code {ISTRIP}}{255} +\entry {\code {IXOFF}}{256} +\entry {\code {IXON}}{256} \initial {L} -\entry {\code {L{\_}ctermid \relax }}{509} -\entry {\code {L{\_}cuserid \relax }}{524} -\entry {\code {L{\_}INCR}}{183} -\entry {\code {L{\_}SET}}{183} -\entry {\code {L{\_}tmpnam \relax }}{190} -\entry {\code {L{\_}XTND}}{183} -\entry {\code {LANG}}{95} -\entry {\code {LC{\_}ALL}}{95} -\entry {\code {LC{\_}COLLATE}}{95} -\entry {\code {LC{\_}CTYPE}}{95} -\entry {\code {LC{\_}MONETARY}}{95} -\entry {\code {LC{\_}NUMERIC}}{95} -\entry {\code {LC{\_}TIME}}{95} -\entry {\code {LINE{\_}MAX \relax }}{551} -\entry {\code {LINK{\_}MAX \relax }}{546} +\entry {\code {L{\_}ctermid \relax }}{468} +\entry {\code {L{\_}cuserid \relax }}{483} +\entry {\code {L{\_}INCR}}{125} +\entry {\code {L{\_}SET}}{125} +\entry {\code {L{\_}tmpnam \relax }}{192} +\entry {\code {L{\_}XTND}}{125} +\entry {\code {LANG}}{353} +\entry {\code {LC{\_}ALL}}{353} +\entry {\code {LC{\_}COLLATE}}{352} +\entry {\code {LC{\_}CTYPE}}{352} +\entry {\code {LC{\_}MONETARY}}{353} +\entry {\code {LC{\_}NUMERIC}}{353} +\entry {\code {LC{\_}TIME}}{353} +\entry {\code {LINE{\_}MAX \relax }}{508} +\entry {\code {LINK{\_}MAX \relax }}{503} \initial {M} -\entry {\code {MAX{\_}CANON \relax }}{546} -\entry {\code {MAX{\_}INPUT \relax }}{546} -\entry {\code {MAXNAMLEN \relax }}{546} -\entry {\code {MB{\_}CUR{\_}MAX \relax }}{83} -\entry {\code {MB{\_}LEN{\_}MAX \relax }}{82} -\entry {\code {MDMBUF}}{327} -\entry {\code {MSG{\_}DONTROUTE \relax }}{297} -\entry {\code {MSG{\_}OOB \relax }}{297} -\entry {\code {MSG{\_}PEEK \relax }}{297} +\entry {\code {MAX{\_}CANON \relax }}{503} +\entry {\code {MAX{\_}INPUT \relax }}{503} +\entry {\code {MAXNAMLEN \relax }}{504} +\entry {\code {MB{\_}CUR{\_}MAX \relax }}{342} +\entry {\code {MB{\_}LEN{\_}MAX \relax }}{342} +\entry {\code {MDMBUF}}{258} +\entry {\code {MINSIGSTKSZ}}{417} +\entry {\code {MSG{\_}DONTROUTE \relax }}{231} +\entry {\code {MSG{\_}OOB \relax }}{231} +\entry {\code {MSG{\_}PEEK \relax }}{231} \initial {N} -\entry {\code {NAME{\_}MAX \relax }}{546} -\entry {\code {NAN \relax }}{355} -\entry {\code {NCCS \relax }}{320} -\entry {\code {NDEBUG}}{555} -\entry {\code {NGROUPS{\_}MAX \relax }}{538} -\entry {\code {NO{\_}ADDRESS}}{280} -\entry {\code {NO{\_}RECOVERY}}{280} -\entry {\code {NOFLSH}}{328} -\entry {\code {NOKERNINFO}}{329} -\entry {\code {NSIG \relax }}{402} -\entry {\code {NULL \relax }}{564} +\entry {\code {NAME{\_}MAX \relax }}{503} +\entry {\code {NAN \relax }}{283} +\entry {\code {NCCS \relax }}{252} +\entry {\code {NDEBUG}}{511} +\entry {\code {NGROUPS{\_}MAX \relax }}{496} +\entry {\code {NO{\_}ADDRESS}}{215} +\entry {\code {NO{\_}RECOVERY}}{215} +\entry {\code {NOFLSH}}{260} +\entry {\code {NOKERNINFO}}{261} +\entry {\code {NSIG \relax }}{368} +\entry {\code {NULL \relax }}{519} \initial {O} -\entry {\code {O{\_}ACCMODE \relax }}{221} -\entry {\code {O{\_}APPEND}}{200} -\entry {\code {O{\_}CREAT}}{200} -\entry {\code {O{\_}EXCL}}{200} -\entry {\code {O{\_}NOCTTY}}{200} -\entry {\code {O{\_}NONBLOCK}}{200} -\entry {\code {O{\_}RDONLY}}{200} -\entry {\code {O{\_}RDWR}}{200} -\entry {\code {O{\_}TRUNC}}{200} -\entry {\code {O{\_}WRONLY}}{200} -\entry {\code {ONLCR \relax }}{325} -\entry {\code {ONOEOT \relax }}{326} -\entry {\code {OPEN{\_}MAX \relax }}{537} -\entry {\code {OPOST \relax }}{325} -\entry {\code {optarg \relax }}{459} -\entry {\code {opterr \relax }}{459} -\entry {\code {optind \relax }}{459} -\entry {\code {optopt \relax }}{459} -\entry {\code {OXTABS \relax }}{326} +\entry {\code {O{\_}ACCMODE \relax }}{157} +\entry {\code {O{\_}APPEND}}{138} +\entry {\code {O{\_}CREAT}}{138} +\entry {\code {O{\_}EXCL}}{138} +\entry {\code {O{\_}NOCTTY}}{138} +\entry {\code {O{\_}NONBLOCK}}{138} +\entry {\code {O{\_}RDONLY}}{137} +\entry {\code {O{\_}RDWR}}{137} +\entry {\code {O{\_}TRUNC}}{138} +\entry {\code {O{\_}WRONLY}}{137} +\entry {\code {ONLCR \relax }}{257} +\entry {\code {ONOEOT \relax }}{257} +\entry {\code {OPEN{\_}MAX \relax }}{495} +\entry {\code {OPOST \relax }}{257} +\entry {\code {optarg \relax }}{421} +\entry {\code {opterr \relax }}{421} +\entry {\code {optind \relax }}{421} +\entry {\code {optopt \relax }}{421} +\entry {\code {OXTABS \relax }}{257} \initial {P} -\entry {\code {P{\_}tmpdir \relax }}{190} -\entry {\code {PA{\_}CHAR}}{161} -\entry {\code {PA{\_}DOUBLE}}{161} -\entry {\code {PA{\_}FLAG{\_}LONG}}{162} -\entry {\code {PA{\_}FLAG{\_}LONG{\_}DOUBLE}}{162} -\entry {\code {PA{\_}FLAG{\_}LONG{\_}LONG}}{162} -\entry {\code {PA{\_}FLAG{\_}MASK \relax }}{161} -\entry {\code {PA{\_}FLAG{\_}PTR}}{162} -\entry {\code {PA{\_}FLAG{\_}SHORT}}{162} -\entry {\code {PA{\_}FLOAT}}{161} -\entry {\code {PA{\_}INT}}{161} -\entry {\code {PA{\_}LAST}}{161} -\entry {\code {PA{\_}POINTER}}{161} -\entry {\code {PA{\_}STRING}}{161} -\entry {\code {PARENB}}{326} -\entry {\code {PARMRK}}{324} -\entry {\code {PARODD}}{327} -\entry {\code {PATH{\_}MAX \relax }}{546} -\entry {\code {PENDIN}}{329} -\entry {\code {PF{\_}CCITT}}{288} -\entry {\code {PF{\_}FILE \relax }}{272} -\entry {\code {PF{\_}IMPLINK}}{288} -\entry {\code {PF{\_}INET \relax }}{274} -\entry {\code {PF{\_}ISO}}{288} -\entry {\code {PF{\_}NS}}{288} -\entry {\code {PF{\_}ROUTE}}{288} -\entry {\code {PF{\_}UNIX \relax }}{272} -\entry {\code {PIPE{\_}BUF \relax }}{546} -\entry {\code {PRIO{\_}MAX}}{390} -\entry {\code {PRIO{\_}MIN}}{390} -\entry {\code {PRIO{\_}PGRP}}{391} -\entry {\code {PRIO{\_}PROCESS}}{391} -\entry {\code {PRIO{\_}USER}}{391} -\entry {\code {program{\_}invocation{\_}name \relax }}{24} -\entry {\code {program{\_}invocation{\_}short{\_}name \relax }}{24} +\entry {\code {P{\_}tmpdir \relax }}{193} +\entry {\code {PA{\_}CHAR}}{105} +\entry {\code {PA{\_}DOUBLE}}{105} +\entry {\code {PA{\_}FLAG{\_}LONG}}{105} +\entry {\code {PA{\_}FLAG{\_}LONG{\_}DOUBLE}}{106} +\entry {\code {PA{\_}FLAG{\_}LONG{\_}LONG}}{106} +\entry {\code {PA{\_}FLAG{\_}MASK \relax }}{105} +\entry {\code {PA{\_}FLAG{\_}PTR}}{105} +\entry {\code {PA{\_}FLAG{\_}SHORT}}{105} +\entry {\code {PA{\_}FLOAT}}{105} +\entry {\code {PA{\_}INT}}{105} +\entry {\code {PA{\_}LAST}}{105} +\entry {\code {PA{\_}POINTER}}{105} +\entry {\code {PA{\_}STRING}}{105} +\entry {\code {PARENB}}{258} +\entry {\code {PARMRK}}{255} +\entry {\code {PARODD}}{258} +\entry {\code {PATH{\_}MAX \relax }}{504} +\entry {\code {PENDIN}}{261} +\entry {\code {PF{\_}CCITT}}{222} +\entry {\code {PF{\_}FILE \relax }}{207} +\entry {\code {PF{\_}IMPLINK}}{222} +\entry {\code {PF{\_}INET \relax }}{209} +\entry {\code {PF{\_}ISO}}{222} +\entry {\code {PF{\_}NS}}{222} +\entry {\code {PF{\_}ROUTE}}{222} +\entry {\code {PF{\_}UNIX \relax }}{207} +\entry {\code {PIPE{\_}BUF \relax }}{504} +\entry {\code {PRIO{\_}MAX}}{336} +\entry {\code {PRIO{\_}MIN}}{336} +\entry {\code {PRIO{\_}PGRP}}{337} +\entry {\code {PRIO{\_}PROCESS}}{336} +\entry {\code {PRIO{\_}USER}}{337} +\entry {\code {program{\_}invocation{\_}name \relax }}{23} +\entry {\code {program{\_}invocation{\_}short{\_}name \relax }}{23} \initial {R} -\entry {\code {R{\_}OK \relax }}{255} -\entry {\code {RAND{\_}MAX \relax }}{351} -\entry {\code {RE{\_}DUP{\_}MAX \relax }}{538} -\entry {\code {RLIM{\_}NLIMITS}}{389} -\entry {\code {RLIMIT{\_}CORE}}{389} -\entry {\code {RLIMIT{\_}CPU}}{388} -\entry {\code {RLIMIT{\_}DATA}}{389} -\entry {\code {RLIMIT{\_}FSIZE}}{389} -\entry {\code {RLIMIT{\_}OPEN{\_}FILES}}{389} -\entry {\code {RLIMIT{\_}RSS}}{389} -\entry {\code {RLIMIT{\_}STACK}}{389} +\entry {\code {R{\_}OK \relax }}{189} +\entry {\code {RAND{\_}MAX \relax }}{280} +\entry {\code {RE{\_}DUP{\_}MAX \relax }}{496} +\entry {\code {RLIM{\_}NLIMITS}}{335} +\entry {\code {RLIMIT{\_}CORE}}{335} +\entry {\code {RLIMIT{\_}CPU}}{334} +\entry {\code {RLIMIT{\_}DATA}}{335} +\entry {\code {RLIMIT{\_}FSIZE}}{335} +\entry {\code {RLIMIT{\_}OPEN{\_}FILES}}{335} +\entry {\code {RLIMIT{\_}RSS}}{335} +\entry {\code {RLIMIT{\_}STACK}}{335} \initial {S} -\entry {\code {S{\_}IEXEC}}{249} -\entry {\code {S{\_}IFBLK}}{247} -\entry {\code {S{\_}IFCHR}}{247} -\entry {\code {S{\_}IFDIR}}{247} -\entry {\code {S{\_}IFIFO}}{247} -\entry {\code {S{\_}IFLNK}}{247} -\entry {\code {S{\_}IFMT \relax }}{247} -\entry {\code {S{\_}IFREG}}{247} -\entry {\code {S{\_}IFSOCK}}{247} -\entry {\code {S{\_}IREAD}}{249} -\entry {\code {S{\_}IRGRP}}{250} -\entry {\code {S{\_}IROTH}}{250} -\entry {\code {S{\_}IRUSR}}{249} -\entry {\code {S{\_}IRWXG}}{250} -\entry {\code {S{\_}IRWXO}}{250} -\entry {\code {S{\_}IRWXU}}{250} -\entry {\code {S{\_}ISGID}}{250} -\entry {\code {S{\_}ISUID}}{250} -\entry {\code {S{\_}ISVTX}}{250} -\entry {\code {S{\_}IWGRP}}{250} -\entry {\code {S{\_}IWOTH}}{250} -\entry {\code {S{\_}IWRITE}}{249} -\entry {\code {S{\_}IWUSR}}{249} -\entry {\code {S{\_}IXGRP}}{250} -\entry {\code {S{\_}IXOTH}}{250} -\entry {\code {S{\_}IXUSR}}{249} -\entry {\code {SA{\_}NOCLDSTOP \relax }}{419} -\entry {\code {SA{\_}ONSTACK \relax }}{419} -\entry {\code {SA{\_}RESTART \relax }}{419} -\entry {\code {SEEK{\_}CUR \relax }}{183} -\entry {\code {SEEK{\_}END \relax }}{183} -\entry {\code {SEEK{\_}SET \relax }}{182} -\entry {\code {SIG{\_}BLOCK}}{443} -\entry {\code {SIG{\_}DFL}}{413} -\entry {\code {SIG{\_}ERR \relax }}{415} -\entry {\code {SIG{\_}IGN}}{413} -\entry {\code {SIG{\_}SETMASK}}{443} -\entry {\code {SIG{\_}UNBLOCK}}{443} -\entry {\code {SIGABRT \relax }}{405} -\entry {\code {SIGALRM \relax }}{407} -\entry {\code {SIGBUS \relax }}{405} -\entry {\code {SIGCHLD \relax }}{408} -\entry {\code {SIGCONT \relax }}{408} -\entry {\code {SIGFPE \relax }}{403} -\entry {\code {SIGHUP \relax }}{405} -\entry {\code {SIGILL \relax }}{404} -\entry {\code {SIGINT \relax }}{406} -\entry {\code {SIGIO \relax }}{408} -\entry {\code {SIGKILL \relax }}{406} -\entry {\code {SIGPIPE \relax }}{410} -\entry {\code {SIGPROF \relax }}{407} -\entry {\code {SIGQUIT \relax }}{406} -\entry {\code {SIGSEGV \relax }}{404} -\entry {\code {SIGSTOP \relax }}{409} -\entry {\code {SIGTERM \relax }}{406} -\entry {\code {SIGTSTP \relax }}{409} -\entry {\code {SIGTTIN \relax }}{409} -\entry {\code {SIGTTOU \relax }}{409} -\entry {\code {SIGURG \relax }}{408} -\entry {\code {SIGUSR1 \relax }}{410} -\entry {\code {SIGUSR2 \relax }}{410} -\entry {\code {SIGVTALRM \relax }}{407} -\entry {\code {SOCK{\_}DGRAM \relax }}{266} -\entry {\code {SOCK{\_}RAW \relax }}{267} -\entry {\code {SOCK{\_}STREAM \relax }}{266} -\entry {\code {SOL{\_}SOCKET \relax }}{313} -\entry {\code {SSIZE{\_}MAX \relax }}{538} -\entry {\code {stderr \relax }}{136} -\entry {\code {STDERR{\_}FILENO}}{208} -\entry {\code {stdin \relax }}{136} -\entry {\code {STDIN{\_}FILENO}}{208} -\entry {\code {stdout \relax }}{136} -\entry {\code {STDOUT{\_}FILENO}}{208} -\entry {\code {STREAM{\_}MAX \relax }}{538} -\entry {\code {SV{\_}INTERRUPT \relax }}{453} -\entry {\code {SV{\_}ONSTACK \relax }}{453} -\entry {\code {SV{\_}RESETHAND \relax }}{453} -\entry {\code {sys{\_}siglist}}{412} +\entry {\code {S{\_}IEXEC}}{184} +\entry {\code {S{\_}IFBLK}}{182} +\entry {\code {S{\_}IFCHR}}{182} +\entry {\code {S{\_}IFDIR}}{182} +\entry {\code {S{\_}IFIFO}}{182} +\entry {\code {S{\_}IFLNK}}{182} +\entry {\code {S{\_}IFMT \relax }}{182} +\entry {\code {S{\_}IFREG}}{182} +\entry {\code {S{\_}IFSOCK}}{182} +\entry {\code {S{\_}IREAD}}{184} +\entry {\code {S{\_}IRGRP}}{184} +\entry {\code {S{\_}IROTH}}{184} +\entry {\code {S{\_}IRUSR}}{184} +\entry {\code {S{\_}IRWXG}}{184} +\entry {\code {S{\_}IRWXO}}{184} +\entry {\code {S{\_}IRWXU}}{184} +\entry {\code {S{\_}ISGID}}{185} +\entry {\code {S{\_}ISUID}}{184} +\entry {\code {S{\_}ISVTX}}{185} +\entry {\code {S{\_}IWGRP}}{184} +\entry {\code {S{\_}IWOTH}}{184} +\entry {\code {S{\_}IWRITE}}{184} +\entry {\code {S{\_}IWUSR}}{184} +\entry {\code {S{\_}IXGRP}}{184} +\entry {\code {S{\_}IXOTH}}{184} +\entry {\code {S{\_}IXUSR}}{184} +\entry {\code {SA{\_}DISABLE}}{417} +\entry {\code {SA{\_}NOCLDSTOP \relax }}{383} +\entry {\code {SA{\_}ONSTACK}}{417} +\entry {\code {SA{\_}ONSTACK \relax }}{383} +\entry {\code {SA{\_}RESTART \relax }}{383} +\entry {\code {SEEK{\_}CUR \relax }}{124} +\entry {\code {SEEK{\_}END \relax }}{125} +\entry {\code {SEEK{\_}SET \relax }}{124} +\entry {\code {SIG{\_}BLOCK}}{405} +\entry {\code {SIG{\_}DFL}}{378} +\entry {\code {SIG{\_}ERR \relax }}{380} +\entry {\code {SIG{\_}IGN}}{378} +\entry {\code {SIG{\_}SETMASK}}{405} +\entry {\code {SIG{\_}UNBLOCK}}{405} +\entry {\code {SIGABRT \relax }}{370} +\entry {\code {SIGALRM \relax }}{372} +\entry {\code {SIGBUS \relax }}{370} +\entry {\code {SIGCHLD \relax }}{373} +\entry {\code {SIGCONT \relax }}{373} +\entry {\code {SIGFPE \relax }}{368} +\entry {\code {SIGHUP \relax }}{371} +\entry {\code {SIGILL \relax }}{369} +\entry {\code {SIGINT \relax }}{371} +\entry {\code {SIGIO \relax }}{373} +\entry {\code {SIGKILL \relax }}{372} +\entry {\code {SIGPIPE \relax }}{375} +\entry {\code {SIGPROF \relax }}{372} +\entry {\code {SIGQUIT \relax }}{371} +\entry {\code {SIGSEGV \relax }}{370} +\entry {\code {SIGSTKSZ}}{417} +\entry {\code {SIGSTOP \relax }}{374} +\entry {\code {SIGTERM \relax }}{372} +\entry {\code {SIGTSTP \relax }}{374} +\entry {\code {SIGTTIN \relax }}{374} +\entry {\code {SIGTTOU \relax }}{374} +\entry {\code {SIGURG \relax }}{373} +\entry {\code {SIGUSR1 \relax }}{375} +\entry {\code {SIGUSR2 \relax }}{375} +\entry {\code {SIGVTALRM \relax }}{372} +\entry {\code {SOCK{\_}DGRAM \relax }}{202} +\entry {\code {SOCK{\_}RAW \relax }}{203} +\entry {\code {SOCK{\_}STREAM \relax }}{202} +\entry {\code {SOL{\_}SOCKET \relax }}{245} +\entry {\code {SSIZE{\_}MAX \relax }}{496} +\entry {\code {stderr \relax }}{82} +\entry {\code {STDERR{\_}FILENO}}{146} +\entry {\code {stdin \relax }}{81} +\entry {\code {STDIN{\_}FILENO}}{146} +\entry {\code {stdout \relax }}{82} +\entry {\code {STDOUT{\_}FILENO}}{146} +\entry {\code {STREAM{\_}MAX \relax }}{495} +\entry {\code {SV{\_}INTERRUPT \relax }}{415} +\entry {\code {SV{\_}ONSTACK \relax }}{414} +\entry {\code {SV{\_}RESETHAND \relax }}{415} +\entry {\code {sys{\_}siglist}}{377} \initial {T} -\entry {\code {TCIFLUSH}}{340} -\entry {\code {TCIOFF}}{341} -\entry {\code {TCIOFLUSH}}{340} -\entry {\code {TCION}}{341} -\entry {\code {TCOFLUSH}}{340} -\entry {\code {TCOOFF}}{341} -\entry {\code {TCOON}}{341} -\entry {\code {TCSADRAIN}}{321} -\entry {\code {TCSAFLUSH}}{321} -\entry {\code {TCSANOW}}{321} -\entry {\code {TCSASOFT}}{321} -\entry {\code {timezone \relax }}{381} -\entry {\code {TMP{\_}MAX \relax }}{190} -\entry {\code {TOSTOP}}{328} -\entry {\code {TRY{\_}AGAIN}}{280} -\entry {\code {TZNAME{\_}MAX \relax }}{538} +\entry {\code {TCIFLUSH}}{270} +\entry {\code {TCIOFF}}{271} +\entry {\code {TCIOFLUSH}}{270} +\entry {\code {TCION}}{271} +\entry {\code {TCOFLUSH}}{270} +\entry {\code {TCOOFF}}{271} +\entry {\code {TCOON}}{271} +\entry {\code {TCSADRAIN}}{252} +\entry {\code {TCSAFLUSH}}{252} +\entry {\code {TCSANOW}}{252} +\entry {\code {TCSASOFT}}{253} +\entry {\code {timezone \relax }}{328} +\entry {\code {TMP{\_}MAX \relax }}{193} +\entry {\code {TOSTOP}}{260} +\entry {\code {TRY{\_}AGAIN}}{215} +\entry {\code {TZNAME{\_}MAX \relax }}{496} \initial {V} -\entry {\code {VDISCARD \relax }}{337} -\entry {\code {VDSUSP \relax }}{335} -\entry {\code {VEOF \relax }}{332} -\entry {\code {VEOL \relax }}{332} -\entry {\code {VEOL2 \relax }}{333} -\entry {\code {VERASE \relax }}{332} -\entry {\code {VINTR \relax }}{334} -\entry {\code {VKILL \relax }}{333} -\entry {\code {VLNEXT \relax }}{334} -\entry {\code {VMIN \relax }}{337} -\entry {\code {VQUIT \relax }}{335} -\entry {\code {VREPRINT \relax }}{334} -\entry {\code {VSTART \relax }}{336} -\entry {\code {VSTATUS \relax }}{337} -\entry {\code {VSTOP \relax }}{336} -\entry {\code {VSUSP \relax }}{335} -\entry {\code {VTIME \relax }}{338} -\entry {\code {VWERASE \relax }}{333} +\entry {\code {VDISCARD \relax }}{267} +\entry {\code {VDSUSP \relax }}{266} +\entry {\code {VEOF \relax }}{263} +\entry {\code {VEOL \relax }}{264} +\entry {\code {VEOL2 \relax }}{264} +\entry {\code {VERASE \relax }}{264} +\entry {\code {VINTR \relax }}{265} +\entry {\code {VKILL \relax }}{264} +\entry {\code {VLNEXT \relax }}{265} +\entry {\code {VMIN \relax }}{268} +\entry {\code {VQUIT \relax }}{266} +\entry {\code {VREPRINT \relax }}{265} +\entry {\code {VSTART \relax }}{267} +\entry {\code {VSTATUS \relax }}{268} +\entry {\code {VSTOP \relax }}{267} +\entry {\code {VSUSP \relax }}{266} +\entry {\code {VTIME \relax }}{268} +\entry {\code {VWERASE \relax }}{265} \initial {W} -\entry {\code {W{\_}OK \relax }}{255} +\entry {\code {W{\_}OK \relax }}{189} \initial {X} -\entry {\code {X{\_}OK \relax }}{255} +\entry {\code {X{\_}OK \relax }}{189} diff -ruN glibc-1.06/manual/llio.texi glibc-1.07/manual/llio.texi --- glibc-1.06/manual/llio.texi Wed May 12 14:26:10 1993 +++ glibc-1.07/manual/llio.texi Thu Jun 24 20:35:23 1993 @@ -222,18 +222,18 @@ @comment fcntl.h @comment POSIX.1 @deftypefn {Obsolete function} int creat (const char *@var{filename}, mode_t @var{mode}) -This function is obsolete. The call +This function is obsolete. The call: -@example +@smallexample creat (@var{filename}, @var{mode}) -@end example +@end smallexample @noindent -is equivalent to +is equivalent to: -@example +@smallexample open (@var{filename}, O_WRONLY | O_CREAT | O_TRUNC, @var{mode}) -@end example +@end smallexample @end deftypefn @comment unistd.h @@ -263,12 +263,13 @@ The @var{filedes} argument is not a valid file descriptor. @item EINTR -The call was interrupted by a signal. @xref{Interrupted Primitives}. -Here's an example of how to handle @code{EINTR} properly: +The @code{close} call was interrupted by a signal. +@xref{Interrupted Primitives}. +Here is an example of how to handle @code{EINTR} properly: -@example +@smallexample TEMP_FAILURE_RETRY (close (desc)); -@end example +@end smallexample @end table @end deftypefun @@ -440,9 +441,9 @@ @xref{Interrupted Primitives}. The easy way to do this is with the macro @code{TEMP_FAILURE_RETRY}, as follows: -@example +@smallexample nbytes = TEMP_FAILURE_RETRY (write (desc, buffer, count)); -@end example +@end smallexample The @code{write} function is the underlying primitive for all of the functions that write to streams, such as @code{fputc}. @@ -531,7 +532,8 @@ file positions; using @code{lseek} on one descriptor has no effect on the other. For example, -@example +@smallexample +@group @{ int d1, d2; char buf[4]; @@ -540,7 +542,8 @@ lseek (d1, 1024, SEEK_SET); read (d2, buf, 4); @} -@end example +@end group +@end smallexample @noindent will read the first four characters of the file @file{foo}. (The @@ -552,7 +555,7 @@ which alters the file position of one of the duplicates, including reading or writing data, affects all of them alike. Thus, for example, -@example +@smallexample @{ int d1, d2, d3; char buf1[4], buf2[4]; @@ -563,7 +566,7 @@ read (d1, buf1, 4); read (d2, buf2, 4); @} -@end example +@end smallexample @noindent will read four characters starting with the 1024'th character of @@ -673,7 +676,7 @@ @cindex standard error file descriptor @node Stream/Descriptor Precautions -@section Precautions for Mixing Streams and Descriptors +@section Dangers of Mixing Streams and Descriptors @cindex channels @cindex streams and descriptors @cindex descriptors and streams @@ -735,8 +738,8 @@ The system handles each channel independently. Most of the time, this is quite predictable and natural (especially for input): each channel -can read or write sequentially at its own place in the file. -The precautions you should take are these: +can read or write sequentially at its own place in the file. However, +if some of the channels are streams, you must take these precautions: @itemize @bullet @item @@ -772,7 +775,7 @@ @comment stdio.h @comment GNU -@deftypefun int fclean (@var{stream}) +@deftypefun int fclean (FILE *@var{stream}) Clean up the stream @var{stream} so that its buffer is empty. If @var{stream} is doing output, force it out. If @var{stream} is doing input, give the data in the buffer back to the system, arranging to @@ -964,9 +967,9 @@ function blocks the calling process until input is available on the file descriptor, or until the timeout period expires. -@example +@smallexample @include select.c.texi -@end example +@end smallexample There is another example showing the use of @code{select} to multiplex input from multiple sockets in @ref{Server Example}. @@ -1085,10 +1088,10 @@ If @var{old} and @var{new} are different numbers, and @var{old} is a valid descriptor number, then @code{dup2} is equivalent to: -@example +@smallexample close (@var{new}); fcntl (@var{old}, F_DUPFD, @var{new}) -@end example +@end smallexample However, @code{dup2} does this atomically; there is no instant in the middle of calling @code{dup2} at which @var{new} is closed and not yet a @@ -1103,9 +1106,9 @@ The form of the call in this case is: -@example +@smallexample fcntl (@var{old}, F_DUPFD, @var{next_filedes}) -@end example +@end smallexample The @var{next_filedes} argument is of type @code{int} and specifies that the file descriptor returned should be the next available one greater @@ -1149,7 +1152,7 @@ So, to redirect standard input to a file, the shell could do something like: -@example +@smallexample pid = fork (); if (pid == 0) @{ @@ -1162,7 +1165,7 @@ TEMP_FAILURE_RETRY (close (file)); execv (program, NULL); @} -@end example +@end smallexample There is also a more detailed example showing how to implement redirection in the context of a pipeline of processes in @ref{Launching Jobs}. @@ -1214,9 +1217,9 @@ @var{filedes} argument. This requires a third @code{int} argument to specify the new flags, so the form of the call is: -@example +@smallexample fcntl (@var{filedes}, F_SETFD, @var{new_flags}) -@end example +@end smallexample The normal return value from @code{fcntl} with this command is an unspecified value other than @code{-1}, which indicates an error. @@ -1241,12 +1244,12 @@ If you want to modify the file descriptor flags, you should get the current flags with @code{F_GETFD} and modify the value. Don't assume -that the flag listed here is the only ones that are implemented; your -program may be run years from now and more flags may exist then. -For example, here is a function to set or clear the flag @code{FD_CLOEXEC} +that the flags listed here are the only ones that are implemented; your +program may be run years from now and more flags may exist then. For +example, here is a function to set or clear the flag @code{FD_CLOEXEC} without altering any other flags: -@example +@smallexample /* @r{Set the @code{FD_CLOEXEC} flag of @var{desc} if @var{value} is nonzero,} @r{or clear the flag if @var{value} is 0.} @r{Return 0 on success, or -1 on error with @code{errno} set.} */ @@ -1266,7 +1269,7 @@ /* @r{Store modified flag word in the descriptor.} */ return fcntl (desc, F_SETFD, oldflags); @} -@end example +@end smallexample @node File Status Flags @section File Status Flags @@ -1323,9 +1326,9 @@ @var{filedes} argument. This command requires a third @code{int} argument to specify the new flags, so the call looks like this: -@example +@smallexample fcntl (@var{filedes}, F_SETFL, @var{new_flags}) -@end example +@end smallexample You can't change the access mode for the file in this way; that is, whether the file descriptor was opened for reading or writing. You can @@ -1389,7 +1392,7 @@ here is a function to set or clear the flag @code{O_NONBLOCK} without altering any other flags: -@example +@smallexample @group /* @r{Set the @code{O_NONBLOCK} flag of @var{desc} if @var{value} is nonzero,} @r{or clear the flag if @var{value} is 0.} @@ -1411,7 +1414,7 @@ return fcntl (desc, F_SETFL, oldflags); @} @end group -@end example +@end smallexample @node File Locks @section File Locks @@ -1456,7 +1459,7 @@ @comment fcntl.h @comment POSIX.1 -@deftp {struct Type} flock +@deftp {Data Type} {struct flock} This structure is used with the @code{fcntl} function to describe a file lock. It has these members: @@ -1495,9 +1498,9 @@ requires a third argument of type @w{@code{struct flock *}} to be passed to @code{fcntl}, so that the form of the call is: -@example +@smallexample fcntl (@var{filedes}, F_GETLK, @var{lockp}) -@end example +@end smallexample If there is a lock already in place that would block the lock described by the @var{lockp} argument, information about that lock overwrites @@ -1539,13 +1542,13 @@ third argument of type @w{@code{struct flock *}} to be passed to @code{fcntl}, so that the form of the call is: -@example +@smallexample fcntl (@var{filedes}, F_SETLK, @var{lockp}) -@end example +@end smallexample If the process already has a lock on any part of the region, the old lock on that part is replaced with the new lock. You can remove a lock -by specifying the a lock type of @code{F_UNLCK}. +by specifying a lock type of @code{F_UNLCK}. If the lock cannot be set, @code{fcntl} returns immediately with a value of @code{-1}. This function does not block waiting for other processes @@ -1707,9 +1710,9 @@ of type @code{pid_t} to be passed to @code{fcntl}, so that the form of the call is: -@example +@smallexample fcntl (@var{filedes}, F_SETOWN, @var{pid}) -@end example +@end smallexample The @var{pid} argument should be a process ID. You can also pass a negative number whose absolute value is a process group ID. diff -ruN glibc-1.06/manual/locale.texi glibc-1.07/manual/locale.texi --- glibc-1.06/manual/locale.texi Wed May 12 14:26:12 1993 +++ glibc-1.07/manual/locale.texi Mon Aug 30 17:07:14 1993 @@ -53,7 +53,7 @@ (@pxref{Collation Functions}). @item -Formatting of numbers and currency amounts. +Formatting of numbers and currency amounts (@pxref{Numeric Formatting}). @item Formatting of dates and times (@pxref{Formatting Date and Time}). @@ -102,7 +102,7 @@ @cindex combining locales A user also has the option of specifying different locales for different -purposes---in effect, choosing a mixture of two locales. +purposes---in effect, choosing a mixture of multiple locales. For example, the user might specify the locale @samp{espana-castellano} for most purposes, but specify the locale @samp{usa-english} for @@ -138,8 +138,9 @@ @comment ANSI @item LC_CTYPE @vindex LC_CTYPE -This category applies to classification and conversion of characters; -see @ref{Character Handling}. +This category applies to classification and conversion of characters, +and to multibyte and wide characters; +see @ref{Character Handling} and @ref{Extended Characters}. @comment locale.h @comment ANSI @@ -200,9 +201,9 @@ locale. To use the locales specified by the environment, you must call @code{setlocale}. Call it as follows: -@example +@smallexample setlocale (LC_ALL, ""); -@end example +@end smallexample @noindent to select a locale based on the appropriate environment variables. @@ -261,7 +262,7 @@ Here is an example showing how you might use @code{setlocale} to temporarily switch to a new locale. -@example +@smallexample #include #include #include @@ -290,7 +291,7 @@ setlocale (LC_ALL, saved_locale); free (saved_locale); @} -@end example +@end smallexample @strong{Portability Note:} Some ANSI C systems may define additional locale categories. For portability, assume that any symbol beginning @@ -313,8 +314,8 @@ standard C locale. @item "" -The empty name stands for a site-specific default locale. It's supposed -to be a good default for the machine on which the program is running. +The empty name says to select a locale based on environment variables. +@xref{Locale Categories}. @end table Defining and installing named locales is normally a responsibility of @@ -325,10 +326,10 @@ @c ??? to be changed. If your program needs to use something other than the @samp{C} locale, -it will be more portable if you use the whatever locale the user -specifies with the environment, rather than trying to specify some -non-standard locale explicitly by name. Remember, different machines -might have different sets of locales installed. +it will be more portable if you use whatever locale the user specifies +with the environment, rather than trying to specify some non-standard +locale explicitly by name. Remember, different machines might have +different sets of locales installed. @node Numeric Formatting, , Standard Locales, Locales @section Numeric Formatting @@ -413,8 +414,8 @@ grouping---or, put another way, any remaining digits form one large group without separators. -For example, if @code{grouping} is @code{"4;3;2"}, the number -@code{123456787654321} should be grouped into @samp{12}, @samp{34}, +For example, if @code{grouping} is @code{"4;3;2"}, the correct grouping +for the number @code{123456787654321} is @samp{12}, @samp{34}, @samp{56}, @samp{78}, @samp{765}, @samp{4321}. This uses a group of 4 digits at the end, preceded by a group of 3 digits, preceded by groups of 2 digits (as many as needed). With a separator of @samp{,}, the @@ -504,7 +505,7 @@ @code{int_curr_symbol} as well as the @code{currency_symbol}. The ANSI C standard seems to imply that they should apply only to the @code{currency_symbol}---so the @code{int_curr_symbol} should always -preceed the amount. +precede the amount. We can only guess which of these (if either) matches the usual conventions for printing international currency symbols. Our guess is diff -ruN glibc-1.06/manual/longopt.c.texi glibc-1.07/manual/longopt.c.texi --- glibc-1.06/manual/longopt.c.texi Tue Oct 27 19:00:05 1992 +++ glibc-1.07/manual/longopt.c.texi Thu Jun 10 18:00:47 1993 @@ -1,6 +1,6 @@ #include -/* @r{Flag set by @samp{--verbose}. } */ +/* @r{Flag set by @samp{--verbose}.} */ static int verbose_flag; int @@ -13,78 +13,78 @@ while (1) @{ static struct option long_options[] = - @{ - /* @r{These options set a flag. } */ - @{"verbose", 0, &verbose_flag, 1@}, - @{"brief", 0, &verbose_flag, 0@}, - /* These options don't set a flag. - We distinguish them by their indices. */ - @{"add", 1, 0, 0@}, - @{"append", 0, 0, 0@}, - @{"delete", 1, 0, 0@}, - @{"create", 0, 0, 0@}, - @{"file", 1, 0, 0@}, - @{0, 0, 0, 0@} - @}; - /* @r{@code{getopt_long} stores the option index here. } */ + @{ + /* @r{These options set a flag.} */ + @{"verbose", 0, &verbose_flag, 1@}, + @{"brief", 0, &verbose_flag, 0@}, + /* @r{These options don't set a flag. + We distinguish them by their indices.} */ + @{"add", 1, 0, 0@}, + @{"append", 0, 0, 0@}, + @{"delete", 1, 0, 0@}, + @{"create", 0, 0, 0@}, + @{"file", 1, 0, 0@}, + @{0, 0, 0, 0@} + @}; + /* @r{@code{getopt_long} stores the option index here.} */ int option_index = 0; c = getopt_long (argc, argv, "abc:d:", - long_options, &option_index); + long_options, &option_index); - /* @r{Detect the end of the options. } */ + /* @r{Detect the end of the options.} */ if (c == -1) - break; + break; switch (c) - @{ - case 0: - /* @r{If this option set a flag, do nothing else now. } */ - if (long_options[option_index].flag != 0) - break; - printf ("option %s", long_options[option_index].name); - if (optarg) - printf (" with arg %s", optarg); - printf ("\n"); - break; - - case 'a': - puts ("option -a\n"); - break; - - case 'b': - puts ("option -b\n"); - break; - - case 'c': - printf ("option -c with value `%s'\n", optarg); - break; - - case 'd': - printf ("option -d with value `%s'\n", optarg); - break; - - case '?': - /* @r{@code{getopt_long} already printed an error message. } */ - break; - - default: - abort (); - @} + @{ + case 0: + /* @r{If this option set a flag, do nothing else now.} */ + if (long_options[option_index].flag != 0) + break; + printf ("option %s", long_options[option_index].name); + if (optarg) + printf (" with arg %s", optarg); + printf ("\n"); + break; + + case 'a': + puts ("option -a\n"); + break; + + case 'b': + puts ("option -b\n"); + break; + + case 'c': + printf ("option -c with value `%s'\n", optarg); + break; + + case 'd': + printf ("option -d with value `%s'\n", optarg); + break; + + case '?': + /* @r{@code{getopt_long} already printed an error message.} */ + break; + + default: + abort (); + @} @} - /* Instead of reporting @samp{--verbose} + /* @r{Instead of reporting @samp{--verbose} and @samp{--brief} as they are encountered, - we report the final status resulting from them. */ + we report the final status resulting from them.} */ if (verbose_flag) puts ("verbose flag is set"); - /* @r{Print any remaining command line arguments (not options). } */ + /* @r{Print any remaining command line arguments (not options).} */ if (optind < argc) @{ printf ("non-option ARGV-elements: "); while (optind < argc) - printf ("%s ", argv[optind++]); + printf ("%s ", argv[optind++]); putchar ('\n'); @} diff -ruN glibc-1.06/manual/maint.texi glibc-1.07/manual/maint.texi --- glibc-1.06/manual/maint.texi Sat May 22 23:47:58 1993 +++ glibc-1.07/manual/maint.texi Tue Dec 28 02:23:11 1993 @@ -44,36 +44,38 @@ The GNU C Library currently supports configurations that match the following patterns: -@example -sparc-sun-sunos4.@var{n} -sparc-sun-solaris2.@var{n} -m68k-hp-bsd4.3 -m68k-sun-sunos4.@var{n} -m68k-sony-newsos -mips-dec-ultrix4.@var{n} +@smallexample +alpha-dec-osf1 i386-@var{anything}-bsd4.3 +i386-@var{anything}-gnu +i386-@var{anything}-sco3.2 +i386-@var{anything}-sco3.2v4 i386-@var{anything}-sysv i386-@var{anything}-sysv4 -i386-@var{anything}-sco3.2v2 -i386-@var{anything}-sco3.2v4 i386-sequent-bsd -@end example +m68k-hp-bsd4.3 +m68k-sony-newsos +m68k-sun-sunos4.@var{n} +mips-dec-ultrix4.@var{n} +sparc-sun-solaris2.@var{n} +sparc-sun-sunos4.@var{n} +@end smallexample While no other configurations are supported, there are handy aliases for these few. (These aliases work in other GNU software as well.) -@example -sun4-sunos4.@var{n} sun4 -sun4-solaris2.@var{n} sun4-sunos5.@var{n} -hp320-bsd4.3 hp300bsd -sun3-sunos4.@var{n} sun3 -news +@smallexample decstation -i386-svr4 +hp320-bsd4.3 hp300bsd i386-sco i386-sco3.2v4 i386-sequent-dynix -@end example +i386-svr4 +news +sun3-sunos4.@var{n} sun3 +sun4-solaris2.@var{n} sun4-sunos5.@var{n} +sun4-sunos4.@var{n} sun4 +@end smallexample Here are some options that you should specify (if appropriate) when you run @code{configure}: @@ -112,11 +114,11 @@ to that other directory to run @code{configure}. In order to run configure, you will have to specify a directory for it, like this: -@example +@smallexample mkdir ../hp320 cd ../hp320 ../src/configure hp320-bsd4.3 -@end example +@end smallexample @noindent @code{configure} looks for the sources in whatever directory you @@ -170,9 +172,9 @@ The GNU C library code which expects @code{size_t} to be unsigned is correct. The definition of @code{size_t} as a signed type is incorrect. -We plan that in version 2.4, GCC will always define @code{size_t} as an -unsigned type, and the @file{fixincludes} script will massage the -system's @file{sys/types.h} so as not to conflict with this. +Versions 2.4 and later of GCC always define @code{size_t} as an unsigned +type, and GCC's @file{fixincludes} script massages the system's +@file{sys/types.h} so as not to conflict with this. In the meantime, we work around this problem by telling GCC explicitly to use an unsigned type for @code{size_t} when compiling the GNU C @@ -182,10 +184,7 @@ To build the library, type @code{make lib}. This will produce a lot of output, some of which looks like errors from @code{make} (but isn't). Look for error messages from @code{make} containing @samp{***}. Those -indicate that something is really wrong. Using the @samp{-w} option to -@code{make} may make the output easier to understand (this option tells -@code{make} to print messages telling you what subdirectories it is -working on).@refill +indicate that something is really wrong. To build and run some test programs which exercise some of the library facilities, type @code{make tests}. This will produce several files @@ -196,7 +195,7 @@ line reading with @kbd{C-h i} in Emacs or with the @code{info} program, type @w{@code{make info}}. -To install the library and header files, and the Info files of the +To install the library and its header files, and the Info files of the manual, type @code{make install}, after setting the installation directories in @file{configparms}. This will build things if necessary, before installing them.@refill @@ -205,9 +204,10 @@ @appendixsec Reporting Bugs @cindex reporting bugs -There are probably bugs in the GNU C library. If you report them, -they will get fixed. If you don't, no one will ever know about them -and they will remain unfixed for all eternity, if not longer. +There are probably bugs in the GNU C library. There are certainly +errors and omissions in this manual. If you report them, they will get +fixed. If you don't, no one will ever know about them and they will +remain unfixed for all eternity, if not longer. To report a bug, first you must find it. Hopefully, this will be the hard part. Once you've found a bug, make sure it's really a bug. A @@ -221,18 +221,14 @@ library, you really only need to narrow it down to one library function call, if possible. This should not be too difficult. -The final step when you have a simple test case is to report the -bug. When reporting a bug, send your test case, the results you -got, the results you expected, what you think the problem might be -(if you've thought of anything), your system type, and the version -of the GNU C library which you are using. - -@ignore @c this makes no sense for `INSTALL' before the manual is out. --rm -If you are not sure how a function should behave, and this manual -doesn't tell you, that's a bug in the manual. Report that too! -If the function's behavior disagrees with the manual, then either the -library or the manual has a bug, so report the disagreement. -@end ignore +The final step when you have a simple test case is to report the bug. +When reporting a bug, send your test case, the results you got, the +results you expected, what you think the problem might be (if you've +thought of anything), your system type, and the version of the GNU C +library which you are using. Also include the files +@file{config.status} and @file{config.make} which are created by running +@file{configure}; they will be in whatever directory was current when +you ran @file{configure}. If you think you have found some way in which the GNU C library does not conform to the ANSI and POSIX standards (@pxref{Standards and @@ -241,8 +237,15 @@ Send bug reports to the Internet address @samp{bug-glibc@@prep.ai.mit.edu} or the UUCP path @samp{mit-eddie!prep.ai.mit.edu!bug-glibc}. If you have other problems -with installation, use, or the documentation, please report those as -well.@refill +with installation or use, please report those as well.@refill + +If you are not sure how a function should behave, and this manual +doesn't tell you, that's a bug in the manual. Report that too! If the +function's behavior disagrees with the manual, then either the library +or the manual has a bug, so report the disagreement. If you find any +errors or omissions in this manual, please report them to the Internet +address @samp{bug-glibc-manual@@prep.ai.mit.edu} or the UUCP path +@samp{mit-eddie!prep.ai.mit.edu!bug-glibc-manual}. @node Source Layout @appendixsec Adding New Functions @@ -261,9 +264,9 @@ which defines a few @code{make} variables and then includes the global makefile @file{Rules} with a line like: -@example +@smallexample include ../Rules -@end example +@end smallexample @noindent The basic variables that a subdirectory makefile defines are: @@ -306,13 +309,14 @@ @item install-lib @itemx install-data @itemx install -Files to be installed by @w{@samp{make install}}. Things listed in +Files to be installed by @w{@samp{make install}}. Files listed in @samp{install-lib} are installed in the directory specified by -@samp{libdir} in @file{Makeconfig} (@pxref{Installation}). Files listed -in @code{install-data} are installed in the directory specified by -@samp{datadir} in @file{configparms} or @file{Makeconfig}. Files listed -in @code{install} are installed in the directory specified by -@samp{bindir} in @file{Makeconfig}.@refill +@samp{libdir} in @file{configparms} or @file{Makeconfig} +(@pxref{Installation}). Files listed in @code{install-data} are +installed in the directory specified by @samp{datadir} in +@file{configparms} or @file{Makeconfig}. Files listed in @code{install} +are installed in the directory specified by @samp{bindir} in +@file{configparms} or @file{Makeconfig}.@refill @item distribute Other files from this subdirectory which should be put into a @@ -365,15 +369,16 @@ @file{Implies} file. Lines in an @file{Implies} file that begin with a @samp{#} character are ignored as comments. For example, @file{unix/bsd/Implies} contains:@refill -@example +@smallexample # BSD has Internet-related things. unix/inet -@end example +@end smallexample @noindent and @file{unix/Implies} contains: -@example +@need 300 +@smallexample posix -@end example +@end smallexample @noindent So the final list is @file{unix/bsd/vax unix/bsd unix/inet unix posix}. @@ -405,8 +410,10 @@ There are a few special files that may exist in each subdirectory of @file{sysdeps}: +@comment Blank lines after items make the table look better. @table @file @item Makefile + A makefile for this machine or operating system, or class of machine or operating system. This file is included by the library makefile @file{Makerules}, which is used by the top-level makefile and the @@ -425,11 +432,13 @@ makefiles may be included, each should append to @samp{sysdep-routines} rather than simply setting it: -@example +@smallexample sysdep-routines := $(sysdep-routines) foo bar -@end example +@end smallexample +@need 1000 @item Subdirs + This file contains the names of new whole subdirectories under the top-level library source tree that should be included for this system. These subdirectories are treated just like the system-independent @@ -436,15 +445,16 @@ subdirectories in the library source tree, such as @file{stdio} and @file{math}. -Use this when there are whole new sets of routines and header files that -should go into the library for the system this subdirectory of -@file{sysdeps} implements. For example, +Use this when there are completely new sets of functions and header +files that should go into the library for the system this subdirectory +of @file{sysdeps} implements. For example, @file{sysdeps/unix/inet/Subdirs} contains @file{inet}; the @file{inet} directory contains various network-oriented operations which only make sense to put in the library on systems that support the Internet.@refill @item Dist -This file contains the names of files (relative the the subdirectory of + +This file contains the names of files (relative to the subdirectory of @file{sysdeps} in which it appears) which should be included in the distribution. List any new files used by rules in the @file{Makefile} in the same directory, or header files used by the source files in that @@ -453,23 +463,36 @@ machine-independent makefiles in the main source tree. @item configure + This file is a shell script fragment to be run at configuration time. The top-level @file{configure} script uses the shell @code{.} command to read the @file{configure} file in each system-dependent directory -chosen. The @file{configure} files are usually generated from -@file{configure.in} files using Autoconf. A system-dependent -@file{configure} script will usually add things to the shell variables -@samp{DEFS} and @samp{config_vars}; see the top-level @file{configure} -script for details. +chosen, in order. The @file{configure} files are often generated from +@file{configure.in} files using Autoconf. + +A system-dependent @file{configure} script will usually add things to +the shell variables @samp{DEFS} and @samp{config_vars}; see the +top-level @file{configure} script for details. The script can check for +@w{@samp{--with-@var{package}}} options that were passed to the +top-level @file{configure}. For an option +@w{@samp{--with-@var{package}=@var{value}}} @file{configure} sets the +shell variable @w{@samp{with_@var{package}}} (with any dashes in +@var{package} converted to underscores) to @var{value}; if the option is +just @w{@samp{--with-@var{package}}} (no argument), then it sets +@w{@samp{with_@var{package}}} to @samp{yes}. @item configure.in -This file is an Autoconf input fragment to be processed into -@file{configure}. You should write either @file{configure} or -@file{configure.in}, but not both. The first line of @file{configure} -should invoke the @code{m4} macro @samp{GLIBC_PROVIDES}. This macro -does several @code{AC_PROVIDE} calls for Autoconf macros which are used -by the top-level @file{configure} script; without this, those macros -might be invoked again unnecessarily by Autoconf. + +This file is an Autoconf input fragment to be processed into the file +@file{configure} in this subdirectory. @xref{Introduction,,, +autoconf.info, Autoconf: Generating Automatic Configuration Scripts}, +for a description of Autoconf. You should write either @file{configure} +or @file{configure.in}, but not both. The first line of +@file{configure.in} should invoke the @code{m4} macro +@samp{GLIBC_PROVIDES}. This macro does several @code{AC_PROVIDE} calls +for Autoconf macros which are used by the top-level @file{configure} +script; without this, those macros might be invoked again unnecessarily +by Autoconf. @end table That is the general system for how system-dependencies are isolated. @@ -486,7 +509,7 @@ @end menu @node Hierarchy Conventions -@appendixsubsec The Layout of the @file{sysdeps} Directory Hierarchy +@appendixsubsec Layout of the @file{sysdeps} Directory Hierarchy A GNU configuration name has three parts: the CPU type, the manufacturer's name, and the operating system. @file{configure} uses @@ -509,16 +532,18 @@ @file{configure} tries successively less specific operating system names by removing trailing suffixes starting with a period. -Here is the complete list of directories that would be tried for the -configuration @samp{sparc-sun-sunos4.1}: +As an example, here is the complete list of directories that would be +tried for the configuration @w{@samp{sparc-sun-sunos4.1}} (without the +@w{@samp{--nfp}} option): -@example -@group +@smallexample sparc/fpu unix/bsd/sun/sunos4.1/sparc unix/bsd/sun/sunos4.1 unix/bsd/sun/sunos4/sparc unix/bsd/sun/sunos4 +unix/bsd/sun/sunos/sparc +unix/bsd/sun/sunos unix/bsd/sun/sparc unix/bsd/sun unix/bsd/sunos4.1/sparc @@ -525,12 +550,32 @@ unix/bsd/sunos4.1 unix/bsd/sunos4/sparc unix/bsd/sunos4 +unix/bsd/sunos/sparc +unix/bsd/sunos unix/bsd/sparc unix/bsd +unix/sun/sunos4.1/sparc +unix/sun/sunos4.1 +unix/sun/sunos4/sparc +unix/sun/sunos4 +unix/sun/sunos/sparc +unix/sun/sunos +unix/sun/sparc +unix/sun +unix/sunos4.1/sparc +unix/sunos4.1 +unix/sunos4/sparc +unix/sunos4 +unix/sunos/sparc +unix/sunos +unix/sparc +unix sun/sunos4.1/sparc sun/sunos4.1 sun/sunos4/sparc sun/sunos4 +sun/sunos/sparc +sun/sunos sun/sparc sun sunos4.1/sparc @@ -537,18 +582,20 @@ sunos4.1 sunos4/sparc sunos4 +sunos/sparc +sunos sparc -@end group -@end example +@end smallexample -Different machine architectures are generally at the top level of the -@file{sysdeps} directory tree. For example, @w{@file{sysdeps/sparc}} -and @w{@file{sysdeps/m68k}}. These contain files specific to those -machine architectures, but not specific to any particular operating -system. There might be subdirectories for specializations of those -architectures, such as @w{@file{sysdeps/m68k/68020}}. Code which is -specific to the floating-point coprocessor used with a particular -machine should go in @w{@file{sysdeps/@var{machine}/fpu}}. +Different machine architectures are conventionally subdirectories at the +top level of the @file{sysdeps} directory tree. For example, +@w{@file{sysdeps/sparc}} and @w{@file{sysdeps/m68k}}. These contain +files specific to those machine architectures, but not specific to any +particular operating system. There might be subdirectories for +specializations of those architectures, such as +@w{@file{sysdeps/m68k/68020}}. Code which is specific to the +floating-point coprocessor used with a particular machine should go in +@w{@file{sysdeps/@var{machine}/fpu}}. There are a few directories at the top level of the @file{sysdeps} hierarchy that are not for particular machine architectures. @@ -574,7 +621,7 @@ @file{posix} cannot be complete. @item unix -This is the directory for Unix-like things. See @xref{Porting to Unix}. +This is the directory for Unix-like things. @xref{Porting to Unix}. @file{unix} implies @file{posix}. There are some special-purpose subdirectories of @file{unix}: @@ -622,11 +669,11 @@ @file{sysdep.h} implementations to see what these macros are and what they should do.@refill -The system-specific makefile for the @file{unix} directory, -@file{sysdeps/unix/Makefile}, gives rules to generate several files from -the Unix system you are building the library on (which is assumed to be -the target system you are building the library @emph{for}). All the -generated files are put in the directory where the object files are +The system-specific makefile for the @file{unix} directory (that is, the +file @file{sysdeps/unix/Makefile}) gives rules to generate several files +from the Unix system you are building the library on (which is assumed +to be the target system you are building the library @emph{for}). All +the generated files are put in the directory where the object files are kept; they should not affect the source tree itself. The files generated are @file{ioctls.h}, @file{errnos.h}, @file{sys/param.h}, and @file{errlist.c} (for the @file{stdio} section of the library). @@ -649,13 +696,14 @@ @node Contributors @appendixsec Contributors to the GNU C Library -The GNU C library was written almost entirely by Roland McGrath. -Some parts of the library were contributed by other people. +The GNU C library was written almost entirely by Roland McGrath, who now +maintains it. Some parts of the library were contributed or worked on +by other people. @itemize @bullet @item The @code{getopt} function and related code were written by -@w{Richard Stallman}, @w{David J. MacKenzie}, and @w{Roland McGrath}. +Richard Stallman, @w{David J. MacKenzie}, and @w{Roland McGrath}. @item Most of the math functions are taken from 4.4 BSD; they have been @@ -688,8 +736,8 @@ All advertising materials mentioning features or use of this software must display the following acknowledgement: @quotation - This product includes software developed by the University of - California, Berkeley and its contributors. +This product includes software developed by the University of +California, Berkeley and its contributors. @end quotation @item Neither the name of the University nor the names of its contributors @@ -730,16 +778,16 @@ The memory allocation functions @code{malloc}, @code{realloc} and @code{free} and related code were written by Michael J. Haertel. -@item -Fast implementations of many of the string functions (@code{memcpy}, -@code{strlen}, etc.) were written by +@comment tege's name has an umlaut. @tex -Torbj\"orn +\xdef\SETtege{Torbj\"orn Granlund} @end tex @ifinfo -Torbjorn +@set tege Torbjorn Granlund @end ifinfo -Granlund.@refill +@item +Fast implementations of many of the string functions (@code{memcpy}, +@code{strlen}, etc.) were written by @value{tege}. @item Some of the support code for Mach is taken from Mach 3.0 by CMU, @@ -804,7 +852,7 @@ @item The timezone support code is derived from the public-domain timezone -package by Arthur David Olsen. +package by Arthur David Olson. @item The Internet resolver code is taken directly from BIND 4.9.1, which is @@ -811,9 +859,7 @@ under both the Berkeley copyright above and also: @quotation -@display Portions Copyright @copyright{} 1993 by Digital Equipment Corporation. -@end display Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above @@ -831,6 +877,16 @@ negligence or other tortious action, arising out of or in connection with the use or performance of this software.} @end quotation + +@item +The port to the DEC Alpha running OSF/1 (@code{alpha-dec-osf1}) was +contributed by Brendan Kehoe, using some code written by Roland McGrath. + +@item +The floating-point printing function used by @code{printf} and friends +was written by Roland McGrath and @value{tege}. The multi-precision +integer functions used in that function are taken from GNU MP, which was +contributed by @value{tege}. @end itemize @c @bye diff -ruN glibc-1.06/manual/makefsock.c.texi glibc-1.07/manual/makefsock.c.texi --- glibc-1.06/manual/makefsock.c.texi Tue Jan 5 14:35:36 1993 +++ glibc-1.07/manual/makefsock.c.texi @@ -1,43 +0,0 @@ -#include -#include -#include -#include -#include -#include - -int -make_named_socket (const char *filename) -@{ - struct sockaddr_un name; - int sock; - size_t size; - - /* @r{Create the socket. } */ - - sock = socket (PF_UNIX, SOCK_DGRAM, 0); - if (sock < 0) - @{ - perror ("socket"); - exit (EXIT_FAILURE); - @} - - /* @r{Bind a name to the socket. } */ - - name.sun_family = AF_FILE; - strcpy (name.sun_path, filename); - - /* The size of the address is - the offset of the start of the filename, - plus its length, - plus one for the terminating null byte. */ - size = (offsetof (struct sockaddr_un, sun_path) - + strlen (name.sun_path) + 1); - - if (bind (sock, (struct sockaddr *) &name, size) < 0) - @{ - perror ("bind"); - exit (EXIT_FAILURE); - @} - - return sock; -@} diff -ruN glibc-1.06/manual/makeisock.c.texi glibc-1.07/manual/makeisock.c.texi --- glibc-1.06/manual/makeisock.c.texi Tue Jan 5 14:44:25 1993 +++ glibc-1.07/manual/makeisock.c.texi @@ -1,31 +0,0 @@ -#include -#include -#include -#include - -int -make_socket (unsigned short int port) -@{ - int sock; - struct sockaddr_in name; - - /* @r{Create the socket. } */ - sock = socket (PF_INET, SOCK_STREAM, 0); - if (sock < 0) - @{ - perror ("socket"); - exit (EXIT_FAILURE); - @} - - /* @r{Give the socket a name. } */ - name.sin_family = AF_INET; - name.sin_port = htons (port); - name.sin_addr.s_addr = htonl (INADDR_ANY); - if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0) - @{ - perror ("bind"); - exit (EXIT_FAILURE); - @} - - return sock; -@} diff -ruN glibc-1.06/manual/math.texi glibc-1.07/manual/math.texi --- glibc-1.06/manual/math.texi Wed May 12 14:26:15 1993 +++ glibc-1.07/manual/math.texi Thu Jun 24 20:35:26 1993 @@ -99,9 +99,9 @@ The math library doesn't define a symbolic constant for pi, but you can define your own if you need one: -@example +@smallexample #define PI 3.14159265358979323846264338327 -@end example +@end smallexample @noindent You can also compute the value of pi with the expression @code{acos @@ -282,10 +282,10 @@ @cindex cube root function @comment math.h -@comment GNU +@comment BSD @deftypefun double cbrt (double @var{x}) This function returns the cube root of @var{x}. This function cannot -fail; every representable real value has a represetable real cube root. +fail; every representable real value has a representable real cube root. @end deftypefun @comment math.h diff -ruN glibc-1.06/manual/mbyte.texi glibc-1.07/manual/mbyte.texi --- glibc-1.06/manual/mbyte.texi Wed May 19 14:06:00 1993 +++ glibc-1.07/manual/mbyte.texi Mon Aug 30 17:07:15 1993 @@ -38,7 +38,7 @@ @itemize @bullet @item -As @dfn{Multibyte characters} which can be embedded in an ordinary +As @dfn{multibyte characters} which can be embedded in an ordinary string, an array of @code{char} objects. Their advantage is that many programs and operating systems can handle occasional multibyte characters scattered among ordinary ASCII characters, without any @@ -380,19 +380,20 @@ Here is an example showing how to convert a string of multibyte characters, allocating enough space for the result. -@example +@smallexample wchar_t * -mbstowcs_alloc (char *string) +mbstowcs_alloc (const char *string) @{ - int size = strlen (string) + 1; - wchar_t *buffer = (wchar_t) xmalloc (size * sizeof (wchar_t)); + size_t size = strlen (string) + 1; + wchar_t *buf = xmalloc (size * sizeof (wchar_t)); - size = mbstowcs (buffer, string, size); - if (size < 0) + size = mbstowcs (buf, string, size); + if (size == (size_t) -1) return NULL; - return (wchar_t) xrealloc (buffer, (size + 1) * sizeof (wchar_t)); + buf = xrealloc (buf, (size + 1) * sizeof (wchar_t)); + return buf; @} -@end example +@end smallexample @end deftypefun @@ -430,10 +431,10 @@ @comment stdlib.h @comment ANSI @deftypefun int mblen (const char *@var{string}, size_t @var{size}) -The @code{mblen} function with non-null @var{string} returns the number -of bytes that make up the multibyte character beginning at @var{string}, -never examining more than @var{size} bytes. (The idea is to supply -for @var{size} the number of bytes of data you have in hand.) +The @code{mblen} function with a non-null @var{string} argument returns +the number of bytes that make up the multibyte character beginning at +@var{string}, never examining more than @var{size} bytes. (The idea is +to supply for @var{size} the number of bytes of data you have in hand.) The return value of @code{mblen} distinguishes three possibilities: the first @var{size} bytes at @var{string} start with valid multibyte @@ -535,7 +536,7 @@ @end deftypefun @node Example of Conversion, Shift State, Converting One Char, Extended Characters -@section Example of Character-by-Character Conversion +@section Character-by-Character Conversion Example Here is an example that reads multibyte character text from descriptor @code{input} and writes the corresponding wide characters to descriptor @@ -544,7 +545,7 @@ character, and cannot cope with an apparently invalid partial character by reading more input. -@example +@smallexample int file_mbstowcs (int input, int output) @{ @@ -562,10 +563,11 @@ /* @r{Fill up the buffer from the input file.} */ nread = read (input, buffer + filled, BUFSIZ); - if (nread < 0) @{ - perror ("read"); - return 0; - @} + if (nread < 0) + @{ + perror ("read"); + return 0; + @} /* @r{If we reach end of file, make a note to read no more.} */ if (nread == 0) eof = 1; @@ -610,8 +612,8 @@ return 0; @} - /* @r{If any characters must be carried forward, - put them at the beginning of @code{buffer}.} */ + /* @r{If any characters must be carried forward,} + @r{put them at the beginning of @code{buffer}.} */ if (filled > 0) memcpy (inp, buffer, filled); @} @@ -619,7 +621,7 @@ return 1; @} -@end example +@end smallexample @node Shift State, , Example of Conversion, Extended Characters @section Multibyte Codes Using Shift Sequences @@ -660,7 +662,7 @@ Here is an example of using @code{mblen} following these rules: -@example +@smallexample void scan_string (char *s) @{ @@ -685,7 +687,7 @@ length -= thischar; @} @} -@end example +@end smallexample The functions @code{mblen}, @code{mbtowc} and @code{wctomb} are not reentrant when using a multibyte code that uses a shift state. However, diff -ruN glibc-1.06/manual/memory.texi glibc-1.07/manual/memory.texi --- glibc-1.06/manual/memory.texi Wed May 19 14:06:13 1993 +++ glibc-1.07/manual/memory.texi Mon Aug 30 20:10:39 1993 @@ -1,3 +1,6 @@ +@comment !!! describe mmap et al (here?) +@c !!! doc brk/sbrk + @node Memory Allocation, Character Handling, Error Reporting, Top @chapter Memory Allocation @cindex memory allocation @@ -103,7 +106,7 @@ address of the space. Then you can use the operators @samp{*} and @samp{->} on this pointer variable to refer to the contents of the space: -@example +@smallexample @{ struct foobar *ptr = (struct foobar *) malloc (sizeof (struct foobar)); @@ -111,7 +114,7 @@ ptr->next = current_foobar; current_foobar = ptr; @} -@end example +@end smallexample @node Unconstrained Allocation @section Unconstrained Allocation @@ -167,13 +170,13 @@ so, and of initializing the space with zeros using the library function @code{memset} (@pxref{Copying and Concatenation}): -@example +@smallexample struct foo *ptr; @dots{} ptr = (struct foo *) malloc (sizeof (struct foo)); if (ptr == 0) abort (); memset (ptr, 0, sizeof (struct foo)); -@end example +@end smallexample You can store the result of @code{malloc} into any pointer variable without a cast, because ANSI C automatically converts the type @@ -186,11 +189,11 @@ because a string is terminated with a null character that doesn't count in the ``length'' of the string but does need space. For example: -@example +@smallexample char *ptr; @dots{} ptr = (char *) malloc (length + 1); -@end example +@end smallexample @noindent @xref{Representation of Strings}, for more information about this. @@ -205,7 +208,7 @@ nonzero. This function is conventionally called @code{xmalloc}. Here it is: -@example +@smallexample void * xmalloc (size_t size) @{ @@ -214,22 +217,22 @@ fatal ("virtual memory exhausted"); return value; @} -@end example +@end smallexample Here is a real example of using @code{malloc} (by way of @code{xmalloc}). The function @code{savestring} will copy a sequence of characters into a newly allocated null-terminated string: -@example +@smallexample char * savestring (const char *ptr, size_t len) @{ register char *value = (char *) xmalloc (len + 1); memcpy (value, ptr, len); - value[len] = 0; + value[len] = '\0'; return value; @} -@end example +@end smallexample The block that @code{malloc} gives you is guaranteed to be aligned so that it can hold any type of data. In the GNU system, the address is @@ -277,7 +280,7 @@ freeing it! Here is an example of the proper way to free all the blocks in a chain, and the strings that they point to: -@example +@smallexample struct chain @{ struct chain *next; @@ -295,7 +298,7 @@ chain = next; @} @} -@end example +@end smallexample Occasionally, @code{free} can actually return memory to the operating system and make the process smaller. Usually, all it can do is allow a @@ -332,6 +335,12 @@ space is available. The value of @code{realloc} is the new address of the block. If the block needs to be moved, @code{realloc} copies the old contents. + +If you pass a null pointer for @var{ptr}, @code{realloc} behaves just +like @samp{malloc (@var{newsize})}. This can be convenient, but beware +that older implementations (before ANSI C) may not support this +behavior, and will probably crash when @code{realloc} is passed a null +pointer. @end deftypefun Like @code{malloc}, @code{realloc} may return a null pointer if no @@ -345,7 +354,7 @@ conventionally called @code{xrealloc}, that takes care of the error message as @code{xmalloc} does for @code{malloc}: -@example +@smallexample void * xrealloc (void *ptr, size_t size) @{ @@ -354,7 +363,7 @@ fatal ("Virtual memory exhausted"); return value; @} -@end example +@end smallexample You can also use @code{realloc} to make a block smaller. The reason you would do this is to avoid tying up a lot of memory space when only a little @@ -381,7 +390,7 @@ You could define @code{calloc} as follows: -@example +@smallexample void * calloc (size_t count, size_t eltsize) @{ @@ -391,7 +400,7 @@ memset (value, 0, size); return value; @} -@end example +@end smallexample We rarely use @code{calloc} today, because it is equivalent to such a simple combination of other features that are more often used. It is a @@ -407,6 +416,7 @@ power of two. This holds for sizes up to a page size. Therefore, if you are free to choose the size of a small block in order to make @code{malloc} more efficient, make it a power of two. +@c !!! xref getpagesize Once a page is split up for a particular block size, it can't be reused for another size unless all the blocks in it are freed. In many @@ -443,7 +453,7 @@ @comment malloc.h stdlib.h @comment BSD -@deftypefun {void *} memalign (size_t @var{size}, int @var{boundary}) +@deftypefun {void *} memalign (size_t @var{size}, size_t @var{boundary}) The @code{memalign} function allocates a block of @var{size} bytes whose address is a multiple of @var{boundary}. The @var{boundary} must be a power of two! The function @code{memalign} works by calling @@ -455,7 +465,16 @@ @comment BSD @deftypefun {void *} valloc (size_t @var{size}) Using @code{valloc} is like using @code{memalign} and passing the page size -as the value of the second argument. +as the value of the second argument. It is implemented like this: + +@smallexample +void * +valloc (size_t size) +@{ + return memalign (size, getpagesize ()); +@} +@end smallexample +@c !!! xref getpagesize @end deftypefun @node Heap Consistency Checking @@ -471,7 +490,7 @@ @comment malloc.h @comment GNU -@deftypefun void mcheck (void (*@var{abortfn}) (void)) +@deftypefun int mcheck (void (*@var{abortfn}) (void)) Calling @code{mcheck} tells @code{malloc} to perform occasional consistency checks. These will catch things such as writing past the end of a block that was allocated with @code{malloc}. @@ -486,7 +505,8 @@ @code{0} otherwise (when it is successful). The easiest way to arrange to call @code{mcheck} early enough is to use -the option @samp{-lmcheck} when you link your program. +the option @samp{-lmcheck} when you link your program; then you don't +need to modify your program source at all. @end deftypefun @node Hooks for Malloc @@ -508,9 +528,9 @@ uses whenever it is called. You should define this function to look like @code{malloc}; that is, like: -@example +@smallexample void *@var{function} (size_t @var{size}) -@end example +@end smallexample @end defvar @comment malloc.h @@ -520,9 +540,9 @@ uses whenever it is called. You should define this function to look like @code{realloc}; that is, like: -@example +@smallexample void *@var{function} (void *@var{ptr}, size_t @var{size}) -@end example +@end smallexample @end defvar @comment malloc.h @@ -532,9 +552,9 @@ uses whenever it is called. You should define this function to look like @code{free}; that is, like: -@example +@smallexample void @var{function} (void *@var{ptr}) -@end example +@end smallexample @end defvar You must make sure that the function you install as a hook for one of @@ -546,7 +566,7 @@ installs a function that prints out information every time @code{malloc} is called. -@example +@smallexample static void *(*old_malloc_hook) (size_t); static void * my_malloc_hook (size_t size) @@ -566,7 +586,7 @@ __malloc_hook = my_malloc_hook; ... @} -@end example +@end smallexample The @code{mcheck} function (@pxref{Heap Consistency Checking}) works by installing such hooks. @@ -591,7 +611,7 @@ @table @code @item size_t bytes_total -This is the total size of memory managed by malloc, in bytes. +This is the total size of memory managed by @code{malloc}, in bytes. @item size_t chunks_used This is the number of chunks in use. (The storage allocator internally @@ -642,14 +662,14 @@ Space}. @item void *valloc (size_t @var{size}) -Allocate a block @var{size} bytes, starting on a page boundary. +Allocate a block of @var{size} bytes, starting on a page boundary. @xref{Aligned Memory Blocks}. @item void *memalign (size_t @var{size}, size_t @var{boundary}) -Allocate a block @var{size} bytes, starting on an address that is a +Allocate a block of @var{size} bytes, starting on an address that is a multiple of @var{boundary}. @xref{Aligned Memory Blocks}. -@item void mcheck (void (*@var{abortfn}) (void)) +@item int mcheck (void (*@var{abortfn}) (void)) Tell @code{malloc} to perform occasional consistency checks on dynamically allocated memory, and to call @var{abortfn} when an inconsistency is found. @xref{Heap Consistency Checking}. @@ -663,8 +683,8 @@ @item void (*__free_hook) (void *@var{ptr}) A pointer to a function that @code{free} uses whenever it is called. -@item void struct mstats mstats (void) -Read information about the current dynamic memory usage. +@item struct mstats mstats (void) +Return information about the current dynamic memory usage. @xref{Statistics of Malloc}. @end table @@ -749,9 +769,9 @@ Each source file in which you plan to use the obstack functions must include the header file @file{obstack.h}, like this: -@example +@smallexample #include -@end example +@end smallexample @findex obstack_chunk_alloc @findex obstack_chunk_free @@ -766,10 +786,10 @@ @code{xmalloc} (@pxref{Unconstrained Allocation}). This is done with the following pair of macro definitions: -@example +@smallexample #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free -@end example +@end smallexample @noindent Though the storage you get using obstacks really comes from @code{malloc}, @@ -789,21 +809,21 @@ Here are two examples of how to allocate the space for an obstack and initialize it. First, an obstack that is a static variable: -@example +@smallexample static struct obstack myobstack; @dots{} obstack_init (&myobstack); -@end example +@end smallexample @noindent Second, an obstack that is itself dynamically allocated: -@example +@smallexample struct obstack *myobstack_ptr = (struct obstack *) xmalloc (sizeof (struct obstack)); obstack_init (myobstack_ptr); -@end example +@end smallexample @node Allocation in an Obstack @subsection Allocation in an Obstack @@ -823,9 +843,9 @@ @end deftypefun For example, here is a function that allocates a copy of a string @var{str} -in a specific obstack, which is the variable @code{string_obstack}: +in a specific obstack, which is in the variable @code{string_obstack}: -@example +@smallexample struct obstack string_obstack; char * @@ -836,7 +856,7 @@ memcpy (s, string, strlen (string)); return s; @} -@end example +@end smallexample To allocate a block with specified contents, use the function @code{obstack_copy}, declared like this: @@ -859,13 +879,13 @@ of characters into an obstack as a null-terminated string. Here is an example of its use: -@example +@smallexample char * obstack_savestring (char *addr, size_t size) @{ return obstack_copy0 (&myobstack, addr, size); @} -@end example +@end smallexample @noindent Contrast this with the previous example of @code{savestring} using @@ -894,9 +914,9 @@ valid for further allocation, call @code{obstack_free} with the address of the first object allocated on the obstack: -@example +@smallexample obstack_free (obstack_ptr, first_object_allocated_ptr); -@end example +@end smallexample Recall that the objects in an obstack are grouped into chunks. When all the objects in a chunk become free, the obstack library automatically @@ -921,9 +941,9 @@ operand (the obstack pointer) may not contain any side effects, because it may be computed more than once. For example, if you write this: -@example +@smallexample obstack_alloc (get_obstack (), 4); -@end example +@end smallexample @noindent you will find that @code{get_obstack} may be called several times. @@ -937,7 +957,7 @@ default, but you can request the function definition instead by writing the function name in parentheses, as shown here: -@example +@smallexample char *x; void *(*funcp) (); /* @r{Use the macro}. */ @@ -946,7 +966,7 @@ x = (char *) (obstack_alloc) (obptr, size); /* @r{Take the address of the function}. */ funcp = obstack_alloc; -@end example +@end smallexample @noindent This is the same situation that exists in ANSI C for the standard library @@ -1043,9 +1063,9 @@ If you have started growing an object and wish to cancel it, you should finish it and then free it, like this: -@example +@smallexample obstack_free (obstack_ptr, obstack_finish (obstack_ptr)); -@end example +@end smallexample @noindent This has no effect if no object was growing. @@ -1113,7 +1133,7 @@ Here is an example: -@example +@smallexample @group void add_string (struct obstack *obstack, char *ptr, size_t len) @@ -1136,7 +1156,7 @@ @} @} @end group -@end example +@end smallexample @node Status of an Obstack @subsection Status of an Obstack @@ -1175,9 +1195,9 @@ This function returns the size in bytes of the currently growing object. This is equivalent to -@example +@smallexample obstack_next_free (@var{obstack_ptr}) - obstack_base (@var{obstack_ptr}) -@end example +@end smallexample @end deftypefun @node Obstacks Data Alignment @@ -1205,9 +1225,9 @@ The expansion of the macro @code{obstack_alignment_mask} is an lvalue, so you can alter the mask by assignment. For example, this statement: -@example +@smallexample obstack_alignment_mask (obstack_ptr) = 0; -@end example +@end smallexample @noindent has the effect of turning off alignment processing in the specified obstack. @@ -1242,10 +1262,10 @@ source file that uses @code{obstack_init} (@pxref{Creating Obstacks}). Most often they are defined as macros like this: -@example +@smallexample #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free -@end example +@end smallexample Note that these are simple macros (no arguments). Macro definitions with arguments will not work! It is necessary that @code{obstack_chunk_alloc} @@ -1278,10 +1298,10 @@ allocating many objects whose size is comparable to the chunk size. Here is how to do so cleanly: -@example +@smallexample if (obstack_chunk_size (obstack_ptr) < @var{new_chunk_size}) obstack_chunk_size (obstack_ptr) = @var{new_chunk_size}; -@end example +@end smallexample @node Summary of Obstacks @subsection Summary of Obstack Functions @@ -1414,7 +1434,7 @@ name made from concatenating two argument strings, and returns a file descriptor or minus one signifying failure: -@example +@smallexample int open2 (char *str1, char *str2, int flags, int mode) @{ @@ -1423,13 +1443,13 @@ strcat (name, str2); return open (name, flags, mode); @} -@end example +@end smallexample @noindent Here is how you would get the same results with @code{malloc} and @code{free}: -@example +@smallexample int open2 (char *str1, char *str2, int flags, int mode) @{ @@ -1443,7 +1463,7 @@ free (name); return desc; @} -@end example +@end smallexample As you can see, it is simpler with @code{alloca}. But @code{alloca} has other, more important advantages, and some disadvantages. @@ -1478,7 +1498,7 @@ Let's change @code{open2} (@pxref{Alloca Example}) to use this subroutine:@refill -@example +@smallexample int open2 (char *str1, char *str2, int flags, int mode) @{ @@ -1487,7 +1507,7 @@ strcat (name, str2); return open_or_report_error (name, flags, mode); @} -@end example +@end smallexample @noindent Because of the way @code{alloca} works, the storage it allocates is @@ -1527,7 +1547,7 @@ In GNU C, you can replace most uses of @code{alloca} with an array of variable size. Here is how @code{open2} would look then: -@example +@smallexample int open2 (char *str1, char *str2, int flags, int mode) @{ char name[strlen (str1) + strlen (str2) + 1]; @@ -1535,7 +1555,7 @@ strcat (name, str2); return open (name, flags, mode); @} -@end example +@end smallexample But @code{alloca} is not always equivalent to a variable-sized array, for several reasons: @@ -1543,14 +1563,13 @@ @itemize @bullet @item A variable size array's space is freed at the end of the scope of the -name of the array. The space allocated with @code{alloca} usually +name of the array. The space allocated with @code{alloca} remains until the end of the function. @item It is possible to use @code{alloca} within a loop, allocating an additional block on each iteration. This is impossible with -variable-sized arrays. On the other hand, this is also slightly -unclean. +variable-sized arrays. @end itemize @strong{Note:} If you mix use of @code{alloca} and variable-sized arrays @@ -1650,12 +1669,13 @@ @pindex malloc.c You can ask for warnings as the program approaches running out of memory -space, by calling @code{memory_warnings}. This is a GNU extension -declared in @file{malloc.h}. +space, by calling @code{memory_warnings}. This tells @code{malloc} to +check memory usage every time it asks for more memory from the operating +system. This is a GNU extension declared in @file{malloc.h}. @comment malloc.h @comment GNU -@deftypefun void memory_warnings (void *@var{start}, void (*@var{warn_func}) (char *)) +@deftypefun void memory_warnings (void *@var{start}, void (*@var{warn_func}) (const char *)) Call this function to request warnings for nearing exhaustion of virtual memory. diff -ruN glibc-1.06/manual/memstream.c.texi glibc-1.07/manual/memstream.c.texi --- glibc-1.06/manual/memstream.c.texi Fri Oct 16 17:52:51 1992 +++ glibc-1.07/manual/memstream.c.texi @@ -1,19 +0,0 @@ -#include - -int -main (void) -@{ - char *bp; - size_t size; - FILE *stream; - - stream = open_memstream (&bp, &size); - fprintf (stream, "hello"); - fflush (stream); - printf ("buf = %s, size = %d\n", bp, size); - fprintf (stream, ", world"); - fclose (stream); - printf ("buf = %s, size = %d\n", bp, size); - - return 0; -@} diff -ruN glibc-1.06/manual/memstrm.c.texi glibc-1.07/manual/memstrm.c.texi --- glibc-1.06/manual/memstrm.c.texi +++ glibc-1.07/manual/memstrm.c.texi Thu Jun 10 18:00:17 1993 @@ -0,0 +1,19 @@ +#include + +int +main (void) +@{ + char *bp; + size_t size; + FILE *stream; + + stream = open_memstream (&bp, &size); + fprintf (stream, "hello"); + fflush (stream); + printf ("buf = %s, size = %d\n", bp, size); + fprintf (stream, ", world"); + fclose (stream); + printf ("buf = %s, size = %d\n", bp, size); + + return 0; +@} diff -ruN glibc-1.06/manual/mkfsock.c.texi glibc-1.07/manual/mkfsock.c.texi --- glibc-1.06/manual/mkfsock.c.texi +++ glibc-1.07/manual/mkfsock.c.texi Thu Jun 10 18:00:26 1993 @@ -0,0 +1,43 @@ +#include +#include +#include +#include +#include +#include + +int +make_named_socket (const char *filename) +@{ + struct sockaddr_un name; + int sock; + size_t size; + + /* @r{Create the socket.} */ + + sock = socket (PF_UNIX, SOCK_DGRAM, 0); + if (sock < 0) + @{ + perror ("socket"); + exit (EXIT_FAILURE); + @} + + /* @r{Bind a name to the socket.} */ + + name.sun_family = AF_FILE; + strcpy (name.sun_path, filename); + + /* @r{The size of the address is + the offset of the start of the filename, + plus its length, + plus one for the terminating null byte.} */ + size = (offsetof (struct sockaddr_un, sun_path) + + strlen (name.sun_path) + 1); + + if (bind (sock, (struct sockaddr *) &name, size) < 0) + @{ + perror ("bind"); + exit (EXIT_FAILURE); + @} + + return sock; +@} diff -ruN glibc-1.06/manual/mkisock.c.texi glibc-1.07/manual/mkisock.c.texi --- glibc-1.06/manual/mkisock.c.texi +++ glibc-1.07/manual/mkisock.c.texi Thu Jun 10 18:00:27 1993 @@ -0,0 +1,31 @@ +#include +#include +#include +#include + +int +make_socket (unsigned short int port) +@{ + int sock; + struct sockaddr_in name; + + /* @r{Create the socket.} */ + sock = socket (PF_INET, SOCK_STREAM, 0); + if (sock < 0) + @{ + perror ("socket"); + exit (EXIT_FAILURE); + @} + + /* @r{Give the socket a name.} */ + name.sin_family = AF_INET; + name.sin_port = htons (port); + name.sin_addr.s_addr = htonl (INADDR_ANY); + if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0) + @{ + perror ("bind"); + exit (EXIT_FAILURE); + @} + + return sock; +@} diff -ruN glibc-1.06/manual/pattern.texi glibc-1.07/manual/pattern.texi --- glibc-1.06/manual/pattern.texi Wed May 12 14:26:20 1993 +++ glibc-1.07/manual/pattern.texi Mon Aug 30 20:36:12 1993 @@ -1,8 +1,10 @@ @node Pattern Matching, I/O Overview, Searching and Sorting, Top @chapter Pattern Matching -The GNU C Library provides pattern matching facilities for two kinds -of patterns: regular expressions and file-name wildcards. +The GNU C Library provides pattern matching facilities for two kinds of +patterns: regular expressions and file-name wildcards. The library also +provides a facility for expanding variable and command references and +parsing text into words in the way the shell does. @menu * Wildcard Matching:: Matching a wildcard pattern against a single string. @@ -66,8 +68,10 @@ cannot match @samp{.} as the first character of @var{string}. If you set both @code{FNM_PERIOD} and @code{FNM_FILE_NAME}, then the -special treatment applies to @samp{.} following @samp{/} as well as -to @samp{.} at the beginning of @var{string}. +special treatment applies to @samp{.} following @samp{/} as well as to +@samp{.} at the beginning of @var{string}. (The shell uses the +@code{FNM_PERIOD} and @code{FNM_FILE_NAME} falgs together for matching +file names.) @comment fnmatch.h @comment POSIX.2 @@ -137,7 +141,7 @@ The number of elements in the vector. @item gl_pathv -The address of the vector. This field has type @code{char **}. +The address of the vector. This field has type @w{@code{char **}}. @item gl_offs The offset of the first real element of the vector, from its nominal @@ -161,7 +165,7 @@ The function @code{glob} does globbing using the pattern @var{pattern} in the current directory. It puts the result in a newly allocated vector, and stores the size and address of this vector into -@code{*@var{vector-ptr}}. The argument @var{flags} is a combination of +@code{*@var{vector_ptr}}. The argument @var{flags} is a combination of bit flags; see @ref{Flags for Globbing}, for details of the flags. The result of globbing is a sequence of file names. The function @@ -172,7 +176,7 @@ To return this vector, @code{glob} stores both its address and its length (number of elements, not counting the terminating null pointer) -into @code{*@var{vector-ptr}}. +into @code{*@var{vector_ptr}}. Normally, @code{glob} sorts the file names alphabetically before returning them. You can turn this off with the flag @code{GLOB_NOSORT} @@ -191,6 +195,13 @@ There was an error opening a directory, and you used the flag @code{GLOB_ERR} or your specified @var{errfunc} returned a nonzero value. +@iftex +See below +@end iftex +@ifinfo +@xref{Flags for Globbing}, +@end ifinfo +for an explanation of the @code{GLOB_ERR} flag and @var{errfunc}. @comment glob.h @comment POSIX.2 @@ -207,7 +218,7 @@ @end table In the event of an error, @code{glob} stores information in -@code{*@var{vector-ptr}} about all the matches it has found so far. +@code{*@var{vector_ptr}} about all the matches it has found so far. @end deftypefun @node Flags for Globbing @@ -215,7 +226,7 @@ This section describes the flags that you can specify in the @var{flags} argument to @code{glob}. Choose the flags you want, -and combine them with the C operator @code{|}. +and combine them with the C bitwise OR operator @code{|}. @table @code @comment glob.h @@ -230,6 +241,12 @@ @code{GLOB_DOOFFS} in the first call to @code{glob}, you must also set it when you append to the results. +Note that the pointer stored in @code{gl_pathv} may no longer be valid +after you call @code{glob} the second time, because @code{glob} might +have relocated the vector. So always fetch @code{gl_pathv} from the +@code{glob_t} structure after each @code{glob} call; @strong{never} save +the pointer across calls. + @comment glob.h @comment POSIX.2 @item GLOB_DOOFFS @@ -246,15 +263,15 @@ have the requisite access. Normally, @code{glob} tries its best to keep on going despite any errors, reading whatever directories it can. -You can exercise even more control than this by specifying an error-handler -function @var{errfunc} when you call @code{glob}. If @var{errfunc} is -nonzero, then @code{glob} doesn't give up right away when it can't read -a directory; instead, it calls @var{errfunc} with two arguments, like -this: +You can exercise even more control than this by specifying an +error-handler function @var{errfunc} when you call @code{glob}. If +@var{errfunc} is not a null pointer, then @code{glob} doesn't give up +right away when it can't read a directory; instead, it calls +@var{errfunc} with two arguments, like this: -@example +@smallexample (*@var{errfunc}) (@var{filename}, @var{error-code}) -@end example +@end smallexample @noindent The argument @var{filename} is the name of the directory that @@ -309,10 +326,9 @@ what the GNU system has had for many years. Both interfaces are declared in the header file @file{regex.h}. -If you define @code{_GNU_SOURCE}, then the GNU functions, structures -and constants are declared. Otherwise, only the POSIX names are -declared. -@c !!! wrong-- default is GNU +If you define @w{@code{_POSIX_C_SOURCE}}, then only the POSIX.2 +functions, structures, and constants are declared. +@c !!! we only document the POSIX.2 interface here!! @menu * POSIX Regexp Compilation:: Using @code{regcomp} to prepare to match. @@ -459,7 +475,7 @@ @comment regex.h @comment POSIX.2 @item REG_ESPACE -@code{regcomp} or @code{regexec} ran out of memory. +@code{regcomp} ran out of memory. @end table @node Flags for POSIX Regexps @@ -559,21 +575,20 @@ @comment regex.h @comment POSIX.2 @item REG_ESPACE -@code{regcomp} or @code{regexec} ran out of memory. +@code{regexec} ran out of memory. @end table @node Regexp Subexpressions -@c !!! I think this title is awkward -rm -@subsection Subexpressions Match Results +@subsection Match Results with Subexpressions When @code{regexec} matches parenthetical subexpressions of @var{pattern}, it records which parts of @var{string} they match. It returns that information by storing the offsets into an array whose elements are structures of type @code{regmatch_t}. The first element of -the array records the part of the string that matched the entire regular -expression. Each other element of the array records the beginning and -end of the part that matched a single parenthetical subexpression. -@c !!! in this paragraph, [0] is called "first"; see below +the array (index @code{0}) records the part of the string that matched +the entire regular expression. Each other element of the array records +the beginning and end of the part that matched a single parenthetical +subexpression. @comment regex.h @comment POSIX.2 @@ -599,10 +614,10 @@ @end deftp The @code{regmatch_t} elements correspond to subexpressions -positionally; the first element records where the first subexpression -matched, the second element records the second subexpression, and so on. -The order of the subexpressions is the order in which they begin. -@c !!! here [1] is called "first"; see above +positionally; the first element (index @code{1}) records where the first +subexpression matched, the second element records the second +subexpression, and so on. The order of the subexpressions is the order +in which they begin. When you call @code{regexec}, you specify how long the @var{matchptr} array is, with the @var{nmatch} argument. This tells @code{regexec} how @@ -644,19 +659,20 @@ that takes precedence. What this means is that when one subexpression appears within another, then the results reported for the inner subexpression reflect whatever happened on the last match of the outer -subexpression. For an example, consider @samp{\(ba\(na\)*s \)} matching +subexpression. For an example, consider @samp{\(ba\(na\)*s \)*} matching the string @samp{bananas bas }. The last time the inner expression actually matches is near the end of the first word. But it is @emph{considered} again in the second word, and fails to match there. @code{regexec} reports nonuse of the ``na'' subexpression. -Another place where this rule applies is when @samp{\(ba\(na\)*s -\|nefer\(ti\)* \)*} matches @samp{bananas nefertiti}. The ``na'' -subexpression does match in the first word, but it doesn't match in the -second word because the other alternative is used there. Once again, -the second repetition of the outer subexpression overrides the first, -and within that second repetition, the ``na'' subexpression is not used. -So @code{regexec} reports nonuse of the ``na'' subexpression. +Another place where this rule applies is when the regular expression +@w{@samp{\(ba\(na\)*s \|nefer\(ti\)* \)*}} matches @samp{bananas nefertiti}. +The ``na'' subexpression does match in the first word, but it doesn't +match in the second word because the other alternative is used there. +Once again, the second repetition of the outer subexpression overrides +the first, and within that second repetition, the ``na'' subexpression +is not used. So @code{regexec} reports nonuse of the ``na'' +subexpression. @node Regexp Cleanup @subsection POSIX Regexp Matching Cleanup @@ -702,8 +718,10 @@ the error message was not truncated, and you can use it. Otherwise, you should call @code{regerror} again with a larger buffer. -@c !!! i wrote this example of how to do it right (i think) -- intro it. -rm -@example +Here is a function which uses @code{regerror}, but always dynamically +allocates a buffer for the error message: + +@smallexample char *get_regerror (int errcode, regex_t *compiled) @{ size_t length = regerror (errcode, compiled, NULL, 0); @@ -711,7 +729,7 @@ (void) regerror (errcode, compiled, buffer, length); return buffer; @} -@end example +@end smallexample @end deftypefun @c !!!! this is not actually in the library.... @@ -767,19 +785,19 @@ @item @cindex variable substitution @cindex substitution of variables and commands -@dfn{Variable substitution}: The substitution of environment variables -for references such as @samp{$foo}. +@dfn{Variable substitution}: Environment variables are substituted for +references such as @samp{$foo}. @item @cindex command substitution -@dfn{Command substitution}: Replacement of constructs such as -@samp{`cat foo`} or @samp{$(cat foo)} with the output from the inner -command. +@dfn{Command substitution}: Constructs such as @w{@samp{`cat foo`}} and +the equivalent @w{@samp{$(cat foo)}} are replaced with the output from +the inner command. @item @cindex arithmetic expansion -@dfn{Arithmetic expansion}: Replacement of constructs such as -@samp{$(($x-1))} with the result of the arithmetic computation. +@dfn{Arithmetic expansion}: Constructs such as @samp{$(($x-1))} are +replaced with the result of the arithmetic computation. @end itemize @item @@ -825,7 +843,7 @@ The number of elements in the vector. @item we_wordv -The address of the vector. This field has type @code{char **}. +The address of the vector. This field has type @w{@code{char **}}. @item we_offs The offset of the first real element of the vector, from its nominal @@ -955,6 +973,10 @@ Instead of allocating a new vector of words, this call to @code{wordexp} will use the vector that already exists (making it larger if necessary). +Note that the vector may move, so it is not safe to save an old pointer +and use it again after calling @code{wordexp}. You must fetch +@code{we_pathv} anew after each call. + @comment wordexp.h @comment POSIX.2 @item WRDE_SHOWERR @@ -978,7 +1000,7 @@ @code{WRDE_APPEND} to concatenate the expansions and of @code{wordfree} to free the space allocated by @code{wordexp}. -@example +@smallexample int expand_and_execute (const char *program, const char *options) @{ @@ -1027,7 +1049,7 @@ wordfree (&result); return status; @} -@end example +@end smallexample In practice, since @code{wordexp} is executed by running a subshell, it would be faster to do this by concatenating the strings with spaces diff -ruN glibc-1.06/manual/pipe.c.texi glibc-1.07/manual/pipe.c.texi --- glibc-1.06/manual/pipe.c.texi Tue Oct 27 18:59:51 1992 +++ glibc-1.07/manual/pipe.c.texi Thu Jun 10 18:00:23 1993 @@ -3,7 +3,7 @@ #include #include -/* @r{Read characters from the pipe and echo them to @code{stdout}. } */ +/* @r{Read characters from the pipe and echo them to @code{stdout}.} */ void read_from_pipe (int file) @@ -16,7 +16,7 @@ fclose (stream); @} -/* @r{Write some random text to the pipe. } */ +/* @r{Write some random text to the pipe.} */ void write_to_pipe (int file) @@ -35,7 +35,7 @@ int mypipe[2]; @group - /* @r{Create the pipe. } */ + /* @r{Create the pipe.} */ if (pipe (mypipe)) @{ fprintf (stderr, "Pipe failed.\n"); @@ -43,23 +43,23 @@ @} @end group - /* @r{Create the child process. } */ + /* @r{Create the child process.} */ pid = fork (); if (pid == (pid_t) 0) @{ - /* @r{This is the child process. } */ + /* @r{This is the child process.} */ read_from_pipe (mypipe[0]); return EXIT_SUCCESS; @} else if (pid < (pid_t) 0) @{ - /* @r{The fork failed. } */ + /* @r{The fork failed.} */ fprintf (stderr, "Fork failed.\n"); return EXIT_FAILURE; @} else @{ - /* @r{This is the parent process. } */ + /* @r{This is the parent process.} */ write_to_pipe (mypipe[1]); return EXIT_SUCCESS; @} diff -ruN glibc-1.06/manual/pipe.texi glibc-1.07/manual/pipe.texi --- glibc-1.06/manual/pipe.texi Wed May 12 14:26:21 1993 +++ glibc-1.07/manual/pipe.texi Thu Jun 24 20:35:30 1993 @@ -82,9 +82,9 @@ a child process. The parent process writes data to the pipe, which is read by the child process. -@example +@smallexample @include pipe.c.texi -@end example +@end smallexample @node Pipe to a Subprocess @section Pipe to a Subprocess @@ -138,9 +138,9 @@ filter output through another program, in this case the paging program @code{more}. -@example +@smallexample @include popen.c.texi -@end example +@end smallexample @node FIFO Special Files @section FIFO Special Files diff -ruN glibc-1.06/manual/rprintf.c.texi glibc-1.07/manual/rprintf.c.texi --- glibc-1.06/manual/rprintf.c.texi Tue Oct 27 18:59:48 1992 +++ glibc-1.07/manual/rprintf.c.texi Thu Jun 10 18:00:13 1993 @@ -16,18 +16,18 @@ char *buffer; int len; - /* @r{Format the output into a string. } */ + /* @r{Format the output into a string.} */ w = va_arg (*app, Widget *); len = asprintf (&buffer, "", w, w->name); if (len == -1) return -1; - /* @r{Pad to the minimum field width and print to the stream. } */ + /* @r{Pad to the minimum field width and print to the stream.} */ len = fprintf (stream, "%*s", - (info->left ? - info->width : info->width), - buffer); + (info->left ? - info->width : info->width), + buffer); - /* @r{Clean up and return. } */ + /* @r{Clean up and return.} */ free (buffer); return len; @} @@ -36,14 +36,14 @@ int main (void) @{ - /* @r{Make a widget to print. } */ + /* @r{Make a widget to print.} */ Widget mywidget; mywidget.name = "mywidget"; - /* @r{Register the print function for widgets. } */ - register_printf_function ('W', print_widget, NULL); /* @r{No arginfo. } */ + /* @r{Register the print function for widgets.} */ + register_printf_function ('W', print_widget, NULL); /* @r{No arginfo.} */ - /* @r{Now print the widget. } */ + /* @r{Now print the widget.} */ printf ("|%W|\n", &mywidget); printf ("|%35W|\n", &mywidget); printf ("|%-35W|\n", &mywidget); diff -ruN glibc-1.06/manual/search.c.texi glibc-1.07/manual/search.c.texi --- glibc-1.06/manual/search.c.texi Mon Oct 19 15:28:18 1992 +++ glibc-1.07/manual/search.c.texi Wed Oct 27 19:19:55 1993 @@ -2,37 +2,38 @@ #include #include -/* @r{Define an array of critters to sort. } */ +/* @r{Define an array of critters to sort.} */ struct critter -@{ - char *name; - char *species; -@}; - -struct critter muppets[]= -@{ - @{"Kermit", "frog"@}, - @{"Piggy", "pig"@}, - @{"Gonzo", "whatever"@}, - @{"Fozzie", "bear"@}, - @{"Sam", "eagle"@}, - @{"Robin", "frog"@}, - @{"Animal", "animal"@}, - @{"Camilla", "chicken"@}, - @{"Sweetums", "monster"@}, - @{"Dr. Strangepork", "pig"@}, - @{"Link Hogthrob", "pig"@}, - @{"Zoot", "human"@}, - @{"Dr. Bunsen Honeydew", "human"@}, - @{"Beaker", "human"@}, - @{"Swedish Chef", "human"@}@}; + @{ + const char *name; + const char *species; + @}; + +struct critter muppets[] = + @{ + @{"Kermit", "frog"@}, + @{"Piggy", "pig"@}, + @{"Gonzo", "whatever"@}, + @{"Fozzie", "bear"@}, + @{"Sam", "eagle"@}, + @{"Robin", "frog"@}, + @{"Animal", "animal"@}, + @{"Camilla", "chicken"@}, + @{"Sweetums", "monster"@}, + @{"Dr. Strangepork", "pig"@}, + @{"Link Hogthrob", "pig"@}, + @{"Zoot", "human"@}, + @{"Dr. Bunsen Honeydew", "human"@}, + @{"Beaker", "human"@}, + @{"Swedish Chef", "human"@} + @}; int count = sizeof (muppets) / sizeof (struct critter); -/* @r{This is the comparison function used for sorting and searching. } */ +/* @r{This is the comparison function used for sorting and searching.} */ int critter_cmp (const struct critter *c1, const struct critter *c2) @@ -41,7 +42,7 @@ @} -/* @r{Print information about a critter. } */ +/* @r{Print information about a critter.} */ void print_critter (const struct critter *c) @@ -51,15 +52,15 @@ @group -/* @r{Do the lookup into the sorted array. } */ +/* @r{Do the lookup into the sorted array.} */ void -find_critter (char *name) +find_critter (const char *name) @{ struct critter target, *result; target.name = name; result = bsearch (&target, muppets, count, sizeof (struct critter), - critter_cmp); + critter_cmp); if (result) print_critter (result); else @@ -67,7 +68,7 @@ @} @end group -/* @r{Main program. } */ +/* @r{Main program.} */ int main (void) diff -ruN glibc-1.06/manual/search.texi glibc-1.07/manual/search.texi --- glibc-1.06/manual/search.texi Wed May 12 14:26:22 1993 +++ glibc-1.07/manual/search.texi Mon Aug 30 17:12:46 1993 @@ -34,30 +34,23 @@ Here is an example of a comparison function which works with an array of numbers of type @code{double}: -@example +@smallexample int compare_doubles (const double *a, const double *b) @{ - double temp = *a - *b; - if (temp > 0) - return 1; - else if (temp < 0) - return -1; - else - return 0; + return (int) (*a - *b); @} -@end example +@end smallexample The header file @file{stdlib.h} defines a name for the data type of -comparison functions. This is a GNU extension and thus defined only if -you request the GNU extensions. +comparison functions. This type is a GNU extension. @comment stdlib.h @comment GNU @tindex comparison_fn_t -@example +@smallexample int comparison_fn_t (const void *, const void *); -@end example +@end smallexample @node Array Search Function, Array Sort Function, Comparison Functions, Searching and Sorting @section Array Search Function @@ -75,7 +68,7 @@ @deftypefun {void *} bsearch (const void *@var{key}, const void *@var{array}, size_t @var{count}, size_t @var{size}, comparison_fn_t @var{compare}) The @code{bsearch} function searches the sorted array @var{array} for an object that is equivalent to @var{key}. The array contains @var{count} elements, -each of which is of size @var{size}. +each of which is of size @var{size} bytes. The @var{compare} function is used to perform the comparison. This function is called with two pointer arguments and should return an @@ -89,7 +82,7 @@ that matches, the one that is returned is unspecified. This function derives its name from the fact that it is implemented -using the binary search. +using the binary search algorithm. @end deftypefun @node Array Sort Function, Search/Sort Example, Array Search Function, Searching and Sorting @@ -130,7 +123,7 @@ order, using the comparison function defined above (@pxref{Comparison Functions}): -@example +@smallexample @{ double *array; int size; @@ -137,10 +130,10 @@ @dots{} qsort (array, size, sizeof (double), compare_doubles); @} -@end example +@end smallexample The @code{qsort} function derives its name from the fact that it was -originally implemented using the algorithm ``quick sort''. +originally implemented using the ``quick sort'' algorithm. @end deftypefun @node Search/Sort Example, , Array Sort Function, Searching and Sorting @@ -152,14 +145,30 @@ Then, we can look up individual objects based on their names. @comment This example is dedicated to the memory of Jim Henson. RIP. -@example +@smallexample @include search.c.texi -@end example +@end smallexample @cindex Kermit the frog The output from this program looks like: -@example +@smallexample +Kermit, the frog +Piggy, the pig +Gonzo, the whatever +Fozzie, the bear +Sam, the eagle +Robin, the frog +Animal, the animal +Camilla, the chicken +Sweetums, the monster +Dr. Strangepork, the pig +Link Hogthrob, the pig +Zoot, the human +Dr. Bunsen Honeydew, the human +Beaker, the human +Swedish Chef, the human + Animal, the animal Beaker, the human Camilla, the chicken @@ -176,10 +185,9 @@ Sweetums, the monster Zoot, the human - Kermit, the frog Gonzo, the whatever Couldn't find Janice. -@end example +@end smallexample diff -ruN glibc-1.06/manual/select.c.texi glibc-1.07/manual/select.c.texi --- glibc-1.06/manual/select.c.texi Tue Oct 27 18:59:49 1992 +++ glibc-1.07/manual/select.c.texi Sun Jun 20 19:56:30 1993 @@ -9,21 +9,24 @@ fd_set set; struct timeval timeout; - /* @r{Initialize the file descriptor set. } */ + /* @r{Initialize the file descriptor set.} */ FD_ZERO (&set); FD_SET (filedes, &set); - /* @r{Initialize the timeout data structure. } */ + /* @r{Initialize the timeout data structure.} */ timeout.tv_sec = seconds; timeout.tv_usec = 0; - /* @r{@code{select} returns 0 if timeout, 1 if input available, -1 if error. } */ - return TEMP_FAILURE_RETRY (select (FD_SETSIZE, &set, NULL, NULL, &timeout)); + /* @r{@code{select} returns 0 if timeout, 1 if input available, -1 if error.} */ + return TEMP_FAILURE_RETRY (select (FD_SETSIZE, + &set, NULL, NULL, + &timeout)); @} int main (void) @{ - fprintf (stderr, "select returned %d.\n", input_timeout (STDIN_FILENO, 5)); + fprintf (stderr, "select returned %d.\n", + input_timeout (STDIN_FILENO, 5)); return 0; @} diff -ruN glibc-1.06/manual/setjmp.texi glibc-1.07/manual/setjmp.texi --- glibc-1.06/manual/setjmp.texi Wed May 12 14:26:23 1993 +++ glibc-1.07/manual/setjmp.texi Thu Jun 24 20:35:31 1993 @@ -57,9 +57,9 @@ Here is how the example program described above might be set up: -@example +@smallexample @include setjmp.c.texi -@end example +@end smallexample The function @code{abort_to_main_loop} causes an immediate transfer of control back to the main loop of the program, no matter where it is @@ -77,7 +77,7 @@ @need 250 So, the general pattern for using @code{setjmp} looks something like: -@example +@smallexample if (setjmp (@var{buffer})) /* @r{Code to clean up after premature return.} */ @dots{} @@ -84,7 +84,7 @@ else /* @r{Code to be executed normally after setting up the return point.} */ @dots{} -@end example +@end smallexample @node Non-Local Details, Non-Local Exits and Signals, Non-Local Intro, Non-Local Exits @section Details of Non-Local Exits diff -ruN glibc-1.06/manual/sigh1.c.texi glibc-1.07/manual/sigh1.c.texi --- glibc-1.06/manual/sigh1.c.texi Tue Oct 27 18:59:59 1992 +++ glibc-1.07/manual/sigh1.c.texi Thu Jun 10 18:00:42 1993 @@ -2,10 +2,10 @@ #include #include -/* @r{This flag controls termination of the main loop. } */ +/* @r{This flag controls termination of the main loop.} */ volatile sig_atomic_t keep_going = 1; -/* @r{The signal handler just clears the flag and re-enables itself. } */ +/* @r{The signal handler just clears the flag and re-enables itself.} */ void catch_alarm (int sig) @{ @@ -22,13 +22,13 @@ int main (void) @{ - /* @r{Establish a handler for SIGALRM signals. } */ + /* @r{Establish a handler for SIGALRM signals.} */ signal (SIGALRM, catch_alarm); - /* @r{Set an alarm to go off in a little while. } */ + /* @r{Set an alarm to go off in a little while.} */ alarm (2); - /* @r{Check the flag once in a while to see when to quit. } */ + /* @r{Check the flag once in a while to see when to quit.} */ while (keep_going) do_stuff (); diff -ruN glibc-1.06/manual/signal.texi glibc-1.07/manual/signal.texi --- glibc-1.06/manual/signal.texi Wed May 12 14:26:26 1993 +++ glibc-1.07/manual/signal.texi Sun Sep 5 10:06:37 1993 @@ -100,7 +100,7 @@ An error means that a program has done something invalid and cannot continue execution. But not all kinds of errors generate signals---in -fact, most do not. For example, opening a nonexistant file is an error, +fact, most do not. For example, opening a nonexistent file is an error, but it does not raise a signal; instead, @code{open} returns @code{-1}. In general, errors that are necessarily associated with certain library functions are reported by returning a value that indicates an error. @@ -897,9 +897,9 @@ integer argument specifying the signal number, and have return type @code{void}. So, you should define handler functions like this: -@example +@smallexample void @var{handler} (int @code{signum}) @{ @dots{} @} -@end example +@end smallexample The name @code{sighandler_t} for this data type is a GNU extension. @end deftp @@ -978,7 +978,7 @@ Here is a simple example of setting up a handler to delete temporary files when certain fatal signals happen: -@example +@smallexample #include void @@ -1002,7 +1002,7 @@ signal (SIGTERM, SIG_IGN); @dots{} @} -@end example +@end smallexample @noindent Note how if a given signal was previously set to be ignored, this code @@ -1150,7 +1150,7 @@ simple handler for termination signals using @code{signal}. Here is an equivalent example using @code{sigaction}: -@example +@smallexample #include void @@ -1184,7 +1184,7 @@ sigaction (SIGTERM, &new_action, NULL); @dots{} @} -@end example +@end smallexample The program just loads the @code{new_action} structure with the desired parameters and passes it in the @code{sigaction} call. The usage of @@ -1198,7 +1198,7 @@ Here is another example. It retrieves information about the current action for @code{SIGINT} without changing that action. -@example +@smallexample struct sigaction query_action; if (sigaction (SIGINT, NULL, &query_action) < 0) @@ -1209,7 +1209,7 @@ /* @r{@code{SIGINT} is ignored.} */ else /* @r{A programmer-defined signal handler is in effect.} */ -@end example +@end smallexample @node Flags for Sigaction @subsection Flags for @code{sigaction} @@ -1296,7 +1296,7 @@ Here is an example of how to establish a handler for @code{SIGHUP}, but not if @code{SIGHUP} is currently ignored: -@example +@smallexample @group @dots{} struct sigaction temp; @@ -1310,7 +1310,7 @@ sigaction (SIGHUP, &temp, NULL); @} @end group -@end example +@end smallexample @node Defining Handlers @section Defining Signal Handlers @@ -1384,9 +1384,9 @@ This technique is useful because it allows the iteration in progress when the signal arrives to complete before the loop exits. -@example +@smallexample @include sigh1.c.texi -@end example +@end smallexample @node Termination in Handler @subsection Handlers That Terminate the Process @@ -1399,7 +1399,7 @@ same signal that ran the handler in the first place. Here is how to do this: -@example +@smallexample volatile sig_atomic_t fatal_error_in_progress = 0; void @@ -1431,7 +1431,7 @@ raise (sig); @} @end group -@end example +@end smallexample @node Longjmp in Handler @subsection Nonlocal Control Transfer in Handlers @@ -1458,7 +1458,7 @@ Here is a rather schematic example showing the reinitialization of one global variable. -@example +@smallexample @group #include #include @@ -1506,7 +1506,7 @@ @} @} @end group -@end example +@end smallexample @node Signals in Handler @@ -1565,7 +1565,7 @@ child processes generate them. It assumes that the program keeps track of all the child processes with a chain of structures as follows: -@example +@smallexample struct process @{ struct process *next; @@ -1582,21 +1582,21 @@ @}; struct process *process_list; -@end example +@end smallexample This example also uses a flag to indicate whether signals have arrived since some time in the past---whenever the program last cleared it to zero. -@example +@smallexample /* @r{Nonzero means some child's status has changed} @r{so look at @code{process_list} for the details.} */ int process_status_change; -@end example +@end smallexample Here is the handler itself: -@example +@smallexample void sigchld_handler (int signo) @{ @@ -1645,11 +1645,11 @@ @r{that have something to tell us.} */ @} @} -@end example +@end smallexample Here is the proper way to check the flag @code{process_status_change}: -@example +@smallexample if (process_status_change) @{ struct process *p; process_status_change = 0; @@ -1658,7 +1658,7 @@ @dots{} @r{Examine @code{p->status}} @dots{} @} @} -@end example +@end smallexample @noindent It is vital to clear the flag before examining the list; otherwise, if a @@ -1686,7 +1686,7 @@ the program can check independently, each part checking whether there has been a signal since that part last checked. -@example +@smallexample sig_atomic_t process_status_change; sig_atomic_t last_process_status_change; @@ -1703,7 +1703,7 @@ @} @} @} -@end example +@end smallexample @node Nonreentrancy @subsection Signal Handling and Nonreentrant Functions @@ -1852,7 +1852,7 @@ @end menu @node Non-atomic Example -@subsubsection Example of Problems with Non-Atomic Access +@subsubsection Problems with Non-Atomic Access Here is an example which shows what can happen if a signal handler runs in the middle of modifying a variable. (Interrupting the reading of a @@ -1859,7 +1859,7 @@ variable can also lead to paradoxical results, but here we only show writing.) -@example +@smallexample #include #include @@ -1887,7 +1887,7 @@ @} @} @end group -@end example +@end smallexample This program fills @code{memory} with zeros, ones, zeros, ones, alternating forever; meanwhile, once per second, the alarm signal handler @@ -2086,7 +2086,7 @@ @comment the example is written, the signal that is raise'd will be delivered @comment as soon as the SIGTSTP handler returns, which is fine. -@example +@smallexample #include /* @r{When a stop signal arrives, set the action back to the default @@ -2121,7 +2121,7 @@ @dots{} @} @end group -@end example +@end smallexample @strong{Portability note:} @code{raise} was invented by the ANSI C committee. Older systems may not support it, so using @code{kill} may @@ -2184,11 +2184,12 @@ processes with the same effective user ID. @end table -A process can send a signal to itself with @w{@code{kill (getpid(), -@var{signum});}}. If @code{kill} is used by a process to send a signal to -itself, and the signal is not blocked, then @code{kill} delivers at -least one signal (which might be some other pending unblocked signal -instead of the signal @var{signum}) to that process before it returns. +A process can send a signal @var{signum} to itself with a call like +@w{@code{kill (getpid(), @var{signum})}}. If @code{kill} is used by a +process to send a signal to itself, and the signal is not blocked, then +@code{kill} delivers at least one signal (which might be some other +pending unblocked signal instead of the signal @var{signum}) to that +process before it returns. The return value from @code{kill} is zero if the signal can be sent successfully. Otherwise, no signal is sent, and a value of @code{-1} is @@ -2269,9 +2270,9 @@ the parent when it is ready by sending it a @code{SIGUSR1} signal, using the @code{kill} function. -@example +@smallexample @include sigusr.c.texi -@end example +@end smallexample This example uses a busy wait, which is bad, because it wastes CPU cycles that other programs could otherwise use. It is better to ask the @@ -2497,7 +2498,7 @@ unblocked, at least one of those signals is delivered to the process before @code{sigprocmask} returns. The order in which pending signals are delivered is not specified, but you can control the order explicitly -by making multiple @code{sigprockmask} calls to unblock various signals +by making multiple @code{sigprocmask} calls to unblock various signals one at a time. The @code{sigprocmask} function returns @code{0} if successful, and @code{-1} @@ -2531,7 +2532,7 @@ meantime by wrapping the critical part of the code with calls to @code{sigprocmask}, like this: -@example +@smallexample /* @r{This variable is set by the SIGALRM signal handler.} */ volatile sig_atomic_t flag = 0; @@ -2562,7 +2563,7 @@ @} @} @end group -@end example +@end smallexample @node Blocking for Handler @subsection Blocking Signals for a Handler @@ -2589,7 +2590,7 @@ Here is an example: -@example +@smallexample #include #include @@ -2610,7 +2611,7 @@ setup_action.sa_flags = 0; sigaction (SIGTSTP, &setup_action, NULL); @} -@end example +@end smallexample This is more reliable than blocking the other signals explicitly in the code for the handler. If you block signals explicity in the handler, @@ -2651,7 +2652,7 @@ Here is an example. -@example +@smallexample #include #include @@ -2673,7 +2674,7 @@ else if (sigismember (&waiting_mask, SIGTSTP)) @{ /* @r{User has tried to stop the process.} */ @} -@end example +@end smallexample Remember that if there is a particular signal pending for your process, additional signals of that same type that arrive in the meantime might @@ -2691,7 +2692,7 @@ almost the same results by making the handler set a flag to be tested later, when you ``unblock''. Here is an example: -@example +@smallexample /* @r{If this flag is nonzero, don't handle the signal right away.} */ volatile sig_atomic_t signal_pending; @@ -2723,7 +2724,7 @@ if (defer_signal == 0 && signal_pending != 0) raise (signal_pending); @} -@end example +@end smallexample Note how the particular signal that arrives is stored in @code{signal_pending}. That way, we can handle several types of @@ -2747,11 +2748,11 @@ @code{signal_pending}, because this avoids a subtle bug. If we did these things in the other order, like this, -@example +@smallexample if (defer_signal == 1 && signal_pending != 0) raise (signal_pending); defer_signal--; -@end example +@end smallexample @noindent then a signal arriving in between the @code{if} statement and the decrement @@ -2842,7 +2843,7 @@ to cooperate by setting a flag, you still can't use @code{pause} reliably. Here is an example of this problem: -@example +@smallexample /* @r{@code{usr_interrupt} is set by the signal handler.} */ if (!usr_interrupt) pause (); @@ -2849,7 +2850,7 @@ /* @r{Do work once the signal arrives.} */ @dots{} -@end example +@end smallexample @noindent This has a bug: the signal could arrive after the variable @@ -2860,7 +2861,7 @@ in a loop, instead of using @code{pause}. (@xref{Sleeping}, for more about @code{sleep}.) Here is what this looks like: -@example +@smallexample /* @r{@code{usr_interrupt} is set by the signal handler.} while (!usr_interrupt) sleep (1); @@ -2867,7 +2868,7 @@ /* @r{Do work once the signal arrives.} */ @dots{} -@end example +@end smallexample For some purposes, that is good enough. But with a little more complexity, you can wait reliably until a particular signal handler is @@ -2907,7 +2908,7 @@ With @code{sigsuspend}, you can replace the @code{pause} or @code{sleep} loop in the previous section with something completely reliable: -@example +@smallexample sigset_t mask, oldmask; @dots{} @@ -2923,7 +2924,7 @@ while (!usr_interrupt) sigsuspend (&oldmask); sigprocmask (SIG_UNBLOCK, &mask, NULL); -@end example +@end smallexample This last piece of code is a little tricky. The key point to remember here is that when @code{sigsuspend} returns, it resets the process's @@ -3081,10 +3082,10 @@ set. You can bitwise-OR the results of several calls to @code{sigmask} together to specify more than one signal. For example, -@example +@smallexample (sigmask (SIGTSTP) | sigmask (SIGSTOP) | sigmask (SIGTTIN) | sigmask (SIGTTOU)) -@end example +@end smallexample @noindent specifies a mask that includes all the job-control stop signals. @@ -3093,16 +3094,16 @@ @comment signal.h @comment BSD @deftypefun int sigblock (int @var{mask}) -This function is the equivalent of @code{sigprocmask} (@pxref{Process -Signal Mask}) with a @var{how} argument of @code{SIG_BLOCK}: it adds the -signals specified by @var{mask} to the calling process's signal mask. -The return value is the previous set of blocked signals. +This function is equivalent to @code{sigprocmask} (@pxref{Process Signal +Mask}) with a @var{how} argument of @code{SIG_BLOCK}: it adds the +signals specified by @var{mask} to the calling process's set of blocked +signals. The return value is the previous set of blocked signals. @end deftypefun @comment signal.h @comment BSD @deftypefun int sigsetmask (int @var{mask}) -This function is the equivalent of @code{sigprocmask} (@pxref{Process +This function equivalent to @code{sigprocmask} (@pxref{Process Signal Mask}) with a @var{how} argument of @code{SIG_SETMASK}: it sets the calling process's signal mask to @var{mask}. The return value is the previous set of blocked signals. @@ -3120,13 +3121,13 @@ @node Signal Stack @subsection Using a Separate Signal Stack -@c ??? Can we do better than recommending a magic constant size? A signal stack is a special area of memory to be used as the execution stack during signal handlers. It should be fairly large, to avoid any -danger that it will overflow in turn---we recommend at least 16,000 -bytes. You can use @code{malloc} to allocate the space for the stack. -Then call @code{sigstack} to tell the system to use that space for the -signal stack. +danger that it will overflow in turn; the macro @code{SIGSTKSZ} is +defined to a canonical size for signal stacks. You can use +@code{malloc} to allocate the space for the stack. Then call +@code{sigaltstack} or @code{sigstack} to tell the system to use that +space for the signal stack. You don't need to write signal handlers differently in order to use a signal stack. Switching from one stack to the other happens @@ -3134,6 +3135,92 @@ confused if you examine a stack trace while a handler that uses the signal stack is running. +There are two interfaces for telling the system to use a separate signal +stack. @code{sigstack} is the older interface, which comes from 4.2 +BSD. @code{sigaltstack} is the newer interface, and comes from 4.4 +BSD. The @code{sigaltstack} interface has the advantage that it does +not require your program to know which direction the stack grows, which +depends on the specific machine and operating system. + +@comment signal.h +@comment BSD +@deftp {Data Type} {struct sigaltstack} +This structure describes a signal stack. It contains the following members: + +@table @code +@item void *ss_sp +This points to the base of the signal stack. + +@item size_t ss_size +This is the size (in bytes) of the signal stack which @samp{ss_sp} points to. +You should set this to however much space you allocated for the stack. + +There are two macros defined in @file{signal.h} that you should use in +calculating this size: + +@vtable @code +@item SIGSTKSZ +This is the canonical size for a signal stack. It is judged to be +sufficient for normal uses. + +@item MINSIGSTKSZ +This is the amount of signal stack space the operating system needs just +to implement signal delivery. The size of a signal stack @strong{must} +be greater than this. + +For most cases, just using @code{SIGSTKSZ} for @code{ss_size} is +sufficient. But if you know how much stack space your program's signal +handlers will need, you may want to use a different size. In this case, +you should allocate @code{MINSIGSTKSZ} additional bytes for the signal +stack and increase @code{ss_size} accordinly. +@end vtable + +@item int ss_flags +This field contains the bitwise @sc{or} of these flags: + +@vtable @code +@item SA_DISABLE +This tells the system that it should not use the signal stack. + +@item SA_ONSTACK +This is set by the system, and indicates that the signal stack is +currently in use. If this bit is not set, then signals will be +delivered on the normal user stack. +@end vtable +@end table +@end deftp + +@comment signal.h +@comment BSD +@deftypefun int sigaltstack (const struct sigaltstack *@var{stack}, struct sigaltstack *@var{oldstack}) +The @code{sigaltstack} function specifies an alternate stack for use +during signal handling. When a signal is received by the process and +its action indicates that the signal stack is used, the system arranges +a switch to the currently installed signal stack while the handler for +that signal is executed. + +If @var{oldstack} is not a null pointer, information about the currently +installed signal stack is returned in the location it points to. If +@var{stack} is not a null pointer, then this is installed as the new +stack for use by signal handlers. + +The return value is @code{0} on success and @code{-1} on failure. If +@code{sigaltstack} fails, it sets @code{errno} to one of these values: + +@table @code +@item +@item EINVAL +You tried to disable a stack that was in fact currently in use. + +@item ENOMEM +The size of the alternate stack was too small. +It must be greater than @code{MINSIGSTKSZ}. +@end table +@end deftypefun + +Here is the older @code{sigstack} interface. You should use +@code{sigaltstack} instead on systems that have it. + @comment signal.h @comment BSD @deftp {Data Type} {struct sigstack} @@ -3141,7 +3228,9 @@ @table @code @item void *ss_sp -This is the stack pointer. +This is the stack pointer. If the stack grows downwards on your +machine, this should point to the top of the area you allocated. If the +stack grows upwards, it should point to the bottom. @item int ss_onstack This field is true if the process is currently using this stack. @@ -3162,7 +3251,5 @@ @var{stack} is not a null pointer, then this is installed as the new stack for use by signal handlers. -The return value is @code{0} on success and @code{1} on failure. +The return value is @code{0} on success and @code{-1} on failure. @end deftypefun - -@c !!! 4.4 and GNU has a better interface: sigaltstack diff -ruN glibc-1.06/manual/sigusr.c.texi glibc-1.07/manual/sigusr.c.texi --- glibc-1.06/manual/sigusr.c.texi Tue Oct 27 19:00:01 1992 +++ glibc-1.07/manual/sigusr.c.texi Thu Jun 10 18:00:44 1993 @@ -5,7 +5,7 @@ #include @end group -/* @r{When a @code{SIGUSR1} signal arrives, set this variable. } */ +/* @r{When a @code{SIGUSR1} signal arrives, set this variable.} */ volatile sig_atomic_t usr_interrupt = 0; void @@ -14,17 +14,17 @@ usr_interrupt = 1; @} -/* @r{The child process executes this function. } */ +/* @r{The child process executes this function.} */ voi